2016老版本猫客首页业务架构

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

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

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

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

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

2017新版猫客首页业务架构

为了承接2017新的业务架构、业务的快速响应,猫客首页研发的服务端动态化平台TAC支持业务的快速变化,后面我们主要介绍动态化平台TAC

TAC(Tangram App Container)

TAC目标

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

动态化脚本语言选型

语言 | 优点 | 缺点 :-: | :-: | :-: Java | 开发资源多且精通,稳定性好,性能调优工具(Btrace,Arthas等)比较完善 | Java语言动态编译较慢,一般需要几秒钟 Groovy/Jruby/Scala | 灵活性好、更加轻便,支持JVM的热部署 | 稳定性差,脚本相对调优、问题定位来说更加黑盒,相关调试问题定位工具不完善

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

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

1. 动态编译技术选型

编译方式 优点 缺点    
javac命令进行编译 jdk版本不受限制 不能有效的得到标准的输入、输出信息,jdk版本不能回退    
StandardJavaFileManager 编译 Java 源程序 使用 StandardJavaFileManager 编译 Java 源程序 Java SE6 以上版本支持,jdk版本不能回退 使用 StandardJavaFileManager 编译 Java 源程序 Java SE6 以上版本支持,jdk版本不能回退。

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

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

2. 动态加载技术选型

| 方案 | 优点 | 缺点 | :-: | :-: | :-: | 全局ClassLoader加载器 | 实现成本低 | 统一个classloader,无隔离性 | 多个classloader | 通过classloader相互隔离,互不影响 | 实现成本高 结论:结合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控制台-申请阶段

  • 开发人员填写“服务仓库”、“服务描述”申请开发代码库
  • TeamLeader审批之后,自动为开发人员创建开发代码库,以及初始 化好开发环境,之后进入“开发阶段”

TAC控制台-开发阶段

  • 过程见下图“红色文字描述”

TAC控制台-预发布阶段

  • 过程见下图“红色文字描述”

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

TAC控制台-开发调试

  • 过程见下图“红色文字描述”

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

  • 过程见下图“红色文字描述”

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

TAC控制台-线上回归

  • 过程见下图“红色文字描述”

TAC控制台-发布结果

  • 过程见下图“红色文字描述”

TAC 2.0 规划

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

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

  • 目前TAC已支撑支持天猫无线业务
    • 猫客-首页
    • 猫客-闪屏
    • 猫客-品牌+
    • 猫客-我的
    • 猫客-全链路猜你喜欢
    • 猫客-商品说明书
    • 猫客-全链路商品信息一致性(猫客首页、Detail、搜索等)

2017-全新首页开发模式

2017-全新首页架构

  • 目前猫客大首页基础设施正在快速建设、升级中,挑战和机会都很多,欢迎有志之士加入天猫无线,一同建设。