bamboo
架构, 基于boost
库的实现,目前功能还不是很完善。bamboo
主要实现高层次框架层的封装,所用到的功能库,boost
或第三方有提供的,决不重复轮子,方便以后升级。
- 模块化的服务封装,简化服务编写
- 同步/异步
redis
客户端(基于hiredis
,异步使用boost.asio
事件触发) redis-asio - 基于
protobuf
的进程内缓存框架(后端使用redis)protobuf-l2cache - 基于
boost::beast
的http
服务端和客户端 -- 计划
框架采用分层来组织代码:
+----------------- ------------------ ---------------+
| | | | | |
| | | | | |
| server | | server | | server |
| | | | | |
| | | | | |
+----------------+ +----------------+ +--------------+
+--------------------------------------------------------+
| |
| aio |
| |
+--------------------------------------------------------+
aio 具有两种模式:单线程和多线程。
- 单线程模式:所有
server
共用底层的单个aio
,进程相当于单线程模式。 - 多线程模式:基于
cpu
核心数创建对应的数量的线程(在cpu
核心数为1
的情况下,会退化成单线程模式)。一个线程分配一个aio
,每个server
只在一个aio
上。理想状态下,一个线程分配一个aio
,一个aio
管理一个server
如果
server
之间并没有相互调用,可以通过多线程模式提升各自服务的处理能力
每个server
内部采用分层组装,数据自底往上层层处理,业务层(business)只需要关心对应实现的protocol
层即可。针对各层的特殊需求,可以通过继承对应层的基类进行定制。
+------------------------------+
| |
| business |
| |
+------------------------------+
+------------------------------+
| |
| protocol |
| |
+------------------------------+
+------------------------------+
| |
| ConnManager |
| |
+------------------------------+
+--------------+ +-------------+
| | | |
| acceptor | | connector |
| | | |
+--------------+ +-------------+
这是基于zookeeper
创建的服务发现功能。这是一个可选服务,默认并没开启,可通过以下设置开启
auto reg = aio->InitRegistry();
reg->Init("0.0.0.0:2181");
reg->SetServerType("echo-client", 0, bamboo::distributed::NodeMode::MASTER_MASTER);
查看sample
目录下的例子
通过cmake
进行编译。编译的时候会自动下载所需要的第三方库,也可以修改tar/CMakeLists.txt
里面的URL
指定已下好的库路径。