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

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

前言

在社区中经常看到有人问有没有基于 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-zerostar 支持我们!

微信交流群

关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据时代,怎么做全渠道的营销

大数据时代,怎么做全渠道的营销 营销在中国有很多变化,1978年之前主要是计划经济的时代,寻求政府的保护。1984年进入商品经济之后,中国企业通过大规模的扩大生产,扩大工厂得到生产效率。1992年进入市场经济之后,会涌现…

oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell

oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell <1&#xff0c;>仅安装数据库软件不配置数据库 ./x86oracle.sh /ruiy/ocr/DBSoftware/app/oracle /ruiy/ocr/DBSoftware/app/oraInventory /ruiy/ins_soft.rsp <2&#xff0c;>静默安装数据库软…

hdu 2048 神、上帝以及老天爷

题解&#xff1a; 本题主要思路是&#xff0c;算出i个人的总选择数a和以悲剧结尾的总选择数b&#xff0c;然后b/a&#xff0c;完成。属于递推题&#xff1a; 图中横杠代表人&#xff0c;竖杠代表签名。Ai代表i个人共有A[i]个选择&#xff0c;Bi起过度作用。因为最多有20人&…

探究Presto SQL引擎(3)-代码生成

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

【学习笔记】计算几何

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

支持自动水平拆分的高性能分布式数据库TDSQL

随着互联网应用的广泛普及&#xff0c;海量数据的存储和访问成为系统设计的瓶颈问题。对于大型的互联网应用&#xff0c;每天几十亿的PV无疑对数据库造成了相当高的负载。给系统的稳定性和扩展性造成了极大的问题。通过数据的切分来提高系统整体性能&#xff0c;扩充系统整体容…

一些有趣的B+树优化实验

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Tarjan的强联通分量

求强联通分量有很多种。 《C信息学奥赛一本通》 中讲过一个dfs求强联通分量的算法Kosdaraju&#xff0c;为了骗字数我就待会简单的说说。然而我们这篇文章的主体是Tarjan&#xff0c;所以我肯定说完之后再赞扬一下Tarjan大法好是不是 首先我们讲一下强联通分量 强联通分量指的…

XXE漏洞

简介 XXE (XML External Entity Injection) 漏洞发生在应用程序解析 XML 输入时&#xff0c;没有禁止外部实体的加载。 简单的理解&#xff0c;一个实体就是一个变量&#xff0c;可以在文档中的其他位置引用该变量。 实体主要分为四种&#xff1a; 内置实体 (Built-in entities…

Linq之Expression高级篇(常用表达式类型)

目录 写在前面 系列文章 变量表达式 常量表达式 条件表达式 赋值表达式 二元运算符表达式 一元运算符表达式 循环表达式 块表达式 总结 写在前面 首先回顾一下上篇文章的内容&#xff0c;上篇文章介绍了表达式树的解析和编译。如果忘记了&#xff0c;可以通过下面系列文章提供的…

NetCore框架WTM的分表分库实现

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

WordPress WP Photo Album Plus插件‘wppa-tag’跨站脚本漏洞

漏洞名称&#xff1a;WordPress WP Photo Album Plus插件‘wppa-tag’跨站脚本漏洞CNNVD编号&#xff1a;CNNVD-201301-458发布时间&#xff1a;2013-01-24更新时间&#xff1a;2013-01-24危害等级&#xff1a; 漏洞类型&#xff1a;跨站脚本威胁类型&#xff1a;远程CVE编号&…

SpringCloudAlibaba分布式流量控制组件Sentinel实战与源码分析(上)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

【单元测试框架unittest】

转载于:https://www.cnblogs.com/ppppying/p/6899750.html

C++ 炼气期之基本结构语法中的底层逻辑

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

优惠券的工厂与策略模式实现方案

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

WP8.1学习系列(第九章)——透视Pivot开发指南

Windows Phone 8 的 Pivot 控件 2014/6/18 适用于&#xff1a;Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1 Windows Phone Pivot 应用提供了一种快速管理视图或页面的方法。该方法可以用于筛选大型数据集、查看多个数据集或切换应用视图。例如&a…

ESP8266 系统环境搭建

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

无线网络配置

转载于:https://www.cnblogs.com/lingxzg/archive/2013/02/09/2909606.html

Java编程之反射中的注解详解

“注解”这个词&#xff0c;可谓是在Java编程中出镜率比较高&#xff0c;而且也是一个老生常谈的话题。我们之前在聊Spring相关的东西时&#xff0c;注解是无处不在&#xff0c;之前我们简单的聊过一些“注解”的相关内容&#xff0c;比如在Spring中是如何进行“注解”组合的。…