第1页
后SOA主义: 微服务架构演化之路
欧阳辰
2016.4.23
第2页
2016-4-23
第3页
我是谁?
欧阳辰 开发主管
高级开发经理/工程师
研发主管/架构师
企业软件
• >15年的软件研发经验 • www.ouyangchen.com
互联网
10年
移动互联网
第4页
今天的话题
• 对软件架构的几个观点 • 几个架构演化的历程 • 微服务实践的血泪之歌 • 让解耦更加彻底一些 • 如何让架构“活在当下”
第5页
对于架构的主要观点
• 一切抛开业务的架构设计都是耍流氓 • 软件架构是学习和演化,不是蓝图 • “过往不念,当下不杂,未来不迎” • 微服务架构的未来不是梦
业务 数据
工程
第6页
小米广告的架构演化
流量10X 业务线10X
第7页
小米广告的技术架构
LVS Nginx
Z
o Java
Paoding-Rose
o
k e
Thrift
Lucenc e
e
p
e r
MySQL
HBase
HBase HDFS
Hive/Pig/Impal a
Hadoop
JIRA
Maven
Git,Nexus
Open-Falcon
Redis
HBase
Kafka
Storm Druid
Spark
XBox
Amazon AWS
MARATHON/Mesos /Docker
第8页
小米广告平台演化阶段
1. “加”:新业务疯狂上线,耦合 2. “减”:服务化,解耦 3. “乘”:微创新,引入新技术 4. “除”:抽象,平衡
第9页
什么是架构?
• 软件架构一般来说组织成视图(逻辑,设 计,部署等)(IEEE)
• 所有架构都是设计,不是每个设计都是 架构。架构代表着发展一个系统的重要 设计决策,这个重要性是通过变化引入 成本来衡量的(Grady Booch, 06)
• “一切圣贤,皆以无为法而有差别” (金刚经)
• 架构是学习和演化,不是蓝图(Chen)
第10页
架构师和建筑师
第11页
什么是业务?
• 业务就是Business: 收入-成本=利润 • Shareholders: 业务,用户,客户,领域专家 • 码农的工作分为三种:
• 提升收入 (新业务等) • 降低成本(开发成本,变化成本等) • 提供洞察 (数据的商业价值)
第12页
水平扩展一切(Scale out Everything)
《大型网站技术架构》
第13页
架构演化:Stack Overflow-Scale Up
1.这个软件架构是很"烂"(Boring)的 2.保持一个很“烂"的架构是非常有趣 的
“未来不迎”!
第14页
你需要微服务化么?
理想很丰满,现实很骨感!
并行化,异步调用
Front Door/View Middle Tier Database
Front Door
Front Door
Service Service
Service
Service
Service Service
Service Service
Database
Database
第15页
架构的演化—搜索引擎
收入->相关性:NDCG Side By Side 用户的行为 成本->索引:Software , Hardware , Data
第16页
架构的演化—广告的演化
http://dirlt.com/computational-advertising.html
业务:变现能力
• eCPM=Bid*CTR的最大化 • CTR 预估模型内存需求暴
涨
• 各种实验的支持(工程&算 法)
• 流动的数据
第17页
小米MIUI迭代和应用趋势
• 小米MIUI 的发布周期
• 体验版:每日发版(几十万内测)
• 开发部:每周发版(几百万公测)
• 稳定版:每月发版(全体推送)
• MIUI应用的趋势
单 MIU 发 I RO M
Hyb rid H5
H5 Do mi nat
ed
第18页
架构演化—技术的选择
• eBay
• Perl C++ Java ->Micro Services
• 微软
• C++ .NET SOA
• Amazon
• C++ -Java/ScalaMicro Services
• 京东
• ASP.NET Java SOA/Infrastructure
• 小米网
• PHP->SOA/GOLANG
• 开源 ,自主发展,中间道路 • 从你熟悉的技术开始 • 技术为业务而生
第19页
技术选择—小米开源之道
• 从开源走来 • 业务驱动的改进 • 贡献开源
例如:HBase应用于云服务
我们有三位HBase Committer!
Apache Kylin
Cloudera Kudu
第20页
失控,组织和演化
• 自组合,去中心化 • 容错性,分布式 • 群体,量变到质变 • 网络经济学 • 电子货币 • 人工进化
• 死亡是最好的老师
• 学习和进化的区别
第21页
Randy的可扩展架构7原则
• 按功能分区(Partition by Function) • 水平切分 • 避免事务 • 异步解耦 • 次序流改进为异步 • 虚拟化所有层次 • 适当使用缓存
第22页
我的解耦4大基本原则和技术
原则 • 先业务,后技术;先逻辑,后物理 • 奥卡姆剃刀:如无必须,勿曾实体 • 正交性:分解出模块无职责的重复 • 稳定性原则:稳定和易变的分解
技术 -接口 -消息队列 -模块化,服务化 -异步化
第23页
架构师的OKR或KPIs
• 关键指标 (One Metric That Matters) • 向业务负责 • 帮助团队获得满足感 • 随时回答团队的问题 • 保持谦逊和诚实
第24页
总结
• 一切抛开业务的架构设计都是耍流氓 • “过往不念,当下不杂,未来不迎” • 微服务架构的未来不是梦
管理 组织
技术 文化
第25页
架构师/微服务:道阻且长,行则将至
www.ouyangchen.com 欧阳辰
广告架构,大数据和观察
“致力于中国互联网广告技术的繁荣”!
不忘初心,方得始终