49 | 服务治理:如何进行限流、熔断与认证?
郑建勋
你好,我是郑建勋。
在之前我们已经完成了 Master 与 Worker 的核心功能。在大规模微服务集群中,为了保证微服务集群正常运行,还需要添加许多重要的功能,包括限流、熔断、认证与鉴权。这节课,就让我们来看看如何实现这些功能。
限流
限流指的是对给定时间内可能发生的事件的频率进行限制。一旦请求达到规定的上限,此后这段时间内的请求都将被丢弃。
限流对于公共 API 非常重要,它有下面几个优势。
提高服务的可用性和可靠性,并有助于防御或缓解一些常见的攻击(DoS 攻击、 DDoS 攻击、暴力破解、撞库攻击、网页爬取等)。
可用于成本控制,防止实验或错误配置的资源导致的意外账单(尤其适用于云厂商会按次计费这种情况)。
允许多个用户公平共享服务。
限流有多种算法,之前我们已经实现了令牌桶算法,其他的算法还有固定窗口算法、滑动日志算法、漏桶算法等,每种算法都有其优点和缺点。我们来回顾一下最经典的几种限流算法,方便你根据需要选择理想的限流方案。
固定窗口算法
固定窗口算法(Fixed Window Algorithm)指的是,限制固定时间窗口内请求的处理个数。例如每小时只允许处理 1000 个请求,或每分钟只允许处理 10 个请求。每个传入请求都会增加窗口的计数器,并且计数器会在一段时间后重置。如果计数器超过了阈值,后面的请求将会被丢弃,直到计数器被重置为止。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在大规模微服务集群中如何进行限流、熔断与认证。首先,详细讲解了限流的重要性,包括提高服务的可用性和可靠性、成本控制以及公平共享服务等优势。接着,对固定窗口算法和滑动日志算法两种常见的限流算法进行了详细介绍,并给出了算法的实现示例和代码解析。漏桶算法利用队列提供了一种简单、直观的方法来限制请求的速率。熔断器则是当依赖的下游服务异常时,在一段时间内禁止访问依赖服务的一种系统组件。文章还介绍了如何使用go-micro框架来实现限流,以及熔断器的状态和作用。另外,还详细介绍了认证与鉴权的重要性,以及JWT在认证中的应用。最后,总结了限流、熔断与认证这些重要功能在大规模微服务集群中的作用,以及如何用go-micro框架来实现这些功能。整体来说,本文内容详实,适合需要了解微服务集群限流、熔断与认证的技术人员阅读。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- mantra文档中给的各类插件地址都不对。比如,“hystrix 插件”的地址正确的是 https://github.com/go-micro/plugins/tree/main/v4/wrapper/breaker/hystrix 而不是 https://github.com/micro/go-plugins/tree/master/wrapper/breaker/hystrix。
作者回复: 👍🏻尽快会修复
2023-02-02归属地:北京1 - 胡军希望能在每个算法介绍中给个示意图,纯文字版不如图片直观易理解🙄
作者回复: 👌
2023-02-06归属地:浙江 - Realm在Kubernetes中,授权有: - ABAC(基于属性的访问控制)、 - RBAC(基于角色的访问控制)、 - Webhook、 - Node、 - AlwaysDeny(一直拒绝)和 - AlwaysAllow(一直允许) 这6种模式。 从1.6版本起,Kubernetes 默认启用RBAC访问控制策略。从1.8开始,RBAC已作为稳定的功能。通过设置–authorization-mode=RBAC,启用RABC。所以RBAC也就成了一种默认选用的授权模式。 RBAC三要素:用户、角色、权限。 用户与角色关联,根据规则赋予角色相关的权限,整体比较灵活,扩展性和可维护性较高。 etcd估计也是这个原因.2023-02-07归属地:浙江1
收起评论