微服务架构 | 青训营笔记

75 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

重点内容概括

  • 微服务架构原理
  • 服务发布
  • 流量治理
  • 负载均衡
  • 稳定性治理

详细知识

微服务架构原理

  • 服务(Service):一组具有相同逻辑(代码相同)的运行实体
  • 实例(Instance):服务中的一个运行实体
  • 集群(Cluster):服务内部根据逻辑对实例的划分
  1. 实例与进程没有绝对的对应关系,可能一个实例对应一个或多个进程
  2. 根据是否存储了可持久化的数据,将服务分为有状态服务和无状态服务

  为了灵活控制各个服务,我们创建了一个“服务注册中心”,由服务注册中心完成服务与其实例地址( IP地址和端口)的动态对应,实现负载均衡、服务探活等功能。

服务治理

服务发布

  服务发布(Deployment)是指让一个服务升级并运行新代码的过程。服务发布的三个难点是服务不可用、服务抖动和服务回滚:

  • 服务不可用:服务的所有实例同时更新,整个服务在一段时间内不可用
  • 服务抖动:因某些实例正在更新,造成服务收到的部分请求丢失
  • 服务回滚:发布后的代码出现 Bug 等问题,需要回滚至服务发布前的状态

  为了解决以上问题,目前的常用策略有以下几种:

  • 蓝绿部署:将服务分为两部分,将其中一部分依次下线并更新,待其重新上线后下线、更新、上线另一部分。

    优点:简单、稳定

    缺点:资源需求大,因此适合在流量较低使进行

  • 灰度发布:又叫“金丝雀发布”,即先上线一个新版本的实力,若其稳定则下线一个老版本实例,依次进行,直至完成所有实例的更新。

    优点:节省资源

    缺点:实现复杂

流量治理

  微服务架构下,可以基于地区、集群、实例、请求等维度对颠倒段流量的路径进行治理。

负载均衡

  负载均衡(Load Balance)指分配请求在每个下游实例上的分布,常见的负载均衡策略有:

  • Round Robin:每个实例绝对公平地获得请求
  • Random:随机请求
  • Ring Hash:保证同一个用户请求在同一个实例上
  • Least Request

稳定性治理

  在实际生产环境中,难免遇到一些与代码质量无关的问题,如网络攻击、机房断电等、光缆被盗、古筝计划等。对于这些问题,我们希望在软件层面提供一些保护,如限流、熔断、过载保护、降级等:

  • 限流:服务限制自己的入口带宽,保证一段时间内的请求不会过多
  • 熔断:当调用某服务多次超时时,停止调用该服务,一段时间后再重试
  • 过载保护:与限流类似,但限制条件为服务内节点的资源压力(如 CPU 使用率)
  • 降级:保证部分服务的正常运行,限制部分非重要服务的运行

本文若有不足之处,欢迎纠正(≧^.^≦)喵~
我的其他笔记,可在掘金或 Github( github.com/DoudiNCer/I… )阅读