手机淘宝客户端架构探索实践

简介:


宗心:淘宝无线事业部资深开发工程师,手机淘宝iOS架构组开发工程师,2012年底参与开发手机淘宝iOS3.0版本,经历大小几十个版本的变迁,针对手机淘宝总体设计架构,hybrid框架解决方案,插件化解决方案以及手机淘宝核心业务组件均有参与和贡献。(阿里巴巴无线事业部:负责手机淘宝并为阿里巴巴各条无线产品线提供基础技术和设施)。

2014年手机淘宝经历了自诞生以来最大规模的一次重构。经历了去年业务的爆炸性增长,以及性能稳定性等多方面挑战后,手机淘宝在开发模式,客户端架构上面都必须做到轻量,透明,延展,敏捷。本内容会重点介绍手机淘宝iOS基础架构的第三代架构如何演进落地,实现多条业务线间独立并行、研发效率提升的目标,以及如何应对未来可能变化。以下是关于手机淘宝客户端架构探索实践的精彩内容:

 

                            图1

  如图1所示,手机淘宝从1.0用单工程编写开始,东西非常简陋;到2.0为索引许多三方库的庞大的单工程;再到3.0打破了单工程开发模式实现业务复用,包括承载充值,聚划算,航旅等业务,由于业务越来越多,我们想到了插件化的方案,就是制定一套业务的规则和标准,让这些插件按照我们的标准,我们提供的库进行开发。

我们遇到了产品和技术上的挑战和开发的痛点,协同方式上的迭代依赖和分支管理困难,合并依赖关系过于复杂!调试自测效率低——模块依赖下的不稳定因素,业务多,回归成本大,测试资源严重不足!其他模块引起的不稳定性因素。发布的灵活性不足——版本发布无法快速响应,线上已发布版本稳定性,灰度以及线上版本crash难以修复!由于很多APP集成到客户端,各个业务的对接有一定的难度,自己的业务开发完全不够支持这些功能,十余个团队的代码整合也不易,业务持续增长的量变将会导致质变。

2014年是手机淘宝自诞生以来最大规模的底层重构,改变了开发方式、工程结构、结构模型、打包方式。我们将围绕开发效率和性能稳定性等一系列问题探索新的路线,主要有:

工程拆分——支持多团队并行开发

多个业务团队更改一个或多个文件,交叉管理时,底层的东西不稳定就没有办法进行上层开发,所以首先进行业务解耦;其次要进行独立调试;最后修改配置完成集成。拆分的结果如图所示,实践证明,工程拆分以后,整体业务的盆跑速度有了明显提升。

工程拆分分为三个阶段:

开发阶段:提供稳定的开发环境(底层库,接口),各个业务方独立开发;

测试阶段:单独业务独立打包,针对该业务的测试回归;

集成阶段:修改podfile进行集成测试,针对整体流程做回归。

 

架构重构——重新梳理容器和总线规则。

  架构重构需要解决几个问题:迭代开发,并行开发能力差;

耦合严重,核心功能(URL导航)复杂;试错成本过高,增加减少业务带来的成本;快速迭代下的稳定性问题。架构重构的指导思想如图所示,我们制定规范,让各个业务方自己运行,依照规范直接集成进来或出去。核心的架构在容器层,初始化在容器层统一管理,总线是一个核心的解耦方案,通过图2中三种方式进行解耦。容器之上下全部为bundles,每一个业务全部做成bundle以后,当耦合度解的很好的时候,任何的bundles都可以拼成一个APP。

                               图2

用总线的方式解除耦合,制定标准。

URL总线(跨平台统一URL寻址方式):三平台统一URL,自动降级,中心分发(支持hook)。

服务总线 :根据服务接口提供稳定服务。

消息总线 :中心分发,按需加载。

总线也是为了分而治之的原则,各个业务方对其他业务方都是透明的,减少了以前全在一起的中心总线的复杂度问题。只需要遵守规则,不关心底层/其他业务实现。图3是一个总线图,

                                         图3

减少新业务接入/移除成本:

标准化:统一的通信调用标准,bundle间互通的基础;无法回避的瘦身问题。

灵活性:Bundle自由组装(淘宝生活,码上淘),中间件基础库自由引入。

图4为一个bundlapp,将手机淘宝等的部分bundles拿出来作一个配置 ,将业务bundles,底层bundles作一个重组,组出一个app手机窗口,目的是做一个bundle的复用。

 

                           图4

及时响应线上问题图5所示

                         图5

 

配套工具——使用有力工具增加开发效率。

  工程拆分遇到的问题:频繁的更换spec;源码引入造成的pod update缓慢等原因;开发阶段集成阶段等问题。

工具解决:摩天轮自动打包平台(自动生成specframework引入);开发-集成-灰度,多阶段管理。

其他工具解决的问题:核心链路性能监控平台;Crash分析平台。

  6月初上线以来,重构结果为:集成 Bundle30+;改造为服务:10+(登录、缓存、搜索组件);Hot Patch 修复线上严重故障 10+ 起;Patch 最大6KB,大部分不到1KBiOS)。最大的阵痛是底层依赖迁移引起的编译失败,主要是由于底层库的pod依赖规则不同步造成问题。

  关于重构之后的未来探讨如图6所示

                             图6



 

                                                                                PPT下载地址:http://club.alibabatech.org/resource_detail.htm?topicId=153

 

 

 

相关文章
|
2天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
19 5
|
6天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
4天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
4天前
|
消息中间件 缓存 Cloud Native
云原生架构下的性能优化实践与挑战####
随着企业数字化转型的加速,云原生架构以其高度解耦、弹性伸缩和快速迭代的特性,成为现代软件开发的首选模式。本文深入探讨了云原生环境下性能优化的关键策略与面临的主要挑战,通过案例分析,揭示了如何有效利用容器化、微服务、动态调度等技术手段提升应用性能,同时指出了在复杂云环境中确保系统稳定性和高效性的难题,为开发者和架构师提供了实战指南。 ####
15 3
|
4天前
|
运维 Kubernetes Cloud Native
深入理解云原生架构:从理论到实践
【10月更文挑战第38天】本文将引导读者深入探索云原生技术的核心概念,以及如何将这些概念应用于实际的软件开发和运维中。我们将从云原生的基本定义出发,逐步展开其背后的设计哲学、关键技术组件,并以一个具体的代码示例来演示云原生应用的构建过程。无论你是云原生技术的初学者,还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和实操指南。
|
4天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
15 3
|
4天前
|
运维 Kubernetes Cloud Native
云原生技术在现代应用架构中的实践与挑战####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在实际项目中的应用案例,分析了企业在向云原生转型过程中面临的主要挑战及应对策略。不同于传统摘要的概述性质,本摘要强调通过具体实例揭示云原生技术如何促进应用的灵活性、可扩展性和高效运维,同时指出实践中需注意的技术债务、安全合规等问题,为读者提供一幅云原生技术实践的全景视图。 ####
|
7天前
|
监控 API 持续交付
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势、面临的挑战以及最佳实践策略。不同于传统的单体应用,微服务通过细粒度的服务划分促进了系统的可维护性、可扩展性和敏捷性。文章首先概述了微服务的核心概念及其与传统架构的区别,随后详细阐述了构建微服务时需考虑的关键技术要素,如服务发现、API网关、容器化部署及持续集成/持续部署(CI/CD)流程。此外,还讨论了微服务实施过程中常见的问题,如服务间通信复杂度增加、数据一致性保障等,并提供了相应的解决方案和优化建议。总之,本文旨在为开发者提供一份关于如何在现代后端系统中有效采用和优化微服务架构的实用指南。 ####
|
9天前
|
消息中间件 设计模式 运维
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过实际案例分析,揭示了其在提升系统灵活性、可扩展性及促进技术创新方面的显著优势。同时,文章也未回避微服务实施过程中面临的挑战,如服务间通信复杂性、数据一致性保障及部署运维难度增加等问题,并基于实践经验提出了一系列应对策略,为开发者在构建高效、稳定的微服务平台时提供有价值的参考。 ####
|
9天前
|
Cloud Native API 云计算
云原生架构的深度探索与实践####
本文深入探讨了云原生架构的核心概念、技术特点及其在现代软件开发中的应用实践。通过分析云原生架构如何促进企业数字化转型,提升业务敏捷性与可扩展性,本文旨在为读者提供一个全面而深入的理解框架。我们将从云原生的定义出发,逐步深入到其关键技术组件、最佳实践案例及面临的挑战与解决方案,为开发者和企业决策者提供宝贵的参考与启示。 ####