和其他的应用程序架构类似,API往往也需要同时处理大量的请求和流量。如果所有的请求都集中在单一的服务器或实例上,很容易导致性能瓶颈和系统崩溃。解决方案就是将流量分散到多机。
本文我们就聊下Kong的负载均衡方式、算法及通过实战介绍Kong怎么将API实现负载均衡。
微服务系列传送门:
1、 为什么需要API网关
2、 Kong初探
3、 Kong安装配置
与Nginx类似,Kong也是通过多个backend实现负载平衡,同时支持健康检查等功能,如下图
基于DNS的负载均衡:Kong可以从DNS服务器接收更新,通过解析主机名为多个IP地址并将请求分发到这些地址,实现基于DNS的负载均衡。这种方式不需要进行Kong内部的配置,适用于后端服务的注册在Kong之外进行管理的场景。
环形负载均衡器(Ring-balancer):Kong作为服务注册中心,通过单个HTTP请求添加/删除节点,并立即开始/停止接收流量。环形负载均衡器可以动态地管理后端服务,无需进行DNS更新,提供了更灵活和动态的负载均衡方式。
➢ 轮询(Round-robin)算法:默认使用的算法,将请求依次分发给每个目标,实现权重均衡的轮询分发。
➢ 一致性哈希(Consistent-hashing)算法:根据指定的哈希输入(如消费者、IP地址、请求头、Cookie等)将请求分发给目标。支持主要和备用哈希属性,当主要哈希失败时会使用备用哈希属性。
➢ 最小连接数(Least-connections)算法:选择连接数最少的目标进行请求分发,根据目标的权重进行加权分发。
➢ 延迟(Latency)算法:根据上游响应时间选择延迟最低的目标进行请求分发。该算法适用于单一类型的上游服务,并且要求请求的QPS尽可能大以提高负载均衡效果。
由于生产环境直接配置后端IP的场景较多,我们下面就Ring-balancer来实验。
在之前文章微服务系列:通过Kong提供API服务-腾讯云开发者社区-腾讯云,已经使用自建镜像启动了8081的服务端口,这里我们再启动一个8082的端口
[root@VM-4-13-centos kong]# docker run -d -p 8082:8000 87ded7bc6294
通过下面指令,创建名称为example_upstream的upstream对象
curl -X POST http://localhost:8001/upstreams --data name=example_upstream
将8081、8082对应的API服务,加入example_upstream
[root@VM-4-13-centos kong]# curl -X POST http://localhost:8001/upstreams/example_upstream/targets --data target='127.0.0.1:8081'
[root@VM-4-13-centos kong]# curl -X POST http://localhost:8001/upstreams/example_upstream/targets --data target='127.0.0.1:8082'
修改example_service的指向为上步创建的example_service
[root@VM-4-13-centos kong]# curl -X PATCH http://localhost:8001/services/example_service \
--data host='example_upstream'
刷新浏览器,会发现结果在8081和8082之间轮询出现。
本文通过实际部署展示了Kong网关怎么给API实现负载均衡的,大家有什么问题欢迎和我讨论。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。