运维/软件架构进化史

发布时间: 更新时间: 总字数:2293 阅读时间:5m 作者: IP上海 分享 网址

运维/软件架构发展史

涉众

  • 产品经理
  • 软件开发工程师
  • 软件测试工程师
  • 运维工程师(SRE 工程师)
    • SRE(Site reliability engineering, 站点可靠性工程)主要目标是创建可扩展和高可用性的软件系统。

软件开发模式

  • 瀑布模式(1970年最初期初):设计、开发、测试完成后才部署到生产环境,周期长
  • 敏捷模式(1990年代兴起):
    • 产品设计完成后,功能被拆分为足够小的部分,开发完一个模块就测试(反复迭代),最后集成测试并交付,开发周期可控
    • 更加强调队伍中的高度协作
  • DevOps:
    • 产品设计完成后,功能被拆分为足够小的部分,小功能开发完成后,测试接入,测试完成后发布生产环境
    • 一般需要结合:CI(持续集成) -> CD(持续交付) -> CD(持续部署) -> CT(持续运维),参考:常用 CI/CD/CT 工具介绍

IT 技术的发展趋势

  • 软件架构单体架构 -> 封层架构 -> 微服务 -> Function
  • 资源粒度物理机 -> 虚拟机 -> 应用容器 -> Serverless
  • 开发模式瀑布模式 -> 敏捷模式 -> DevOps -> AIOps/NoOps
  • 发布部署冷部署 -> 热部署 -> 持续部署(CD)

说明:

  • 持续部署(CD)DevOps 有紧密的关系
  • 热部署如金丝雀发布等

常见的应用架构

传统运维架构

架构:访问层(APP) -> 接入层(Nginx...) -> 逻辑层(Java...) -> 存储层 -> -> IDC

缺点:

  • 架构层次多,组件多,排查问题困难
  • 扩展性性若,大多不支持弹性伸缩
  • 资源浪费严重,为实现高可用冗余大量服务
  • 扩展性差
  • 监控不全面
  • 发布流程复杂
  • 救火式运维

微服务架构

  • 出现背景

    • 敏捷模式开发、CICD、DevOps 文化的发展和实践中
    • 以 Docker 为代表的现代应用容器技术的出现
  • 定义:微服务 是一种开发应用程序的架构和组织方法

  • 特点:

    • 应用程序 由通过明确定义的 API 进行通信的小型独立服务组成
    • 基于小团队敏捷开发
    • 服务镜像原子化拆分
    • 每个 微服务 独立打包、部署和升级
    • 微服务 间通过 注册中心 实现服务注册和发现
    • 微服务 通过 配置中心 加载配置信息
    • 微服务 间通过 API 网关 被外部访问
  • 微服务架构服务治理 面临的挑战,包括:

    • 分布式环境中,网络的波动不可忽略
    • 服务注册和服务发现
    • 服务健康状态监测
    • 服务间路由
    • 异常点监测
    • 客户端重试
    • 可配置的超时机制
    • 负载均衡
    • 限速
    • 流量整形
    • 熔断

分布式架构

Distributed application needs

分布式架构需求,图片来源

分布式应用程序的需求:

  • 声明周期(Lifecycle): Kubernetes
  • 网络(Networking): Istio
  • 绑定(Binding): knative
    • Service
    • Event
    • Build -> Tekten / ArgoCD
  • 状态(State): Dapr 暂未引起搭建的广泛接受和使用

随着业务的增大,业务会垂直和水平拆分为 分布式架构分布式架构 能提供系统的容量和能力,并通过冗余服务的方式消除单点故障

  • 传统单体架构 vs 分布式服务架构
传统单体架构 分布式服务架构
新功能周期
部署 不经常变更且容易部署 经常变更,部署复杂
隔离性 故障影响范围大 部分故障,影响范围小
架构设计 难度小 复杂、难度大
系统运维 简单 复杂
系统性能 响应时间快,吞吐小 响应时间慢,吞吐大
系统扩展性
系统管理 重点在于开发 重点在于服务治理
技术 技术单一 技术多样且开发
新人上手 慢,架构学习成本高
测试排错 简单 复杂

运维架构的演变

硬件服务器阶段

需要自行购买和维护服务器、网络、机房等,以硬件 为中间心开展业务

云阶段

各种资源通过统一的云管平台管理(相当于屏蔽了 IaaS 层的资源),开始以 资源 为中心开展业务

云原生阶段

云原生阶段基于云原生的基础设施,开始以 应用/微服务 为中心

应用部署工具演变

手动发布 -> 脚本发布 -> 工具化发布 -> 自动化发布

应用架构的演变

参考:dubbo architecture roadmap

  • 单体应用(All in one):ORM
    • 特点:小业务,代码集中一个项目,管理简单;基于 ORM 实现 CRUD 操作
    • 优点:开发快、成本低、易于测试和部署
    • 缺点:代码耦合度高、扩展性差、协同开发难度大
  • 垂直应用(Vertical Application):MVC
    • 特点:根据业务特点拆分(如:用户中心、订单中心、产品中心、客服中心等);分离前后台逻辑
    • 优点:协同开发效率高、耦合度底、水平扩展方便
    • 缺点:烟囱架构,依赖其他组件(如 RabbitMQ、Redis)实现高可用
  • 水平拆分及服务化(Distributed Service):RPC、MQ、json-p
    • 特点:以分布式服务架构(RPC)为中心,先后台分离
    • 缺点:服务间的耦合度高、调用关系复杂、维护难
    • 常见的 RPC 框架:
      • 阿里巴巴 Dubbo
      • 蚂蚁金服 SOFA-RPC
      • 百度 bRPC
      • Google gRPC
      • Facebook Thrift
  • 弹性计算架构(Elastic Computing):SOA
    • 特点:需要实现API 网关、服务配置、服务发现、服务治理等工作。资源调度中心和治理中心(SOA)是核心
    • 系统关键组件:
    • 缺点:服务间 RPC 调用量大、服务监控难、负载均衡重要、维护成本高
      • 解决:进一步拆分应用,各自承担业务负载;基于 SOA 实时管理集群容量,提高利用率

说明:

  • 随着查分的粒度越来越大,集群规模成几倍、几十倍的增长

服务治理的演变

分布式架构治理模式演进:

  • SOA/ESB -> Microservices -> Cloud Native

服务治理的目标:

  • 服务发现
  • 负载均衡
  • 熔断容器
  • 动态路由

服务治理的迭代:

  • 第一代:服务治理能力内嵌在业务代码中,典型技术:SOA、ESB
    • 优点:使用简单,依赖少
    • 缺点:代码耦合度高、开发复杂、运维复杂
  • 第二代:服务治理能力抽象到 SDK 中实现,典型技术:Spring Cloud、Dubbo
    • 优点:代码重复少、治理逻辑代码和业务代码分开
    • 缺点:SDK 编程语言绑定、使用复杂、系统改造工作量大、治理能力升级影响用户业务
  • 第三代:服务治理能力统一到 服务网格,服务网格以基础设施的方式提供无侵入的连接控制、安全、可观测性、灰度发布等治理能力
    • 优点:独立进程、用户业务非入侵、编程语言无关;治理逻辑升级业务无感知;可渐进的微服务化
    • 缺点:代理的能力和资源开销

综上,服务治理与业务逻辑逐步解耦,服务治理能力下沉到基础设施层

Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数