基于muduo的集群服务器开发(前言)

1.网路库采用muduo的原因

muduo是c++网路库里面比较高效的了,常见网路模型有以下几种。

【方案1】 : accept + read/write
不是并发服务器
【方案2】 : accept + fork - process-pre-connection
适合并发连接数不大,计算任务工作量大于fork的开销
【方案3】 :accept + thread thread-pre-connection
比方案2的开销小了一点,但是并发造成线程堆积过多
【方案4】: muduo的网络设计:reactors in threads - one loop per thread
方案的特点是one loop per thread,有一个main reactor负载accept连接,然后把连接分发到某个sub reactor(采用round-robin的方式来选择sub reactor),该连接的所用操作都在那个sub reactor所处的线程中完成。多个连接可能被分派到多个线程中,以充分利用CPU。
Reactor poll的大小是固定的,根据CPU的数目确定。一个Base IO thread负责accept新的连接,接收到新的连接以后,使用轮询的方式在reactor pool中找到合适的sub reactor将这个连接挂载上去,这个连接上的所有任务都在这个sub reactor上完成。如果有过多的耗费CPU I/O的计算任务,可以提交到创建的ThreadPool线程池中专门处理耗时的计算任务。
【方案5】 : reactors in process - one loop pre process
nginx服务器的网络模块设计,基于进程设计,采用多个Reactors充当I/O进程和工作进程,通过一把accept锁,完美解决多个Reactors的“惊群现象”

2.开发环境

 1. ubuntu linux环境
2. 安装Json开发库
3. 安装boost + muduo网络库开发环境
4. 安装redis环境
5. 安装mysql数据库环境
6. 安装nginx
7. 安装CMake环境

 这些安装我博客里面有一部分,其余一部分网上可以找到。

3.项目需求

1. 客户端新用户注册
2. 客户端用户登录
3. 添加好友和添加群组
4. 好友聊天
5. 群组聊天
6. 离线消息
7. nginx配置tcp负载均衡
8. 集群聊天系统支持客户端跨服务器通信

9.redis订阅发布模式,完成服务器之间通信

4.项目开发

项目开发,按照模块进行开发,分为三大模块,网路模块,业务模块,数据库模块进行开发,每一个模块内部又进行划分,网路模块利用muduo进行开发,业务模块按功能进行划分,数据模块利用连接池进行操作数据库,同时连接池模块解耦数据库,以便以后进行扩展

接下来在我其他文章里面可以看到整个项目的开发工程 ,以博客形式记录学习。

你可能感兴趣的:(muduo集群项目,服务器,c++,数据库,网络,ubuntu)