
Go微服务实战-电商系统
文章平均质量分 94
Go微服务入门到容器化实践落地可观测的微服务电商项目
无休止符
不要让任何事情,成为你不去学习的理由!!!
展开
-
41、Jenkins部署go项目
在使用jenkins构建go项目之前,我们需要先知道go项目的build和运行流程。原创 2022-08-19 14:19:25 · 5456 阅读 · 1 评论 -
40、jenkins部署vue项目
前面我们已经学习了jenkin的持续集成与部署,接下来我们将使用jenkin来部署我们之前已经完成的微服务项目。原创 2022-08-18 14:43:18 · 5537 阅读 · 3 评论 -
39、jenkins持续集成(二)
在38、jenkins持续集成(一)中,我们介绍完了基于free style的持续集成构建接下来我们来学习pipeline实现的持续集成构建为什么之前已经有基于free style的持续集成了,还需要pipeline?在基于free style的持续集成中,我们发现都是界面化的配置,而且一旦jenkins宕机了就无法修改了而pipeline模式主要是依靠脚本化代码化的方式实现持续集成,更利于我们维护,当然相对于free style门槛更高。......原创 2022-08-17 11:00:00 · 893 阅读 · 0 评论 -
38、jenkins持续集成(一)
什么是JenkinsJenkins是一个开源软件项目,起源于Hudson(Hudson是商用的),是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成可在Tomcat等流行的servlet容器中运行,也可独立运行提供友好操作界面的持续集成(CI)工具它用于实时测试和报告较大代码库中的孤立更改。Jenkins软件使开发人员能够快速找到并解决代码库中的缺陷,并自动进行构建测试为什么要使用Jenkins使用Jenkins之前。......原创 2022-08-17 00:30:07 · 708 阅读 · 0 评论 -
37、api网关-kong
什么是api 网关:我们知道在微服务架构中,大型服务都被拆分成了独立的微服务,每个微服务通常会以RESTFUL API的形式对外提供服务但是在UI方面,我们可能需要在一个页面上显示来自不同微服务的数据,此时就会需要一个统一的入口来进行API的调用API Gateway就在此场景下充当了多个服务的大门,系统的统一入口api 网关应该具备的功能服务路由动态路由:API Gateway可以与微服务注册中心连接,实现微服务无感知动态扩容负载均衡服务发现熔断降级。...原创 2022-08-16 17:25:30 · 1541 阅读 · 0 评论 -
36、熔断-限流-降级
限流和熔断最终都会导致用户的体验降级限流:流量2k,但是我的服务能力只有1k,所以这个时候多出来的流量怎么办?a.拒绝;b.排队等待;用户体验用户体验不好:当前访问用户过多,请稍后重试用户体验降级:原本是访问流畅,下单流畅 -> 当前访问用户过多,请稍后重试熔断:比如A服务访问B服务,这时候B服务很慢(B服务压力过大,导致了出现不少请求错误),调用方很容易出现一个问题:每次调用都超时。...原创 2022-08-16 02:43:14 · 1401 阅读 · 2 评论 -
35、jaeger链路追踪
什么是链路追踪:分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等链路追踪主要功能:故障快速定位:可以通过调用链结合业务日志快速定位错误信息链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。......原创 2022-08-16 00:42:48 · 2971 阅读 · 0 评论 -
34、幂等性
- **什么是服务雪崩**:服务雪崩效应是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象- **图示服务雪崩**:Service A的流量波动很大,流量经常会突然性增加!那么在这种情况下,就算Service A能扛得住请求,Service B和Service C未必能扛得住这突发的请求。此时,如果Service C因为抗不住请求,变得不可用。那么Service B的请求也会阻塞,慢慢耗尽Service B的线程资源,Service B就会变得不可用。紧接着,原创 2022-08-15 05:13:12 · 501 阅读 · 0 评论 -
33、订单-库存服务集成rocketmq
代码】33、订单-库存服务集成rocketmq。原创 2022-08-15 03:56:52 · 1083 阅读 · 0 评论 -
32、rocketMq应用
什么是mq(message queue):消息队列是一种“先进先出”的数据结构mq应用场景解耦:系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验流量削峰:应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提高系统的稳定性和用户体验。...原创 2022-08-15 00:40:23 · 826 阅读 · 0 评论 -
31、分布式事务
我们分析下库存和订单会导致的问题库存数据不一致事务性的问题:是新建订单表,还是先扣减库存,无论哪个先都存在事务性的问题使用分布式事务解决业务下单但是用户不支付支付成功之后扣减库存,用户体验很差不推荐订单超时,库存归还,我们一般采用这种方案解决。...原创 2022-08-14 21:16:53 · 895 阅读 · 0 评论 -
30、ES集成到项目中
ES集成到项目中。原创 2022-08-14 18:08:05 · 1963 阅读 · 0 评论 -
29、Elasticsearch进阶查询
如果我们希望“好网不”在分词的不被分开如何解决?"text" : "好网不的课程" , "analyzer" : "ik_smart" }ik定义的词库位置我们自定义词库mydic.dic:添加“好网不”、“中华牙膏”:“的”、“是”、“哟”添加自定义词库到ik中:重启ES容器。...原创 2022-08-14 14:12:42 · 836 阅读 · 0 评论 -
28、Elasticsearch入门
mysql面临的问题性能低下:数据量或者并发比较大的情况下,like的效率低下没有相关性排名:我们使用搜索引擎搜索的时候,希望关联度比较高的搜索在前面展示无法全文搜索搜索不准确 —— 没有分词什么是全文搜索我们生活中的数据总体分为两种:结构化数据和非结构化数据结构化数据:具有固定格式或有限长度的数据,如数据库、元数据等非结构化数据:指不定长或无固定格式的数据,如邮件、word文档等什么是ES:ES是一个分布式。...原创 2022-08-14 03:39:10 · 3060 阅读 · 2 评论 -
27、用户操作srv、web服务实现
proto";//查看地址 rpc CreateAddress(AddressRequest) returns(AddressResponse);//新增地址 rpc DeleteAddress(AddressRequest) returns(google . protobuf . Empty);//删除地址 rpc UpdateAddress(AddressRequest) returns(google . protobuf . Empty);原创 2022-08-13 20:28:43 · 808 阅读 · 0 评论 -
26、支付宝支付
注意这里的授权回调,我们在内网测试的时候,这里需要使用到内网穿透技术,否则是无法接收到回调的。原创 2022-08-13 17:44:03 · 2381 阅读 · 2 评论 -
25、订单和购物车-web服务
25、订单和购物车-web服务。原创 2022-08-13 15:35:08 · 834 阅读 · 0 评论 -
24、订单和购物车-srv服务
proto";//购物车 rpc CartItemList(UserInfo) returns(CartItemListResponse);//获取用户的购物车信息 rpc CreateCartItem(CartItemRequest) returns(ShopCartInfoResponse);//添加商品到购物车 rpc UpdateCartItem(CartItemRequest) returns(google . protobuf . Empty);......原创 2022-08-11 23:27:43 · 867 阅读 · 1 评论 -
23、分布式锁
悲观锁与乐观锁是人们定义出来的概念,可以理解为一种思想,是处理并发资源的常用手段;不要把他们与mysql提供的锁机制(表锁、行锁、排它锁、共享锁)混为一谈。业务开发的最常用的方案:基于redis实现分布式锁。......原创 2022-08-11 16:50:34 · 1039 阅读 · 3 评论 -
22、库存服务
22、库存服务。原创 2022-08-10 17:35:50 · 443 阅读 · 0 评论 -
21、阿里云oss
oss入口:控制台 -> 对象存储 ossapi文档:右下角 -> 常用入口 -> API 文档 -> 文档中心打开。原创 2022-08-10 11:35:24 · 2922 阅读 · 0 评论 -
20、商品微服务-web层实现
1、先添加form表单的struct2、实现API方法3、添加router。原创 2022-08-02 22:12:48 · 804 阅读 · 0 评论 -
19、商品微服务-srv层实现
19、商品微服务-srv层实现原创 2022-08-01 21:23:43 · 1568 阅读 · 1 评论 -
18、分布式配置中心nacos
18、分布式配置中心nacos原创 2022-07-31 16:56:02 · 1624 阅读 · 0 评论 -
17、负载均衡
微服务中用户的请求过程①.用户请求通过nginx实现负载均衡到达网关②.网关再通过负载均衡将请求分配到不同的用户web服务③.用户web服务通过grpc,负载均衡分配到不同的用户srv服务调用请求。原创 2022-07-31 01:32:22 · 733 阅读 · 0 评论 -
16、注册中心-consul
user_web层需既要完成服务发现、也需要完成服务注册。原创 2022-07-30 18:22:58 · 2336 阅读 · 0 评论 -
15、用户web层服务(三)
15、用户web层服务(三)原创 2022-07-27 22:55:31 · 645 阅读 · 2 评论 -
14、用户web层服务(二)
mobile=fl.Field().String()//使用正则表达式判断是否合法ok,_添加自定义验证器名"required,mobile"`//手机号码格式有规范可寻,自定义validatorPassWordstring`form注册自定义验证器//1.初始化loggerinitialize.InitLogger()//2.初始化配置文件initialize.InitConfig()//3.初始化routersRouter。......原创 2022-07-27 18:32:24 · 826 阅读 · 0 评论 -
13、用户web层服务(一)
在之前的6、微服务架构分析中,我们会拆分出srv层的服务和web层的服务srv层的服务我们已经在12、用户微服务实现了接下来我们需要实现web层的用户服务Viper简介Viper适用于Go应用程序的完整配置解决方案;它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式Viper的特性设置默认值从JSON、TOML、YAML、HCL、envfile和Javaproperties格式的配置文件读取配置信息实时监控和重新读取配置文件(可选)从环境变量中读取https。.........原创 2022-07-26 12:28:45 · 734 阅读 · 1 评论 -
12、用户微服务
生成命令->proto";//用户列表rpcGetUserByMobile(MobileRequest)returns(UserInfoResponse);//通过mobile查询用户rpcGetUserById(IdRequest)returns(UserInfoResponse);//通过id查询用户rpcCreateUser(CreateUserInfo)returns(UserInfoResponse);原创 2022-07-20 13:57:06 · 935 阅读 · 1 评论 -
11、gin中间件
假设一个场景,我们需要统计每个函数的调用时长;我们如果在每个函数开头记录时间,结束时计算消耗时间,这是非常不通用的,并且代码的侵入性很强这时候就可以使用中间件的解决方案来解决上述问题需求实现使用自定义的中间件,统计每个请求的耗时t=time.Now()c.Set("example","123456")//让原本改执行的逻辑继续执行c.Next()end=time.Since(t)fmt.Printf("耗时。...原创 2022-07-19 19:37:22 · 1413 阅读 · 0 评论 -
10、gin快速入门
gin官方文档地址httpsgin的github地址httpsgin与beegogin是一个轻量级的web框架beego是一个大而全的web框架,集成的东西比较多,国内人员制作的。原创 2022-07-19 12:19:02 · 3278 阅读 · 0 评论 -
9、gorm进阶
gorm约定GORM倾向于约定,而不是配置。默认情况下,GORM使用ID作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用CreatedAt、UpdatedAt字段追踪创建、更新时间蛇形约定可以看到之前我们创建的struct是,而在数据库生成的表名为productsgorm.ModelGORM定义一个gorm.Model结构体,其包括字段ID、CreatedAt、UpdatedAt、DeletedAt可以自定义TAG,如gorm->主键;......原创 2022-07-17 22:25:28 · 1715 阅读 · 0 评论 -
8、ORM简介与gorm入门
ORM概念ORM全称是ObjectRelationalMapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对相起来举例来说就是,我们定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录为什么需要ORM业务中执行sql的时候,需要我们有足够的sql语句基础、需要我们懂得不同数据的sql对于数据来说,最重要最常用的是表;表中有列,orm就是将一张表映射成一个类,表中的列映射成类中的一个类。...原创 2022-07-17 20:03:10 · 885 阅读 · 0 评论 -
7、前后端分离YApi
前后端分离YApi解决方案原创 2022-07-17 17:48:54 · 558 阅读 · 0 评论 -
6、微服务架构分析
微服务架构分析原创 2022-07-17 15:18:26 · 888 阅读 · 0 评论 -
5、grpc进阶
发送metadata接收metadata二、metadata实例helloworld.protoclient.goserver.go原创 2022-07-13 21:59:37 · 642 阅读 · 0 评论 -
4、protobuf进阶
我们之前在stream.proto中配置的包路径为:,这时候生成的proto文件路径是跟stream.proto同级目录下这时候思考,如果我们希望将pb.go生成到其他路径:如果我们希望生成到根目录的其他路径base.proto:比较公用的message实际上谷歌已经自定义了Empty:而且还包含很多其他的内置message修改后的proto:注意需要在golang中修改导入的位置,如图...原创 2022-07-13 21:24:34 · 1256 阅读 · 0 评论 -
3、grpc和protobuf入门
打开命令行cmd下执行命令生成go文件:main.go测试:注意proto生成的时候helloworld.pb.go包名是main.gogrpc生成:这个与之前的非grpc的相似,但是生成的命令需要修改为(这个就是为什么在grpc环境搭建中我们需要下载与修改protoc-gen-go-grpc.exe这个文件)四、go的grpc快速体验helloworld.proto:生成命令注意最新版本的grpc将pb.go拆分成2份文件,分别是proto -> hello原创 2022-07-12 17:42:04 · 3403 阅读 · 2 评论 -
2、RPC从零到进阶
RPC概念:RPC(Remote Procedure Call)远程过程调用,简单的理解就是一个节点请求另一个节点提供的服务本地过程调用:对应RPC的是本地过程调用,函数调用是最常见的本地过程调用可能产生的问题:将本地过程调用变成远程过程调用会面临各种问题Call的id映射:我们怎么告诉远程机器我们要调用add,而不是sub或者Foo呢?在本地调用中,函数体是直接通过函数指针来指定的,我们调用add,编译器就自动帮我们调用它相应的函数指针。但是在远程调用中,函数指针是不行的,因为两个进程的地址空间是完全不原创 2022-07-10 18:13:19 · 632 阅读 · 0 评论