微服务框架-不变的基建 | 青训营笔记

91 阅读3分钟

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

一、本堂课重点内容:

微服务架构是当前大多数互联网公司的标准架构。本次课程主要学习微服务架构的由来及原理,了解服务治理功能是如何工作的。

二、详细知识点介绍:

(1)微服务框架的介绍

微服务的优势:开发效率高,业务独立设计,自下而上,故障隔离
微服务的劣势:治理、运维难度大,观测挑战,安全性,分布式系统
微服务架构核心要素:服务治理,可观测性,安全

(2)微服务架构原理及特征

服务是一组具有相同逻辑的运行实体。一个服务中,每个运行实体即为一个实例。集群通常指服务内部的逻辑划分,包含多个实例。
对于单体服务,不同模块通信只是简单的函数调用,对于微服务,服务间通信意味着网络传输。
在代码层面,指定调用一个目标服务的地址的方法为:新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。

(3)核心服务治理功能

服务发布,即指让一个服务升级运行新的代码的过程。包括蓝色部署、灰度发布。
服务发布的难点包括:服务不可用,服务抖动,服务回滚。 在微服务架构下,我们可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制。
负载均衡负责分配请求在每个下游实力上的分布。
线上服务总是会出现问题的,这与程序的正确性无关。主要原因有:网络攻击、流量突增、机房断电、光纤被挖、机器故障、机房空调故障等。
微服务架构中典型的稳定性治理功能有:限流、熔断、过载保护、降级等。

(4)字节跳动服务治理实践

重试可以避免掉偶发的错误,提高SLA(service-level agreement)。主要作用有:降低错误率、降低长尾延时、容忍暂时性的错误、避免下有故障实例。
重试的难点包含一下三点:1、幂等性:多次请求可能会造成数据不一致。2、重试风暴:随着调用深度的增加,重试次数会指数级上涨。3、超时设置:假设一个调用正常是1s的超时时间,如果允许一次重试,那么第一次请求经过多少时间,才开始重试呢。
限制重试比例:设定一个重试比例阈值(例如1%),重试次数占有请求比例不超过该阈值。
防止链路重试:链路层面的防重试风暴的核心是限制每层都发生重试,理想情况下只有最下一层发生重试。
Hedged requests:对于可能超时的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应。

三、实践练习例子:

(1)本地函数调用

func LocalFunc(x int) int{
    res := calculate(x*2)
    return res
}

(2)远程函数调用

func RemoteFunc(ctx context.Context, x int) (int, error){
    ctx2, defer_func:=context.WithTimeout(ctx, time.Second)
    defer defer_func()
    
    res, err:=grpc_client.Calculate(ctx2, x*2)
    return res, err
}

四、课后个人总结:

微服务框架可以分为侵入式和非侵入式两种。Spring Cloud就是侵入式微服务框架,通过Eruka Server作为服务注册中心,在微服务单元上配置使用Eureka Client向注册中心进行注册。非入侵式的微服务框架将服务注册和服务调用从现有的服务中抽离出来,形成一个服务代理。

五、引用参考:

blog.csdn.net/polo2044/ar…