微服务架构

微服务定义

  • 六个特点
    • 一小组服务
    • 独立进程
    • 轻量级通信
    • 基于业务能力
    • 独立部署
    • 无集中式管理
  • 定义
    • 松散耦合
    • soa
    • bounded context

微服务的利弊

    • 强模块化边界
    • 可独立部署
    • 技术多样性
    • 分布式复杂度
    • 最终一致性
    • 运维复杂性
    • 测试复杂性

康威法则

设计系统的组织,其产生的设计和架构,等价组织的组织架构。

微服务架构的适用性

  • 考虑生产力和系统复杂度
  • 单块优先

微服务组织架构

  • End-end ownership
  • 跨职能微服务产品团队 -> API <- 平台团队

微服务中台

  • 业务前台
    • 应用: web app ( 渠道: 第三方接入 )
  • 业务中台
    • 核心业务层
  • 技术中台

    • PaaS云平台: 应用监控 持续交付 服务框架 资源调度 后台服务 ( 大数据 AI )
    • IaaS云平台: 计算 存储 网络 监控 安全 IDC
  • 大中台小前台

服务分层(逻辑)

  • 外部设备
  • 微服务(SOA)
    • 聚合服务(适配服务 边界服务): Web BF, Mobile BFF, Pubilc BFF
    • 基础服务(核心领域服务 公共服务 中间层服务)

微服务技术架构体系

  • 接入层
    • 外部+内部 LB
  • 网关层
    • 作用:反向代理 限流熔断
    • 组成:内部GW H5GW 无线GW 第三方GW 开放平台GW
  • 业务服务层
    • 聚合服务 基础服务
  • 支撑服务
    • 组成:注册发现 集中配置 容错限流 认证授权 日志聚合 监控告警 后台服务
  • 平台服务
    • 组成:发布系统 集群资源调用 镜像治理 资源治理 IAM
  • 基础设置
    • 计算 网络 存储 NOC监控 安全 IDC
  • 六层体系中的纵向能力
    • 微服务开发框架
    • 持续交付流水线
    • 端到端工具链
    • 工程实践与规范

服务发现机制

三种主流服务发现模式

  • 传统LB模式
    • DNS –Discover–> Consumer –Invoke–> Load Balancer –Load Balancing Invoke–> Service Provider
  • 进程内LB模式
    • Service Registry –Discover–> Consumer(LB) –Load Balancing & Invoke–> ServiceProvider –Registry & Keep Alive–> Service Registry
  • 主机独立LB模式
    • Service Registry –Discover–> Host( Consumer -> LB ) –Load Balancing & Invoke–> ServiceProvider –Registry & Keep Alive–> Service Registry

网关

  • 四项基本功能
    • 反向路由
    • 安全认证
    • 限流熔断
    • 日志监控

网关架构

Http Request -> pre filters -> router filters -> origin server -> router filters -> post filters -> Http Response

路由发现体系

  • 服务注册中心 -> 服务治理

配置中心

  • 统一配置
  • 动态配置
  • Config Server -> Service

微服务中两种典型通信方式

RPC REST
耦合性 强耦合 松散耦合
消息协议 二进制 thrift,protobuf 文本 xml, json
通讯协议 TCP HTTP/HTTP2
性能 一般低于RPC
接口契约IDL thrift,protobuf IDL swagger
客户端 强类型客户端,一般自动生成,多语言 一般HTTP客户端可访问,可自动生成强类型客户端,多语言
案例 Dubbo,motan,Tars,grpc,thrift spring mvc/boot, Jax-rs,drop wizard
开发者友好 客户端比较方便,但二进制消息不可读 文本消息开发者可读
对外开放 对外一般需要转换成REST/文本协议 直接可以对外开放

微服务框架和治理

  • 服务注册发现
  • 负载均衡、软路由
  • 日志
  • Metrics
  • 调用链埋点
  • 限流熔断
  • 安全&访问控制
  • REST/RPC
  • 序列化 xml/json/二进制
  • 代码生成
  • 统一异常处理
  • 文档
  • 配置集成
  • 后台服务集成 DB/MQ/Cache

微服务分层监控和架构

  • 监控分层
    • 技术设施监控
      • 网络 交换机
      • 网络流量 丢包 错包 连接数
    • 系统层监控
      • 物理机 虚拟机 os
      • cpu memory network disk
    • 应用层监控
      • url service sql cache可用率 响应时间 qps
    • 业务监控
      • 登录 注册 下单 支付
    • 端用户体验监控
      • 性能 返回码 城市 地区 运营商 版本 系统
  • 监控点
    • 日志监控
    • Metrics监控
    • 健康检查
    • 调用链监控
    • 告警系统
  • 监控架构
    • 微服务 agent -> kafka
    • kafka –log–> ELK
    • kafka –metrics–> Influx DB/Grafana

微服务调用链监控

  • 调用链监控原理:span tree
  • 开源工具:CAT、Zipkin、Pinpoint

微服务限流熔断

  • 核心概念
    • 熔断
    • 隔离
    • 限流
    • 降级
  • 了解Hystrix如何实现限流熔断

容器部署 持续交付 发布模式

  • 容器的优势
    • 解决环境一致性问题
    • 镜像部署
  • 持续交付流水线
    • git –Jenkins 构建 单元测试 打镜像–> 镜像治理中心(docker registry)
    • 测试环境 –> UAT环境 –> 生产环境(蓝绿/灰度部署)
  • 蓝绿部署、灰度部署

容器调度以及基于容器的发布体系

  • mesos容器调度
    • ZooKeeper –> Master Leader/Master Standby
    • Master Leader –> Slave
  • 发布体系