[03顶层设计] 07 - 架构入门1 | 青训营笔记

70 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第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 总结

架构本身是为了提高工作效率而事先进行的顶层设计,其中要考虑的不仅是软件和硬件,更有业务、时间等因素。