标签「go-zero系列文章,搬自 微服务实践」下的文章

bjmayor发布于2021-09-01

缓存设计的好,服务基本不会倒

缓存设计的好,服务基本不会倒

[TOC]

大家好,很高兴来到“GO开源说” 跟大家分享开源项目背后的一些故事、设计思想以及使用方法,今天分享的项目是 go-zero,一个集成了各种工程实践的 web 和 rpc 框架。我是Kevin,go-zero 作者,我的 github id 是 kevwan。

go-zero 概览

go-zero 虽然是20年8月7号才开源,但是已经经过线上大规模检验了,也是我近20年工程经验的积累,开源后得到社区的积极反馈,在5个多月的时间里,获得了6k stars。多次登顶github Go语言日榜、周榜、月榜榜首,并获得了gitee最有价值项目(GVP),开源中国年度最佳人气项目。同时微信社区极为活跃,3000+人的社区群,go-zero爱好者们一起交流go-zero使用心得和讨论使用过程中的问题。

阅读全文»

bjmayor发布于2021-09-01

go-zero 是如何追踪你的请求链路

go-zero 是如何追踪你的请求链路

[TOC]

微服务架构中,调用链可能很漫长,从 httprpc ,又从 rpchttp 。而开发者想了解每个环节的调用情况及性能,最佳方案就是 全链路跟踪。追踪的方法就是在一个请求开始时生成一个自己的 spanID ,随着整个请求链路传下去。我们则通过这个 spanID 查看整个链路的情况和性能问题。

下面来看看 go-zero 的链路实现。

阅读全文»

bjmayor发布于2021-08-31

2020最佳人气项目之Go Web框架

2020最佳人气项目之Go Web框架

[TOC]

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,其中rest是web框架模块,基于Go语言原生的http包进行构建,是一个轻量的,高性能的,功能完整的,简单易用的web框架。获得了2020码云最有价值项目和开源中国最佳人气项目奖。

阅读全文»

bjmayor发布于2021-08-31

go-zero 服务自适应降载保护设计

服务自适应降载保护设计

[TOC]

设计目的

  • 保证系统不被过量请求拖垮
  • 在保证系统稳定的前提下,尽可能提供更高的吞吐量

设计考虑因素

  • 如何衡量系统负载

    • 是否处于虚机或容器内,需要读取cgroup相关负载
    • 用1000m表示100%CPU,推荐使用800m表示系统高负载
  • 尽可能小的Overhead,不显著增加RT

  • 不考虑服务本身所依赖的DB或者缓存系统问题,这类问题通过熔断机制来解决

阅读全文»

bjmayor发布于2021-08-30

go-zero 限流下

go-zero 如何扛住流量冲击(二)

[TOC]

上一篇介绍的是 go-zero 中滑动窗口限流,本篇介绍另外一个 tokenlimit ,令牌桶限流。

阅读全文»

bjmayor发布于2021-08-30

go-zero 限流上

go-zero 如何扛住流量冲击(一)

[TOC]

不管是在单体服务中还是在微服务中,开发者为前端提供的API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性。即接口也需要安装上保险丝,以防止非预期的请求对系统压力过大而引起的系统瘫痪。

go-zero 集成了开箱即用的 限流器 。其中内置了两种限流器,也对应两类使用场景:

种类 原理 场景
periodlimit 单位时间限制访问次数 需要强行限制数据的传输速率
tokenlimit 令牌桶限流 限制数据的平均传输速率,同时允许某种程度的突发传输

本文就来介绍一下 periodlimit

阅读全文»