企业IT架构转型之道:阿里巴巴中台战略思想与架构实战. 3.1 淘宝平台“服务化”历程

简介:

3.1 淘宝平台“服务化”历程

2007年,淘宝已经拥有超过500人的技术团队规模,整个淘宝网站是一个几百兆字节的WAR包,大小功能模块超过200个,在当时淘宝业务计划处于每隔几个月就翻倍的高速发展期,这样的应用架构给淘宝技术团队带来了非常大的压力。几百人维护一个WAR包的模式,带来了以下几个主要问题:

1)项目团队间协同成本高,业务响应越来越慢。一个超过200个功能模块的系统,必然会按照不同团队负责不同功能模块的方式进行开发。每一次系统的功能升级,一定是各个团队为各自负责的项目模块创建出新的代码分支,一旦临近新版本的系统上线时间,则会进行分支的合并。做过开发的都会知道,在这个合并的过程中,会出现各种jar包冲突、代码不一致的情况,这就需要在不同团队间进行各种确认和协调的工作。如果再遇上有些功能开发的进度滞后,让情况就变得更加复杂,最终导致每一次的版本发布都会有不少时间花费在这样的协同工作上,在耽搁系统上线时间的同时,也带来不小的协同成本。

2)应用复杂度已超出人的认知负载。淘宝从最初2003年时功能简单的C2C平台发展到2007年时,不管是功能的数量和业务流程的复杂度都非常高,淘宝早期还有同事能对平台各个功能和实现了如指掌,但面对越来越复杂的淘宝平台,各种业务错综复杂地揉在了一起(如图3-1所示的情形),已经没有一个人能完全清楚每一个功能和业务流程的细节,因为人的认知负载毕竟是有限的。这就造成每一次淘宝平台整体打包发布时,其中蕴含着非常大的风险,一个小小的功能改动可能会给其他功能带来未知的风险,整个平台给人一种“牵一发而动全身”的感觉。

 

图3-1 淘宝平台越来越错综复杂的系统样貌

3)错误难于隔离。淘宝平台WAR包中的200多个功能模块中有非常核心的模块,如用户、商品、交易、店铺等,这一类的功能模块相对业务比较稳定,功能迭代和更新的频率没有那么高。还有一类如广告展示、前端界面交互等非核心的功能模块,基于运营的需要,可能每天都会有新版本发布。在淘宝的历史中发生过几起事故,是因为一些非核心功能的设计不合理、代码质量差引起整个淘宝平台的业务受到全面影响,其根本原因就是核心功能和非核心功能的代码都运行在同一个环境(同一个JVM)中,任何一个小的问题都有可能造成应用实例的崩溃,从而影响到整个淘宝平台的正常运行。

4)数据库连接能力很难扩展。整个淘宝平台的所有业务功能均在一个WAR应用中,所有的数据也均保存在同一数据库集群中,而数据库集群的数据库连接数量是有上限的,这就造成数据库连接数量的资源随着淘宝应用实例数量的增加而越来越捉襟见肘,如图3-2所示。2007年,淘宝在应用代码方面做了足够好的优化,每个应用实例的连接池大小压缩到10个的情况下,峰值时间数据库的连接数量已经超过5000个,离数据库官方支持的连接数上限已经非常接近,平台也已经因为过高的数据库连接处于一个非常不稳定的状态。

 

图3-2 数据库连接数已经达到上限

5)应用扩展成本高。一个包含几百个功能的WAR包所需要的初始和运行资源就不会太小,使得我们需要采用较高资源配置的服务器支撑应用实例的运行。更重要的是,我们发现系统在出现业务处理瓶颈的时候,只是由于某一个或几个功能模块(比如在大促时商品库存功能和订单创建功能的压力会非常大)负载较高造成的,但因为所有功能都打包在一起,所以在出现此类性能问题并且需要通过增加应用实例的方式分担服务负载时,则没法对单独的几个功能模块进行服务能力的扩展,而只能将整个完整的应用进行扩容,带来了资源额外配置的消耗,成本较高。

以上几个问题,一部分是成本问题;一部分是对于淘宝高速发展的业务是否能够做到快速、稳定的支持;还有一部分问题则是直接决定了技术平台是否还能支撑淘宝平台继续发展下去的关键问题。也就是说,如果继续沿袭现在的架构发展,将很快遇到平台发展的瓶颈,从而无法再对淘宝业务的发展带来有效的支持。所有人都意识到了这个问题,所以淘宝从2007年开始整个技术体系架构坚持走自主可控、创新变革之路,这点很多人是知道的。

解决以上问题的根本就在于业务的拆分,而当时业界已经盛行的SOA理念和方法则是有效解决以上问题的不二选择。我个人是SOA理念的坚定拥护者,因为看到了太多基于SOA建设或重构的系统给企业带来了实实在在的业务能力和竞争力的提升。所以淘宝在2007年10月开始了一系列的基于SOA理念新一代服务化框架研发以及采用业务模块逐步迁移的方式进行应用架构的改造工作。

首先淘宝从现有应用中选择了用户相关的功能作为试点,剥离出了用户服务中心,其主要出发点是用户的业务逻辑相对独立和简单,而且服务功能的复用率最高,在逐渐完善新研发的服务框架的同时,也沉淀了大量服务化实施的宝贵经验,这也成为今天我们在协助企业客户进行业务架构迁移时采用的典型方案。

经过两个多月的应用改造,用户中心于2008年年初成功上线。紧接着,又相继开始了两个在阿里巴巴内部非常著名的项目:“千岛湖”项目成功将“交易中心”和“类目中心”从现有平台中进行了剥离和改造,“五彩石”项目则将剩下的“商品中心”、“店铺中心”等核心业务功能模块进行了全部的改造。最终在保障淘宝业务不间断运行和不影响业务发展的同时,在14个月的时间内将原来单一应用的模式改造成为基于SOA理念的分布式服务架构。在应用部署形态上,由之前一个几百兆字节大小的WAR包部署模式改造成为上百个WAR包独立部署的服务化架构。这次改造被阿里巴巴同事称为“给飞行中的飞机换发动机”,也为后来的共享服务体系的建设打下了扎实的技术和理论基础。

随着淘宝平台服务化改造工作的完成,之前因为应用没有拆分的问题都得到了很好的解决:

降低不同模块开发团队间的协同成本,业务响应更迅捷。由于不同功能模块间进行了清晰、稳定的服务契约的定义,分别负责不同功能的开发团队只要保证对外服务的接口定义不发生变化,内部的业务不管如何调整,都不会影响到其他功能模块。结果是能更加快捷地响应业务的需求。新版本的业务发布周期从开发团队拼命加班加点也就勉强两周迭代(即新版本应用的发布上线)一次降低到相对比较轻松地实现一周两次迭代,其实如果不考虑业务的稳定性,技术上完全支持更加频繁的迭代要求。

大大降低系统间的耦合度以及整体复杂度,各个开发团队可专注于各自的业务模块。当应用被拆分成几个服务中心的架构后,各自开发团队专注于自己负责的业务服务中心的业务,原本需要对整个应用的架构和业务流程有全面的理解,现在转变为只要将自己领域内的业务做到最专业。这样对人员的要求降低了不少,原本一个人的精力需要分布到整个业务流程的各个环节,而现在只需要将精力集中在其中的几个环节中,从理论上一定会对这几个环节的理解和掌控更加精细,从而会提供更专业和稳定的服务。另一个好处则是对加入团队的新员工来说,相对更清晰的业务阵型有利于让这些新员工尽快理解自己负责的业务,从而更快地投入到生产中去。

避免了个别模块的错误给整体带来的影响。业务已经按照影响业务的优先级、变化的频率进行了服务化拆分,各个服务中心之间完全独立部署,这就完全避免了之前那种情况:因为前端广告业务中有一段错误代码,就造成整个平台业务最终受影响。

业务拆分后解放了对单数据库集群连接数的能力依赖。整个平台在被拆分为多个服务中心以及专门负责前端交互的应用模块的同时,在数据层也做了相应的拆分,即每一个核心服务中心都拥有各自独立的数据库,也使得之前迫在眉睫的数据库连接瓶颈问题得到了缓解。根本性地解决这个问题是采用了分布式数据库的技术,在后面会专门进行说明。

做到针对性的业务能力扩容,减少不必要的资源浪费。淘宝平台从改造前的一个WAR包模式到改造后的上百个WAR包方式,在某些业务模块的能力需要进行能力扩容时,我们可以进行“粒度”更细的精准扩容,而不是对整个平台应用进行扩展。淘宝当时的应用实例数量巨大,因为这样一点调整带来的资源节省就是一笔不算小的成本节约。

相关文章
|
2月前
|
Kubernetes Cloud Native 持续交付
云端新纪元:云原生技术重塑IT架构####
【10月更文挑战第20天】 本文深入探讨了云原生技术的兴起背景、核心理念、关键技术组件以及它如何引领现代IT架构迈向更高效、灵活与可扩展的新阶段。通过剖析Kubernetes、微服务、Docker等核心技术,本文揭示了云原生架构如何优化资源利用、加速应用开发与部署流程,并促进企业数字化转型的深度实践。 ####
|
22天前
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####
|
21天前
|
运维 Cloud Native Devops
云原生架构:重塑企业IT的未来####
随着数字化转型浪潮的汹涌,云原生架构凭借其高度灵活、可扩展和高效的特性,正逐步成为企业IT系统的核心。本文将深入探讨云原生架构的核心要素、技术优势以及如何引领企业实现业务创新与敏捷交付。 ####
|
21天前
|
机器学习/深度学习 运维 监控
智能运维在现代IT架构中的转型之路####
【10月更文挑战第29天】 本文旨在探讨智能运维(AIOps)如何成为现代IT架构不可或缺的一部分,通过分析其核心价值、关键技术及实践案例,揭示AIOps在提升系统稳定性、优化资源配置及加速故障响应中的关键作用。不同于传统运维模式的被动响应,智能运维强调预测性维护与自动化处理,为企业数字化转型提供强有力的技术支撑。 ####
65 0
|
18天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
17天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
17天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
37 1
服务架构的演进:从单体到微服务的探索之旅
|
15天前
|
消息中间件 监控 安全
后端架构演进:从单体到微服务####
在数字化转型的浪潮中,企业应用的后端架构经历了从传统单体架构到现代微服务架构的深刻变革。本文探讨了这一演进过程的背景、驱动力、关键技术及面临的挑战,揭示了如何通过微服务化实现系统的高可用性、扩展性和敏捷开发,同时指出了转型过程中需克服的服务拆分、数据管理、通信机制等难题,为读者提供了一个全面理解后端架构演变路径的视角。 ####
38 8
|
16天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
42 5
|
19天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
44 7