架构师是如何炼成的?以天猫APP架构&开发模式升级工程为例
在集团大数据、算法的背景下,猫客(天猫客户端)首页率先从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 = new File(System.getProperty("user.dir") + "/temp"); //临时目录
11.// 如果 emp 不存在 就创建
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架构&开发模式升级工程为例相关推荐
- 架构师是如何炼成的?以天猫APP架构开发模式升级工程为例
在集团大数据.算法的背景下,猫客(天猫客户端)首页率先从2015年的坑位运营走向2016年的全面个性化,猫客首页个性化业务点多达50多处,个性化场景大部分通过通过Aladdin(天猫推荐)接入TPP( ...
- 【无套路送书】架构师是怎样炼成的?
大家好,我是若川.不知道这是今年第几次送书了,前三次分别是:第一次,第二次,第三次.本次<架构师的自我修炼>,非常珍贵,我争取到了2本送给大家,送书规则见文末.可以参与下,愿等花开. 五一 ...
- 牛逼的架构师是怎么炼成的?——阅读笔记03
原文链接:https://mp.weixin.qq.com/s/n5Mr-aPoGFwBelEqte-oUA 架构师只是功底深厚的程序员,千万不要成为不会写代码的架构师. 架构师应该是立足于技术和业务 ...
- 我对架构师的理解(如何成为一个合格的架构师)
我对架构师的理解(如何成为一个合格的架构师) 引子: 在讨论架构之前,我们先上道菜,青椒土豆肉丝,这道小菜味道还是不错的,自私点了,不考虑您是否喜欢,今天就上它了. 准备原材料:食用油.青椒.土豆.肉 ...
- 阿里云混合云首席架构师张晓丹:政企混合云技术架构的演进和发展
近日,阿里云混合云平台首席架构师张晓丹分享了 IT 架构技术,并对政企混合云技术架构的发展进行展望. 云计算经历了十几年的发展,从被认为是"新瓶装旧酒"而备受质疑,到广泛应用于消费 ...
- 【SDCC讲师专访】专访架构师薛珂:弹性调度平台Saturn的架构设计
编者按:每个人的成长曲线不同,有的人在研究生之时就已有相当知名的产品和框架,从而在接下来的工作中一路顺风顺水,有的人却需要经历一个又一个的坑才能成长,不管是前者的聪明高效,还是后者的笨鸟先飞,他们都是 ...
- 一个15年的架构师谈“如何成为一名优秀的解决方案架构师”
摘要:且听有着15年软件研发.架构经验的华为云MVP魏群娓娓道来,如何成为一名合格的解决方案架构师? 架构师,这是一个在技术人员,特别是软件开发人员眼中具有神圣色彩的岗位. 团队中有了架构师,就是有了 ...
- 【IT技术】阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路
专访阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路 原文作者:pipihappy8888 http://www.itpub.net/thread-1887486-1-1.html 如果说淘 ...
- 链家网前端总架构师杨永林:我的8年架构师成长之路
杨永林,人称"教主",八年前端开发经验,原新浪微博前端技术专家,现任链家网前端总架构师.长期研究Web访问性能优化和前端框架搭建. 作为初始团队成员,教主参与了新浪微博所有PC版本 ...
最新文章
- java地图瓦片_百度地图瓦片层级范围对照表
- [C# 项目实战]: 制作一个备忘录(经典)
- 【c】【报错解决】incompatible implicit declaration
- ImageIO 框架详细解析
- Python爱心表白代码
- WebStorm汉化包下载(以及Android Studio,IntelliJIDEA等的汉化包下载)
- java 车牌识别系统_java车牌识别系统 自动识别车牌系统的工作原理
- Thinkpad8在Windows10下假关机的解决办法
- C语言气温连续上升的天数,广西多地连阴雨天数破纪录
-
广西首页
-中国天气网...
- 什么是VHDL?一文带你了解VHDL语言
- 小米手机任意版本MIUI安装Google Play服务
- 【Pytorch】netron可视化——靠谱的使用方法
- 谷歌浏览器设置缓存方法
- 《Groovy官方教程》Grape依赖管理器
- dq坐标系下无功功率表达式_一种单相脉冲整流器电网电压估算方法与流程
- 什么是乐观锁和悲观锁
- 针孔相机标定-基于张正友标定法
- MATLAB数字图像处理(一)
- IT行业金饭碗?数据库工程师凭什么
- js加密+c#后台解密
热门文章
- 微信小程序 - DZMDrawingBoard - (Canvas封装的画板、手写签名、生成图片、保存相册...库)
- 什么是SPI的bitbang / bit bang / bit-bang / bitbanging
- win8 网络 连接计算机名称,Win8系统宽带连接自动连接设置教程
- executeSql之执行增删改查
- 筑泰防务云EMM移动管理,企业移动安全管理的捍卫者
- 南京大学软件学院的考研心得
- 类实例:个人银行综合实例
- 再刷《请回答1988》,我在想......
- 几种获取Android手机唯一id的方法
- 不用AI的彩妆店不是好专柜?