这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
什么是架构
单机架构
把所有功能部署到一个进程里,并部署在一台机器上。
优点: 简单
缺点: C10K problem; 运维需要停服
C10K problem 即 Client 10000 problem,指同时连接到服务器的客户端数量达到10000时,即使硬件性能足够,也无法正常提供服务。结合「最弱连接」概念去谈。PID由16位变为32位变为64位,但进程仍然不能无限制的去创建,因为内存有限,提出了虚拟内存去解决这个问题,但仍然不得行。
解决C10K problem思路:单个服务端进程或线程服务多个客户端,通过「异步编程」和「事件触发机制」替换轮询,IO采用非阻塞的方式,减少不必要的性能损耗等
单体、垂直应用 | 垂直切分
单体架构:分布式部署
垂直应用架构:按应用垂直切分的单体
(一类,知识垂直应用架构再进行了应用细分)
优点: 水平扩容;运维不需要停服
问题: 职责还是太多,开发效率不高;「爆炸半径」大(出问题要排查的范围大)
SOA、微服务 | 水平切分
SOA(Service-Oriented Architecture)
定义:
- 将应用的不同功能单元抽象为「服务」
- 定义服务之间的「通信标准」
微服务架构:SOA的去中心化演进方向
需要考虑的问题:
- 数据一致性
- 高可用(这么多服务,怎么合作)
- 治理 (链路出现问题,怎么容灾)
- 解耦 vs 过微 (运维成本搞了,值得么)
企业级后端架构剖析
云计算
概念:是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。
基础:
- 虚拟化技术
- 编排方案
架构:
- IaaS 买房子 vs 房屋租赁凭条
- PaaS 清包 vs 装修公司全包
- SaaS 从零培训 vs 雇佣培训过的师傅
- FaaS 纯手工制作 vs 蛋糕机批量制作
云原生
为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能
弹性计算资源类型:
- 服务资源调度
-
- 微服务
- 大服务
- 计算资源调度
-
- 在线:热销榜单
- 离线:热点榜单更新(数据分析资源比较大,需要离线调度)
- 消息队列
-
- 在线:削峰、解耦
- 离线:大数据分析
弹性存储资源
- 经典存储
-
- 对象存储:宣传视频
- 大数据:用户消费记录
- 关系型数据库
-
- 收银记录
- 元数据 (用于很多情景)
-
- 服务发现:蛋糕店通讯录
- NoSQL
-
- KV
DevOps
是云原生时代软件交付的利器,贯穿整个软件开发周期
结合自动化流程,提高软件开发、交付效率
微服务架构
通信标准:
- HTTP(Restful API)
- RPC(Thrift、gRPC)
选哪个?
- 性能 (RPC略胜一筹,有压缩的方案)
- 服务治理 (RPC天生自带一些服务超时,)
- 协议可解释性 ()
服务网格
如果不使用服务网格,则在RPC框架之间进行通信,使用的话进一步与「业务进程解耦」,而到了Service Mesh数据面上。
服务网格 Service Mesh:
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦
相较于RPC/HTTP 框架:
- 异构系统治理统一性 (业务进程跑的是python还是java,不用关心)
- 与业务进程解耦,生命周期易管理