架构初探-谁动了我的蛋糕 | 青训营笔记

53 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记。

1、架构基础

  • 架构定义:有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计
  • 常见软件架构
    • 单机:所有功能都实现在一个进程里,进程部署在单台机器上,运维时需要停服
    • C10K问题(Concurrent 10,000 Connection):服务器如何支持10K个并发连接,进行高性能网络编程。解决方式:采用IO复用模型epoll方法,在调用返回时,只给应用提供发生了状态变化的文件句柄,不需要轮询fd(文件描述符)
  • 单机架构瓶颈:
    • 需要大量进程 / 线程作为处理单元,需要占用大量内存空间
    • 进程 / 线程切换,系统调度代价高
    • 解决方案:采用协程(Routine),一个线程中,存在多个协程。协程实现如Go语言的轻量级线程Goroutine。协程由程序控制,在用户态中执行,在线程的基础上通过分时复用的方式运行多个协程
    • 协程适用场景:IO密集型任务,异步IO型任务(异步IO型任务包括:主动查询是否有数据;被动监听是否有数据状态)
  • 单体:分布式部署,进程部署在多台机器上,具备水平扩容能力(添加更多服务器),运维不需要停服
    • CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三项中的两项
      • 一致性:所有节点同时看到相同的数据
      • 可用性:读写总是成功的
      • 分区容错性:尽管任意消息存在丢失或部分系统存在故障,系统继续运行
  • 垂直应用:单体架构基础上,将进程按照应用垂直切分开的单体,在一定程度上减少了后端进程职责
  • 面向服务型架构(SOA,Service Oriented Architecture):将进程按照不同的功能单元进行抽象,拆分为服务。SOA为服务间通信提供标准,采用重量级协议,如SOAP及其他WS标准
  • 微服务(Micro-Service):SOA的去中心化的演进,每个服务都有自己的数据模型和数据库
    • 注意事项:
      • 数据一致性
      • 高可用
      • 治理、容灾
      • 解耦 vs. 过微
      • 权衡运维成本 架构演进方式:业务需求量逐渐增大、系统逐渐复杂
  • 水平切分:分层 / 模块化
  • 垂直切分:分布式

2、微服务的部署方式

  • 虚拟机
  • 容器
    • 解决了应用程序运行环境依赖
    • 实现计算资源、网络、存储的隔离
    • 提高部署密度和计算资源的利用率
    • 无服务器模式(Serverless):由开发者实现的服务端逻辑运行在无状态的计算容器中,由事件触发,完全被第三方管理
      • 无需管理基础设施
      • 事件驱动
      • 自动化构建部署
      • 无服务器计算 = FaaS + BaaS(Function as a Service + Backend as a Service)
  • DevOps:贯穿整个软件开发周期
  • 敏捷开发
  • CI / CD(Continuous Integration / Continuous Delivery,持续集成 / 持续交付):实现应用开发中高度持续自动化和持续监控
  • 服务网格(Service Mesh):微服务之间通信的中间层,一个高性能的四层网络代理,数据平面代理与业务进程采取进程间通信的模式,将流量层面的逻辑(包含治理)与业务进程解耦
  • 业务与治理解耦,生命周期易于管理
  • 异构系统的治理统一化
  • 具有复杂治理能力