服务的路由和负载均衡
SOA(面向服务的架构),服务消费者通过服务名称,在众多服务中找到要调用的服务的地址到列表,称为服务的路由。
在请求到来时,为了将请求均衡地分配到后端服务器,负载均衡程序将从服务对应的地址列表中,通过相应的负载均衡算法和规则,选取一台服务器进行访问,这个过程称为服务的负载均衡,
当服务规模较小时,可以采用硬编码的方式将服务地址和配置写字在代码中,通过编码的方式来解决服务的路由和负载均衡问题,也可以通过传统的硬件负载均衡设备F5等,或者采用LVS或Nginx等软件解决方案,通过过相关配置,来解决服务的路由和负载均衡问题
当服务越来越多,规模越来越大时,机器数量越来越大,单靠人工来管理和维护服务及地址的配置信息已经越来越困难,单一的硬件负载均衡设备或者使用LVS或Nginx等软件负载均衡服务器宕机,依赖它的所有服务将失效。
此时需要一个能够动态注册和获取服务信息的地方,来统一管理服务名称和基对应的服务器列表信息,称之为服务配置中心。服务提供者在启动服务时,将其提供的服务名称,地址注册到服务配置中心,服务消费者通过服务配置中心来获取需要调用的服务的机器列表,通过相应的负载均衡算法,选取其中一台服务器进行调用。当服务器宕机或者下线,相应的机器需要能够动态地从服务配置中心需要移除,并通知相应的服务消费者,否则服务消费者就有可能因为调用到已经失效的服务而发生错误,在这个过程中,服务消费者只有在第一次调用服务时需要查询服务配置中心,然后将查询到的信息缓存到本地,后面的调用直接使用本地缓存的服务地址列表信息,而不需要重新发起请求到服务配置中心去获取相应的服务地址列表,直到服务的地址列表有变量(机器上张或者下线),这种无中心化的结构解决了之前负载均衡设备所导致的单点故障问题,并且大减轻了服务配置中心的压力。
负载均衡算法
1、轮询(round robin)法
将请求按顺序轮流地分配到后端服务器上,它均衡地对待后面每一台服务器,而不关心服务器实际连接数和当前的系统负载
2、随机(random)法
根据后面服务器列表的大小值来随机选取其中一台进行访问,由概率统计理论可以得知,随着调用量的增大,其实际效果越来越接近于平均分配流量到一台后端服务器,也就是轮询的结果。
3、源地址哈希(Hash)法
源地址哈希的思想是获取客户端访问的IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是访问的服务器的序号。
4、加权轮询(Weight round robin)法
不同的后端服务器的配置和当前系统的负载并不相同,因此它们的抗压能力也不尽相同,给配置高,负载低的机器配置更高的权限,让其处理更多的请求,而低配置,负载高的机器,则给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配置到后端。
5、加权随机(Weight random)法
与加权轮询法类似,加权随机法也根据后端服务器不同的配置和负载情况,配置不同的权重点,不同的是,它是按照权重来随机选取服务器,而非顺序。
6、最小连接
最小连接数算法比较灵活和智能,由于后端服务器配置不尽相同,对于请求的处理有快有慢,它正是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最小的一台服务器来处理当前请求,尽可能地提高后端服务器利用率,将负载合理地分流到每一台机器。由于最小连接数涉及服务器连接的汇总和感知,设计与实现较为烦琐。