在集团大数据、算法的背景下,猫客(天猫客户端)首页率先从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(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. 动态加载技术选型

结论:结合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架构&开发模式升级工程为例

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

  2. 【无套路送书】架构师是怎样炼成的?

    大家好,我是若川.不知道这是今年第几次送书了,前三次分别是:第一次,第二次,第三次.本次<架构师的自我修炼>,非常珍贵,我争取到了2本送给大家,送书规则见文末.可以参与下,愿等花开. 五一 ...

  3. 牛逼的架构师是怎么炼成的?——阅读笔记03

    原文链接:https://mp.weixin.qq.com/s/n5Mr-aPoGFwBelEqte-oUA 架构师只是功底深厚的程序员,千万不要成为不会写代码的架构师. 架构师应该是立足于技术和业务 ...

  4. 我对架构师的理解(如何成为一个合格的架构师)

    我对架构师的理解(如何成为一个合格的架构师) 引子: 在讨论架构之前,我们先上道菜,青椒土豆肉丝,这道小菜味道还是不错的,自私点了,不考虑您是否喜欢,今天就上它了. 准备原材料:食用油.青椒.土豆.肉 ...

  5. 阿里云混合云首席架构师张晓丹:政企混合云技术架构的演进和发展

    近日,阿里云混合云平台首席架构师张晓丹分享了 IT 架构技术,并对政企混合云技术架构的发展进行展望. 云计算经历了十几年的发展,从被认为是"新瓶装旧酒"而备受质疑,到广泛应用于消费 ...

  6. 【SDCC讲师专访】专访架构师薛珂:弹性调度平台Saturn的架构设计

    编者按:每个人的成长曲线不同,有的人在研究生之时就已有相当知名的产品和框架,从而在接下来的工作中一路顺风顺水,有的人却需要经历一个又一个的坑才能成长,不管是前者的聪明高效,还是后者的笨鸟先飞,他们都是 ...

  7. 一个15年的架构师谈“如何成为一名优秀的解决方案架构师”

    摘要:且听有着15年软件研发.架构经验的华为云MVP魏群娓娓道来,如何成为一名合格的解决方案架构师? 架构师,这是一个在技术人员,特别是软件开发人员眼中具有神圣色彩的岗位. 团队中有了架构师,就是有了 ...

  8. 【IT技术】阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路

    专访阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路 原文作者:pipihappy8888 http://www.itpub.net/thread-1887486-1-1.html 如果说淘 ...

  9. 链家网前端总架构师杨永林:我的8年架构师成长之路

    杨永林,人称"教主",八年前端开发经验,原新浪微博前端技术专家,现任链家网前端总架构师.长期研究Web访问性能优化和前端框架搭建. 作为初始团队成员,教主参与了新浪微博所有PC版本 ...

最新文章

  1. 分享:Gunicorn 0.17 发布,Python HTTP 服务器
  2. Windows 7 with SP1中英文原版MSDN下载汇总(全版本收录完毕)
  3. leetcode算法题--数组中数字出现的次数
  4. java怎么把随机数放入数组_Java学习:集合的使用与数组的区别
  5. qt 在点击菜单下的动作之后获取该菜单的名称
  6. Linux sed 删除行命令常见使用详解
  7. 四十六、Qt网络(六)UDP
  8. 查看是否安装android sdk
  9. OpenTSDB使用Grafana的Filters type注解
  10. AndroidStudio_安卓原生开发_什么是AndroidStudio NDK ---Android原生开发工作笔记140
  11. 闪存技术瓶颈仍难以克服 注定只是过客?
  12. 命令级的python静态资源服务。
  13. 如何理解Spring中的IOC和AOP
  14. spark架构设计编程模型 02
  15. MYSQL异常处理日志:主从库同步延迟时间过长的分析
  16. assimp android build,Android assimp编译及引用
  17. 计算机单位换换算,时间单位换算表与计算机单位换算
  18. 北京链家买二手房的经历与感受
  19. WorldFirst澳元收款账户上线,人民币提现当天到账!
  20. python HEIC2jpg 压缩

热门文章

  1. QApplicationQPushButton
  2. 2013 8.26   总结记录下,别忘了哈
  3. 远程桌面的分辨率最大不会超过本机真实物理机的分辨率
  4. 微软10月起将向安全厂商提前告知安全补丁内容
  5. DataGrid中,读取数据库中的图片并绑定数据列或磁盘目录中的图片,用输出流方式...
  6. RxSwift 小记 Error Handling Operators(catchError,retry)
  7. 爬虫,如何防止被ban之策略大集合
  8. wxWidgets3.0.2媒体播放器
  9. C#函数式编程之可选值
  10. 64位的机器上VS2008不能使用SharePoint的workflow template