APP下载

面向微服务架构的负载均衡算法综述

2021-06-28陈宇明陈琳陆正武

电脑知识与技术 2021年10期
关键词:负载均衡

陈宇明 陈琳 陆正武

摘要:随着互联网技术的发展,传统的单体架构应用不能适应现有的互联网环境,越来越多的企业采用微服务架构来作为解决方案,而在微服务架构中如何保持各服务器的负载相对均衡是亟待解决的问题,现在解决问题的办法是通过负载均衡算法来平衡微服务架构中各服务器的负载,保持系统的高可用性。本文首先介绍了微服务框架及其相关框架,详细介绍了Spring Cloud框架的工作原理,然后分析了加权最小连接数算法、加权轮询算法等负载均衡算法。

关键词:微服务架构;Spring Cloud;负载均衡;加权最小连接数算法;加权轮询算法

中图分类号:TP31        文献标识码:A

文章编号:1009-3044(2021)10-0187-02

Abstract:With the development of Internet technology, traditional monolithic architecture applications cannot adapt to the existing Internet environment. More and more companies adopt microservice architecture as solutions, but how to keep the load of each server relatively balanced in the microservice architecture It is an urgent problem to be solved. At present, the load balancing algorithm is used to balance the load of each server in the microservice architecture to maintain the high availability of the system. This article first introduced the microservice framework and its related frameworks, detailed the working principle of the Spring Cloud framework, and then analyzed load balancing algorithms such as the weighted least connection algorithm and the weighted round-robin algorithm.

Key words: Microservice architecture; Spring Cloud; load balancing; weighted least connection algorithm; weighted round-robin algorithm

1 引言

傳统的IT行业软件多数是由各种独立系统组成,这些系统将所有功能都包含在一个独立单元的应用程序内,即单体架构应用。单体架构应用在面对用户需求快速变化的互联网环境时,出现了扩展性差、可靠性低、维护成本高等问题,许多软件或者应用开始采用微服务架构。与传统单体架构相比,微服务架构具有高维护性、高扩展性、高适应性、去中心化管理等特点[1-4]。微服务架构是将功能复杂的软件或应用划分为一组相对较小且独立的功能单元,并使用多个独立的服务来开发这些功能单元,每个服务单独运行在各自的进程。随着数据和访问量的增加,单台服务器无法满足海量的数据处理请求,无法适应实际的市场需求,为了处理并发的数据存取请求和用户访问请求,需要多台服务器同时在运行的状态,并且通过负载均衡算法将来自客户端或其他位置的请求分配给合适的服务器。

负载均衡算法按照算法原理能够分为动态负载均衡算法、静态负载均衡算法两种[7]。动态负载均衡算法根据当前的服务器状态分配任务,如最小连接数算法、加权最小连接数算法等[8]。静态负载均衡算法按照固定比例分配任务,如轮询算法、加权轮询算法等。静态负载均衡算法的优点是简单,缺点是没有考虑到服务器的性能和当前负载状态,在算法执行一段时间后会破坏服务器之间的负载均衡状态。动态负载均衡算法可根据服务器的实时负载状况,自动将请求分配给合适的服务器,从而提高系统的整体性能,因此动态负载均衡算法在实际系统开发中得到了广泛应用。

2 微服务架构

2.1 微服务架构

微服务架构(MicroservicesArchitecure,MSA)是指根据整个应用系统的业务需求,通过预先划定的服务边界、定义好的微服务进行服务组合而形成的企业级分布式应用体系架构[5-6]。随着微服务架构的持续发展,一些中大型企业开始将传统的单体架构应用逐渐转化为微服务架构,并且出现了一些基于微服务架构的实践框架,如Motan、Dubbo、Spring Cloud等,Motan、Dubbo属于服务治理型框架,更侧重于服务治理,主要提供全面的服务治理功能。与Dubbo框架相比,Motan框架去除了Dubbo框架部分不常用的功能,虽然Motan框架功能减少了,但Motan框架变得比较简单、易用。

Spring Cloud的功能非常强大,Spring Cloud提供了开发微服务架构应用所需的服务发现(Eureka)、负载均衡(Ribbon)、配置管理(config)、服务网关(Zuul)、断路器(Hystrix)等组件。Spring Cloud的组件架构如图1所示。

来自外部的请求统一从Zuul网关进入,由Zuul网关转发请求给内部的服务。当微服务在服务器上启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,确定可用的服务,然后由Ribbon做负载均衡,经过负载均衡算法计算后,将请求发送到对应的服务器。

3 负载均衡算法

3.1 动态算法

(1)最小连接数算法

最小连接数算法是根据服务器当前的连接数,将请求分配给连接数最少的一台服务器。

假设有n台服务器Sk(k=1,2,...,n),Ck为服务器Sk的当前连接数,当服务器Si(i=1,2,...,n,i≠k)的连接数[Ci=minCk]时,将最新的连接请求发送给服务器Si。

最小连接数是一种简单的动态分配服务器的算法,但在实际的生产环境中,当每台服务器的性能有差异时,仅用服务器的连接数作为分配请求时的判断依据是不科学的。这时需要根据每台服务器处理请求的效率、CPU利用率、服务器类别等因素,设置每台服务器的权值。

(2)加权最小连接数算法

假设有n台服务器Sk(k=1,2,...,n),Ck为服务器Sk的当前连接数,Hk为服务器Sk的权值,则所有服务器的总连接数Csum=[k=1nCk]。当服务器Si(i=1,2,...,n,i≠k)的连接数Ci满足[CiCsumHi] = [minCkCsumHk] 时,将最新的连接请求发送给服务器Si。其中Hi为服务器Si的权值。

加权最小连接数算法中,各服务器的权值表示其处理请求的性能,在处理新的连接请求时,尽可能使服务器的权值与其性能成正比,保持各服务器的负载相对均衡。

3.2 静态算法

(1)轮询算法

轮询算法是将请求轮流分配给服务器。

假设有n台服务器Sk(k=1,2,...,n),Si表示上一次选择的服务器,i的初始值为[n-1]。当j满足式[j=(i+1)%n]时,将最新的连接请求发送给服务器Sj。

轮询算法假设所有服务器的软硬件配置都相同,即处理请求的效率相同,不考虑每台服务器目前的使用情况,即当前已连接数量和网络带宽等因素。当每次请求服务的间隔时间浮动较多时,轮询算法将会导致每台服务器的负载不是很均衡。所以这种负载均衡算法只适用于各服务器的CPU、内存、软件等配置都相同的情况。

(2)加权轮询算法

加权轮询算法是根据每台服务器处理请求的能力不同,给每个服务器分配不同的权值,使请求被分配到合适的服务器。

假设有n台服务器Sk(k=1,2,...,n),Hk为服务器Sk的权值,[Hmax]为所有服务器权值的最大值,[G]为所有服务器权值的最大公约数。当接收到一个请求时,由服务器Si来处理,并且服务器Si在接收请求时的权值为[Wi]。[Wi]的初始值为[Hmax],并且满足[Wi=Wi-G],如果[Wi]的值为0时,则将其重置为[Hmax]。

[Wi]的值从[Hmax]到0的过程,成为一个轮回,[Wi]的值的变化序列是一个等差数列:[Hmax,Hmax-G,Hmax-2G,Hmax-3G,...,0]。加权轮询算法的结果是根据服务器的配置得到一个服务器序列,对于[Wi]的每个值,加权轮询算法将遍历所有服务器,将权值大于[Wi]的服務器放到序列中,然后[Wi]变成下一个值,再遍历所有服务器,直到[Wi]的值为0。在[Wi]变化的过程中,不论[Wi]为何值,权值为[Hmax]的服务器每一次遍历中都会被选中,因此权值为[Hmax]的服务器在算法结果的服务器序列中会出现[Hmax/G]次,并且当[Wi]的值为[Hwi]时,权重为[Hwi]的服务器在[Wi]后面的遍历过程中,每一次都会被选中,并且会在结果序列中出现[Hwi/G]次,所以每个服务器在算法结果的服务器序列中出现的次数与其权值成正相关性。

4 结束语

本文从微服务架构和负载均衡算法出发,介绍了微服务框架Spring Cloud的工作原理及其相关组件的功能,解释了加权最小连接数算法、加权轮询算法等负载均衡算法的实现过程,并总结了各负载均衡算法的优缺点。本文中提到的加权最小连接数算法、加权轮询算法中,每台服务器都有对应的权值,实际上服务器权值的确定应该考虑服务器软硬件配置及使用情况,并且应该根据服务器当前状态浮动的,本文没有考虑到权值动态变化的情况,比较理想化,需要进一步的研究和细化负载均衡算法来解决这一问题。

参考文献:

[1] Knoche H, Hasselbring W. Using microservices for legacy software modernization [J]. IEEE Software, 2018, 35(3): 44-49.

[2] Rademacher F, Sorgalla J, Sachweh S. Challenges of domain-driven microservice design: a model-driven perspective [J]. IEEE Software, 2018, 35(3): 36-43.

[3] Pahl C, Brogi A, Soldani J, et al. Cloud container technologies: a state-of-the-art review [J]. IEEE Transactions on Cloud Computing, 2019, 7(3): 677-692.

[4] 钟陈星,李杉杉,张贺,等.限界上下文视角下的微服务粒度评估[J].软件学报,2019,30(10):3227-3241.

[5] Zhong C X, Li S S, Zhang H, et al. Microservice granularity evaluation from the perspective of bounded context [J]. Journal of Software, 2019, 30(10): 3227-3324.

[6] NewmanS. Buildingmicroservices: designing?ne-grainedsystems[M]. OReillyMedia,Inc.,2015.

[7] 张慧芳.基于动态反馈的加权最小连接数服务器负载均衡算法研究[D].上海:华东理工大学,2013.

[8] 孟晓景,张春勇.一种改进加权最小连接算法及在CDN的负载均衡技术中的应用分析[J].山东科技大学学报(自然科学版),2020,39(1):85-90.

【通联编辑:梁书】

猜你喜欢

负载均衡
异构环境下改进的LATE调度算法