负载均衡原理分析与源码解读
摘要:
![负载均衡原理分析与源码解读](https://img2022.cnblogs.com/blog/14470/202208/14470-20220810094948682-938871191.png)
上一篇文章一起学习了Resolver的原理和源码分析,本篇继续和大家一起学习下和Resolver关系密切的Balancer的相关内容。这里说的负载均衡主要指数据中心内的负载均衡,即RPC间的负载均衡。 传送门 服务发现原理分析与源码解读 基于go-zero v1.3.5 和 grpc-go v1.4
阅读全文
posted @
2022-08-10 09:50
万俊峰Kevin
阅读(1276)
推荐(2) 编辑
服务发现原理分析与源码解读
摘要:在微服务架构中,有许多绕不开的技术话题。比如服务发现、负载均衡、指标监控、链路追踪,以及服务治理相关的超时控制、熔断、降级、限流等,还有RPC框架。这些都是微服务架构的基础,只有打牢这些基础,才敢说对微服务是有了一点理解,出门也好意思和别人打招呼了,被人提问的时候也能侃侃而谈了,线上出了问题往往也能
阅读全文
posted @
2022-07-26 08:48
万俊峰Kevin
阅读(1190)
推荐(1) 编辑
五分钟给你的 gRPC服务 加上 HTTP 接口
摘要:gRPC 服务要加 HTTP 接口? go-zero 给大家带来极简的 RESTful 和 gRPC 服务开发体验的同时,社区又给我们提出了新的期望: 我想只写一次代码 既要 gRPC 接口 也要 HTTP 接口 既要。。。也要。。。 也有道理嘛!你看用户怎么说: 用户A:一套逻辑,api和rpc一
阅读全文
posted @
2022-07-19 09:24
万俊峰Kevin
阅读(3420)
推荐(1) 编辑
go-zero微服务实战系列(十一、大结局)
摘要:本篇是整个系列的最后一篇了,本来打算在系列的最后一两篇写一下关于k8s部署相关的内容,在构思的过程中觉得自己对k8s知识的掌握还很不足,在自己没有理解掌握的前提下我觉得也很难写出自己满意的文章,大家看了可能也会觉得内容没有干货。我最近也在学习k8s的一些最佳实践以及阅读k8s的源码,等待时机成熟的时
阅读全文
posted @
2022-07-11 09:28
万俊峰Kevin
阅读(3012)
推荐(6) 编辑
go-zero微服务实战系列(十、分布式事务如何实现)
摘要:在分布式应用场景中,分布式事务问题是不可回避的,在目前流行的微服务场景下更是如此。比如在我们的商城系统中,下单操作涉及创建订单和库存扣减操作两个操作,而订单服务和商品服务是两个独立的微服务,因为每个微服务独占一个数据库实例,所以下单操作就涉及到分布式事务问题,即要把整个下单操作看成一个整体,要么都成
阅读全文
posted @
2022-07-08 08:25
万俊峰Kevin
阅读(1140)
推荐(0) 编辑
go-zero微服务实战系列(九、极致优化秒杀性能)
摘要:上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不优化处理掉,那么秒杀抢购活动开始后可能会出现消息堆积、消费延迟、数据不一致、甚至服务崩溃等问题,那么后果可想而知。本篇文章我们就一起来把这些隐患解决掉。 批量数据聚
阅读全文
posted @
2022-07-04 08:16
万俊峰Kevin
阅读(1176)
推荐(1) 编辑
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
摘要:在前几篇的文章中,我们花了很大的篇幅介绍如何利用缓存优化系统的读性能,究其原因在于我们的产品大多是一个读多写少的场景,尤其是在产品的初期,可能多数的用户只是过来查看商品,真正下单的用户非常少。但随着业务的发展,我们就会遇到一些高并发写请求的场景,秒杀抢购就是最典型的高并发写场景。在秒杀抢购开始后用户
阅读全文
posted @
2022-06-30 09:57
万俊峰Kevin
阅读(1793)
推荐(1) 编辑
go-zero微服务实战系列(七、请求量这么高该如何优化)
摘要:前两篇文章我们介绍了缓存使用的各种最佳实践,首先介绍了缓存使用的基本姿势,分别是如何利用go-zero自动生成的缓存和逻辑代码中缓存代码如何写,接着讲解了在面对缓存的穿透、击穿、雪崩等常见问题时的解决方案,最后还重点讲解了如何保证缓存的一致性。因为缓存对于高并发服务来说实在是太重要了,所以这篇文章我
阅读全文
posted @
2022-06-27 09:47
万俊峰Kevin
阅读(931)
推荐(1) 编辑
详解连接池参数设置(边调边看)
摘要:
![详解连接池参数设置(边调边看)](https://img2022.cnblogs.com/blog/14470/202206/14470-20220621093643319-1237864186.png)
你有同感吗? 当大家在开发服务端代码的时候,会不会经常有如下疑问? 纳闷 MySQL 连接池到底有多少连接? 每个连接的生命周期持续多久? 连接异常断开的时候到底是服务端主动断的,还是客户端主动断的? 当长时间没有请求的时候,底层库是否有 KeepAlive 请求? 复杂网络情况的处理从来都是后端开
阅读全文
posted @
2022-06-21 09:37
万俊峰Kevin
阅读(787)
推荐(0) 编辑
go-zero微服务实战系列(五、缓存代码怎么写)
摘要:缓存是高并发服务的基础,毫不夸张的说没有缓存高并发服务就无从谈起。本项目缓存使用Redis,Redis是目前主流的缓存数据库,支持丰富的数据类型,其中集合类型的底层主要依赖:整数数组、双向链表、哈希表、压缩列表和跳表五种数据结构。由于底层依赖的数据结构的高效性以及基于多路复用的高性能I/O模型,所以
阅读全文
posted @
2022-06-20 10:01
万俊峰Kevin
阅读(3003)
推荐(0) 编辑
go-zero微服务实战系列(四、CRUD热热身)
摘要:
![go-zero微服务实战系列(四、CRUD热热身)](https://img2022.cnblogs.com/blog/14470/202206/14470-20220616091325844-1394339337.png)
上一篇文章我们把整个项目的架子搭建完成,服务在本地也已经能运行起来了,顺利成章的接下来我们就应该开始写业务逻辑代码了,但是单纯的写业务逻辑代码是比较枯燥的,业务逻辑的代码我会不断地补充到 lerbon 项目中去,关键部分我也会加上注释。 那么本篇文章我主要想和大家分享下服务的基本配置和几个典型的代码
阅读全文
posted @
2022-06-16 09:13
万俊峰Kevin
阅读(2752)
推荐(1) 编辑
go-zero微服务实战系列(三、API定义和表结构设计)
摘要:
![go-zero微服务实战系列(三、API定义和表结构设计)](https://img2022.cnblogs.com/blog/14470/202206/14470-20220613085101617-557256021.png)
可能大家在工作中都遇到过这样的场景,就是代码更新了但是文档没有更新,从而产生一些问题导致一些扯皮事情的发生。这个问题的本质是服务和文档是割裂的。我们期望的是文档即协议,协议即服务,这个理念与go-zero的api定义不谋而合。
阅读全文
posted @
2022-06-13 08:51
万俊峰Kevin
阅读(2256)
推荐(2) 编辑
go-zero 微服务实战系列(二、服务拆分)
摘要:
![go-zero 微服务实战系列(二、服务拆分)](https://img2022.cnblogs.com/blog/14470/202206/14470-20220609094529908-622209543.png)
微服务架构是一种架构风格,它将一个大的系统构建为多个微服务的集合,这些微服务是围绕业务功能构建的,服务关注单一的业务功能,这些服务具有以下特点:
高度可维护和可测试
松散的耦合
可独立部署
围绕业务功能进行构建
由不同的小团队进行维护
阅读全文
posted @
2022-06-09 09:46
万俊峰Kevin
阅读(2876)
推荐(0) 编辑
go-zero 微服务实战系列(一、开篇)
摘要:
![go-zero 微服务实战系列(一、开篇)](https://img2022.cnblogs.com/blog/14470/202206/14470-20220606093030062-1756964526.png)
前言 在社区中经常看到有人问有没有基于 go-zero 的比较完整的项目参考,该类问题本质上是想知道基于 go-zero 的项目的最佳实践。完整的项目应该是一个完整的产品功能,包含产品需求、架构设计、关键流程的编码、表设计以及各种性能优化和数据一致性等,是一个真正贴近生产级的项目,是可以直接拿来在自
阅读全文
posted @
2022-06-06 09:31
万俊峰Kevin
阅读(2572)
推荐(2) 编辑
微服务效率工具 goctl 深度解析(上)
摘要:
![微服务效率工具 goctl 深度解析(上)](https://img2022.cnblogs.com/blog/14470/202205/14470-20220530095131831-1391581617.png)
前言 本文根据 安前松 的视频分享整理而来,视频回放地址如下: https://www.bilibili.com/video/BV1Hr4y1x7Ne goctl 的由来 1. goctl 的诞生 goctl 的最早功能是为了解决 GRPC 内网调试问题,大约是在 2019 年,在我们的生产环境中,
阅读全文
posted @
2022-05-30 09:52
万俊峰Kevin
阅读(1683)
推荐(0) 编辑
类型安全的 Go HTTP 请求
摘要:对 Gopher 来说,虽然我们基本都是在写代码让别人来请求,但是有时候,我们也需要去请求第三方提供的 RESTful 接口,这个时候,我们才能感受到前端同学拼接 HTTP 请求参数的痛苦。
阅读全文
posted @
2022-05-23 09:17
万俊峰Kevin
阅读(604)
推荐(0) 编辑
用 Go 快速开发一个 RESTful API 服务
摘要:对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,而单体服务具有架构简单,部署简单,开发成本低等优点,可以帮助我们快速实现产品需求。我们在使用单体服务快速交付业务价值的同时,也需要为业务的发展预留可能性,所以我们一般会在单体服务中清晰的拆分不同的业务模块。
阅读全文
posted @
2022-05-16 09:21
万俊峰Kevin
阅读(1457)
推荐(1) 编辑
Go 项目配置文件的定义和读取
摘要:
![Go 项目配置文件的定义和读取](https://img2022.cnblogs.com/blog/14470/202205/14470-20220509092858621-1716708027.png)
我们在写应用时,基本都会用到配置文件,从各种 shell 到 nginx 等,都有自己的配置文件。虽然这没有太多难度,但是配置项一般相对比较繁杂,解析、校验也会比较麻烦。本文就给大家讲讲我们是怎么简化配置文件的定义和解析的。
阅读全文
posted @
2022-05-09 09:29
万俊峰Kevin
阅读(1387)
推荐(1) 编辑
简单易懂的 Go 泛型使用和实现原理介绍
摘要:
![简单易懂的 Go 泛型使用和实现原理介绍](https://img2022.cnblogs.com/blog/14470/202205/14470-20220505110121021-1377126466.png)
本文是对泛型的基本思想及其在 Go 中的实现的一个比较容易理解的介绍,同时也是对围绕泛型的各种性能讨论的简单总结。
阅读全文
posted @
2022-05-05 11:02
万俊峰Kevin
阅读(14081)
推荐(1) 编辑
Go单体服务开发最佳实践
摘要:对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,并且此时用户体量也很小,QPS也非常低,我们应该使用更简单的技术架构来加速业务价值的交付,此时单体的优势就体现出来了。
阅读全文
posted @
2022-04-26 09:46
万俊峰Kevin
阅读(2405)
推荐(2) 编辑