跳到主要内容

企业版与开源版功能对比

功能对比​

功能模块功能名开源版企业版描述
通信模型
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。
部署
单机单进程✅✅支持单机单进程启动,可在单进程内启动多个逻辑服。
单机多进程✅✅支持单机启动多个进程,支持不同进程间的网络通信。
多机器启动❌✅支持在多台器启动进程,支持不同机器间的网络通信。

双版本策略​

我们采用双版本策略(开源版/企业版),旨在实现框架核心价值和客户复杂度需求的精确对齐。

  1. 聚焦核心价值: 开源版聚焦于单机高性能通信和极简开发体验,为大多数开发者提供免费的、够用的基础框架,帮助快速构建应用。
  2. 管理复杂性: 多机分布式能力不可避免地会引入额外的学习成本,以支持扩展需要。将其纳入企业版,可以避免让不需要高扩展性的用户承担这些不必要的学习成本。
  3. 可持续发展: 通过企业版为需要高扩展性的商业客户提供专业服务(如技术支持、定制化开发),可以更好地支撑框架的持续开发、维护和生态建设。

开源版 - 单机高性能与极简主义​

开源版精简了分布式相关的功能,大幅降低了上手门槛和减少了学习成本。 致力于提供一个高性能、单机部署的解决方案。 单机支持启动多进程,其能力足以满足绝大多数项目的需求。

开源版支持的用户连接数上限取决于单机硬件的资源极限。

企业版 - 水平扩展能力​

企业版的核心价值在于提供水平扩展能力,通过多机多节点分布式部署,突破单台机器的物理上限,支持亿级连接和超高并发场景。 此外,企业版针对分布式场景进行了全面功能增强和性能优化,提供了无缝的水平扩展能力。

  • 水平扩展能力
    • 支持多机器、多节点分布式部署。
    • 支持内置的负载均衡策略,确保请求在多节点间高效均匀分配。
    • 支持启动多个对外服。
    • 支持启动多个同类型逻辑服。
  • 可观测性与运维
    • 支持全链路调用日志跟踪,便于快速定位分布式环境下的问题。
    • 支持广播日志。
  • 增强的通信模型
    • 支持分布式事件总线 EventBus,实现跨服务的轻量级事件通信。
    • 支持 request/multiple_response 请求模型,突破传统 RPC 的限制。
  • 业务功能
    • 支持动态绑定逻辑服。
    • 支持对外服缓存,减少后端逻辑服的压力,加速数据响应。

企业版性能提升​

内部消息请求/回调使用分片技术

适用于对延迟要求极高、需要严格控制线程资源、并且希望将所有清理工作与 Aeron I/O 循环同步执行的系统。

将所有关键操作都限制在 Aeron 线程内,简化了线程模型,避免引入额外的定时器线程及跨线程同步的复杂性。 利用 Aeron 线程空闲时进行清理,保证了清理工作不会在网络繁忙时抢占 I/O 资源。

特点: 使用分片提高并发性能,并利用 Aeron 线程进行分摊负载,每次调用只会清理一个分片,避免单次清理工作耗时过长,以保持主循环的低延迟和无阻塞。 这是更符合 Aeron 哲学(即避免 GC 和线程上下文切换)的高性能实现。


消息发布增强

消息发布提供了无锁且专门为多生产者-单消费者场景设计。 基于数组实现,在初始化时分配内存,避免了运行时的 GC 压力,性能极高,没有锁竞争和阻塞。

有消息时,会保持低延迟。 当没有消息发布时,会执行一个逐渐退让的策略,内部使用高性能的自适应空闲策略,高效释放 CPU 资源。

该实现是一个更优、更符合 Aeron 哲学的高性能实现。 它通过采用无锁队列来解耦多线程写入,并使用自适应空闲策略来确保单写入线程在没有工作时能高效释放 CPU,同时在繁忙时能保持低延迟。

如何获取企业版本​

企业版本并不开源,但我们提供了如下方式来获取企业版本

开放策略​

当前 github star , 当 github star 达到一定数量时,我们会开放对应的企业级功能。

功能名star是否达到功能描述
全链路调用日志跟踪150✅解决跨服务调用链追踪问题。

追踪一个请求从用户端发起,依次经过服务 A -> 服务 B -> 服务 C ... 这一系列跨进程、跨机器、跨服务的调用路径。
广播日志180✅开启广播的日志后,可以获取广播的代码定位。
对外服缓存500❌支持对外服缓存业务数据,让数据的获取做到零GC、零编解码,从而实现性能的超级提升。

减少后端逻辑服的压力,加速数据响应。
启动多个对外服800❌支持更多的用户连接,支持更多的连接方式,如 WebSocket、TCP、UDP。
启动多个同类型逻辑服2000❌支持启动同类型多个逻辑服,配合负载均衡对业务请求进行分流。
负载均衡2600❌提升性能和响应速度,增强系统的可扩展性。

将大量的请求平均分配给多台逻辑服,防止单台逻辑服因过载而响应变慢甚至崩溃。
动态绑定逻辑服3600❌用户与逻辑服绑定后,之后的请求都由该逻辑服来处理。
request/multiple_response5000❌同时与同类型的多个逻辑服交互,突破传统 RPC 的限制。
EventBus9900❌分布式事件总线,跨服务的轻量级事件通信。
多机器启动19000❌支持在多台器启动进程,支持不同机器间的网络通信。