Service Mesh是一种现代化的服务治理架构,它为微服务之间的通信提供了一种专门的基础设施层,将服务间通信的复杂性从应用程序代码中解耦出来。在超大规模的分布式系统中,Service Mesh技术的落地实践对于解决服务治理问题至关重要。
让我们深入理解Service Mesh的基本概念。Service Mesh通常由两部分组成:数据面和控制面。数据面负责实际的服务间通信,通常以sidecar代理的形式部署,例如Istio中的Envoy;控制面则负责管理这些代理,包括配置、服务发现、安全、策略执行等。在本案例中,选择了自研的数据面MOSN,配合轻量级SDK,以实现对自有协议和历史负担的适应。
引入Service Mesh的主要原因在于解决传统SOA架构下的一些挑战,如业务与框架的耦合、客户端中间件版本的统一、流量调度的需求、框架的不断升级以及机器资源的增加。Service Mesh通过将服务治理能力下沉到sidecar代理,使得业务代码无需直接处理这些复杂性,从而降低了基础架构和业务开发之间的耦合,增强了系统的稳定性和高可用性。
在方案落地过程中,面临的选择包括开源与自研、SDK与透明劫持。最终选择了自研数据面MOSN,因为它能够更好地处理自有协议和历史负载。目标架构是每个应用旁边部署一个sidecar,通过Kubernetes的Sidecar Operator进行管理,提供服务发现、流量调控、监控和安全能力。在升级和替换现有框架时,采用了逐步替换的方式,并且通过容器化确保升级过程对业务的影响最小。例如,SOFABoot的研发框架在升级后,通过检测pod变量并注入启动参数,实现了MOSN的平滑接入。
在应对大规模服务升级时,提出了两种策略:有感升级和无感升级。有感升级涉及关闭Pod,然后替换为新版本的MOSN容器,而无感升级则是通过新增新容器并逐渐迁移流量,确保服务的连续性和稳定性。具体实现无损升级的关键在于平滑迁移套接字、解析MOSN配置以及控制面和服务面的协调工作。
此外,案例中提到了分时调度的应用。在资源有限的情况下,为了满足业务需求,可以采用分时调度策略。资源域A和B在不同时间(X时刻和Y时刻)分配给不同的业务使用,这样可以有效地利用有限的资源,同时保证各个业务的正常运行。
Service Mesh的超大规模落地技术实践主要涵盖了服务治理的解耦、自研数据面的选型与优化、容器化升级策略以及资源调度策略等方面。这一实践为大型分布式系统提供了更为灵活和可靠的架构,有助于提升服务的稳定性和运维效率。