企业版
功能对比
| 功能模块 | 功能名 | 开源版 | 企业版 | 描述 |
|---|---|---|---|---|
| 通信模型 | ||||
| request/response | ✅ | ✅ | 由请求端向服务器发起请求,服务器接收该请求并处理,处理结束后会返回响应数据。 | |
| request/void | ✅ | ✅ | 由请求端向服务器发起请求,服务器接收该请求并处理,处理结束后会不返回任何响应数据。 | |
| broadcast | ✅ | ✅ | 服务器主动给用户发送数据。 | |
| OnExternal | ✅ | ✅ | 与对外服交互。 | |
| request/multiple_response | ❌ | ✅ | 同时与同类型的多个逻辑服交互,突破传统 RPC 的限制。 | |
| EventBus | ❌ | ✅ | 分布式事件总线,跨服务的轻量级事件通信。 | |
| 对外服 | ||||
| 连接方式 - WebSocket | ✅ | ✅ | 支持客户端使用 WebSocket 连接服务器。 | |
| 连接方式 - TCP | ✅ | ✅ | 支持客户端使用 TCP 连接服务器。 | |
| 心跳设置与钩子 | ✅ | ✅ | 在长连接中保持通信的活跃状态 | |
| 用户上下线钩子 | ✅ | ✅ | ||
| 路由访问权限控制 | ✅ | ✅ | 框架提供了精准控制的访问权限,可以指定哪些路由不能被用户访问。 | |
| ws token 鉴权、校验 | ✅ | ✅ | 在 WebSocket 建立连接前做 Token 相关鉴权、校验的业务。 | |
| 内置与可选的 Handler | ✅ | ✅ | 框架内置的 Netty Handler | |
| 对外服缓存 | ❌ | ✅ | 支持对外服缓存业务数据,让数据的获取做到零GC、零编解码,从而实现性能的超级提升。 减少后端逻辑服的压力,加速数据响应。 | |
| 逻辑服 | ||||
| Runner 扩展机制 | ✅ | ✅ | Runner 机制类似于 Spring CommandLineRunner 的启动项。 会在逻辑服建立连接之前及之后分别触发一次,开发者可以通过实现 Runner 接口来扩展自身的系统。 | |
| JSR380 | ✅ | ✅ | 支持 JSR380 验证规范,该规范可以使得业务代码更加的干净。 | |
| 元信息-附加信息 | ✅ | ✅ | 在处理 action 时,可携带上一些自定义的信息。 | |
| 协议碎片 | ✅ | ✅ | 减少数据协议碎片。 | |
| 断言 + 异常机制 | ✅ | ✅ | 断言 + 异常机制 = 清晰简洁的代码 | |
| 线程编排 | ✅ | ✅ | 提供了线程相关的定制与扩展,开发者可以根据项目需求及特点,来制定符合自身项目的业务线程编排。 | |
| 动态绑定逻辑服 | ❌ | ✅ | 用户与逻辑服绑定后,之后的请求都由该逻辑服来处理。 | |
| 全链路调用日志跟踪 | ❌ | ✅ | 解决跨服务调用链追踪问题。 追踪一个请求从用户端发起,依次经过服务 A -> 服务 B -> 服务 C ... 这一系列跨进程、跨机器、跨服务的调用路径。 | |
| 广播日志 | ❌ | ✅ | 开启广播的日志后,可以获取广播的代码定位。 | |
| 业务框架插件 | ||||
| DebugInOut | ✅ | ✅ | 当 action 处理请求时,会在控制台打印相关信息,如代码导航,用户,请求参数,线程,耗时,响应等信息。 其中代码导航可以让开发者快速的跳转到业务类对应代码中,在多人合作的项目中可以快速的知道业务经过了哪些方法的执行,使得我们可以快速的进行阅读或修改。 | |
| Action 调用统计插件 | ✅ | ✅ | 统计各 action 调用时的相关数据, 如 action 的执行次数、总耗时、平均耗时、最大耗时、触发异常次数...等相关数据 开发者可以通过这些数据来分析出项目中的热点方法、耗时方法,从而做到精准优化。 | |
| 业务线程监控插件 | ✅ | ✅ | 分析各线程消费业务情况,根据这些信息适当的增加或减少硬件相关资源,也可以根据这些信息适当的调整线程相关策略。 | |
| 各时间段调用统计插件 | ✅ | ✅ | 各时间段调用统计插件,主要的关注点是每天各时间段 action 的调用次数。 开发者可以通过这些数据来分析各时间段的调用频率,在高峰时段来临前可以提前准备更多的机器来负载请求,高峰过后又可以减少机器。 | |
| 扩展模块 | ||||
| 领域事件 | ✅ | ✅ | 领域事件模块是对 Disruptor 的封装使用, 轻量级单机最快 MQ,用于业务解耦、规避并发。 Disruptor 获得 2011 Duke’s 程序框架创新奖, | |
| 生成 .proto | ✅ | ✅ | 可以让多个对象生成在同一个 .proto 文件中,进一步简化 jprotobuf 的使用。 | |
| Room | ✅ | ✅ | 房间模块 + 领域事件 + 内置 Kit = 轻松搞定桌游类游戏 | |
| 模拟客户端 | ✅ | ✅ | 当前模块是用于模拟客户端,简化模拟工作量,只需要编写对应请求与回调。 使用该模块后,当我们与前端同学联调某个功能时,不需要跟前端哥们说:在点一下、在点一下、在点一下了, 这种在点一下的交流联调方式将成为过去式。 与单元测试不同的是,该模块可以模拟真实的网络环境,并且在模拟测试的过程中与服务器交互是可持续的、可互动的。 | |
| SDK 代码生成 | ✅ | ✅ | 框架具备一次编写到处对接的能力,为客户端提供了代码生成的辅助功能,能够帮助客户端开发者减少巨大的工作量。 你只需要编写一次 java 代码,就能为 Godot、UE、Unity、CocosCreator、Laya、React、Vue、Angular ...等项目生成统一的交互接口。 交互接口确保了方法的参数类型安全且明确,使我们在编译阶段就能发现潜在问题。 这种做法有效避免了安全隐患,并减少了联调时可能出现的低级错误。 | |
| Spring 集成 | ✅ | ✅ | 与 Spring 的集成,使用 Spring 相关生态。 | |
| 机器人解决方案 | ❌ | ❌ | Room + Robot + 代码生成(sdk) = 超速出多人联机带机器人的游戏。 | |
| 通用功能 | ||||
| 负载均衡 | ❌ | ✅ | 提升性能和响应速度,增强系统的可扩展性。 将大量的请求平均分配给多台逻辑服,防止单台逻辑服因过载而响应变慢甚至崩溃。 | |
| 启动多个同类型逻辑服 | ❌ | ✅ | 支持启动同类型多个逻辑服,配合负载均衡对业务请求进行分流。 | |
| 启动多个对外服 | ❌ | ✅ | 支持更多的用户连接,支持更多的连接方式,如 WebSocket、TCP、UDP。 | |
| 部署 | ||||
| 单机单进程 | ✅ | ✅ | 支持单机单进程启动,可在单进程内启动多个逻辑服。 | |
| 单机多进程 | ✅ | ✅ | 支持单机启动多个进程,支持不同进程间的网络通信。 | |
| 多机器启动 | ❌ | ✅ | 支持在多台器启动进程,支持不同机器间的网络通信。 |
双版本策略
我们采用双版本策略(开源版/企业版),旨在实现框架核心价值和客户复杂度需求的精确对齐。
- 聚焦核心价值: 开源版聚焦于单机高性能通信和极简开发体验,为大多数开发者提供免费的、够用的基础框架,帮助快速构建应用。
- 管理复杂性: 多机分布式能力不可避免地会引入额外的学习成本,以支持扩展需要。将其纳入企业版,可以避免让不需要高扩展性的用户承担这些不必要的学习成本。
- 可持续发展: 通过企业版为需要高扩展性的商业客户提供专业服务(如技术支持、定制化开发),可以更好地支撑框架的持续开发、维护和生态建设。
开源版 - 单机高性能与极简主义
开源版精简了分布式相关的功能,大幅降低了上手门槛和减少了学习成本。 致力于提供一个高性能、单机部署的解决方案。 单机支持启动多进程,其能力足以满足绝大多数项目的需求。
开源版支持的用户连接数上限取决于单机硬件的资源极限。
企业版 - 水平扩展能力
企业版的核心价值在于提供水平扩展能力,通过多机多节点分布式部署,突破单台机器的物理上限,支持亿级连接和超高并发场景。 此外,企业版针对分布式场景进行了全面功能增强和性能优化,提供了无缝的水平扩展能力。
- 水平扩展能力
- 支持多机器、多节点分布式部署。
- 支持内置的负载均衡策略,确保请求在多节点间高效均匀分配。
- 支持启动多个对外服。
- 支持启动多个同类型逻辑服。
- 可观测性与运维
- 支持全链路调用日志跟踪,便于快速定位分布式环境下的问题。
- 支持广播日志。
- 增强的通信模型
- 支持分布式事件总线 EventBus,实现跨服务的轻量级事件通信。
- 支持 request/multiple_response 请求模型,突破传统 RPC 的限制。
- 业务功能
- 支持动态绑定逻辑服。
- 支持对外服缓存,减少后端逻辑服的压力,加速数据响应。
企业版性能提升
内部消息请求/回调使用分片技术
适用于对延迟要求极高、需要严格控制线程资源、并且希望将所有清理工作与 Aeron I/O 循环同步执行的系统。
将所有关键操作都限制在 Aeron 线程内,简化了线程模型,避免引入额外的定时器线程及跨线程同步的复杂性。 利用 Aeron 线程空闲时进行清理,保证了清理工作不会在网络繁忙时抢占 I/O 资源。
特点: 使用分片提高并发性能,并利用 Aeron 线程进行分摊负载,每次调用只会清理一个分片,避免单次清理工作耗时过长,以保持主循环的低延迟和无阻塞。 这是更符合 Aeron 哲学(即避免 GC 和线程上下文切换)的高性能实现。
消息发布增强
消息发布提供了无锁且专门为多生产者-单消费者场景设计。 基于数组实现,在初始化时分配内存,避免了运行时的 GC 压力,性能极高,没有锁竞争和阻塞。
有消息时,会保持低延迟。 当没有消息发布时,会执行一个逐渐退让的策略,内部使用高性能的自适应空闲策略,高效释放 CPU 资源。
该实现是一个更优、更符合 Aeron 哲学的高性能实现。 它通过采用无锁队列来解耦多线程写入,并使用自适应空闲策略来确保单写入线程在没有工作时能高效释放 CPU,同时在繁忙时能保持低延迟。
如何获取企业版本
企业版本并不开源,需要单独采购。
一般来说 开源版支持的用户连接数上限取决于单机硬件的资源极限。