架构师是如何炼成的?以天猫APP架构&开发模式升级工程为例

简介:

在集团大数据、算法的背景下,猫客(天猫客户端)首页率先从2015年的坑位运营走向2016年的全面个性化,猫客首页个性化业务点多达50多处,个性化场景大部分通过通过Aladdin(天猫推荐)接入TPP(集团个性化平台)来实现的。走向个性化的同时也接入大量的第三方服务,例如:阿里妈妈钻展、新人礼包等。

image

2016老版本猫客首页问题梳理


image

  • 线上问题定位周期长:首页客户端同学+首页服务端同学+阿拉丁+算法同学。定位参与同学过多,定位问下效率低下
  • 个性化业务支持效率低:首页客户端同学+首页服务端同学+阿拉丁+算法同学。参与同学过多、链路过长,对业务的快速支撑有影响
  • 在走向个性化的同时也接入大量的第三方服务,例如流量宝、新人礼包、超品等,每次接入第三方业务服务,首页服务端都需要做开发发布,频繁的发布导致首页的稳定性变差。

2016老版本猫客首页问题分析


image

  • 从图上看首页服务端同学做大量的服务接入、字段转换、埋点拼接等工作,对服务端同学成长并不利,价值不高
  • 阿拉丁同学在这个链路主要做些TPP算法数据透传的工作,对服务端开发的阿拉丁同学价值同样不高
  • 如果通过“服务端动态化技术方案”,把整个链路价值低环节去掉,让端上同学直接对接业务&算法,这样让端上同学直接了解业务,同时有问题端上同学可以快速定位,同时对业务支持的链路也大大缩减。
  • 把价值低的首页服务端同学解放出来,去建设价值高“服务端动态化”平台。

2017新版猫客首页业务架构


image


为了承接2017新的业务架构,猫客首页研发的服务端动态化平台TAC,后面我们主要介绍动态化平台TAC。


TAC
Tangram App Container

TAC目标

低成本开发与发布流程
低成本搭建与维护开发环境
高稳定性保障

动态化脚本语言选型


image


结论:在目前高并发,低延时,追求极致用户体验的移动会联网背景下,稳定性、性能对服务端来说至关重要,故容器化使用集团很多开发人员精通的java语言。对应目前猫客Tangram,Android开发人员可以完全胜任。

Java语言动态发布: 动态编译、动态加载、热部署

1. 动态编译技术选型


image


结论:为了让开发人员获得的类编译信息、方便问题定位,同时结合集团服务端早普及jdk1.6且目前很多应用已升级1.8,故使用了StandardJavaFileManager进行类的动态编译。

1.  // 1.创建需要动态编译的代码字符串    
2.  String nr = "\r\n"; //回车    
3.  String source = "package temp.com; " + nr +    
4.          " public class  Hello{" + nr +     
5.              " public static void main (String[] args){" + nr +     
6.                  " System.out.println(\"HelloWorld! 1\");" + nr +    
7.              " }" + nr +    
8.          " }";    
9.  // 2.将欲动态编译的代码写入文件中 1.创建临时目录 2.写入临时文件目录    
10.File dir = new File(System.getProperty("user.dir") + "/temp"); //临时目录    
11.// 如果 \temp 不存在 就创建    
12.if (!dir.exists()) {    
13.    dir.mkdir();    
14.}    
15.FileWriter writer = new FileWriter(new File(dir,"Hello.java"));    
16.writer.write(source);    
17.writer.flush();    
18.writer.close();    
19.    
20.// 3.取得当前系统的编译器    
21.JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();    
22.// 4.获取一个文件管理器    
23.StandardJavaFileManager javaFileManager = javaCompiler.getStandardFileManager(null, null, null);    
24.// 5.文件管理器根与文件连接起来    
25.Iterable it = javaFileManager.getJavaFileObjects(new File(dir,"Hello.java"));    
26.// 6.创建编译任务    
27.CompilationTask task = javaCompiler.getTask(null, javaFileManager, null, Arrays.asList("-d", "./temp"), null, it);    
28.// 7.执行编译    
29.task.call();    
30.javaFileManager.close();   

2. 动态加载技术选型

image


结论:结合Tomcat的类加载结构进行,以及类加载双亲委派模型,采用了通过多个classloader来实现类的动态加载


image


3. 类热部署技术选型

  • Java的热部署一直是个比较难解决,无论asm,cglilb也只能实现方法体的热部署,对于整个类文件的修改无法支撑
  • 结合Jvm的垃圾回收机制,采用了重新定义classloader,老的classloader又JVM自动回收,来实现类的热部署

TAC —架构1.0


image

  • TAC包括两部分:TAC控制台、TAC引擎
  • TAC控制台:动态服务开发,测试,发布的流程,类的动态编译在该部分的“预发布”阶段。
  • TAC引擎-协议层:主要是目前HSF支持的RMI和Hessian,通过HSF向外提供服务。
  • TAC引擎-CORE: 主要负责动态服务的加载和执行工作,已经一下安全,监控等职责。类的动态加载、热部署在该部分承载。
  • TAC引擎-数据池:主要承担数据服务接入

TAC流程和和相关流程节点的核心技术

1.TAC控制台-申请阶段

image

2. TAC控制台-开发阶段


image


3.TAC控制台-预发布阶段


image


预发布阶段-类的动态编译


image


4. TAC控制台-开发调试


image


5. TAC控制台-正式发布(将触发TAC引擎-CORE做类的动态加载、热部署)


image


6. TAC引擎-CORE(类的动态加载、热部署)


image


7. TAC控制台-线上回归

image


8. TAC控制台-发布结果

image


目前TAC支持的业务,动态服务已达50+

  • 目前TAC已支撑支持天猫无线业务
  • 猫客-首页精选
  • 猫客-品牌+
  • 猫客-我的
  • 猫客-全链路猜你喜欢
  • 猫客-全链路商品信息一致性
  • 猫客-商品说明书

image

TAC 2.0 规划

  • 微服务独立部署
  • 微服务相互调用
  • TAC混合云部署
  • 引擎Core完全独立
  • 立体监控大盘

2017新首页开发模式


image

2017新猫客首页服务端技术架构图-理想生活上天猫


image


架构师的成长之路,永无止境。如果你对这套架构模式、解决方案,还有其他的想法和建议,也欢迎在文章底部留言,我们一起交流、学习。

本文出自阿里技术公众号,原文链接

相关文章
|
1月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
23 0
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
2月前
|
人工智能 监控 安全
java基于微服务架构的智慧工地监管平台源码带APP
劳务管理: 工种管理、分包商管理、信息采集、班组管理、花名册、零工采集、 现场统计、考勤管理、考勤明细、工资管理、零工签证
287 4
|
3月前
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
阿里云瑶池助力九州通B2B电商平台,完成100%云原生架构升级
九州通数字化转型,通过引入阿里云云原生数据库PolarDB,云原生内存数据库Tair等产品,完美支撑了医药电商平台数据库100%云原生化,实现了统一、高效、标准化和可跟踪的B2B医药平台。
385 4
|
23天前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
|
1月前
|
存储 消息中间件 算法
深度思考:架构师必须掌握的五大类架构设计风格
数据流风格注重数据在组件间的流动,适合处理大量数据。调用返回风格则强调函数或方法的调用与返回,过程清晰明了。独立构件风格让每个构件独立运作,通过接口交互,提升灵活性和可重用性。虚拟机风格则模拟完整系统,实现资源的高效利用。
深度思考:架构师必须掌握的五大类架构设计风格
|
1月前
|
设计模式 架构师 前端开发
架构师进阶篇-什么是架构师
架构师进阶篇-什么是架构师
56 0
|
1月前
uni-app 4.12开发弹出层组件(一)基础架构
uni-app 4.12开发弹出层组件(一)基础架构
19 0
|
2月前
|
监控 安全 物联网
B/S架构智慧工地源码,两个终端:PC后台管理端、APP移动端
智慧工地系统充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术,以PC端,移动端,设备端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳务、设备、物料、安全、环境、能源、资料、计划、质量、视频监控等十大管理环节变得智慧可控。为建设集团、施工企业、政府监管部门等提供一站式工地现场管理信息化解决方案,是一种崭新的工程现场一体化管理模式。
31 0