上一页 1 ··· 29 30 31 32 33 34 35 36 37 ··· 91 下一页
  2016年1月19日
摘要: 在常用的23种设计模式中其实面没有委派模式(delegate)的影子,但是在Spring中委派模式确实用的比较多的一种模式,Spring MVC框架中的DispatcherServlet其实就用到了委派模式,在Spring的源码中,以Delegate结尾的地方都实现了委派模式。有前辈将其总结为代理模 阅读全文
posted @ 2016-01-19 19:46 duanxz 阅读(1362) 评论(0) 推荐(0)
摘要: 生产者-消费模式,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程负责具体处理生产者提交的任务。两者之间通过共享内存缓冲去进行通信。 一、架构模式图: 类图: 生产者:提交用户请求,提取用户任务,并装入内存缓冲区; 消费者:在内存缓冲区中提取并处理任务; 阅读全文
posted @ 2016-01-19 19:34 duanxz 阅读(818) 评论(0) 推荐(0)
摘要: 系统开发到一定的阶段,线上的机器越来越多,就需要一些监控了,除了服务器的监控,业务方面也需要一些监控服务。Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成自定义的监控工作。 使用Metrics 通过构建一个Spring Boot的基本应用来演示Metrics的工作方式。 在M 阅读全文
posted @ 2016-01-19 19:14 duanxz 阅读(5259) 评论(0) 推荐(0)
摘要: Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。 一、什么是Mast 阅读全文
posted @ 2016-01-19 19:12 duanxz 阅读(865) 评论(0) 推荐(0)
摘要: 一、什么是Future模型: 该模型是将异步请求和代理模式联合的模型产物。类似商品订单模型。见下图: 客户端发送一个长时间的请求,服务端不需等待该数据处理完成便立即返回一个伪造的代理数据(相当于商品订单,不是商品本身),用户也无需等待,先去执行其他的若干操作后,再去调用服务器已经完成组装的真实数据。 阅读全文
posted @ 2016-01-19 19:08 duanxz 阅读(722) 评论(0) 推荐(1)
摘要: HaProxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的 阅读全文
posted @ 2016-01-19 18:42 duanxz 阅读(3787) 评论(0) 推荐(0)
摘要: 多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future、Master-Worker、Guard Susperionsion、不变、生产者-消费者 模式;jdk除了定义了若干并发的数据结构,也内置了多线程框架和各种线程池; 锁(分为内部锁、重入锁、读写锁)、ThreadLocal 阅读全文
posted @ 2016-01-19 17:07 duanxz 阅读(1066) 评论(0) 推荐(0)
摘要: 最近学习Hadoop 时发现在本机访问 hadoop 9000 端口没有问题,但是远程机器访问 9000端口时不能访问,通过telnet 命令诊断发现发现无法访问端口,经过网上搜索解决方案结合自己实践,总结解决办法一般有以下几点。 首先,利用netstat -tpnl查看的端口开放情况 下图中900 阅读全文
posted @ 2016-01-19 17:06 duanxz 阅读(13166) 评论(0) 推荐(0)
  2016年1月17日
摘要: 为了方便测试,给出一个C客户端libmemcached链接:https://launchpad.net/libmemcached/ 以及memcacheclient-2.0 : http://code.jellycan.com/files/memcacheclient-2.0.zip(已生成 sln 阅读全文
posted @ 2016-01-17 23:47 duanxz 阅读(985) 评论(0) 推荐(0)
摘要: Memcached在1.2.4版本后新增了CAS(Check and Set)协议,主要用于并发控制:memcached中同一个item同时被多个线程(多个客户端)更改的并发问题。CAS协议最本质的东西——版本号,即将每个item都关联一个全局唯一的编号,从而利用该唯一的编号来判断item数据在某个 阅读全文
posted @ 2016-01-17 23:46 duanxz 阅读(1931) 评论(0) 推荐(0)
摘要: 首先对状态机中的各种状态做个简单总结,具体可见状态转换示意图: 1.listening:这个状态是主线程的默认状态,它只有这一个状态:负责监听socket,接收客户连接,将连接socket派发给工作线程。 2.conn_new_cmd:每个工作线程的接收到新连接的初始状态,为处理该连接socket准 阅读全文
posted @ 2016-01-17 23:45 duanxz 阅读(744) 评论(0) 推荐(0)
摘要: 上节已经分析到了主线程中监听socket注册事件和工作线程中连接socket注册事件的回调函数都是event_handler,且event_handler的核心部分都是一个有限状态机:drive_machine。因此接下来将对该状态机具体的业务处理进行深入的剖析。 memcached将每个socke 阅读全文
posted @ 2016-01-17 23:44 duanxz 阅读(742) 评论(0) 推荐(0)
摘要: 整个状态机的基本流程如下图所示,后续分析将按该流程来进行。 接上节分解,主线程将接收的连接socket分发给了某工作线程,然后工作线程从任务队列中取出该连接socket的CQ_ITEM,开始处理该连接的所有业务逻辑。这个过程也就是上图中的第一个状态conn_listening。 而工作线程首先进入的 阅读全文
posted @ 2016-01-17 23:44 duanxz 阅读(715) 评论(0) 推荐(0)
摘要: 在前面工作线程初始化的分析中讲到Memcached采用典型的Master_Worker模式,也即半同步/半异步的高效网络并发模式。其中主线程(异步线程)负责接收客户端连接,然后分发给工作线程,具体由工作线程完成客户端的求情任务。 在memcached中,主线程负责监听所有socket上的事件,当so 阅读全文
posted @ 2016-01-17 23:43 duanxz 阅读(928) 评论(0) 推荐(0)
摘要: 前两节中对工作线程的工作流程做了较为详细的分析,现把其主要流程总结为下图: 接下来本节主要分析主线程相关的函数设计,主函数main的基本流程如下图所示: 对于主线程中的工作线程的初始化到启动所有的工作线程前面已经做了分析,后面的创建监听socket、注册监听socket的libevent事件、启动主 阅读全文
posted @ 2016-01-17 23:43 duanxz 阅读(637) 评论(0) 推荐(0)
摘要: 上节在分析slab内存管理机制时分析Memcached整个Item存储系统的初始化过程slabs_init()函数:分配slabclass数组空间,到最后将各slab划分为各种级别大小的空闲item并挂载到对应大小slab的空闲链表slots上。本节将继续分析对slab和item的主要操作过程。 s 阅读全文
posted @ 2016-01-17 23:42 duanxz 阅读(649) 评论(0) 推荐(0)
摘要: 在前面slab数据存储部分分析了Memecached中记录数据的具体存储机制,从中可以看到所采用的内存管理机制——slab内存管理,这也正是linux所采用的内存高效管理机制,对于Memchached这样的内存cache服务器,内存高效管理是其最重要的任务之一。 Linux 所使用的 slab 分配 阅读全文
posted @ 2016-01-17 23:41 duanxz 阅读(673) 评论(0) 推荐(0)
摘要: Memcached采用典型的Master-Worker模式,其核心思想是:有Master和Worker两类进程(线程)协同工作,Master进程负责接收和分配任务,Worker进程负责处理子任务。当各Worker进程将各个子任务处理完成后,将结果返回给Master进程,由Master进程做归纳和汇总 阅读全文
posted @ 2016-01-17 23:40 duanxz 阅读(652) 评论(0) 推荐(0)
摘要: 缓存数据以item为基本单元,以双链表形式存放在对应级别大小的slabclass结构的chunk中。同时该item还存放在链式hashtable中bucket中,用于提供快速查找的索引。 首先是理解缓存的基本数据单元item结构: typedef struct _stritem { struct _ 阅读全文
posted @ 2016-01-17 23:39 duanxz 阅读(858) 评论(0) 推荐(0)
摘要: memcached 中有两张hash 表,一个是“主hash 表”(primary_hashtable),另外一个是“原hash 表”(old_hashtable)。一般情况下都在主表中接受操作,在插入新item时判断是否需要进行扩;每次操作的时候,先会检测表是否正处于扩展(expanding)状态 阅读全文
posted @ 2016-01-17 23:39 duanxz 阅读(784) 评论(0) 推荐(0)
摘要: 分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。 什么是Memc 阅读全文
posted @ 2016-01-17 23:38 duanxz 阅读(1478) 评论(0) 推荐(0)
摘要: 最近遇到一个需求,需要上传音频文件, 服务端使用webService 通过spring3 进行文件上传。代码完成后使用 html 通过post 方式请求接口成功了,但不知道如何使用Fiddler2工具进行模拟测试,经过一番努力终于成功了,在此分享一下! spring3文件上传开以参考:http://... 阅读全文
posted @ 2016-01-17 23:18 duanxz 阅读(2178) 评论(0) 推荐(0)
摘要: Mysql存储过程查询结果赋值到变量的方法 把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码: drop table if exists test_tbl; create 阅读全文
posted @ 2016-01-17 23:17 duanxz 阅读(10317) 评论(0) 推荐(1)
摘要: 郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为了加深印象,本文的配图是自己重新绘制的,大部分内容与原文相似,大家可以浏览原始页面 :-),感兴趣的 阅读全文
posted @ 2016-01-17 22:58 duanxz 阅读(476) 评论(0) 推荐(0)
摘要: 几天前淘宝量子恒道在博客上分析了HBase的Cache机制,本篇文章,结合LevelDB 1.7.0版本的源码,分析下LevelDB的Cache机制。概述 LevelDB是Google开源的持久化KV单机存储引擎,据称是HBase的鼻祖Bigtable的重要组件tablet的开源实现。针对存储面对的... 阅读全文
posted @ 2016-01-17 22:12 duanxz 阅读(1623) 评论(0) 推荐(0)
上一页 1 ··· 29 30 31 32 33 34 35 36 37 ··· 91 下一页