什么是架构
架构:有关软件整体结构与组件的抽象描述,用于指导软件系统各方面的设计 (可以理解为代码的框架,骨架)
单机架构
把所有功能都实现在一个进程里,并部署在一台机器上
- 优点:简单
- 问题:运行维护需要停服
- follow up:为能服务更多的人,可以多进程,多机器
单体、垂直应用 | 垂直切分
- 单体架构:分布式分布
- 垂直应用架构:按应用垂直切分的单体
- 优点:
- 水平扩容
- 运维不需要停服
- 问题
- 职责太多,开发效率不高
- 出bug后,影响范围广
- follow up:怎么提高效率?分工协作
SOA、微服务 | 水平切分
SOA (Service-Oriented Architecture)
- 将应用的不同功能单元抽象为服务
- 定义服务之间的通信标准
微服务架构:SOA的去中心化演进方向
问题:
- 数据一致性
- 装货台共交付了多少蛋糕?
- 高可用
- 这么多师傅,如何合作?
- 治理
- 烤箱坏了,怎么容灾?
- 解耦 vs 过微
- 运维成本高了,值当么?
SOA与微服务区别:
SOA可能会有layer把其它拆分的component集中在一个地方进行管理,容易出问题。众多公司会有自己的SOA集中的处理方式
微服务把能拆分的都拆分,并且将component变得尽可能多。
企业级后端架构
云计算
是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。
基础:
- 虚拟化技术: “整租or合租”
- 编排方案:“业主or租赁平台”
架构:
- IaaS (Infrasture)
- PaaS (Platform)
- SaaS (Software)
- FaaS (Function)
云原生
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
弹性资源
- 虚拟化容器
- 快速扩缩容
弹性计算资源类型:
- 服务资源调度
- 计算资源调度
- 消息队列
弹性存储资源类型 - 将存储资源当成服务一样
- 经典(宣传视频,消费记录)
- 关系型数据库(收银记录)
- 元数据(服务发现:蛋糕店通讯录)
- NoSQL(KV存储)
微服务架构:
- 业务功能单元解耩
- 统一的通信标准
通信标准:
- HTTP(RESTful API)
- RPC(Thrif,gRPC)
微服务中间件 RPC vs HTTP:
- 性能
- 服务治理
- 协议可解释性
交给框架来实现符合通信标准的交互逻辑
DevOps:
结合自动化流程,提高软件开发、交付效率
贯穿整个软件开发周期
(设计->开发->测试->上线->调优)
- 敏捷开发
- CI/CD
服务网格:
- 业务与治理解构
- 异构系统的治理统一化
- 复杂治理能力
服务网格(Service Mesh)
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解藕
相较于RPC/HTTP框架
- 异构系统治理统一化
- 与业务进程解藕,生命周期易管理
会调用不同的业务进程及调用数据库,用Service Mesh控制面来操控、管理、控制Service Mesh数据面
后段架构架构的挑战
挑战:
- 基础设施层面
- 物理资源有限(机器、带宽)
- 资源利用率受制于部署服务
- 用户层面
- 用户通信开销较大
- 网络抖动导致运维成本提高
- 异构环境下,不同实例资源水位不均
离线在线资源并池
核心收益:
- 降低物理资源成本
- 提供更多的弹性资源,增加收入
最终目的:把资源(在线资源池,离线资源池)进行效率最大化
在线业务特点:
- IO密集型为主
- 潮汐性、实时性
离线业务的特点
- 计算密集型占多数
- 非实时性
自动扩缩容
核心收益:
- 降低业务成本
解决方式:自动扩容缩容,利用在线业务潮汐性自动扩缩容
微服务亲合性部署
核心收益:
- 降低业务成本
- 提高服务可用性
解决方式:微服务亲合性部署 (极端例子:爱奇艺把视频部署到用户的较好的电视上)
- 将满足亲合性条件的容器调度到一台宿主机
- 微服务中间件与服务网格通过共享内存通信
- 服务网格控制面实施灵活、动态的流量调度
流量治理
核心收益:
- 提高微服务调用容错性
- 容灾
- 进一步提高开发效率,DevOps 发挥到极致
解决思路:基于微服务中间件 &服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境(功能、预览)的流量调度
CPU水位负载均衡
核心收益:
- 打平异构环境算力差异
- 为自动扩缩容提供正向输入
解决思路:CPU 水位负载均衡
- laas
- 提供资源探针
- 服务网格
- 动态负载均衡
总结:
- 没有最好的架构,只有最合适的架构
- 如何做架构设计
- 需求先行。弄清楚要解决什么问题
- 业界调研。业界都有哪些解决方案可供参考
- 技术选型。内部/社区鄀有哪些基础组件
- 异常情况。考虑清楚 xxx 不行了怎么办
- 架构与工程师成长 (Career Path)
- Tech Manager
- Structurer