微服务概览

  • 组件服务化
    • 基础框架库
    • service代码 + 基础框架库 + 第三方依赖 = 业务微服务
    • rpc + mq = 轻量级通讯
  • 业务组织服务化
    • 大前端 -> 网关(BFF)-> 业务 -> 平台 -> 基础设施
  • 去中心化
    • 技术:
    • 数据:独立DB&cache
    • 治理:
  • 基础设施自动化
    • CICD:gitlab + gitlab Hooks + k8s
    • Testing:测试环境 + 单元测试 + API自动化测试
    • Prod:k8s,Prometheus、ELK、Conrtol Panle
  • Design For Failtrue <发送时保守,接收时开放,最大限度的保持接口兼容>

    • 隔离
    • 超时控制
    • 负载保护
    • 限流
    • 降级
    • 重试
    • 负载均衡

      微服务设计

  • API Gateway

    • Chrome -> API Gateway -> BFF -> Microservice
      • BFF 可以是 SSR 或者是接口聚合与兼容层
      • BFF 可以按照业务场景划分多个BFF
      • BFF图片示例

MicroService - 图1

  • 微服务拆分
    • 业务部门拆分
    • DDD划分不同业务边界元素
      • 边界是<解决不同业务问题>的问题域
      • 对应的解决方案
    • CQRS
      • 命令端<负责做复杂更新创建删除逻辑>
      • 查询端<只负责查询>

MicroService - 图2

  • 安全验证
    • 网关校验
    • BFF -> microservice 传递userID
    • 微服务内部权限调用验证 单接口是否有权限

      GRPC

  • 特性
    • 基于HTTP2
    • 支持多语言
  • HealthCheck

    • 上游服务提供者不稳定时,被下游感知并从负载均衡中移除
    • K8s健康检查
    • 平滑发布
      • 平滑上线
      • 平滑下线
        • 收到kill信号
          • 发送下线的信息给注册中心
          • healthCheck标记失败
          • 超时2个心跳周期,退出
          • 如果超时,会被K8s强制退出

            服务发现

  • 客户端发现

    • 更加微服务,少一次网络跳转
  • 服务端发现
    • 只需要知道服务的域名即可(我们现在使用的就是服务端发现)
  • B站服务发现 - 魔改 eureka
    • AP系统
      • 保证最终一致性;如果某些服务异常,但是没有通知到discover服务,同时discover服务还没有来的及去心跳检查;自身的healthcheck可以保证剔除异常用户;
      • 可用性必须保证,否则就蹦了
      • 分区容错性,当某个节点挂了,仍然有其他几个服务提供数据访问能力;
    • 服务提供者会发送注册,新增,移除命令到discover服务
    • 消费者发送生产者healthCheck
    • 长轮训,如果30秒内有变化,则返回,否则则挂起,30秒超时
    • 一个discover服务收到注册信息广播给其他discover服务
    • discover定期检测服务提供者是否有数据,失效则剔除;如果短时间大量心跳丢失,将开启自我保护,保留过期服务不删除

MicroService - 图3

多集群

  • 单一集群保证可用性:N+2的方式冗余节点

    多租户