熔断原理分析与源码解读

2022-08-31
阅读 9 分钟
2.5k
熔断机制(Circuit Breaker)指的是在股票市场的交易时间中,当价格的波动幅度达到某一个限定的目标(熔断点)时,对其暂停交易一段时间的机制。此机制如同保险丝在电流过大时候熔断,故而得名。熔断机制推出的目的是为了防范系统性风险,给市场更多的冷静时间,避免恐慌情绪蔓延导致整个市场波动,从而防止大规模股价下...

负载均衡原理分析与源码解读

2022-08-10
阅读 14 分钟
1.9k
上一篇文章一起学习了Resolver的原理和源码分析,本篇继续和大家一起学习下和Resolver关系密切的Balancer的相关内容。这里说的负载均衡主要指数据中心内的负载均衡,即RPC间的负载均衡。
封面图

五分钟给你的 gRPC 服务加上 HTTP 接口

2022-07-22
阅读 4 分钟
2.6k
gRPC 服务要加 HTTP 接口?go-zero 给大家带来极简的 RESTful 和 gRPC 服务开发体验的同时,社区又给我们提出了新的期望:我想只写一次代码既要 gRPC 接口也要 HTTP 接口既要。。。也要。。。也有道理嘛!你看用户怎么说:用户A:一套逻辑,api和rpc一起用户B:go-zero要是能简化这一步我感觉会成为go生态中最好的微服务...
封面图

go-zero微服务实战系列(十一、大结局)

2022-07-15
阅读 7 分钟
1.8k
本篇是整个系列的最后一篇了,本来打算在系列的最后一两篇写一下关于k8s部署相关的内容,在构思的过程中觉得自己对k8s知识的掌握还很不足,在自己没有理解掌握的前提下我觉得也很难写出自己满意的文章,大家看了可能也会觉得内容没有干货。我最近也在学习k8s的一些最佳实践以及阅读k8s的源码,等待时机成熟的时候可能会...

go-zero微服务实战系列(十、分布式事务如何实现)

2022-07-14
阅读 5 分钟
2.2k
在分布式应用场景中,分布式事务问题是不可回避的,在目前流行的微服务场景下更是如此。比如在我们的商城系统中,下单操作涉及创建订单和库存扣减操作两个操作,而订单服务和商品服务是两个独立的微服务,因为每个微服务独占一个数据库实例,所以下单操作就涉及到分布式事务问题,即要把整个下单操作看成一个整体,要么...

go-zero微服务实战系列(九、极致优化秒杀性能)

2022-07-12
阅读 10 分钟
2.2k
上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不优化处理掉,那么秒杀抢购活动开始后可能会出现消息堆积、消费延迟、数据不一致、甚至服务崩溃等问题,那么后果可想而知。本篇文章我们就一起来把这些隐患解决掉。

go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)

2022-07-05
阅读 6 分钟
2.3k
在前几篇的文章中,我们花了很大的篇幅介绍如何利用缓存优化系统的读性能,究其原因在于我们的产品大多是一个读多写少的场景,尤其是在产品的初期,可能多数的用户只是过来查看商品,真正下单的用户非常少。但随着业务的发展,我们就会遇到一些高并发写请求的场景,秒杀抢购就是最典型的高并发写场景。在秒杀抢购开始后...

go-zero微服务实战系列(七、请求量这么高该如何优化)

2022-07-04
阅读 4 分钟
1.5k
前两篇文章我们介绍了缓存使用的各种最佳实践,首先介绍了缓存使用的基本姿势,分别是如何利用go-zero自动生成的缓存和逻辑代码中缓存代码如何写,接着讲解了在面对缓存的穿透、击穿、雪崩等常见问题时的解决方案,最后还重点讲解了如何保证缓存的一致性。因为缓存对于高并发服务来说实在是太重要了,所以这篇文章我们还...

go-zero微服务实战系列(六、缓存一致性保证)

2022-06-24
阅读 2 分钟
1.9k
只要我们使用缓存,就必然会面对缓存和数据库间的一致性问题。如果缓存中的数据和数据库的数据不一致,那么业务应用从缓存中读取的数据就不是最新的数据,对业务的影响可想而知。比如我们把商品的库存数据存在缓存中,如果缓存中库存数据不对,那么可能就会影响下单操作,这是业务上很难接受的。本篇文章我们来一起聊一...

go-zero微服务实战系列(五、缓存代码怎么写)

2022-06-22
阅读 9 分钟
2.1k
缓存是高并发服务的基础,毫不夸张的说没有缓存高并发服务就无从谈起。本项目缓存使用Redis,Redis是目前主流的缓存数据库,支持丰富的数据类型,其中集合类型的底层主要依赖:整数数组、双向链表、哈希表、压缩列表和跳表五种数据结构。由于底层依赖的数据结构的高效性以及基于多路复用的高性能I/O模型,所以Redis也提...

go-zero微服务实战系列(四、CRUD热身)

2022-06-21
阅读 8 分钟
2.3k
上一篇文章我们把整个项目的架子搭建完成,服务在本地也已经能运行起来了,顺利成章的接下来我们就应该开始写业务逻辑代码了,但是单纯的写业务逻辑代码是比较枯燥的,业务逻辑的代码我会不断地补充到 lerbon 项目中去,关键部分我也会加上注释。

go-zero微服务实战系列(三、API定义和表结构设计)

2022-06-17
阅读 17 分钟
2.4k
<!-- go-zero微服务实战系列(三、API定义和表结构设计)-->前两篇文章分别介绍了本系列文章的背景以及根据业务职能对商城系统做了服务的拆分,其中每个服务又可分为如下三类:api服务 - BFF层,对外提供HTTP接口rpc服务 - 内部依赖的微服务,实现单一的业务功能rmq服务 - 负责流式任务的处理,如消费kafka等等adm...

go-zero 微服务实战系列(二、服务拆分)

2022-06-15
阅读 4 分钟
2.8k
微服务架构是一种架构风格,它将一个大的系统构建为多个微服务的集合,这些微服务是围绕业务功能构建的,服务关注单一的业务功能,这些服务具有以下特点:

go-zero 微服务实战系列(一、开篇)

2022-06-14
阅读 3 分钟
2.7k
在社区中经常看到有人问有没有基于 go-zero 的比较完整的项目参考,该类问题本质上是想知道基于 go-zero 的项目的最佳实践。完整的项目应该是一个完整的产品功能,包含产品需求、架构设计、关键流程的编码、表设计以及各种性能优化和数据一致性等,是一个真正贴近生产级的项目,是可以直接拿来在自己的生产项目中进行参...

微服务效率工具 goctl 深度解析(上)

2022-06-10
阅读 18 分钟
3.1k
goctl 的最早功能是为了解决 GRPC 内网调试问题,大约是在 2019 年,在我们的生产环境中,rpc 是内网隔离的,不可通过外网访问,为了快速去 mock 一些线上 RPC client 的请求,就简单的实现了第一版本的代码生成,主要目的是去访问 RPC Server 做一些调试。

类型安全的 Go HTTP 请求

2022-06-08
阅读 4 分钟
4.6k
本文是对泛型的基本思想及其在 Go 中的实现的一个比较容易理解的介绍,同时也是对围绕泛型的各种性能讨论的简单总结。首先,我们来看看泛型所解决的核心问题。

用 Go 快速开发一个 RESTful API 服务

2022-06-07
阅读 7 分钟
2.9k
对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,而单体服务具有架构简单,部署简单,开发成本低等优点,可以帮助我们快速实现产品需求。我们在使用单体服务快速交付业务价值的同时,也需要为业务的发展预留可能性,所以我们一般会在单体服务中清晰的拆分不同的业务模块。

简单易懂的 Go 泛型使用和实现原理介绍

2022-06-01
阅读 4 分钟
2.2k
本文是对泛型的基本思想及其在 Go 中的实现的一个比较容易理解的介绍,同时也是对围绕泛型的各种性能讨论的简单总结。首先,我们来看看泛型所解决的核心问题。

Go 项目配置文件的定义和读取

2022-05-31
阅读 3 分钟
2.4k
我们在写应用时,基本都会用到配置文件,从各种 shell 到 nginx 等,都有自己的配置文件。虽然这没有太多难度,但是配置项一般相对比较繁杂,解析、校验也会比较麻烦。本文就给大家讲讲我们是怎么简化配置文件的定义和解析的。
封面图

Go 单体服务开发最佳实践

2022-05-30
阅读 6 分钟
2.5k
对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,并且此时用户体量也很小,QPS 也非常低,我们应该使用更简单的技术架构来加速业务价值的交付,此时单体的优势就体现出来了。

通过 SingleFlight 模式学习 Go 并发编程

2022-05-27
阅读 4 分钟
1.6k
最近接触到微服务框架go-zero,翻看了整个框架代码,发现结构清晰、代码简洁,所以决定阅读源码学习下,本次阅读的源码位于core/syncx/singleflight.go。

进程内优雅管理多个服务

2022-05-26
阅读 4 分钟
2.1k
在 go-zero 社区里,经常会有同学问,把 API gateway 和 RPC service 放在同一个进程内可不可以?怎么弄?有时也会有同学把对外服务和消费队列放在一个进程内。咱们姑且不说此种用法合理与否,因为各个公司的业务场景和开发模式的差异,我们就只来看看此类问题怎么解比较优雅。

Go Web 服务框架实现详解

2022-05-25
阅读 10 分钟
3.2k
此系列文章要求读者有一定的golang基础。go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直...

go-zero 效率工具一览图

2022-05-24
阅读 1 分钟
1.5k
高清无码图昨晚发了朋友圈,结果众多好友告诉我,看不清,看不清。。。所以,今日特奉上高清无码大图,一字不差,供大家慢慢消化。[链接]原图(8.5MB)奉上,拿走不谢!额外福利除了奉上高清无码原图外,还悄悄告诉你一个无敌技巧,输入 goctl 之后,按 Tab 键有可用命令的完整提示,如图:再比如:是不是不看图也能使用...

go-zero代码生成器助你高效开发

2022-05-23
阅读 5 分钟
2.5k
Protocol Buffers 是谷歌推出的编码标准,它在传输效率和编解码性能上都要优于 JSON。但其代价则是需要依赖中间描述语言(IDL)来定义数据和服务的结构(通过 *.proto 文件),并且需要一整套的工具链(protoc 及其插件)来生成对应的序列化和反序列化代码。除了谷歌官方提供的工具和插件(比如生成 go 代码的 protoc-gen-go...

构建 Go 应用 docker 镜像的十八种姿势

2022-05-20
阅读 6 分钟
2.4k
我夜以继日,加班加点开发了一个最简单的 Go Hello world 应用,虽然只是跑了打印一下就退出了,但是老板也要求我上线这个我能写出的唯一应用。

史上最强代码自测方法,没有之一!

2022-05-19
阅读 9 分钟
2.9k
特别说明:这个真的不是标题党,我写代码20+年,真心认为 go fuzzing 是我见过的最牛逼的代码自测方法。我在用 AC自动机 算法改进关键字过滤效率(提升~50%),改进 mapreduce 对 panic 的处理机制的时候,都通过 go fuzzing 发现了边缘情况的 bug。所以深深的认为,这是我见过最牛逼的代码自测方法,没有之一!go fuzzi...

go-zero效率工具一览图

2022-05-18
阅读 1 分钟
1.6k
高清无码图昨晚发了朋友圈,结果众多好友告诉我,看不清,看不清。。。所以,今日特奉上高清无码大图,一字不差,供大家慢慢消化。额外福利除了奉上高清无码原图外,还悄悄告诉你一个无敌技巧,输入 goctl 之后,按 Tab 键有可用命令的完整提示,如图:再比如:是不是不看图也能使用了呢?快来告诉我们,你还想 goctl 加...

微服务从代码到k8s部署应有尽有大结局(k8s部署)

2022-05-17
阅读 9 分钟
3k
整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中间件,所用到的技术栈基本是go-zero项目组的自研组件,基本是go-zero全家桶了。

微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)

2022-05-14
阅读 8 分钟
2.3k
1、概述项目开发好后,我们需要部署,我们接下来就基于gitlab + jenkins + harbor + k8s 搭建部署环境gitlab: 放代码,可以做cijenkins: 做cd发布项目harbor: 镜像仓库k8s: 运行服务我们只在k8s内部运行服务,至于中间件(mysql、redis、es等)就会部署在k8s之外,如果你是线上使用云服务可以直接使用云服务,如果自建也最...