青训营总结8(微服务架构)| 青训营

39 阅读2分钟

前序

今天总结微服务架构

微服务的原理和特征

1.1 基本概念

服务(service):

  • 一组具有相同逻辑的运行实体(用相同的代码运行的一组服务)。

实例(instance):

  • 一个服务中的,每个实体就是一个实例。

集群(cluster):

  • 服务内部的逻辑划分,一个集群包含一个或多个实例。

有状态/无状态服务:

  • 服务是否存储了可持续化的数据。

服务间通信

  • 对于微服务,服务间通信意味着网络传输,包括HTTP,RPC。

1.2 服务注册及发现

解决方案一(DNS)

问题:

  1. 本地DNS存在缓存,导致延时。
  2. 负载均衡问题
  3. 不支持探活
  4. 域名无法配置端口

解决方法二(注册服务中心)

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

1.3 流量特征

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

核心服务治理功能

2.1 服务发布

服务发布(deployment), 就是让一个服务升级运行新的代码的过程。

服务发布难点:

  • 服务不可用
  • 服务抖动
  • 服务回滚

解决方案:

  • 蓝绿部署(简单,但是需要两倍的资源)
  • 金丝雀发布

2.2 流量治理

在微服务架构下,我们可以基于地区,集群等维度,对端对端流量的服务路径进行精确控制。

2.3 负载均衡

负载均衡(load balance)负责分配请求在每个下游实例的分布。

常见负载均衡的策略:

  • round robin
  • random
  • ring hash
  • least request

2.4 稳定性治理

线上服务总是会出现问题,包括网络攻击,流量突增,机房断电,网络故障等。。。

解决方案:

  • 限流
  • 熔断
  • 过载保护
  • 降级

实际服务治理方案之重试

重试的意义

重试可以避免掉偶发的错误,提高SLA(Service-Level Agreement)

  • 降低错误率
    • 假设单次请求的错误概率是0.01,那么连续两次错误的概率是0.0001。
  • 降低长尾延时
    • 对于偶尔耗时长的请求,重试有机会提前返回
  • 容忍暂时性错误
  • 避开下游故障实例