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

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

作者: 技术边城 | 来源:发表于2018-06-11 16:07 被阅读36次

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

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

    ​线上问题定位周期长:首页客户端同学+首页服务端同学+阿拉丁+算法同学。定位参与同学过多,定位问下效率低下

    个性化业务支持效率低:首页客户端同学+首页服务端同学+阿拉丁+算法同学。参与同学过多、链路过长,对业务的快速支撑有影响

    在走向个性化的同时也接入大量的第三方服务,例如流量宝、新人礼包、超品等,每次接入第三方业务服务,首页服务端都需要做开发发布,频繁的发布导致首页的稳定性变差。​

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

    从图上看首页服务端同学做大量的服务接入、字段转换、埋点拼接等工作,对服务端同学成长并不利,价值不高

    阿拉丁同学在这个链路主要做些TPP算法数据透传的工作,对服务端开发的阿拉丁同学价值同样不高

    如果通过“服务端动态化技术方案”,把整个链路价值低环节去掉,让端上同学直接对接业务&算法,这样让端上同学直接了解业务,同时有问题端上同学可以快速定位,同时对业务支持的链路也大大缩减。

    把价值低的首页服务端同学解放出来,去建设价值高“服务端动态化”平台。

    2017新版猫客首页业务架构

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

    TAC ( Tangram App Container )

    TAC目标

    低成本开发与发布流程

    低成本搭建与维护开发环境

    高稳定性保障

    动态化脚本语言选型

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

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

    1. 动态编译技术选型

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

    1.  // 1.创建需要动态编译的代码字符串    

    2.  String nr = " "; //回车    

    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 =newFile(System.getProperty("user.dir") + "/temp"); //临时目录

    11.// 如果  emp 不存在 就创建    

    12.if(!dir.exists()) {

    13.    dir.mkdir();    

    14.}    

    15.FileWriter writer =newFileWriter(newFile(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(newFile(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. 动态加载技术选型

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

    3. 类热部署技术选型

    Java的热部署一直是个比较难解决,无论asm,cglilb也只能实现方法体的热部署,对于整个类文件的修改无法支撑

    结合Jvm的垃圾回收机制,采用了重新定义classloader,老的classloader又JVM自动回收,来实现类的热部署

    TAC —架构1.0

    ​◆ TAC包括两部分:TAC控制台、TAC引擎

    ​◆ TAC控制台:动态服务开发,测试,发布的流程,类的动态编译在该部分的“预发布”阶段。

    ​◆ TAC引擎-协议层:主要是目前HSF支持的RMI和Hessian,通过HSF向外提供服务。

    ​◆ TAC引擎-CORE: 主要负责动态服务的加载和执行工作,已经一下安全,监控等职责。类的动态加载、热部署在该部分承载。

    ​◆ TAC引擎-数据池:主要承担数据服务接入

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

    1.TAC控制台-申请阶段

    2. TAC控制台-开发阶段

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

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

    ​​

    4. TAC控制台-开发调试

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

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

    7.  TAC控制台-线上回归

    8.  TAC控制台-发布结果

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

    ​◆ 目前TAC已支撑支持天猫无线业务

    ​◆ 猫客-首页精选

    ​◆ 猫客-品牌+

    ​◆ 猫客-我的

    ​◆ 猫客-全链路猜你喜欢

    ​◆ 猫客-全链路商品信息一致性

    ​◆ 猫客-商品说明书

    TAC 2.0 规划

    ◆ 微服务独立部署

    ◆ 微服务相互调用

    ◆ TAC混合云部署

    ◆ 引擎Core完全独立

    ◆ 立体监控大盘

    2017新首页开发模式

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

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

    关注「技术边城」 把握前沿技术脉搏

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/dsfheftx.html