微服务| 青训营笔记

127 阅读5分钟

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

微服务框架

由于互联网的发展、硬件的发展,需求复杂性的多样化以及计算机理论技术的发展,系统架构不断演进。

微服务的核心要素包括:服务治理、可观测性、安全

原理及特征

服务:一组具有相同逻辑的运行实体。 实例:一个服务中,每个运行实体即为一个实例

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

对于单体服务,不同模块通信只是简单的函数调用。而对于微服务,服务间通信意味着网络传输。

核心服务治理功能

服务发布,即指让一个服务升级运行新的代码的过程

蓝绿部署

蓝绿色部署是一种通过运行两个相同的称为 BLUE 和 GREEN 的生产环境来减少停机时间和降低风险的技术。

蓝绿部署,以颜色命名,简单的理解就是,线上有两套集群环境,在架构图中,一套标记成蓝色,称为蓝色集群BLUE;一套标记为绿色,称为绿色集群GREEN。通过将流量引入两个集群,完成系统升级切换。

步骤一:部署绿色集群,这个时候是初始状态,蓝色集群承担全部责任,接收全部流量,等待被替换。绿色集群刚刚部署,还没有投入使用,流量为0,等待验证和上线。

步骤二:蓝色集群流量不变,向绿色集群引入流量。这个过程可以分成几个阶段完成。第一个阶段,引入少量非实时流量,仅用于数据测试;第二个阶段,引入全部实时流量,用于做系统验证。

步骤三:切断向蓝色集群引入流量,将全部流量引入绿色集群。这个时候,绿色集群已经承担全部责任,接收全部流量。这个过程也可以分阶段操作。第一个阶段,平衡蓝色和绿色集群流量,也就是蓝色和绿色集群一同承担职责;第二个阶段,切断蓝色集群流量,流量全部写入绿色集群。是否采用分阶段操作,完全看升级的功能是否是破坏性的,是否可兼容。

步骤四:监控系统运行,这个过程是必要的。因为没有人能够保证测试时100%的覆盖的,所以新集群可能会出现这样那样、或大或小的问题,如果评估需要回滚,就需要将全部流量切换到蓝色集群。也完成了版本回滚。

金丝雀发布(灰度发布)

金丝雀发布,与蓝绿部署不同的是,它不是非黑即白的部署方式,所以又称为灰度发布。它能够缓慢的将修改推广到一小部分用户,验证没有问题后,再推广到全部用户,以降低生产环境引入新功能带来的风险。

步骤一:将流量从待部署节点移出,更新该节点服务到待发布状态,将该节点称为金丝雀节点;

步骤二:根据不同策略,将流量引入金丝雀节点。策略可以根据情况指定,比如随机样本策略(随机引入)、狗粮策略(就是内部用户或员工先尝鲜)、分区策略(不同区域用户使用不同版本)、用户特征策略(这种比较复杂,需要根据用户个人资料和特征进行分流,类似于千人千面);

步骤三:金丝雀节点验证通过后,选取更多的节点称为金丝雀节点,重复步骤一和步骤二,直到所有节点全部更新

负载均衡

负载均衡负责分配请求在每个下游实例上的分布。

线上服务总是会出问题,包括如网络攻击、流量突增、网络故障等等。对于这些场景,微服务架构中典型的稳定性治理功能有限流、熔断、过载保护、降级这几种方案

流量控制,可以通过地区,集群,机器,请求等维度来进行流量控制,

负载均衡,一致性哈希,round,Robin等策略

稳定性治理:

  1. 限流 限制流量的输入,拒接部分流量,让服务能够稳定进行
  2. 熔断 服务处理不过来了,断掉连接,类比跳闸,
  3. 过载保护 通过动态过载组件来检测服务的CPU的使用程度,如果有过载迹象,则拒绝一些请求
  4. 降级 会给流量分等级,如果压力过大,拒绝等级低的请求,保持用户的正常体验。

重试

重试的意义: 降低错误率,降低长尾延迟,容忍暂时性的错误,避开下游故障实例。

重试的难点

不能给所有的请求都加上重试 post发起多次可能会造成数据错误 重试风暴(雪崩)

微服务有很深的调用链路,可能有几十层,链路加深,会对错误进行放大

解决方法

  • 限制重试比例,如果大比率失败,则没有必要重试 防止链路重试,

  • 最理想就只有最底层进行重试,避免放大

  • 对于延迟高的请求,可以对它下游的实例再发起请求

  • 确保幂等性

  • 进行超时设置