如何做好互联网亿级流量架构
如果无法正常显示,请先停止浏览器的去广告插件。
1. 如何做好互联网亿级流量架构
叶波
美团-优选物流研究员
yebo06@meituan.com
+86-13426074350
2.
3. 个人简介
• 现美团优选研究员
• 国家留学基金管理委员会公派留学博士
• 历任百度架构师、业务基础技术框架负责人
• 做过 Cognitive Radio、Kalman Filter、TV White Space 等领域研究
• 使用 Universal Software Radio Peripheral 和 GNU Radio 搭建过基于智能天线的认知无线电系统
• 通过 Raspberry Pi、Scratch 等做过少儿编程教育
• 从 0-1 搭架业务的基础架构和服务,整合构建大交易平台
• 涉及 Service Mesh、批处理框架、AB Test、运维部署系统等方向攻坚
4. •
•
•
1 2 3 4 5
怎样理解架构 为什么需要架构 架构师工具箱 架构 YYDS 如何成⻓为架构师
架构的定义
架构的视⻆和分层
架构的演进
•
•
•
架构与软件复杂性
架构与软件质量
架构与研发成本
•
•
•
•
业务模型抽象能力
系统排列组合的能力
软素质
架构的负面清单
•
•
•
•
面向对象的巅峰之作
MVC 一战成名
Java YYDS
大道至简
•
•
架构师的核心价值
架构师的知识体系建设
5. • 什么是架构
• 为什么需要架构
• 亿级流量架构师的工具箱
• 架构 YYDS
• 如何成⻓为架构师
6. 什么是架构?
架构的定义
系统在其所处环境中的基本概念或属性,包括系统中的元素、元素间的关系以及指
导系统设计和演进的原则。
The fundamental concepts or properties of a system in its environment embodied in its elements, relationships,
and in the principles of its design and evolution.
—— ISO/IEC/IEEE
Architecture
expresses
1
0…*
Architecture View
7. 什么是架构?
架构的目的
•
提升效率?
Ø
不尽然,有时候最简单的设计开发效率反而是最高的,架构设计需要投入时间和人力,这部分
投入如果用来尽早编码,项目也许会更快。
•
促进业务发展?
Ø
•
有一定道理,如高性能架构能让用户体验更好,但如果照抄微信架构,一定促进业务发展么?
为了高性能、高可用、可扩展?
Ø
不管什么系统,什么业务,上来就要求三高,就会出现架构设计复杂无比,项目落地遥遥无期
等各种现象,费尽九牛二虎之力将系统整上线,却发现运行不稳定,经常出问题且很难解决,
加简单功能排期长等各种继续让人抓狂的事。
8. 什么是架构?
架构的目的
•
架构设计为何在 IBM 或 Microsoft 等大公司开始逐步流行起来。因为大公司开发的系统
具备较大规模,而大规模软件系统才会面临软件架构相关的问题,如:
•
Ø 系统规模大,耦合严重,开发效率低
Ø 系统耦合严重,牵一发动全身,后续修改和扩展难
Ø 系统逻辑复杂,易出问题,出问题后排查和修复难
架构设计是为了解决系统复杂度带来的问题
Ø 通过理解需求,识别系统复杂性,并针对关键点进行拆解。
Ø 架构设计不是要面面俱到,不需要都具备高性能、高可用、高扩展,重点要识别出关
键点并有针对性地解决问题。
9. 什么是架构?
业务模
块
业务模
架构视⻆和分层
业务视⻆
块
业务模
业务模
块
业务用
例
业务用
例
服务
角色
业务用
例
流程
业务模
块
规则
服务
应用层
应用视⻆
较高层
技术层
Http
服务
服务
应用层 系统用例
技术视⻆
业务层 模型
技术层
框架
服务
数据
流程
事件
消息
规则
服务
服务
数据
RPC
Mq
机房
服务 A
服务
块
服务
事件
服务
规则
消息
日志
负载均
Cache
网关
Es
服务
服务治
监控报
Docke
理
支撑
DevO
ps
警
r
机房
Kuber
netes
机房
服务 A
DB
实现
规则
Kerne
l
部署视⻆
较低层
框架
Db
规则
日志
模型
流程
衡
服务
服务
例
业务层
业务模
服务
系统用
块
服务 B
服务 A
DB
支撑
10. 什么是架构?
架构的范畴
架构是一切重要的东⻄。
Architecture is about the important stuff. Whatever that is.
—— Ralph Johnson
关于 Ralph Johnson
11. 什么是架构?
重要的东⻄
重要的东⻄是
那些使软件难以变化的东⻄
12. 什么是架构?
架构如何演进
单体
垂直拆分
水平拆分
微服务
13. • 什么是架构
• 为什么需要架构
• 亿级流量架构师的工具箱
• 架构 YYDS
• 如何成⻓为架构师
14. 为什么需要架构?
架构的核心价值
架构的核心价值是降低软件开发、维护成本。
架构
降低
软件
复杂度
提升
软件
内部质量
减少
软件
开发维护成本
15. 为什么需要架构?
架构与软件复杂性
需求
需求
VS
代码
耦合
重复
架构
代码
复杂度高
从开发者的⻆度来看,软件复杂度指理解和修改软件的难度。
解耦
复杂度低
复用
16. 为什么需要架构?
架构与软件质量
好不好用?
Bug多不多?
迭代快不快?
。。。。。。
软件
影响他使用
外部质量
使用软件的人
职责
使用软件完成其工作
好不好理解?
好不好修改?
影响他开发
内部质量
开发软件的人
职责
开发、维护软件
17. 为什么需要架构?
架构与研发成本
The only way to go fast, is to go well.
—— Robert C.Martin
From Martin Fowler
18. • 什么是架构
• 为什么需要架构
• 亿级流量架构师的工具箱
• 架构 YYDS
• 如何成⻓为架构师
19. 亿级流量架构师的工具箱
架构师面临的挑战
职责模糊不清 价值不易证明
架构师与工程师的
关注点差异 无权而欲为决
20. 亿级流量架构师的工具箱
业务模型抽象
•
需求类型:
Ø 功能性需求:系统需要实现的业务功能
Ø 非功能性需求:安全、性能、可扩展性、可测试性
• 需求的分析和拆解能力
• 领域驱动设计
• 工具:
•
Ø UML
Ø 原型设计工具
产出:
Ø 需求用例文档、需求说明书
Ø 用例图
Ø 原型图、领域对象
Ø 核心代码、伪代码
21. 亿级流量架构师的工具箱
无数个系统的排列组合能力
微服务架构
•
集中式架构
• 最简单的设计方式,所有功能实现和物理部署都在一起。
• 优点:开发部署简单
• 缺点:
每个微服务业务功能独立,独立部署,微服务之间通过
RPC 或 MQ 交互。
•
Ø
Ø
•
扩展性差
Ø 耦合度高
分层架构
优点:
Ø
Ø 可以根据业务能力划分为不同的服务,这些服务可以 • 保障不同功能的正确分离。
采取不同技术栈实现。 • 优点:
每个服务都有专门开发团队,可以自由选择开发技 Ø 各层独立,职责单一,分工明确
术,提供API服务。 Ø 耦合度低
每个服务独立扩展,可以根据每个服务的规模来部署 Ø 复用性高
满足需求的规模。 Ø 逐层单向调用
缺点:微服务过多,难以治理
•
缺点:分层过多时,会导致很多透传功能
22. 亿级流量架构师的工具箱
架构的基础设计能力
类和代码层次
• 单一职责原则:任何一个软件模块都应该只对某一类行为者负责。
• 开放关闭原则:一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展。
• 里氏替换原则:当用同一接口的不同实现互相替换时,系统的行为应该保持不变。
• 接口隔离原则:不依赖任何不需要的方法、类或组件。
• 依赖反转原则:在源代码层次的依赖关系中就应该多引用抽象类型,而不用具体实现。
组件层次
• 复用、发布等同原则:软件复用的最小粒度应等同于其发布的最小粒度。
• 共同闭包原则:将同时修改、目的相同的类放到同一个组件;不会同时修改、目的不同的类放到不同的组件。
• 共同复用原则:不要强迫一个组件依赖它不需要的东⻄。
• 命令查询职责分离:分离读 Query 写 Command 操作。
• 正交原则:沿着一个方向变化,另一个方向不变化,消除重复,分离关注点,缩小依赖范围向,稳定的方向依赖。
23. 亿级流量架构师的工具箱
化
• 快速学习能力
• 技术影响力
• 协调能力
• 横向领导力
授权
开
虚
谦
包容度
柔性
原则
放
团队合作
•
大局观
影响力
沟通力
文
软素质
•
结
果
24. 亿级流量架构师的工具箱
架构的负面清单
•
追求技术难度:
Ø
架构设计需要适合项目需求和规模,不要一味追求高大上,合理匹配才是最重要
的。
•
架构只负责架构文档不写代码:
Ø
架构设计的大部分产出是文档,但核心代码或伪代码可以帮助开发人员更深入理
解设计方案。
•
低估需求理解的价值:
Ø
在架构设计过程中,需求的正确理解和建模是整个项目成功的关键,特别是非功
能性需求。
25. • 什么是架构
• 为什么需要架构
• 亿级流量架构师的工具箱
• 架构 YYDS
• 如何成⻓为架构师
26. 架构 YYDS
面向对象的巅峰之作 – Tomcat
•
Tomcat 中只有一个 Server,一个 Server 可
以有多个 Service,一个 Service 可以有多个
Connector 和一个 Container;
• Server 掌管着整个 Tomcat 的生死大权;
• Service 对外提供服务;
• Connector 用于接受请求并将请求封装成
Request 和 Response 来具体处理;
•
Container 用于封装和管理 Servlet,以及具
体处理 Request 请求;
•
统一与抽象(接口)、面向组件、各类设计模
式、框架约束。
27. 架构 YYDS
MVC 一战成名 - Struts
MVC 、分层设计、中心控制、Template 引擎
•
橙色是 Servlet Filters,过滤器链,所有的请求都要经过 Filter
链的处理。
• 浅蓝色是 Struts Core,Struts2 核心部分。
• 浅绿色是 Interceptors,Struts2 拦截器。有很多默认拦截器,
也可以自定义拦截器,用来实现具体业务需要的功能。
•
浅黄色是 User Created,开发人员创建的,包括 struts.xml、
Action、Template。
•
FilterDispatcher 是调度中心,根据 ActionMapper 的结果来
决定是否处理请求。
•
Templates 是各种视图类型的页面模板,如 JSP 就是一种模板
页面技术。
28. 架构 YYDS
Java YYDS - Spring
•
Core 和 Beans : Spring 的核心,包含了控制反转
(Inversion of Control)和依赖注入(Dependency
Injection)
•
Context: 构架于核心模块之上,扩展了 BeanFactory,
添加了 Bean 生命周期控制、框架事件体系以及资源加载
等功能。
•
卓越的扩展性和完美的生态、设计模式的集散地、
拒绝冗余和重复。
29. 架构 YYDS
大道至简 - Nginx
•
事件驱动模型:基于异步及非阻
塞的事件驱动模型,是 Nginx 高
并发、高性能的关键因素。
•
模块化:核心和功能性模块,核
心模块负责维持一个运行循环
(run-loop),执行网络请求处
理的不同阶段的模块功能,比
如:网络读写、存储读写、内容
传输、外出过滤。
•
Master-worker、模块化、事件驱动、异步、非阻塞、多进程
单线程。
30. • 什么是架构
• 为什么需要架构
• 亿级流量架构师的工具箱
• 架构 YYDS
• 如何成⻓为架构师
31. 如何成⻓为架构师?
架构师的定义
架构师指为系统架构负责的人、团队或组织。
The person, team, or organization responsible for systems architecture.
—— From IEEE
32. 如何成⻓为架构师?
架构师的工作目标
架构师工作的核心目标是⻓期保持系统应对变化的能力处于合理水平。
33. 如何成⻓为架构师?
架构师的定位
兼
TL
汇报
团队中需要一个架构师吗?
架构师和团队TL怎么分工?
团队?
需要吗?
架构师
TL
架构师
兼
TL
TL
汇报
服务
服务
服务
服务
应用层 系统用例
流程
规则
业务层 模型 服务 事件 规则
技术层 框架 数据 消息 日志
兼
服务
架构师
资深
工程师
服务
团队
工程师
工程师
工程师
34. 如何成⻓为架构师?
架构师的核心价值
战术的成败决定战略的成败
四渡赤水是⻓征史上最光彩神奇的篇章
⻓征是独一无二的,⻓征是无与伦比的
战略的正确决定战术的意义
35. 如何成⻓为架构师?
目标:降低复杂度和成本、最
小化架构方案、高质量交付等
架构师的核心价值
业务
达成
架构方案
服务
设计
保障
服务
用户
产出
编写
核心代码
系统
受限于
资源/成本
架构落地
36. 如何成⻓为架构师?
架构师与工程师的关注点差异
边界
设计原则
概念完整性
架构师
合理
工程师
交付
排期
⻛险
改动范围
37. 如何成⻓为架构师?
主要工作内容
架构设计
架构落地
38. 如何成⻓为架构师?
应对业务变化
需求
概念
架构
封装
依赖
抽象
隔离
继承
依赖
继承
39. 如何成⻓为架构师?
用户
分拣中心
包裹服务
团长
⑥ 上⻔自提
分拣中心Id
团长Id
分拣中心地址
包裹
包裹号
① 下单
包裹状态
团长地址
包裹
包裹号
包裹状态
网格站地址
网格站
网格站Id
用户订单
包裹服务
包裹
分拣中心
发货方
网格站
收货方
② 分拣打包
⑤ 配送
④ 分拨
团⻓
业务背景:目前业务上给团⻓履约时,在分拣中心将货品分拣到
托盘中,然后在网格站将托盘中的货品按团分拣到周转筐中,最
后以周转筐的方式配送给团⻓。
包裹号
包裹
发货方
包裹号
线路
业务诉求:业务上希望能够在分拣中心直接按团打好包裹,网格
站根据包裹分拨,然后配送给团⻓。
节点
收货方地址
包裹状态
包裹
履约调度服务
包裹id
可以再提
高抽象度
概念
收货方
包裹状态
处理状态
需求
收货方Id
发货方Id
发货方地址
③ 运输
收货方类型
发货方类型
节点类型
线路
节点
处理状态
架构
节点Id
节点地址
40. 如何成⻓为架构师?
应对技术变化
软件
随业务需求
变化而变化
业务逻辑
业务流程
业务逻辑
业务规则
模型
随技术需求
变化或技术
发展而变化
软件
业务流程
业务和技术进行解耦
业务规则
模型
定义
依赖
技术实现
技术实现
数据存取 进程通信 数据存取 进程通信
技术框架 技术工具 技术框架 技术工具
实现
技术
接口
高度抽象
高度稳定
41. 如何成⻓为架构师?
架构师的知识体系建设
架
构
设
计
解
决
方
案
设计原则
SOLID
CRP
SDP
设计方法
……
OOD
异地多活
Kafka
微服务治理
全链路压测
…..
Factory Adapter Strategy …..
Rabbit
Rocket …..
K8S
Mysql Mongo TiDB
数据
结构
算法
分布式锁
全局Id
微服务
…..
OSS
HDFS
S3
…..
Redis
分层
分层
协议
安全
DevOps
事件
驱动
…..
…..
网关
Memc
Caffeine …..
ached
负载
均衡
ES
IO
存储
Lucene
Solr
…..
分布式计算
CDN
…..
Spark
操作系统
…..
………
搜索引擎
网络
计算机网络
…..
流程编排
缓存
存储
基础
语言
分布式事务
数据库
容器
Docker
基
础
理
论
DDD
架构⻛格&模式
解决方案
消息队列
基
础
组
件
UDD
设计模式
进程
Flink
MR
…..
分布式
…..
CAP
BASE 一致性
…..
42. 如何成⻓为架构师?
书籍推荐
43.
44.