Web 规模的负载平衡微服务

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前, 星球 内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 255 小节,累计 39w+ 字,讲解图:1716 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1300+ 小伙伴加入,欢迎点击围观

为您提供 构建微服务的最佳实践的 指南和博客文章并不缺乏。尽管所有这些信息都有帮助,但似乎没有大量可用的关于如何扩展微服务的实践指南。经过一些研究和大量理论讨论的筛选,以下是大公司在实践中如何实现负载平衡微服务。

生活在边缘

当 Web 应用程序前端客户端与基于微服务的后端服务器通信时,前端是否需要了解所有可用的微服务实例?例如,客户真的需要了解所有提供网页数据的五种服务吗?答案是否定的!

Sudhir Tonse 之前在 Netflix 工作,现在在 Uber 工作,他在 Netflix 的可扩展微服务 演讲中谈到了 边缘服务 的概念。边缘服务充当微服务基础设施的网关。因此,关于前端客户端需要了解哪些微服务的问题,按照 Sudhir 的方法,每个客户端只与一个边缘服务直接通信。每个客户端可以有一个专用边缘服务。例如,Netflix 为超过一千种设备类型提供服务——每种设备类型都有自己的专用边缘服务作为其单一入口点。

负载均衡的边缘服务充当微服务环境的网关

Netflix 和 Riot Games 等大公司都在 Amazon AWS 上运行,它们利用 弹性负载均衡器 (ELB) 来确保其边缘服务始终可用。

超越边缘服务

分析每个传入请求。然后向构成生态系统的微服务发出多个 扇出 请求。单个入站请求平均会产生大约十个扇出请求。 Netflix 每天收到的近 20 亿个请求导致大约 200 亿个内部 API 调用。

微服务环境中的扇出请求

Netflix 如何确保其微服务能够处理此类负载并保持 24/7 全天候可用?同样,负载平衡是解决方案。但这一次,它不是通过 ELB。对于 500 个不同的微服务,您需要配置大约 500 个 ELB!这就是 Netflix 的工具带有内置负载平衡功能的原因。 Netflix 已经创建了许多可以轻松地相互集成的库和工具。通过将所需的库直接集成到每个微服务中,它能够将自己注册到所有管理服务中。

不要害怕边缘服务

边缘服务如此重要,如果边缘服务失败,你就完蛋了,对吧?实际上,不。其一,边缘服务绝对必须是负载平衡的。这意味着您的访问者甚至可能不会注意到边缘服务中断。此外,还有什么选择呢?在单体应用程序环境中,每个服务就像一个边缘服务,因此任何中央服务的中断——在没有负载平衡器的情况下——意味着完全中断,对吧?

尽管如此,边缘服务确实是最脆弱的服务之一,因此需要特别注意。

外卖

您应该认真考虑运行边缘服务来处理您的入站流量。并且绝对可以使用您的云提供商提供的任何机制来平衡您的边缘服务。所有内部流量都应由您自己的工具处理,因为这允许您以最小的配置开销运行您的环境。因此,最终,微服务有效扩展所需的最重要工具毫无疑问是负载平衡。

敬请关注

我的下一篇文章涉及容器化问题。请注意,Docker 并不是唯一基于容器概念构建的解决方案。