微服务架构原理及特征| 青训营

54 阅读3分钟

微服务架构原理及特征

  • 系统架构的演变历史

    • 原因:互联网爆炸性发展,硬件设施快速发展,需求复杂性多花化等
    • 历史:单体架构,垂直应用架构,分布式架构,SOA,微服务
  • 单体架构

    • 优势:性能最高,冗余小
    • 劣势:debug困难,模块相互影响,模块分工,开发流程
  • 垂直架构-按照业务线垂直划分

    • 优势:业务独立开发维护
    • 劣势:不同业务存在冗余,每个业务还是单体
  • 分布式架构-抽出业务无关的公共模块

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

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

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

    • 服务治理
      • 服务发现
      • 服务注册
      • 负载均衡
      • 扩容缩
      • 流量治理
      • 稳定性治理
    • 可观测性
      • 日志分析
      • 日志采集
      • 监控大盘
      • 异常报警
      • 链路追踪
    • 安全
      • 身份授权
      • 认证授权
      • 访问令牌
      • 审计
      • 传输加密
      • 黑产攻击
  • 基本概念

    • 服务

      • 一组具有相同逻辑的运行实体
    • 实例

      • 一个服务中,每个运行实体即为一个实例
    • 实例与进程的关系

      • 实例与进程之间没有必然的对应关系,可以一个实例对应一个或多个进程
    • 集群

      • 通常指服务内部的逻辑划分,包含多个实例
    • 常见的实例承载形式

      • 进程
      • VM
      • k8s pod
    • 有服务/无服务状态

      • 服务的实例是否存储了可持久化的数据
    • 服务间通信

      • 对于单体服务,不同模块通信只需要简单的函数调用
      • 对于微服务,服务间通信意味着网络传输
      • HTTP,GRPC,Thrift,other...
  • 服务注册及发现

    • 代码层面,如何指定调用一个目标服务的地址(ip:port)?
    client:=grpc.NewClient("10.23.45.67.8080")
    //问题分析,服务地址是不固定的
    
    • 用DNS?
    net.Dial("b.service,org:8080")
    //问题:本地DNS存在缓存,导致延迟,负载均衡问题
    //不支持服务实例的探活检查,域名无法配置端口
    
    • 解决思路:新增一个统一的服务注册中心,用于存储服务名到服务实例的映射
    • 服务实例的上线及下线过程
      • 下线先去服务注册中心删掉该服务
      • 上线先加服务并health check,之后去注册中心添加
  • 流量特征

    • 统一网关入口
    • 内网通信多数采用rpc
    • 内网调用链路
  • 服务发布

    • 定义
      • 让一个服务升级运行新的代码的过程
  • 流量治理

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

    • 负责分配请求在每个下游实例上的分布
    • 常见LB策略
      • Round Robin
      • Random
      • Ring Hash
  • 稳定性治理

    • 线上服务总是会出问题的,这与程序的正确性无关
      • 网络攻击,流量突增,机房断电,光纤被挖,机器故障,网络故障,机房空调故障
    • 治理措施
      • 限流
      • 熔断
      • 过载保护
      • 降级