_ __ __ __
/ | / /__ / /_ __ __/ /___ _
/ |/ / _ \/ __ \/ / / / / __ `/
/ /| / __/ /_/ / /_/ / / /_/ /
/_/ |_/\___/_.___/\__,_/_/\__,_/
一键安装部署
Nebula是一个产线级的网络服务框架和分布式服务解决方案项目,适用于即时通讯、数据采集、实时计算、消息推送、接入网关、web后台服务等应用场景。
原生支持proto3、resp、http、https、http2、grpc、websocket多种应用层通信协议。
详细的文档,入门简单,扩展容易,开发效率高。
依赖的第三方库极少,开发和部署无成本。
基于channel、类actor模型异于传统rpc调用的无锁并发编程方式,进程&线程模型一键配置。
支持插件式动态加载,不停服务热更新更方便。
不仅是一个网络框架,还是一个十分通用的业务框架。选择Nebula,不必在网络框架之上再做业务框架封装。
代码结构清晰,可读性非常好。
- 计算机设备行业X公司智能设备数据采集服务:基于http2协议通信向智能设备终端发连接,终端以http2流响应回传所采集的数据。
- 移动互联网行业O公司特征画像服务:基于redis协议、grpc协议、http协议通信,带复杂数据逻辑的redis数据代理,既是redis服务端也是redis客户端,高峰tps 33万。
- 移动互联网行业O公司推荐引擎:基于grpc协议和redis协议通信,计算密集型服务。
- 移动互联网行业O公司向量搜索服务:基于grpc协议和http协议通信,计算密集型服务。
- 计算机设备行业X公司支付网关:基于https协议通信,支付网关作为手持设备的https服务端和银行付款api的https客户端。
- 移动互联网行业O公司http接入网关:基于http协议,包括条件转发、hash路由、服务熔断与恢复、过载保护、服务降级等功能。
- 游戏行业G公司即时通讯系统:基于nebula协议和http协议通信,包括接入服务、逻辑服务、缓存代理服务、数据库代理服务、注册中心、配置中心等。
- O2O行业J公司埋点数据采集和实时分析系统:基于http协议和nebula协议通信,包括接入服务、逻辑服务、数据库代理服务、注册中心。
- 金融行业N公司即时通讯系统:基于nebula协议和http协议通信,包括接入服务、逻辑服务、缓存代理服务、数据库代理服务、注册中心、配置中心、日志服务等。
- 支持http、protobuf、websocket等协议通信
- 支持ssl连接加密
- 微服务框架
- IoC容器
- 动态服务更新
- 服务注册
- 服务发现
- 服务监控
- 配置管理
- 动态路由
- 负载均衡
- 过载保护
- 故障熔断
- 故障检测和恢复
- 数据统计
- 分层服务
- 认证和鉴权
- 分布式日志跟踪
- 容易扩展第三方通信协议
Nebula是个较完备的项目,也是一个你难得一见的依赖很少的项目,提供了许多开箱即用的功能,并提供了一键安装脚本,NebulaBootstrap,让开发者可以快速部署和体验Nebula。相信部署和体验之后,你会对Nebula产生兴趣,这将会是一个可以广泛应用的框架,基于NebulaBootstrap提供的分布式解决方案可以很方便地用C++开发微服务应用。Nebula的相关项目就是学习和使用Nebula框架最好的例子。
-
开发组件说明
- Actor组件概述
- Cmd和Module组件
- Step组件
- Session组件
- Context组件
- Operator组件
- Chain组件
- Actor类
Nebula 完成的文档在 Nebula参考手册。
- protobuf
- libev 或 libev
- crypto++
- http_parse 已集成到 Nebula/src/util/http
- CJsonObject 已集成到 Nebula/src/util/json
- NebulaBootstrap Nebula自动构建和部署
- NebulaBeacon Nebula集群管理、注册中心、配置管理
- NebulaInterface Nebula集群http接入服务
- NebulaLogic Nebula集群逻辑服务
- NebulaMydis Nebula集群存储代理(redis)
- NebulaDbAgent Nebula集群数据库代理(mysql)
- NebulaLogger Nebula集群分布式日志服务
- NebulaAccess Nebula集群私有应用协议接入服务
- NebulaDynamic Nebula集群动态加载插件
- Nebcli Nebula集群命令行管理工具
- 完成开发指南
- 原生支持dubbo、mqtt等协议
- 增加线程间无锁通信队列通道SpecChannel
- 使用SpecChannel替代Unix Socket传送文件描述符
- 增加SocketChannel在线程间迁移功能
- 增加客户端连接池管理
- 增加收发缓冲区大小限制
- 优化新建连接处理
- 移除进程模式,只支持线程模式
- 增加连接队列配置
- 增加dns cache
- 增加上下游连接和数据包监控
- 增加后台运行开关和控制台日志开关
- 修改channel创建方式,改由CodecFactory创建
- 优化worker最小负载转发
- 修复熔断节点探测导致错误回调问题
- 修复redis cluster执行批量写命令返回、集群主从节点切换和asking命令、tag路由bug
- 修复集群内部服务间连接初始化
- 修复codec bind channel循环引用问题
- 修复CodecProto无包体通信问题
- 启用连接保护配置
- 优化异步文件日志
- SelfChannel增加seq
- redis cluster客户端增加熔断和熔断恢复
- 节点熔断bug修复
- 优化IO通信,编解码器插件化。
- 移除Channel和Actor的shared_from_this,改用ChannelWatcher和ActorWatcher替代,以提高性能。
- 移除动态加载插件的卸载功能(会降低性能)。
- 裸数据编解码独立成编解码器。
- 增加cassandra客户端编解码器。
- 增加redis cluster密码校验支持。
- 优化文件日志,提升写日志性能;增加异步文件日志。
- 断路器优化
- http chunk解码、resp字符串解码、redis集群无可用节点bug修复
- http2分块响应通知改为作用于流而非连接
- resp解码字符串遇分包时bug修复
- 增加用于Worker内通信的SelfChannel,完善actor模型
- 增加服务状态监控和监控指标获取插件
- 增加节点之间Manager到Manager通信功能
- 增加初始连接超时配置
- 日志组件采用可变模板参数替代va_list,解决日志组件遇到%容易coredump问题
- 增加一个端口多协议支持
- 线程ID优化
- Chain组件优化
- http2动态表、流优先级bug修复
- 增加原生http2服务端和客户端支持
- 增加原生grpc服务端和客户端支持
- 优化channel读写
- 增加绝对路径程序日志
- 以原生的CodecResp替代hiredis客户端
- 增加redis cluster支持
- 增加裸数据(RawData)传输支持
- 增加日志实时flush可配置化
- 增加IP地址组合节点类型支持
- Dispatcher分发优化
- bug修复
- 增加redis连接的非pipeline模式支持
- 增加线程模式下Worker线程比Loader线程先启动,并把worker线程Id带到Loader
- 初步合并@nebim写的CodecResp和CodecHttp2
- 增加第三方cityhash
- 更新CJsonObject
- bug修复
- 增加延迟启动功能:因loader加载大量本地数据文件而延迟绑定端口提供服务并向Beacon注册。
- 线程模式下Manager不再监控和重启不健康的worker和loader服务。
- 增加Worker的线程支持
- 从Manager和Worker类中分离出网络分发功能类Dispatcher和Actor创建及管理类ActorBuilder
- Manager进程支持Actor类的使用,将Manager系统管理功能分离到Cmd类和Step类中
- 增加Loader进程类型
- 优化Actor通过反射动态创建实例
- 优化http短连接和http数据收发
- RedisChannel bug修复
- 增加绑定IP配置
- 增加压力测试相关接口
- 增加编解码器自动转换
- 增加插件so版本控制动态卸载和加载即时生效功能
- 优化反射动态创建Actor
- 增加Model模型组件
- 增加Chain调用链组件
- 简化Context上下文组件
- 减少Actor继承层次,优化Actor相关代码
- 兼容gcc4.8编译器(从这个版本起无须另行安装5以上gcc版本,可以无障碍无等待地在个人机器上部署和测试,也为应用于生产铺平道路。之前Bwar的埋点数据采集和实时分析的生产项目Nebio是在服务器上安装了gcc6才部署的。)
- 增加CPU亲和度设置以支持将Worker进程绑定CPU功能。(有人测试过繁忙的多核服务器,绑定CPU比不绑定CPU有20%左右的性能提升,现在Nebua可以让开发者自行选择是否绑定CPU)
- 增加动态库(业务插件)卸载功能。(支持不停服务升级的重要功能)
- 增加配置管理,NebulaBeacon为配置中心,使用说明见命令行管理工具Nebcli的get和set命令。
- NebulaBeacon增加节点状态信息查询,注册中心主从高可用选举
- NebulaInterface提供HelloWorld示例。
- 增加worker进程意外终止并被Manager重新拉起时的节点信息下发
- 增加ipv6支持
- 分布式日志服务测试通过
- 增加https支持
- http通道增加keep alive设置
- 用proto3中的map将http header替换掉原repeated数据类型
- Channel增加设置对称加密密钥接口
- 缺陷修复
- 用C++14标准改写整个项目
- 用模板实现反射机制创建actor实例
- 增加分布式追踪日志
- 第一个可运行并http测试通过的版本
Bug、修改建议、疑惑都欢迎提在issue中,或加入qq群809075299交流。