架构、云原生、治理 | 青训营

31 阅读4分钟

架构的演进:

垂直切分:

  • 垂直应用(按照业务线垂直切分,每个业务为一个单体)

    • 水平扩容,运维无须停服
    • 每个业务负责的职责还是太多(其中可能有职责的重叠、重复造轮子),开发效率不高。爆炸半径大

水平切分:

  • SOA (Service Oriented Architecture)

    • 将应用的不同功能单元抽象为服务
    • 定义服务间通信标准
  • 微服务(SOA的去中心化演进)

一个形象的例子:

image (2).png image (3).png image (4).png image (5).png

水平切分服务带来了一系列问题:

  • 数据一致性(一共交了多少货?)
  • 高可用(如此多服务如何合作?)
  • 治理(某工具坏了怎么办?)
  • 解耦与过微之间的取舍(解耦造成的运维成本是否值得?)

企业级后端架构

云计算

云计算是通过软件自动化管理,提供计算资源的服务网络。如下:

  • IaaS(Infra as a service)
    • 类比租下店铺
  • P(latform)aaS
    • 类比装修里的清包 vs 全包
  • S(oftware)aaS
    • 类比用熟手师傅(instead of 从零培训)
  • F(unction)aaS
    • 类比机器批量生产(instead of 纯手工制作)

云原生(计算)的代表技术:

  • 弹性资源:虚拟化容器

    • 弹性计算资源:

      服务资源调度,计算资源调度(在线时:热门榜;离线:热门榜更新),MQ(在线:削峰、解耦;离线:大数据分析)

    • 弹性存储资源:

      经典(对象/大数据),RDB,meta data,NoSQL

      把存储资源也当作一种服务

  • 微服务架构:业务解耦、统一通信标准

    • 云原生场景下,微服务的交互逻辑不必在业务逻辑中实现,直接交给框架就好
  • 服务网格service mesh:

    微服务间通讯的中间层,高性能网络代理,将治理与业务解耦的组件。相比RPC/HTTP,实现了异构系统的治理统一化,提供复杂的治理能力

image (6).png

  • DevOps

    贯穿 设计-->开发-->测试-->上线-->调优/重构 一整个开发周期

企业级后端架构面临的挑战

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

  • 用户层面,网络通信开销较大,且随着应用体量增大,网络抖动会导致运维成本提高。又,不同的机器处理能力不尽相同,所以异构环境下,不同的实例资源水位不均。

下面是一些解决方案

离在线资源并池

在线业务以I/O密集型为主,有潮汐性(流量集中在某些时段)、实时性;离线业务以计算密集型为主(e.g. 数据分析),是非实时性的。

并池中,根据在线业务的潮汐性,对池中资源进行调配。在线资源使用少的时候(流量低时),就把资源让出来给离线资源。这样可以降低物理资源成本,提供更多的弹性资源。

自动扩缩容

对资源池进一步优化,依据某些指标(如cpu的利用率)利用在线业务的潮汐性自动扩缩容。

微服务亲和性部署

把较为相关的服务的容器放在一台宿主机,如此一来,微服务间可直接(通过中间件和service mesh)实现共享内存通信,服务可用性也会提高。

流量治理

也是基于middleware & service mesh的。

我在微服务的笔记里也写了相关内容,可以对照

CPU水位均衡

IaaS根据容器的宿主机提供资源探针,检测容器的CPU等资源使用情况,反馈给service mesh。service mesh支持带权重的load balance策略(权重存储在service registry)。

  • 自适应静态权重

    每一台宿主机分别收集物理资源信息,然后自己去registry调整容器的权重

    • 优势是完全分布式,可用性高;微服务中间件无适配成本。缺点是无法回滚,运行时也做不到自适应
  • 自适应动态权重

    • 出了问题还可以马上切回静态权重
    • 只检测物理资源的简单自适应可能造成流量的过度倾斜,需要处理,采取的方案之一是容器上报RPC指标
      • 问题在于时序数据库压力较大,且动态权重决策中心职责愈发臃肿。解决方案:继续微服务化,引入MQ进行削峰,离在线链路区分……

image (8).png