了解最新公司动态及行业资讯
云计算、云原生概念的出现,让我们开始思考负载均衡和云计算之间有什么关系。
云计算其实并不是一种新的网络技术,而是一种新的网络应用概念。
它是一种具有高扩展性的服务,其实现核心是将很多计算资源协调在一起,这样,在用户请求时就能获得看似无限的资源。其中,弹性计算是云计算的一种,它与云计算唯一的区别就是可弹性扩展资源用量。
本章首先介绍负载均衡和弹性计算结合的落地系统:Kubernetes(K8S)中的Ingress;
然后介绍弹性计算的计算资源跨区域调度与容灾的解决方案,其中,跨区域调度与容灾是实现无限的计算资源的一个很重要的因素;最后介绍微服务架构API Gateway,API Gateway通过将一个大型的服务解耦成许多小服务,使其能够在某一个微服务资源变动时,无须对整个服务进行更新,仅更新该微服务对应的资源配置,能够很好地和弹性计算相结合。同时,在APIGateway的实现技术中,我们也可以使用负载均衡技术来调度获取某类微服务的实例。
弹性计算是指业务根据实际的计算需求灵活地调整计算资源,以实现按需使用、按需交付的目标。容器云是常见的应用场景。
以Kubernetes(K8S)集群为例,业务方创建了一个App。这个App初始化时有10个POD,且这10个POD会被接入某一套负载均衡系统中。另外,有一套监控系统会实时地监控每个POD的QPS(Queries Per Second)及整体App的QPS。
当整体的QPS或单个POD的QPS达到阈值时,要么进行限流,要么进行扩容。显然,限流并不是在所有场景下的最优解。在特定的情况下,我们需要进行自动化的扩容。这时,弹性计算的这一套系统就需要打通负载均衡的部署接口,即在流量到达阈值时,自动扩容POD并进行部署下发,使得负载均衡入口流量可以导入新扩容的POD中,K8S结合负载均衡实现弹性计算架构如图5-1所示。
图5-1 K8S结合负载均衡实现弹性计算架构
实际上,K8S的Ingress就是一个将负载均衡与弹性计算落地的系统。
弹性计算采用全冗余设计,无单点,能够支持同城容灾。其中,同城容灾由同城或邻近区域内(≤200km)的两个数据中心组成:一个作为数据中心,负责日常生产;另一个作为灾备中心,负责在灾难发生后使应用系统正常运行。
比如,网易云在负载均衡的基础上结合Redis和Kafka服务实现的跨可用区(Availability Zone,AZ)容灾架构(见图5-2)。生产和灾备站点通过数据复制实现同步,在正常运行时,只有生产站点(主)在工作,当出现生产站点故障时,会通过负载均衡机制转至灾备站点(备),是一种主备模式的负载均衡策略。
图5-2 网易云实现的跨可用区容灾架构
同时,该技术搭配DNS可以进行跨区域调度与容灾,其可用性达到99.95%。跨区域容灾在主备中心之间的距离较远(>200km)时会用到,一般采用异步镜像进行,但会丢失少量的数据。
最近,在大范围自然灾害出现的背景下,以同城加异地灾备的“两地三中心”的灾备模式随之出现,该方案同时具有高可用及灾备的能力。“两地”是指同城、异地;“三中心”是指生产中心、同城灾备中心、异地灾备中心。
“两地三中心”灾备模式基本架构如图5-3所示。
图5-3 “两地三中心”灾备模式基本架构
目前,已有多家公司将上述方案应用到实践中,如阿里巴巴、华为和爱奇艺等。其中,爱奇艺通过内部DNS系统和后端负载均衡体系,实现了在一个AZ出现故障时可以自动切换到其他健康的AZ中去,同时在故障恢复时可以手动或自动恢复到初始转发策略中去。
随着业务的迅速发展,单体应用已经满足不了日趋增长的各种服务需求,出现了微服务的概念。微服务的思想是单体应用微服务化,将原本集中于一体的功能拆分,每个功能模块具有各自体系的发布、运维等功能。但是,当各种客户端来调用这些微服务时,需要有统一的出入口,API Gateway就是为了解决这个问题而出现的一种服务网关机制。API Gateway有很多,目前比较出色的是KONG。下面以KONG为例介绍一下API Gateway中的负载均衡。
在微服务的诸多API中,要保证其高可用性,就需要对API设置多个后端服务,即在API上配置多个服务节点,这需要在KONG内实现负载均衡。目前,KONG支持多种负载均衡,其中的两种主要负载均衡方式为基于DNS的负载均衡和环形平衡器。
1.基于DNS的负载均衡
基于DNS的负载均衡中的后端服务的注册是在KONG之外完成的,而KONG仅接收DNS服务器的更新。如果请求的API被分解为多个IP地址,则使用主机名的upstream_url定义的每个API将自动使用该负载均衡方式(前提是主机名未被解析为upstream名或其他本地文件中的名称)。
2.环形平衡器
使用环形平衡器时,后端服务的注册和注销将由KONG完成,不需要通过DNS服务来更新。我们可以通过配置upstream属性和target属性来配置环形平衡器。
● upstream属性:将虚拟主机名配置到upstream属性中,如一个虚拟主机 名 为 weather.service 的 主 机 可 接 收 所 有 类 似 于
http://weather.service/path/xxx/...的请求。● target属性:后端服务所在IP地址和端口的组合,如192.168.11.48:8080。每一个target属性都附加一个weight属性来指示获得的相对负载。
之后,我们通过配置负载均衡算法来实现负载均衡。在默认情况下,环形平衡器将使用加权轮询算法。还有一种负载均衡算法是哈希散列调度算法。我们可以将哈希散列调度的key的值设置为none、consumer、ip或header,当设置为none时,环形平衡器会使用加权轮询算法且禁用哈希调度。