在阿里集团大数据、算法的背景下,天猫客户端(后文简称:猫客)首页率先从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 = "\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(nullnullnull);

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. 动态加载技术选型

结论:结合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改版之首页架构开发模式全面升级相关推荐

  1. 苹果核 - 天猫APP改版之全新大首页架构开发模式全面升级-TAC

    转载自苹果核,原文链接:http://pingguohe.net/2017/08/02/tac-1.0.html 对tangram有兴趣的可以看看:http://pingguohe.net/2017/ ...

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

    在集团大数据.算法的背景下,猫客(天猫客户端)首页率先从2015年的坑位运营走向2016年的全面个性化,猫客首页个性化业务点多达50多处,个性化场景大部分通过通过Aladdin(天猫推荐)接入TPP( ...

  3. 普元王文斌:微服务架构开发模式需要全栈团队

    容器技术的发展,让微服务的构建变得容易,例如普元公司正在使用Kubenetes作为一个底层的容器调度平台来支撑上层微服务的部署运行.日前,普元普元基础设施架构师王文斌接受CSDN记者专访,介绍了他对微 ...

  4. 【三种常见架构开发模式:MVC、MVP、MVVM】

    写目录 1.常见的三种开发模式 (1)MVC模式(感觉重点在view) (2) MVP模式 (感觉重点在 Presenter) (3)MVVM模式(感觉重点在VM,viewModel) 1.常见的三种 ...

  5. 三层调用关系_你真正的了解MVC三层架构开发模式吗

    说起应用分层,controller,service, mapper三层.很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了, ...

  6. APP系统开发模式一共有哪几种?

    App的开发基于硬件设备所运行的操作系统,现在主流的移动操作系统有苹果的iOS.google 的Android和微软的Windows Phone 8 等,主要通过运行应用的硬件和设备的其他系统约束来区 ...

  7. 原生 APP、Web、混合 APP,三种开发模式有何不同?

    前言 原生 App 又称Native App,该开发针对 IOS.Android.Windows 等不同的手机操作系统要采用不同的语言和框架进行开发:无论是从开发难度,价格还是周期来看,原生开发都更复 ...

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

    在集团大数据.算法的背景下,猫客(天猫客户端)首页率先从2015年的坑位运营走向2016年的全面个性化,猫客首页个性化业务点多达50多处,个性化场景大部分通过通过Aladdin(天猫推荐)接入TPP( ...

  9. Java生鲜电商平台-App系统架构开发与设计

    Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计 2.Java生鲜电商平台-App架构设计经验谈: ...

最新文章

  1. C++知识点总结(纯C++!!)
  2. bootstrap modal使用方法
  3. Python3基础教程:可变参数和关键字参数
  4. ACL 2020 《Cross-Modality Relevance for Reasoning on Language and Vision》论文笔记
  5. python控制流_Python学习--控制流
  6. C Runtime Library 的来历
  7. c++11中的智能指针
  8. js_!和!!的使用
  9. openstack mitaka 完整安装详细文档(亲测,花了3天时间)
  10. 想学java编程从哪入手_初学编程从哪方面入手?
  11. Android Studio Library生成jar包问题总结
  12. php 5.4中php-fpm 的重启、终止操作命令
  13. 2012-08-20 → 2012-08-26 周总结
  14. VSCode配置java代码运行环境
  15. 2018年小美赛C题参赛经历
  16. 外挂技术之-检测和反检测
  17. 计算机设计大赛南京邮电大学,喜讯:我校信息学子在中国大学生计算机设计大赛中再创佳绩...
  18. jsp房屋出租管理系统带合同
  19. Cisco QoS配置说明(CBWFQ/LLQ/PQ/CQ/WFQ)
  20. 跟铁拐李李老师学习工作流的第一天

热门文章

  1. 联想指纹识别程序报错处理
  2. 明日方舟 -19年我最喜欢的手游
  3. 20年来最大单笔收购,百度豪娶YY直播能实现1+1>2?
  4. 计算机基础知识(基础入门小白专属)
  5. win7 64位+python3+tensorflow安装
  6. 北斗终端,北斗短报文终端,北斗指挥机,北斗终端,北斗通信卡的区分和定义
  7. Android高仿网易新闻客户端之首页
  8. emif接口速率问题_基于EMIF接口的双速率1553B总线设备通信方法与流程
  9. 虚拟机设置--draft
  10. 12月3日智慧健康研讨会报名开启!英特尔中国研究院、联想研究院赋能中心以及TQ集团Franka三方专家聚焦智慧健康领域