Skip to main content

企业版

功能对比

功能模块功能名开源版企业版描述
通信模型
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,同时在繁忙时能保持低延迟。

如何获取企业版本

企业版本并不开源,需要单独采购。

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