这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记。
1、架构基础
- 架构定义:有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计
- 常见软件架构
- 单机:所有功能都实现在一个进程里,进程部署在单台机器上,运维时需要停服
- C10K问题(Concurrent 10,000 Connection):服务器如何支持10K个并发连接,进行高性能网络编程。解决方式:采用IO复用模型epoll方法,在调用返回时,只给应用提供发生了状态变化的文件句柄,不需要轮询fd(文件描述符)
- 单机架构瓶颈:
- 需要大量进程 / 线程作为处理单元,需要占用大量内存空间
- 进程 / 线程切换,系统调度代价高
- 解决方案:采用协程(Routine),一个线程中,存在多个协程。协程实现如Go语言的轻量级线程Goroutine。协程由程序控制,在用户态中执行,在线程的基础上通过分时复用的方式运行多个协程
- 协程适用场景:IO密集型任务,异步IO型任务(异步IO型任务包括:主动查询是否有数据;被动监听是否有数据状态)
- 单体:分布式部署,进程部署在多台机器上,具备水平扩容能力(添加更多服务器),运维不需要停服
- CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三项中的两项
- 一致性:所有节点同时看到相同的数据
- 可用性:读写总是成功的
- 分区容错性:尽管任意消息存在丢失或部分系统存在故障,系统继续运行
- 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):微服务之间通信的中间层,一个高性能的四层网络代理,数据平面代理与业务进程采取进程间通信的模式,将流量层面的逻辑(包含治理)与业务进程解耦
- 业务与治理解耦,生命周期易于管理
- 异构系统的治理统一化
- 具有复杂治理能力