基于libev面向分布式数据系统的C10K服务器设计
物联网(M2M)是当前信息化的一个热点方向。具体到不同的行业就体现为各种不同的解决方案:远程电力控制系统、智能家居、智能交通、现代物流、远程可视化医疗系统等等。。。
它们的一些共性是:
1. 系统由前端设备、远程数据中心、和后端可视化终端组成。
2. 前端由各种各样的嵌入式系统组成,集成各种专用数据模块或者传感器。
3. 系统用户最多可达到百万甚至千万级别,活跃用户可达到数十万,并发峰值在C10K级别。
4. 设备实时性高,实时数据可达秒级别,每个数据包一般都经过压缩或者编码,内容很小。
5. 远程设备通过局域网或者移动网络连接到internet,通过移动网络的设备对数据量有严格要求,比如每月流量最大不超过30M。
6. 因为要做到实时双向数据同步及反馈,所有的设备几乎都实时在线。
...
目标
为了实现高并发、多用户高实时的数据服务器,决定基于开源框架,开发一个可兼容特定http请求和sock服务的混合服务器,主要面向物联网分布式场景。
风险评估
优点:
1. 目前网站的用户虽然多,但业务逻辑和数据处理相对简单和单一,定制的服务器可以有更优化的逻辑。
2. 基于优秀的开源框架,可以体现更好的并发性。
3. 通过可定制的网络数据处理逻辑将提供更好的实时性和用户体验。
4. 定制的服务器可方便地应用于其他类似行业以及解决方案中。
挑战:
1. 新系统短期很难稳定,增加运维风险
2. 增加开发代价
3. 要求有较高的系统架构能力和实现能力
参考模型
1)基于libev库
2)参考nginx
3)参考lighttpd
4)参考libebb
系统概要框架
系统详细设计
关于架构的详细设计,可参看这篇文章 http://www.cnblogs.com/inteliot/archive/2012/04/21/2461031.html ,包括细节都已经很详细了
实现
现在基本通讯框架已经ok了。master-worker模式,短连接模式下普通机器配置能达到20K。
下来开始整合业务逻辑,和mysql了。
mysql部分架构准本参考篇帖子:http://www.cnblogs.com/inteliot/archive/2012/04/19/2457108.html
整个过程希望只对cache操作,调高写数据库的瓶颈,最终的方案,要看研究结果,没准还是用Redis呢。。。
优化方向
1)分层 、集群
2)优化memcache层 ,分析数据流程和业务逻辑,希望整合 no-sql 等适合大数据量高性能的哈希数据库,进一步提高系统速率。
3)可靠性、热备、容灾
方案调研的过程中,发现已经有人在尝试类似的方案了,想法何其相似啊:
http://www.cnblogs.com/inteliot/archive/2012/04/21/2461042.html
持续更新中。。。