ioGame 由 [网络通信框架] 和 [业务框架] 组成
- 网络通信框架: 职责是各服务器之间的网络通信。
- 业务框架: 职责是业务逻辑的处理方式和编写方式。
ioGame25 将移除基于 Netty 的网络通信框架 bolt,由 Aeron 代替。
内部网络通信框架-介绍
Aeron 将用于内部服务器之间的网络通信交互,可靠 UDP,无锁、独特的 IPC 机制,多进程可使用内存共享的方式交互。
特点:
- 可靠 UDP。
- 极低延迟,通过无锁设计和零 GC 策略,Aeron 能够实现亚微秒甚至纳秒级别的端到端延迟,特别是在进程内或跨进程通信时。它的性能几乎可以达到底层硬件的极限。
- 高吞吐量,Aeron 的吞吐量非常高,通过批处理和高效的网络协议,能够以极高的速率处理大量消息。
- 无锁、高稳定性,避免了 GC 暂停和锁竞争,使得延迟抖动非常小,这对于对延迟敏感的系统至关重要。
- 高效的资源利用,减少了不必要的内存分配和数据复制,使得 CPU 和内存资源得到更有效的利用。
- 真.零拷贝:与 Netty 零拷贝不同的是,Aeron 的“零拷贝”则是一种更为激进和底层的实现,在进程间或线程间通信时,通过共享内存来完全避免数据拷贝。利用共享内存,将数据源和目的地直接映射到同一个物理内存区域,从而完全消除了跨进程(或跨线程)的数据拷贝。这是一种更高维度的零拷贝。
消息格式-介绍
内部交互消息格式使用 SBE,SBE 是一种为性能而生的编码标准。它通过将消息结构与内存布局直接绑定,彻底消除了编解码开销,特别适用于对延迟有极高要求的金融、物联网和高性能计算等领域。
特点:
- 消息大小非常小,只包含原始数据和必要的元数据。
- 编解码开销几乎为零,直接内存映射。
- 性能最高,为低延迟优化。
- 固定内存布局,无运行时解析。
- 内存开销极小,无临时对象,零 GC,完全避免在编解码过程中产生新的 Java 对象。
- 亚微秒,接近原生硬件速度。
SBE 性能极快,极致的低延迟,性能通常是 Google Protobuf 的 10 倍到 100 倍以上,单核每秒可处理 1~2 千万条,多核可以轻松达到数亿条消息每秒。
减少请求链与跳转链-介绍
由于 Aeron 独特的 IPC 机制,基于共享内存(Shared Memory)和无锁(Lock-Free)设计,这从根本上消除了数据在不同进程间传输时产生的拷贝和上下文切换开销。
Aeron IPC 的核心是利用内存映射文件(Memory-Mapped Files)来在不同的进程间共享一个物理内存区域。
得益于这种 IPC 机制,ioGame25 可以将请求链减少到 0 次,或至多一次。可以简单的想象成即使启动了多个进程,在交互上等同于在一个进程中的效率,因为各进程之间直接在内存中交互数据的。
ioGame25 的优势随着服务器之间的调用链变长而更加明显。例如,在由四个逻辑服务器 A -> B -> C -> D 组成的调用链中,许多传统框架会涉及多个网络传输周期、消息序列化以及请求和响应的反序列化。
示例:
A->B
A 请求 B: ---- 序列化消息、请求网络传输
B 接收 A 的网络请求: ---- 反序列化消息、序列化消息、响应网络传输
A 接收 B 的响应: ---- 反序列化消息
B->C
B 请求 C: ---- 序列化消息、请求网络传输
C 接收 B 的网络请求: ---- 反序列化消息、序列化消息、响应网络传输
B 接收 C 的响应: ---- 反序列化消息
C->D
C 请求 D: ---- 序列化消息、请求网络传输
D 接收 C 的网络请求: ---- 反序列化消息、序列化消息、响应网络传输
C 接收 D 的响应: ---- 反序列化消息
总计:
网络请求 3 次。
网络响应 3 次。
序列化消息 6 次。
反序列化消息 6 次。
而在 ioGame25 中,则没有这些。网络传输 0 次、序列化消息 0 次、反序列化消息 0 次。
ioGame 由 [网络通信框架] 和 [业务框架] 组成
ioGame25 将移除基于 Netty 的网络通信框架 bolt,由 Aeron 代替。
内部网络通信框架-介绍
Aeron 将用于内部服务器之间的网络通信交互,可靠 UDP,无锁、独特的 IPC 机制,多进程可使用内存共享的方式交互。
特点:
消息格式-介绍
内部交互消息格式使用 SBE,SBE 是一种为性能而生的编码标准。它通过将消息结构与内存布局直接绑定,彻底消除了编解码开销,特别适用于对延迟有极高要求的金融、物联网和高性能计算等领域。
特点:
SBE 性能极快,极致的低延迟,性能通常是 Google Protobuf 的 10 倍到 100 倍以上,单核每秒可处理 1~2 千万条,多核可以轻松达到数亿条消息每秒。
减少请求链与跳转链-介绍
由于 Aeron 独特的 IPC 机制,基于共享内存(Shared Memory)和无锁(Lock-Free)设计,这从根本上消除了数据在不同进程间传输时产生的拷贝和上下文切换开销。
Aeron IPC 的核心是利用内存映射文件(Memory-Mapped Files)来在不同的进程间共享一个物理内存区域。
得益于这种 IPC 机制,ioGame25 可以将请求链减少到 0 次,或至多一次。可以简单的想象成即使启动了多个进程,在交互上等同于在一个进程中的效率,因为各进程之间直接在内存中交互数据的。
ioGame25 的优势随着服务器之间的调用链变长而更加明显。例如,在由四个逻辑服务器 A -> B -> C -> D 组成的调用链中,许多传统框架会涉及多个网络传输周期、消息序列化以及请求和响应的反序列化。
示例:
而在 ioGame25 中,则没有这些。网络传输 0 次、序列化消息 0 次、反序列化消息 0 次。