苹果核 - 天猫APP改版之全新大首页架构开发模式全面升级-TAC
转载自苹果核,原文链接:http://pingguohe.net/2017/08/02/tac-1.0.html
对tangram有兴趣的可以看看:http://pingguohe.net/2017/03/30/what-is-tangram.html
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-全新首页架构
- 目前猫客大首页基础设施正在快速建设、升级中,挑战和机会都很多,欢迎有志之士加入天猫无线,一同建设。
苹果核 - 天猫APP改版之全新大首页架构开发模式全面升级-TAC相关推荐
- 天猫APP改版之首页架构开发模式全面升级
在阿里集团大数据.算法的背景下,天猫客户端(后文简称:猫客)首页率先从2015年的坑位运营走向2016年的全面个性化,猫客首页个性化业务点多达50多处,个性化场景大部分通过通过Aladdin(天猫推荐 ...
- 武汉理工大学 大数据架构与模式期末复习
武汉理工大学 大数据架构与模式期末复习 在发现学长学姐们上一届是大作业结课而我们是考试结课之后整理复习的结果,可能不会很全,感觉最后老师稍微划知识点的时候没有为难我们(),总之大体是这么些考试内容,也 ...
- 大数据架构和模式(一)——大数据分类和架构简介
概述 大数据可通过许多方式来存储.获取.处理和分析.每个大数据来源都有不同的特征,包括数据的频率.量.速度.类型和真实性.处理并存储大数据时,会涉及到更多维度,比如治理.安全性和策略.选择一种架构并构 ...
- 大数据架构和模式(五):利用大数据识别保险行业中的欺诈业务案例
大数据架构和模式(五):利用大数据识别保险行业中的欺诈业务案例 [复制链接] pig2 1232 主题 2069 帖子 1万 积分 超级版主 积分 11358 收听TA 发消息 电梯直达 楼主 ...
- 架构师是如何炼成的?以天猫APP架构开发模式升级工程为例
在集团大数据.算法的背景下,猫客(天猫客户端)首页率先从2015年的坑位运营走向2016年的全面个性化,猫客首页个性化业务点多达50多处,个性化场景大部分通过通过Aladdin(天猫推荐)接入TPP( ...
- App原生、混合、纯WEB开发模式的优劣分析
什么叫做原生App? 什么是混合app? 什么是Web App开发? Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统 ...
- 快乐大掌柜源码--快乐大掌柜系统开发模式介绍
关于参加广告电商的企业来说,广告电商是一个长时间的过程,在这个过程中企业要拟定长时间的交际电商发展规划,而不是急于求成.企业的定位要精确,"交际电子商务"给了企业更多的直接触摸方针 ...
- 大数据架构和模式,第 2 部分
如何知道一个大数据解决方案是否适合您的组织 简介 在确定投资大数据解决方案之前,评估可用于分析的数据:通过分析这些数据而获得的洞察:以及可用于定义.设计.创建和部署大数据平台的资源.询问正确的问题是一 ...
- “真快乐”APP改版开启2.0模式 “乐·购新升级”打造新零售变革样板
10月21日,以"乐·购新升级"为主题的"真快乐"APP改版试运营发布会在京召开.本次发布会上,"真快乐"APP改版试运营,重点打造&quo ...
最新文章
- java中map使用非系统类作为key
- Unity-WIKI 之 AnimationToPNG
- Android将联系人读取到LISTVIEW中遇到的问题!
- 如何在Hibernate中维护表的历史记录
- mybatis通用mapper_全网最全Mapper解析,附实操代码帮你更好理解
- DecimalFormat
- UI设计灵感|不同形式的图标设计
- android安全攻防实践_网络攻防小组招新,等待优秀的你!
- 诺顿企业版安装找不到路径
- CentOS cp 复制隐藏文件提示 cp: cannot stat ?.xxx*?. No such file or directory
- vue前端怎么导出图片_Vue将页面导出为图片或者PDF
- 以太坊漏洞分析————4、底层函数误用漏洞
- Hbuilder快捷键教程
- 办公最常用哪个邮箱?怎么申请商务邮箱?
- Sun公司JES服务器软件已支持更多操作系统
- idea下git 错误 error: unable to read askpass response from 'C:\Users\ASUS\.IntelliJIdea2019.1\system\tm
- Android 10.0 系统禁用深色主题背景功能
- 中国电子学会2021年03月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)
- java特种兵 怎么样_java特种兵
- Mac 搭建本地Apache服务器