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

简介:


宗心:淘宝无线事业部资深开发工程师,手机淘宝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

 

 

 

相关文章
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
35 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
2025年国内工单系统推荐:技术架构、场景适配与行业实践
分析了智能化升级、大数据驱动、云原生架构及全渠道融合四大技术趋势,从功能适配性、易用性、集成能力、安全性和性价比五个维度指导企业选型,并推荐合力亿捷等三家系统的优劣对比,结合电商和制造行业的实际案例,帮助企业提升客户服务水平与竞争力。
68 11
2025年国内工单系统推荐:技术架构、场景适配与行业实践
基于阿里云的开源应用智能管理架构设计与工程实践
本文以Websoft9技术方案为例,探讨企业级应用管理的范式。通过解析开源应用管理面临的部署复杂性、运维低效性和知识碎片化三大挑战,提出基于阿里云的三层架构:智能应用管理门户、核心功能层和基础设施层。文章详细阐述了应用编排标准化(IaC实践)、智能运维体系构建及知识资产数字化的技术实现路径,并结合金融与制造行业的案例,展示解决方案的实际效果。最后提供开发者资源与工具链支持,助力企业高效管理应用。
87 1
支持百万人超大群聊的Web端IM架构设计与实践
本文将回顾实现一个支持百万人超大群聊的Web端IM架构时遇到的技术挑战和解决思路,内容包括:通信方案选型、消息存储、消息有序性、消息可靠性、未读数统计。希望能带给你启发。
33 0
支持百万人超大群聊的Web端IM架构设计与实践
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。

热门文章

最新文章

  • 1
    TaoAvatar:手机拍出电影级虚拟人!阿里3D高斯黑科技让动捕设备下岗
    94
  • 2
    SpatialLM:手机视频秒建3D场景!开源空间认知模型颠覆机器人训练
    60
  • 3
    算法系统协同优化,vivo与港中文推出BlueLM-V-3B,手机秒变多模态AI专家
    44
  • 4
    【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
    79
  • 5
    【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    62
  • 6
    【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
    204
  • 7
    美团面试:手机扫描PC二维码登录,底层原理和完整流程是什么?
    151
  • 8
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
    1908
  • 9
    【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    47
  • 10
    ClKLog支持手机端查询统计数据啦!
    51