Alligator 系列:RabbitMQ 基础知识及部署
发表于
分类于
Alligator网关
Netty 系列:内存管理(摘录)
发表于
分类于
Netty
1.概述
在操作系统中内存管理的基本单位是 page, page 大小一般是 4k。为了满足不同场景,分配不同大小的内存,操作系统提供了丰富的内存管理方法。从分层的角度来说,可以用下面的层次图来表示。
- 在内核空间,Buddy 系统提供了 page 级的内存分配,可以实现较大连续内存的分配,最小的分配单位是 page;
- 在内核空间,Buddy 最小分配单位是 4k ,即一个 page。为了避免内存空间的浪费(小于 4K 的空间也会分配一个 page),slab 提供了小内存空间的分配机制;
- 在用户空间,一般是通过 Buddy 分配一个大内存,在这个大内存里面,使用特定的数据来管理内存的分配,满足不同场景下内存的使用,典型的分配算法有:ptmalloc,tcmalloc 及 jemalloc。
Netty 系列:EventLoop
发表于
分类于
Netty
Netty 系列:ChannelPipeline
发表于
分类于
Netty
Netty 系列:ServerBootstrap
发表于
分类于
Netty
Netty 系列:Reactor
发表于
分类于
Netty
1. 概述
Reactor 模式是一种服务器网络编程模式,它根据网络数据接收的特点,将连接的建立、网络数据的读写分离,用 mainReactor 线程处理网络的连接,用 subReactor 处理数据的读写,同时为了有效利用 CPU 多核的优势,subActor 可以有多个。它的整体结构如下图所示:
特点:
- 客户端的所有连接请求统一由 mainReactor 线程处理,同时将收到请求转交 subReactor 处理;
- subReactor 线程处理连接的读写,为了实现处理的负载,可以有多个 subReactor,通过一定的算法分配网络连接;
- 考虑到连接的 I/O 读写比较耗时,为了提高吞吐量,读写操作可以交由线程池处理。
Netty 系列:ChannelFuture
发表于
分类于
Netty
Alligator 系列:心跳检测
发表于
分类于
Alligator网关
Alligator 系列:长连接网关概述
发表于
分类于
Alligator网关
1. 概述
在项目中经常遇到双向通信的场景,如指令的实时下发、状态的上报等,这时候使用 HTTP 协议就有点捉襟见肘。正常情况下一般会使用 TCP/Websocket 协议来实现,不过不同于 HTTP 协议简单及有大量框架的支持,使用 TCP/Websocket 需要考虑心跳、协议的定义、数据的序列化(反序列化)及 RPC 调用的实现。相对来说,入门相对比较复杂。 如果能有一个项目能够对上述功能进行封装,隐藏不同协议之间的差异,对上层应用提供一套统一的接口,上层业务只关心业务,那么就会减少开发人员的学习成本,快速接入项目。
Alligator 项目就是为了解决上述的场景而开发的,它提供了一个框架,可以让开发人员快速进行 TCP/Websocket 及 HTTP 的开发,而无需关心下层使用的协议。在此基础上,Alligator 还提供了一个进行长连接网关开发的脚手架,它是业务无关的,可以快速接入不同的业务场景。