接着上一篇的设计,初步构想的实现如下:
综述:
数据控制层,主要是负责app(应用层)跟数据层的交互。
目的:
减少整个服务器组的耦合度,以是应用层的逻辑与数据分开,最大限度的提高应用层服务的吞吐量。
设计原则:
最大限度的实现异步,并发处理。屏蔽应用层与数据层的交互细节。
程序分三层:网络层,逻辑层,数据交互层
网络层:
采用epoll做客户端请求的网络处理。这一层主要负责读取客户端请求的数据包,后放入消息队列(msg queue)中,和读取逻辑层输出的msgque中的数据,返回客户端,这一层只做网络IO的处理,不参与任何逻辑的计算。网络层是一条线程。
逻辑层:
逻辑层主要负责读取由网络层输出的消息队列,做相应的逻辑处理,比如:采用哪种hash方法,将这个请求应该发往哪个redis或者mysql中。以及做相应的容灾处理。逻辑层启用一条线程。
数据读写层:
数据读写层,主要负责读取逻辑层输出的消息队列,做redis或者mysql的读写功能。
这。并将读取的结果输出到逻辑层的消息队列。数据读写层线程分布:
一条线程通过对每个redis启动一个非阻塞的socket,由select来维护这些socket.对于mysql的读写,是每个db分一个线程(这个到时间根据具体的业务来定吧)。