架构初探 | 青训营

75 阅读6分钟

什么是架构

架构的定义

架构即软件架构,是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。

通俗来讲:实现一个软件有很多方法,架构在方法选择上起着至关重要的作用。

架构的重要性:成为软件开发的地基。

单机

Image.png

软件系统需要具备对外提供服务,但只是把所有功能都实现在一个进程里,并部署在一台机器上。

优点:简单

问题:C10K问题(支持10k个并发连接);运维需要停服

改进:多雇几个蛋糕师傅

单体、垂直应用 | 垂直切分

Image.png Image.png

单体架构:分布式部署;垂直应用架构:按应用垂直切分的单体

优点:水平扩容;运维不需要停服

问题:职责太多,开发效率不高;爆炸半径大

改进:分工协作

SOA、微服务|水平切分

Image.png Image.png

SOA(Service-Oriented Architecture):

  • 将应用的不同功能单元抽象为服务
  • 定义服务之间的通信标准

微服务架构:SOA的去中心化演进方向

问题:数据一致性;高可用,如何合作;治理,容灾;结构或者过微,运维成本高

企业级后端架构剖析

云计算

通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的及时

基础:

  • 虚拟化技术:整租or合租;
  • 虚拟化产品编排方案:租赁平台or拥有者

架构:

  • Iaas:基础架构即服务。云计算提供商向个人或组织提供虚拟化的计算资源,例如虚拟机、存储、网络和操作系统。用户不需要知道机器的物理信息。

  • PaaS:平台即服务。为开发人员提供按需开发环境,用于开发、测试和管理。

  • SaaS:软件即服务。通过互联网提供按需软件付费应用程序,云计算提供商托管和管理软件应用程序,并允许用户连接到应用程序并通过全球互联网访问应用程序。

  • Faas:函数即服务。提供按需执行的代码功能,用户可以编写和上传代码,根据需要执行代码。用于处理事件驱动任务、处理消息队列、处理数据流等。

云原生

在公有云、自由云、混合云等新型动态环境中,构建和运行可弹性拓展的应用提供了可能

Image.png

弹性资源

弹性计算资源类型:

  • 服务资源调度:微服务;大服务
  • 计算资源调度:在线实时应用;离线更新实时服务
  • 消息队列:在线;离线分析数据

弹性存储资源类型:

  • 经典:对象;大数据
  • 关系型数据库:记录
  • 元数据:服务发现
  • NoSQL:key-value

将存储资源当成服务

DevOps

云原生时代软件交付的利器,贯穿整个软件开发周期,提高软件开发、交付效率

Image.png

云原生之微服务架构

Image.png

通信标准:HTTP、RPC

微服务中间件RPC 比 HTTP:性能高;服务治理好;协议可解释性强

云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而不是交给框架

服务网格

Image.png

  • 微服务之间通讯的中间层
  • 高性能网格代理
  • 专业代码与治理解耦

相较于RPC/HTTP框架:

  • 异构系统治理统一化
  • 与业务进程解耦,生命周期易管理

企业级后端架构的挑战

问题:

  • 基础设施层面:物理资源有限(机器、带宽)资源利用率受限于部署服务

  • 用户层面:网络通信开销大;网络抖动导致运维成本提高;异构环境下,不同实例资源水位不均衡

离在线资源并池

Image.png

核心收益:

  • 降低物理资源成本
  • 提供更多的弹性资源,增加收入

在线业务特点:IO密集型为主;潮汐性、实时性

离线业务特点:计算密集型占多数;非实时性

自动扩缩容

Image.png

核心收益:降低业务成本

解决思路:自动扩缩容,利用在线业务潮汐性自动扩缩容

扩缩容依据的指标:CPU或者内存的指标

亲和性部署

Image.png 核心收益:

  • 降低业务成本

  • 提高服务可用性

解决思路:

  • 将满足亲和性条件的容器调度到一台宿主机

  • 微服务中间件与服务网格通过共享内存通信

  • 服务网格控制面实施灵活、动态的流量调度

流量治理

核心收益:

  • 提高微服务调用容错性

  • 容灾

  • 进一步提高开发效率,DevOps发挥到极致

解决思路:基于微服务中间件&服务网格的流量治理

  • 熔断、重试

  • 单元化

  • 复杂环境(功能、预览)的流量调度

CPU水位负载不均衡

核心收益:

大平以后环境算力差异

为自动扩缩容提供正向输入

解决思路:

Image.png

IaaS:提供资源探针

服务网格:动态负载均衡

后端架构实战

对于CPU水位负载均,如何设计?

需要哪些输入

  • 服务网格数据面:支持带权重的负载均衡策略
  • 注册中心存储了所有容器的权重信息
  • 宿主机能提供容器的资源使用情况、物理资源信息

关键点:紧急回滚、大规模、极端场景

自适应静态权重

方案:采集宿主机物理资源信息;调整容器注册的去那种

优点:复杂度低;完全分布式,可用性高,微服务中间件无适配成本

缺点:无紧急回滚能力;缺乏运行时自适应

自适应动态权重Alpha

方案:容器动态权重的自适应调整;服务网站的服务发现 & 流量调度能力

改进方向:解决无法紧急回滚的问题,运行时权重自适应

缺点:过度流量倾斜可能会有异常情况

自适应动态权重Beta

方案:服务网格上报RPC指标

改进方向:极端场景的处理成为可能

缺点:时序数据库压力较大;动态权重决策中心职责越来越多,迭代-》变更-》风险

自适应动态权重Release

Image.png

演进方向:

  • 微服务化

  • 引入消息队列削峰、解耦

  • 离在线链路切分

  • 梳理强弱依赖

总结

没有最好的架构,只有最适合的架构

如何做架构的设计

  • 需求先行,弄清楚要解决的问题
  • 业界调研,业界有哪些解决方案可以参考
  • 技术选型,内部/社区有哪些基础组件
  • 异常情况,考虑清楚xxx不行怎么处理