这是我参与「第五届青训营」伴学笔记创作活动的第7天。今天的内容主要是关于架构,包括架构的一些基本介绍和实际应用介绍。
1 架构
架构:有关软件整体结构与组件的抽象描述;用于指导软件系统各个方面的设计。
1.1 几种常见架构
单机:把所有的功能实现在一个进程里,并部署在一台机器上。
- 优点:简单
- 缺点:C10K Problem(本指单机处理10K个并发连接问题,引申为单机上限容量);运维需要停服
单体架构:分布式部署
垂直应用架构:按应用垂直切分为单体
- 优点:水平扩容;运维不需要停服
- 缺点:职责太多,开发效率低;爆炸半径大
SOA (Service-Oriented Architecture)、微服务 —— 水平架构
SOA:将应用的不同功能单元抽象为服务,定义服务间的通信标准
微服务:SOA的去中心化演进
- 优点:开发迭代效率提高;功能间独立,系统稳定性提高
- 缺点:数据一致性(不同服务有不同的中间状态);高可用(服务多、依赖复杂);治理(问题解决,容灾);解耦 vs 过微
1.2 小结
架构需求的来源:需求增加导致需要的完成需求的主体增加,需求复杂导致的功能拆分
功能拆分又分为垂直拆分和水平拆分。
2 企业级后端架构分析
2.1 云计算
定义:通过软件自动化管理,提供计算资源的服务网络。
云计算的基础是虚拟化技术和编排方案。
常用的云计算架构模型包括4层:IaaS (Infrastructure as a Service), Paas (Platform as a Service), SaaS (Software as a Service), FaaS (Function as a Service)。
2.2 云原生 Cloud Native
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
云原生的特点:
- 弹性资源:虚拟化容器、快速扩容缩容
- 微服务架构:业务功能单元解耦、统一的通信标准
- DevOps:敏捷开发、CI/CD
- 服务网格:业务与治理结构、异构系统的治理统一化、复杂治理能力
2.2.1 弹性计算资源
弹性计算资源的可以分为服务资源调度、计算资源调度和消息队列。服务资源调度又分为微服务和大服务;计算资源调度又分为在线(后端)和离线(大数据分析);消息队列也可以分为在线和离线。
2.2.2 弹性存储资源
弹性存储资源可以分为经典存储资源、关系型数据库、元数据和 NoSQL。经典存储资源主要包括对象和大数据的存储,关系型数据库主要用于强关系型数据,元数据主要用于服务发现(因为元数据的可用场景多),NoSQL 最常见的是的 Key-Value 结构。
将存储资源当初服务一样。
2.2.3 DevOps
DevOps 是云原生时代软件交付的利器,贯穿整个软件开发周期。结合自动化流程提高软件的开发、交互周期。
2.2.4 微服务架构
通信标准:HTTP (RESTful API)、RPC (Thrift, gRPC)
微服务中间件的选择主要参考性能、服务治理、协议可解释性三方面。
2.2.5 服务网络
服务网格 Service Mash:微服务之间通讯的中间层,用于高性能网格代理,业务代码与治域解耦。
相比于 RPC/HTTP 框架可以实现异构系统治理统一化、与业务进程解耦、生命周期易管理。
3 企业级后端架构的挑战
在基础设施层面,物理资源(机器、带宽)是有限的,资源利用率受制于部署方案;在用户层面,网络通信的大开销、网络波动会导致运营成本提高、异构环境下不同实力资源水位不均,这些都是实际应用中会遇到的挑战。
3.1 离在线资源并池
核心收益:降低物理资源成本、提供更多弹性资源、增加收入
- 在线业务的资源:IO密集型、潮汐性、实时性
- 离线业务的资源:计算密集型、非实时性
3.2 自动扩容缩容
核心收益:降低业务成本
使用基础:在线业务具有潮汐性
3.3 微服务亲和性部署
核心利益:降低业务成本、提高服务可用性
形态上是微服务,通信上是单体架构
3.4 流量治理
核心利益:提高微服务调用容错性、容灾、提高开发效率把 DevOps 发挥到极致
3.5 CPU 水位负载均衡
核心利益:打平异构环境算力差距、为自动扩容提供正向输入
4 总结
架构本身是为了提高工作效率而事先进行的顶层设计,其中要考虑的不仅是软件和硬件,更有业务、时间等因素。