微服务架构| 青训营笔记

118 阅读4分钟

微服务架构| 青训营笔记

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

为什么要有这门课?

微服务架构是当前大多数互联网公司的标准架构

我可以学到什么?

微服务架构的由来及原理

服务治理功能是如何工作的

微服务架构介绍

系统架构演变历史

为什么需要演进?

  • 互联网爆炸发展
  • 硬件的发展
  • 需求的多样化
  • 开发人员增加
  • 计算机理论及技术的发展

演变历史

单体架构->垂直应用架构->分布式架构->SOA架构->微服务架构

单体架构

all in one process

  • 优势:性能最高、冗余小
  • 劣势:debug困难、模块相互影响、模块分工、开发流程

垂直应用架构

按照业务线垂直划分

  • 优势:业务独立开发维护
  • 劣势:不同业务完全独立有冗余

分布式架构

抽出与业务无关的公共模块

  • 优势:业务无关的独立服务
  • 劣势:服务模块bug可导致全栈瘫痪、调用关系复杂、不同服务冗余

SOA架构

面向服务

  • 优势:服务注册
  • 劣势:整个系统设计是中心化的、需要从上至下设计、重构困难

微服务架构

彻底服务化

  • 优势:开发效率、业务独立设计、自下而上、故障隔离
  • 劣势:治理、运维难度、观测挑战、安全性、分布式系统

微服务架构核心要素

服务治理:服务注册,发现、负载均衡、扩缩容、流量治理、稳定性治理

可观测性:日志采集、日志分析、监控打点、监控大盘、异常报警、链路追踪

安全:身份验证、认证授权、访问令牌、审计、传输加密、黑客攻击

微服务架构原理及特征

基本概念

  • 服务:一组具有相同逻辑的运行实体
  • 实例:一个服务中,每个运行的实体即为一个实例
  • 实例与进程的关系:实例与进程之间没有必然对应关系,可以一个实例对应一个或多个进程(反之不常见)
  • 集群:通常指服务内部的逻辑划分,包含多个实例
  • 常见的实例承载形式:进程、VM、k8s pod
  • 有状态/无状态服务:服务的实例是否存储了可持久化的数据
  • 服务间通信:对于单体服务、不同模块通信只是简单的函数调用,对于微服务,服务间通信意味着网络传输

服务注册及发现

如何指定调用一个目标服务的地址?

  1. 使用本地DNS

    问题:本地DNS存在缓存,导致延时、负载均衡问题、不支持服务实例的探活检查、域名无法配置端口

  2. 引入中间层

    新增一个统一的服务注册中心,用于存储服务名到服务实例的映射

服务实例上线及下线过程

需要下线一个实例,就从服务注册中心中把这个实例中删掉,上线同理

流量特征

  • 统一网关入口
  • 内网通信多数采用RPC
  • 网状调用链路

核心服务治理功能

服务发布

指让一个服务升级运行新的代码的过程

难点:服务不可用、服务抖动、服务回滚

解决方案:蓝绿部署、灰度发布(金丝雀发布)

流量治理

在微服务架构下,我们可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行分发治理

负载均衡

负责分配请求在每个上下游实例上的分布

稳定性治理

线上服务总是会出现问题,这与程序的正确性无关

  • 网络攻击
  • 流量突增
  • 机房端点
  • 光纤被挖
  • 机器故障
  • 网络故障
  • 机房空调故障

解决方案:限流、熔断、过载保护、降级

字节跳动服务治理实践

重试

  • 降低错误率
  • 降低长尾延时
  • 容忍暂时性错误
  • 避开下游故障实例

默认不用重试,为什么呢?

  • 幂等性
  • 重试风暴
  • 超时设置