技术白皮书-敏捷版
# 产品概述
金蝶天燕负载均衡器软件敏捷版(Apusic Load Balancer,ALB)是一款兼具轻量级、高性能及高可用性的Web服务器和反向代理服务器。ALB能有效应对大规模服务集群在面向客户端时的请求与流量管理挑战,承担起请求安全控制、验证、过滤,以及负载均衡和反向代理的重任。通过这些功能,ALB成功隔离了客户端访问对服务应用系统、平台及其资源的直接影响,实现了对集群访问流量的有效控制、精细化管理和均衡分配,确保服务稳定性和高效性。
# 产品名称
金蝶Apusic负载均衡器软件敏捷版V2.0,简称ALB,英文全名为:Apusic Load Balancer。
# 产品定位
ALB敏捷版是一款高性能、高并发的Web服务器和反向代理服务器,其拥有轻量级、模块化架构和跨平台能力。ALB敏捷版专为处理大量并发连接而设计,提供静态内容服务、负载均衡、邮件代理等核心功能,并支持国密SSL、访问控制等安全特性。ALB敏捷版的灵活性和可扩展性使其成为构建高性能网站和应用的理想选择,尤其适合需要处理大量静态资源和动态请求的场景。
# 产品的受众
- 具备静态资源代理需求的企业和机构,ALB敏捷版可以支撑静态内容代理需求。
- 业务系统复杂繁多,需要统一代理网络出入口的企业和架构。
# 产品架构与功能
ALB敏捷版的架构设计为高效、稳定且易于扩展,它使用多进程模型来处理网络请求,确保了高性能和高并发能力。通过模块化的设计,ALB敏捷版能够灵活地添加新功能,满足不同业务场景的需求。ALB敏捷版架构支持从简单的Web服务器到复杂的负载均衡和反向代理等多种网络服务,同时保证了操作的简便性和服务的可靠性。
# 服务代理
| 功能 | 功能说明 |
|---|---|
| 静态文件服务 | 支持静态文件缓存、断点续传等功能,实现快速、低延迟的静态内容分发。 |
| 反向代理 | 支持HTTP、HTTPS、FastCGI、Websocket、gRPC、TCP、UDP等多种协议代理。 |
| 邮件代理 | 支持邮件协议,实现邮件代理功能。 |
| 协议支持 | 支持IPV4和IPV6协议。 |
# 负载均衡
| 功能 | 功能说明 |
|---|---|
| 轮询 | 每个请求按时间顺序逐一分配到不同的后端服务器。 |
| 带权轮询 | 根据节点权重生成节点流量比例,用于后端服务器性能不均的情况。 |
| 最小连接数 | 选择上游服务节点连接数最少的一个节点作为转发节点。 |
| sticky(会话粘滞) | 通过维护session的客户端关联性,确保来自同一客户端的请求在会话期间始终被定向到同一后端服务器,实现 session一致性。 |
| IP地址哈希 | 根据IP地址进行哈希计算获得目标节点,保证每个访客固定访问一个后端服务器,可解决session一致性问题。 |
# 流量管理
| 功能 | 功能描述 |
|---|---|
| 限制请求速度 | 通过限制请求速度,达到防止上游服务同时被过多的请求淹没。 |
| 限制请求次数 | 限制客户端单位时间内的请求次数。 |
| 限制并发 | 限制客户端单位时间允许的连接数。 |
# 安全
| 功能 | 功能说明 |
|---|---|
| HTTP/HTTPS协议 | 支持HTTP/HTTPS协议,可保障客户端和服务端通信安全可信。 |
| 国密SSL | 支持国密SSL双向认证通信,可保障客户端和服务端通信安全可信。 |
| 访问控制 | 支持IP访问控制、IP黑白名单、referer黑白名单、静态资源防盗链等功能。 |
# 技术特性
# 高性能
ALB是一个非常高效且可扩展的 Web 服务器和反向代理服务器,它在设计上采用了高性能的异步 I/O 模型来处理大量并发连接。ALB的这种设计使得它能够轻松地处理成千上万的同时连接请求,而不会显著增加系统资源消耗。
# 事件驱动模型
ALB使用了一种称为事件驱动的模型来处理网络 I/O 操作。这个模型的核心思想是将所有网络 I/O 操作(例如接收新的客户端连接、读取数据、写入数据等)视为事件,并通过一个事件循环来管理这些事件。
# 集成epoll高性能事件处理器
ALB事件处理器基于Linux最常用的epoll事件处理器,epoll提供高效的IO多路复用机制,可以同时监控多个连接/文件等状态的变化,当读写准备好后,可以即时高效通知ALB处理内核进行处理。
# 高效超时机制
ALB超时处理内核中使用读写高效的红黑树数据结构,对于任何超时任务,只需要检索到第一个超时节点,那么当前节点的左节点数据全部超时,可高效批量处理超时任务。同时红黑树数据结构也保障了在大并发场景下,超时任务等创建的高效性。
# 多进程单线程处理模型
ALB采用多进程单线程处理机制,无阻塞处理逻辑配合异步IO高性能epoll,可以充分利用多核CPU的性能。
# 模块化
ALB的模块化架构是其灵活性和可扩展性的重要组成部分。ALB的设计允许用户根据自己的需求选择和配置不同的模块,这使得ALB能够满足从简单的静态文件服务器到复杂的反向代理、负载均衡器等各种应用场景的需求。
# HTTP协议分阶段处理
ALB的 HTTP 分阶段处理机制是其处理 HTTP 请求的核心部分,使得ALB可以灵活高效的处理请求的不同阶段,同时这一设计支持模块化处理。对于HTTP请求,在ALB中处理阶段划分有:
- 请求行读取
- 请求头读取
- 配置匹配
- 重定向
- 访问处理
- 权限验证
- 响应内容预处理
- 响应内容
- 日志记录
# 模块化处理架构
ALB模块化支持针对不同请求定制不同处理逻辑,其实现核心是在http请求的不同处理阶段,可插入处理逻辑,而不同的处理逻辑则是由ALB的配置文件中针对不同的请求进行单独设置。ALB的模块化执行逻辑主要有下:
- 模块自定义: 模块自定义中实现了针对不同http处理阶段的回调处理功能。
- 请求处理配置:ALB配置文件中针对特定请求,通过配置参数配置自定义的模块。
- 请求分阶段处理:在收到请求后,不同处理阶段依次执行通过配置文件配置的自定处理模块。
# Lua脚本插件(敏捷定制版)
ALB通过扩展支持Lua脚本大大提高了扩展性和功能通用性。通过支持Lua脚本,ALB可以动态处理请求,使得开发者可以快速通过Lua语言实现复杂的流量处理业务。
# Lua运行时集成
ALB内核集成lua运行时,使得ALB内部可以直接运行Lua脚本,而不依赖外部Lua软件和环境。
# 请求上下文共享
ALB分阶段处理阶段支持Lua模块处理,即在不同处理阶段,可以通过配置Lua处理脚本实现处理,例如接收请求、解析请求、选择匹配的配置块、执行配置指令、处理请求体等。
为了实现ALB和lua之间共享请求和数据,ALB提供lua集成ALB内部请求数据结构和共享内存等接口,可以在Lua模块中引用和调用相关的函数实现ALB的内核能力。