前言
在社区中常常看到有人问有没有基于 go-zero 的比拟残缺的我的项目参考,该类问题实质上是想晓得基于 go-zero 的我的项目的最佳实际。残缺的我的项目应该是一个残缺的产品性能,蕴含产品需要、架构设计、要害流程的编码、表设计以及各种性能优化和数据一致性等,是一个真正贴近生产级的我的项目,是能够间接拿来在本人的生产我的项目中进行参考的,而目前社区并没有相似的比拟残缺的开源我的项目参考,因而决定和大家一起从零开始基于 go-zero 构建一个残缺的贴近生产的我的项目。
该系列的主题是基于 go-zero 构建一个高并发的零碎,为神马要抉择这个主题呢?我猜大家肯定感触到了 CRUD 的干燥,而是心愿我的项目是高并发的是带有肯定挑战的,可能咱们工作中的我的项目申请量比拟低,次要以实现性能为主。然而,古代的互联网产品随时都有面对突发大流量的可能,比方咱们的商城平时可能业务流量比拟安稳,但某一天经营忽然说要做一次秒杀流动来推广,如果没有提前做好应答高并发的筹备,咱们的服务很可能是扛不住的,后果也就可想而知。所以咱们平时就须要提前储备足够多的高并发的常识,当遇到高并发需要的场景的时候就可能从容应对。
该系列为实战系列,过于根底的常识可能会比拟少波及,所以须要大家具备以下根底能力:
- 理解 go 语言语法和根本应用姿态,请参考文档
- 本系列我的项目数据库应用 Mysql,请参考文档
- 本系列我的项目缓存应用 Redis,请参考文档
- 本系列我的项目音讯队列应用 Kafka,请参考文档
- 理解 go-zero 根本应用,请参考文档
为什么抉择 go-zero?
go-zero 为咱们提供了许多高并发场景下的实用工具,比方为了升高接口耗时咱们往往须要并发的申请依赖的服务,这个时候咱们能够应用 mapreduce 并行的解决申请;面对海量申请为了升高 Redis 压力和进步响应工夫,咱们能够应用 collection 构建本地缓存;防止用户间断申请造成服务压力能够应用 limit 做用户级别的限流等等。好的框架可能给我的我的项目开发带来事倍功半的成果,Go-zero 的简洁易用性与内置的开箱即用的工具和服务治理能力助力咱们构建一个高并发高牢靠的零碎。
产品需要
为了更加贴近咱们实在的我的项目开发,我的项目会基于实在的产品需要进行构建。商城是咱们平时接触比拟多而又比较复杂的零碎,所以咱们决定通过构建商城零碎来和大家一起学习如何基于 go-zero 构建高并发零碎。商城的性能点十分多,咱们没有方法把所有的性能点都一一演示,但会实现一个 mvp 版本,咱们会在 mvp 版本中把 go-zero 的外围性能和构建高并发商城零碎的外围点都演示进去。
如下思维导图列出了该电商零碎次要实现的性能:
产品原型图
原型图是咱们实现性能的次要参考,上面列出了商城零碎次要的页面 UI,通过这些 UI 在心中能够大抵构建出零碎的架构,构建不进去也木有问题,追随文章一点点后退即可,奥利给!!!
首页和分类原型图
能够看到首页性能比较复杂,蕴含了搜寻性能、Banner 轮播图、抢购入口、排行榜、举荐等,分类中蕴含了不同分类的举荐商品
购物车和我的订单原型图
购物车展现了以后登录用户的购物车商品列表,除了商品根本信息还包含了商品数量。我的订单列表中展现了处于不同状态的商品列表
商品详情和商品评估原型
商品详情展现了商品的详情信息,同时在该页面能够增加购物车以及立刻购买等,用户还能够点击珍藏对该商品进行珍藏,商品的评估性能是必不可少的,你是不是在购买某件商品的时候也会先看看该商品的用户评估呢?
以上贴出了商城我的项目次要实现的性能点和次要页面的原型图,咱们的我的项目也会围绕这些次要的性能点开展。比拟外围的性能点,比方申请量十分高的首页 Banner 咱们如何优化,抢购商品如何保障不超卖,交易过程中分布式事务的实现等咱们都会重点介绍。
系列文章目录
第一篇即为本篇文章,次要对我的项目做一个概览。
第二篇文章会介绍咱们的微服务的划分以及工程目录构造的定义和应用 goctl 做一些我的项目代码的初始化工作。
第三篇文章会先定义我的项目的 API,只有定义好 API 协定之后能力真正的开始写代码,如何协定定义的不分明会大大增加我的项目返工的几率,定义好 API 后紧接着咱们须要进行表结构设计,数据库咱们应用 MySQL。
第四篇文章次要是和大家一起相熟下 go-zero 的根本应用,次要包含数据库的增删改查,缓存的操作,自定义中间件,罕用工具包比方 mapreduce 的应用等等。
第五六七篇咱们着重介绍缓存的应用姿态,在高并发零碎中缓存的位置显而易见,不夸大的说如何缓存设计的不好,那高并发零碎也就不复存在。咱们会介绍如何利用缓存优化申请量微小的首页 Banner,商品列表缓存实现,以及常见的 Cache Aside 模式代码该怎么写,还有缓存的一致性、击穿、穿透、雪崩等优化等等。
第八篇和第九篇会介绍如何实现一个简略的秒杀性能,秒杀性能堪称是高并发读和高并发写的典型代表,通过这两篇能够理解到秒杀性能的优化技巧和根本姿态。
第十篇介绍在微服务架构下常常遇到的分布式事务的问题,通过微服务拆分后,微服务间独占数据库,没法利用本地事务,通过该篇文章能够理解到在 go-zero 中的分布式事务的实现形式。
第十一篇介绍咱们的业务代码如何写单元测试。
第十二篇服务的可观测性,上线后的服务须要具备可观测性,包含日志、指标监控、链路追踪等。
第十三篇咱们会把服务部署上线并进行功能测试。
结束语
本篇文章首先介绍了该系列由来的背景以及咱们为什么会抉择构建高并发零碎这个主题,接着介绍了咱们须要构建的高并发的商城零碎的次要性能点以及次要的页面原型图,最初列出了本系列的文章题目列表,通过题目列表能够疾速理解整个系列的常识体系。
构建一个高并发的零碎并不是一件容易的事件,波及的知识点十分多,但我置信只有咱们一起致力就肯定能克服这些艰难,让本人的技术能力更上一层楼。好在咱们能够站在伟人的肩膀上,go-zero 为咱们提供了十分弱小的构建高并发服务的能力,为咱们的零碎保驾护航。
心愿本篇文章对你有所帮忙,谢谢。
每周一、周四更新
参考
https://github.com/zhoushuguang/lebron
我的项目地址
https://github.com/zeromicro/go-zero
欢送应用 go-zero
并 star 反对咱们!
微信交换群
关注『微服务实际 』公众号并点击 交换群 获取社区群二维码。