有赞ServiceMesh实践:从单体到微服务的转型探索

1 下载量 117 浏览量 更新于2024-08-27 收藏 730KB PDF 举报
"ServiceMesh在有赞的实践与发展" 在有赞的发展初期,其技术架构采用的是传统的Nginx+PHP-FPM模型,所有业务逻辑集中在单一的PHP代码库Iron中,形成了一体化的单体应用架构。随着业务的快速增长和团队规模的扩大,这种架构的弊端逐渐显现,包括高度耦合的代码结构、低隔离性以及团队协作效率低下。特别是每次发布更新时,一旦出现故障,定位问题变得极其困难,需要多个团队成员共同排查,耗费大量时间。 面对这些问题,有赞决定进行微服务改造。他们选择了dubbo作为Java语言的RPC框架,因其在国内拥有强大的生态系统。同时,考虑到团队中的PHP开发者,有赞内部开发了ZanPHP,一个基于PHP的异步RPC框架,并利用ETCD作为服务注册和发现的中心。为了处理Java和PHP之间的跨语言RPC通信,有赞基于thrift协议开发了NOVA协议。 这一阶段,有赞的整体架构选型包含了dubbo、ZanPHP、ETCD和NOVA协议,以应对多语言微服务架构的挑战。然而,将单体应用拆分为微服务的过程中,如何让原有的PHP-FPM代码调用新的微服务成为了一个关键问题。PHP-FPM的运行模式不支持长时间缓存和服务发现,这使得实现这一目标变得复杂且不稳定。 为了解决这个问题,有赞PaaS团队在2016年初推出了由Go语言编写的Tether 0.1服务化代理组件。Tether的主要功能包括解析有赞内部的NOVA RPC协议,对接ETCD服务发现中心,缓存服务数据,并接受和转发NOVA RPC请求。这样,即便是在新旧架构并存的过渡阶段,也能有效地支持跨语言的服务调用,确保系统的稳定性和效率。 随着技术的演进和业务需求的变化,ServiceMesh作为一种新型的服务间通信架构层,开始进入有赞的视线。ServiceMesh提供了一种更高效、更透明的方式来管理微服务间的交互,减轻了应用程序自身的通信负担,增强了服务治理能力,例如负载均衡、熔断、限流等。有赞在后续的实践中可能会逐步引入ServiceMesh,比如Istio或Linkerd等解决方案,以进一步优化服务间的通信,提升系统整体的弹性和可维护性。 有赞从单体应用到微服务架构的转变,再到可能引入ServiceMesh,体现了企业在面对快速变化的业务和技术环境时,如何通过不断的技术创新和实践来适应并驱动业务发展。在这个过程中,有赞不仅解决了跨语言通信、服务发现和治理等问题,还积累了丰富的技术经验,为后续的技术演进奠定了坚实的基础。