全异步

[开源软件]负载均衡通讯分发器(LB dispatch)

耗尽温柔 提交于 2019-11-30 05:33:31
负载均衡通讯分发器(LB dispatch) - G5 1.开发背景 今天和系统运维的老大聊天,谈到一直在用的F5,行里对其评价为价格过高、功能复杂难懂,反正印象不是很好,使用前景不明。因为以前我曾经给行里开发过一个通讯中间件,附带软实现了负载均衡,几年使用下来一直效果不错,突然想自己再软实现一个纯负载均衡通讯分发器,并开源分享给大家。 说干就干,回到家,搜了一下网上同类软件,整理技术需求 软件定义如下:基于规则的通讯分发器,匹配来源网络地址,从哪个端口进入,参照负载均衡算法转发到目标网络地址集合中的其中一个。 实现目标如下: * 支持长/短TCP,后续还会支持UDP * 与应用层协议无关,即支持HTTP,FTP,TELNET,SSH等等所有应用层协议 * 稳定高效,Linux下首选epoll(ET模式),全异步设计,也决定了目前仅支持Linux * 分发规则配置文件;也支持远程在线管理规则,以及查询状态 * 支持多种主流负载均衡算法 * 源码和可执行程序体型轻巧,概念简单,使用快捷 使用场景如下: * 通讯转发、分发 * 与无负载均衡功能的通讯软件配合实现本地连接对端的负载均衡分发,避免改造通讯软件带来的工作量和风险 * 低成本的网站前端负载均衡通讯网关 研发之前,取个好听的名字,相对于硬实现F5,就取名为软实现G5吧 ^_^ 经过5个晚上的奋笔疾书,捣鼓出v1.0.0

负载均衡通讯转发分发器(G5)源代码分析

自闭症网瘾萝莉.ら 提交于 2019-11-29 04:23:00
负载均衡通讯转发分发器(G5)源代码分析 (以版本v1.1.0为准) G5源代码文件只有.c(2400行)和.h(260行)两个源文件,行数虽然不多,但是技术密集度较高,分析源码主要从基于epoll(ET)事件处理应用层框架和转发会话结构管理两方面入手。 先来看数据结构。主要的数据结构有服务器环境大结构,里面包含了所有参数配置和运行时状态数据,是所有内部函数传递的第一个参数。 [code=c] /* 服务器环境大结构 */ struct ServerEnv { struct CommandParam cmd_para ; struct ForwardRule *forward_rule ; unsigned long forward_rule_count ; int event_env ; struct ForwardSession *forward_session ; unsigned long forward_session_maxcount ; unsigned long forward_session_count ; unsigned long forward_session_use_offsetpos ; struct ServerCache server_cache ; } ; [/code] 包含的众多成员中最应关注的是转发规则结构和转发会话结构 [code=c] /