go
文章平均质量分 93
办公模板库 素材蛙
命数如织 当为磐石
展开
-
通关GO语言22 网络编程:Go 语言如何通过 RPC 实现跨平台服务?
RPC,也就是远程过程调用,是分布式系统中不同节点调用的方式(进程间通信),属于 C/S 模式。RPC 由客户端发起,调用服务端的方法进行通信,然后服务端把结果返回给客户端。通信协议和序列化。在 HTTP 2 之前,一般采用自定义 TCP 协议的方式进行通信,HTTP 2 出来后,也有采用该协议的,比如流行的gRPC。序列化和反序列化是一种把传输内容编码和解码的方式,常见的编解码方式有 JSON、Protobuf 等。在大多数 RPC的架构设计中,都有Client、、Server、原创 2022-09-20 10:26:49 · 504 阅读 · 0 评论 -
通关GO语言21 网络编程:Go 语言如何玩转 RESTful API 服务?
RESTful API 是一套规范,它可以规范我们如何对服务器上的资源进行操作。在了解 RESTful API 之前,我先为你介绍下 HTTP Method,因为 RESTful API 和它是密不可分的。说起 HTTP Method,最常见的就是POST和GET,其实最早在 HTTP 0.9 版本中,只有一个GET方法,该方法是一个幂等方法,用于获取服务器上的资源,也就是我们在浏览器中直接输入网址回车请求的方法。在 HTTP 1.0 版本中又增加了HEAD和POST。原创 2022-09-19 09:56:51 · 492 阅读 · 1 评论 -
通关GO语言20 协作开发:模块化管理为什么能够提升研发效能?
在业务非常简单的时候,你甚至可以把代码写到一个 Go 文件中。但随着业务逐渐复杂,你会发现,如果代码都放在一个 Go 文件中,会变得难以维护,这时候你就需要抽取代码,把相同业务的代码放在一个目录中。在 Go 语言中,这个目录叫作包。在 Go 语言中,一个包是通过package 关键字定义的,最常见的就是main 包此外,前面章节演示示例经常使用到的 fmt 包,也是通过 package 关键字声明的。一个包就是一个独立的空间,你可以在这个包里定义函数、结构体等。原创 2022-09-19 09:55:45 · 280 阅读 · 0 评论 -
通关GO语言19 性能优化:Go 语言如何进行代码检查和优化?
代码规范检查,顾名思义,是从 Go 语言层面出发,依据 Go 语言的规范,对你写的代码进行的静态扫描检查,这种检查和你的业务无关。比如你定义了个常量,从未使用过,虽然对代码运行并没有造成什么影响,但是这个常量是可以删除的,代码如下所示:const name = "飞雪无情" func main () {}示例中的常量 name 其实并没有使用,所以为了节省内存你可以删除它,这种未使用常量的情况就可以通过代码规范检查检测出来。原创 2022-09-19 09:54:55 · 623 阅读 · 0 评论 -
通关GO语言18 质量保证:Go 语言如何通过测试保证质量?
顾名思义,单元测试强调的是对单元进行测试。在开发中,一个单元可以是一个函数、一个模块等。一般情况下,你要测试的单元应该是一个完整的最小单元,比如 Go 语言的函数。这样的话,当每个最小单元都被验证通过,那么整个模块、甚至整个程序就都可以被验证通过。单元测试由开发者自己编写,也就是谁改动了代码,谁就要编写相应的单元测试代码以验证本次改动的正确性。基准测试(Benchmark)是一项用于测量和评估软件性能指标的方法,主要用于评估你写的代码的性能。原创 2022-09-19 09:53:59 · 185 阅读 · 0 评论 -
通关GO语言17 SliceHeader:lice 如何高效处理数据?
通过 slice 切片的分析,相信你可以更深地感受 Go 的魅力,它把底层的指针、数组等进行封装,提供一个切片的概念给开发者,这样既可以方便使用、提高开发效率,又可以提高程序的性能。Go 语言设计切片的思路非常有借鉴意义,你也可以使用 uintptr 或者 slice 类型的字段来提升性能,就像 Go 语言 SliceHeader 里的 Data uintptr 字段一样。在这节课的最后,给你留一个思考题:你还可以找到哪些通过 unsafe.Pointer、uintptr 提升性能的例子呢?原创 2022-09-19 09:52:54 · 461 阅读 · 0 评论 -
通关GO语言16 非类型安全:让你既爱又恨的 unafe
unsafe 包里最常用的就是 Pointer 指针,通过它可以让你在 *T、uintptr 及 Pointer 三者间转换,从而实现自己的需求,比如零内存拷贝或通过 uintptr 进行指针运算,这些都可以提高程序效率。unsafe 包里的功能虽然不安全,但的确很香,比如指针运算、类型转换等,都可以帮助我们提高性能。不过我还是建议尽可能地不使用,因为它可以绕开 Go 语言编译器的检查,可能会因为你的操作失误而出现问题。原创 2022-09-19 09:51:58 · 172 阅读 · 0 评论 -
通关GO语言15 运行时反射:字符串和结构体之间如何转换?
flag}我们发现 reflect.Value 结构体的字段都是私有的,也就是说,我们只能使用 reflect.Value 的方法。//针对具体类型的系列方法 //以下是用于获取对应的值 BoolBytesComplexFloatIntStringUintCanSet //是否可以修改对应的值 以下是用于修改对应的值SetSetBoolSetBytesSetComplexSetFloatSetIntSetString。原创 2022-09-19 09:50:59 · 1521 阅读 · 0 评论 -
通关GO语言14 内存分配:new 还是 make?什么情况下该用谁?
通过这节课的讲解,相信你已经理解了函数 new 和 make 的区别,现在我再来总结一下。new 函数只用于分配内存,并且把内存清零,也就是返回一个指向对应类型零值的指针。new 函数一般用于需要显式地返回指针的情况,不是太常用。make 函数只用于 slice、chan 和 map 这三种内置类型的创建和初始化,因为这三种类型的结构比较复杂,比如 slice 要提前初始化好内部元素的类型,slice 的长度和容量等,这样才可以更好地使用它们。原创 2022-09-19 09:49:38 · 762 阅读 · 0 评论 -
通关GO语言13 参数传递:值、引用及指针之间的区别?
在 Go 语言中,函数的参数传递只有值传递,而且传递的实参都是原始数据的一份拷贝。如果拷贝的内容是值类型的,那么在函数中就无法修改原始数据;如果拷贝的内容是指针(或者可以理解为引用类型 map、chan 等),那么就可以在函数中修改原始数据。所以我们在创建一个函数的时候,要根据自己的真实需求决定参数的类型,以便更好地服务于我们的业务。这节课中,我讲解 chan 的时候没有举例,你自己可以自定义一个有 chan 参数的函数,作为练习题。下节课我将介绍“内存分配:new 还是 make?什么情况下该用谁。原创 2022-09-19 09:48:03 · 271 阅读 · 0 评论 -
通关GO语言12 指针详解:在什么情况下应该使用指针?
我们都知道程序运行时的数据是存放在内存中的,而内存会被抽象为一系列具有连续编号的存储空间,那么每一个存储在内存中的数据都会有一个编号,这个编号就是内存地址。有了这个内存地址就可以找到这个内存中存储的数据,而内存地址可以被赋值给一个指针。小提示:内存地址通常为 16 进制的数字表示,比如 0x45b876。可以总结为:在编程语言中,指针是一种数据类型,用来存储一个内存地址,该地址指向存储在该内存中的对象。这个对象可以是字符串、整数、函数或者你自定义的结构体。小技巧:你也可以简单地把指针理解为内存地址。原创 2022-09-19 09:48:21 · 397 阅读 · 0 评论 -
通关GO语言11 并发模式:Go 语言中即学即用的高效并发模式
并发模式和设计模式很相似,都是对现实场景的抽象封装,以便提供一个统一的解决方案。但和设计模式不同的是,并发模式更专注于异步和并发。你会在很多项目的源代码中一遍遍地看到本节课提到的并发模式,虽然解决的问题不一样,但它们的思路是相似的,所以你也可以把它们进一步抽象,这样在项目开发中就可以直接复用。并发模式不限于这节课讲的这些,在项目中和并发、异步有关并且可以被抽象复用的解决方案都可以总结为并发模式。所以发挥自己的想象吧,这节课的思考题就是:你还能总结出哪些并发模式呢?原创 2022-09-18 11:29:21 · 287 阅读 · 0 评论 -
通关GO语言10 Context:你必须掌握的多线程并发控制神器
一个任务会有很多个协程协作完成,一次 HTTP 请求也会触发很多个协程的启动,而这些协程有可能会启动更多的子协程,并且无法预知有多少层协程、每一层有多少个协程。如果因为某些原因导致任务终止了,HTTP 请求取消了,那么它们启动的协程怎么办?该如何取消呢?因为取消这些协程可以节约内存,提升性能,同时避免不可预料的 Bug。Context 就是用来简化解决这些问题的,并且是并发安全的。Context 是一个接口,它具备手动、定时、超时发出取消信号、传值等功能,主要用于控制多个协程之间的协作,尤其是取消操作。原创 2022-09-18 11:28:22 · 615 阅读 · 0 评论 -
通关GO语言09 同步原语:ync 包让你对并发控制得心应手
这节课主要讲解 Go 语言的同步原语使用,通过它们可以更灵活地控制多协程的并发。从使用上讲,Go 语言还是更推荐 channel 这种更高级别的并发控制方式,因为它更简洁,也更容易理解和使用。当然本节课讲的这些比较基础的同步原语也很有用。同步原语通常用于更复杂的并发控制,如果追求更灵活的控制方式和性能,你可以使用它们。本节课到这里就要结束了,sync 包里还有一个同步原语我没有讲,它就是 sync.Map。原创 2022-09-18 11:27:17 · 255 阅读 · 0 评论 -
通关GO语言08 并发基础:Goroutine 和 Channel 的声明与使用
前面的课程中,我所写的代码都按照顺序执行,也就是上一句代码执行完,才会执行下一句,这样的代码逻辑简单,也符合我们的阅读习惯。但这样是不够的,因为计算机很强大,如果只让它干完一件事情再干另外一件事情就太浪费了。比如一款音乐软件,使用它听音乐的时候还想让它下载歌曲,同一时刻做了两件事,在编程中,这就是并发,并发可以让你编写的程序在同一时刻做多几件事情。原创 2022-09-18 11:24:55 · 232 阅读 · 0 评论 -
通关GO语言07 错误处理:如何通过 error、deferred、panic 等处理错误?
你可能会想,上面采用工厂返回错误信息的方式只能传递一个字符串,也就是携带的信息只有字符串,如果想要携带更多信息(比如错误码信息)该怎么办呢?这个时候就需要自定义 error。errorCode int //错误码 errorMsg string //错误信息 } func (ce *commonError) Error () string {}errorMsg: "a或者b不能为负数" }原创 2022-09-18 11:22:48 · 359 阅读 · 0 评论 -
通关GO语言06 truct 和 interface:结构体与接口都实现了哪些功能?
结构体是一种聚合类型,里面可以包含任意类型的值,这些值就是我们定义的结构体的成员,也称为字段。在 Go 语言中,要自定义一个结构体,需要使用 type+struct 关键字组合。在下面的例子中,我自定义了一个结构体类型,名称为 person,表示一个人。这个 person 结构体有两个字段:name 代表这个人的名字,age 代表这个人的年龄。在定义结构体时,字段的声明方法和平时声明一个变量是一样的,都是变量名在前,类型在后,只不过在结构体中,变量名称为成员名或字段名。原创 2022-09-18 11:17:47 · 345 阅读 · 0 评论 -
通关GO语言05 函数和方法:Go 语言中的函数和方法到底有什么不同?
在 Go 语言中,虽然存在函数和方法两个概念,但是它们基本相同,不同的是所属的对象。函数属于一个包,方法属于一个类型,所以方法也可以简单地理解为和一个类型关联的函数。不管是函数还是方法,它们都是代码复用的第一步,也是代码职责分离的基础。掌握好函数和方法,可以让你写出职责清晰、任务明确、可复用的代码,提高开发效率、降低 Bug 率。本节课给你留的思考题是:方法是否可以作为表达式赋值给一个变量?如果可以的话,如何通过这个变量调用方法?原创 2022-09-18 10:43:12 · 307 阅读 · 0 评论 -
通关GO语言04 集合类型:如何正确使用 array、lice 和 map?
这节课到这里就要结束了,在这节课里我讲解了数组、切片和映射的声明和使用,有了这些集合类型,你就可以把你需要的某一类数据放到集合类型中了,比如获取用户列表、商品列表等。数组、切片还可以分为二维和多维,比如二维字节切片就是 [][]byte,三维就是 [][][]byte,因为不常用,所以本节课中没有详细介绍,你可以结合我讲的一维 []byte 切片自己尝试练习,这也是本节课要给你留的思考题,创建一个二维数组并使用它。原创 2022-09-18 10:42:00 · 341 阅读 · 0 评论 -
通关GO语言03 控制结构:if、for、witch 逻辑语句的那些事儿
这节课主要讲解 if、for 和 switch 这样的控制语句的基本用法,使用它们,你可以更好地控制程序的逻辑结构,达到业务需求的目的。这节课的思考题是:任意举个例子,练习 for 循环 continue 的使用。Go 语言提供的控制语句非常强大,本节课我并没有全部介绍,比如 switch 选择语句中的类型选择,for 循环语句中的 for range 等高级能力。这些高级能力我会在后面的课程中逐一介绍,接下来要讲的集合类型,就会详细地为你演示如何使用 for range 遍历集合,记得来听课!原创 2022-09-18 10:33:22 · 398 阅读 · 0 评论 -
通关GO语言02 数据类型:你必须掌握的数据类型有哪些?
常量的定义和变量类似,只不过它的关键字是 const。下面的示例定义了一个常量 name,它的值是“飞雪无情”。因为 Go 语言可以类型推导,所以在常量声明时也可以省略类型。const name = "飞雪无情"在 Go 语言中,只允许布尔型、字符串、数字类型这些基础类型作为常量。本节课我讲解了变量、常量的声明、初始化,以及变量的简短声明,同时介绍了常用的基础类型、数字和字符串的转换以及 strings 工具包的使用,有了这些,你就可以写出功能更强大的程序。原创 2022-09-18 10:28:38 · 283 阅读 · 0 评论 -
GO微服务实战第三十四节 案例:如何使用 Prometheus 和 Grafana 监控预警服务集群?
你好,我是 aoho,今天我和你分享的是如何使用 Prometheus 和 Grafana 监控预警服务集群的案例。是互联网公司较为重要的后端架构组成之一,是整个运维乃至整个产品生命周期中最重要的一环,它能够事前及时预警发现故障,事后提供详实的数据用于追查定位问题。。监控和预警平台的重要性在《SRE:Google 运维解密》一书中就有体现:开发人员可以通过监控和预警平台了解服务内部的实际运行状态,通过对指标的观察可以预判所出现问题的可能原因,并且能够在系统发生故障时快速通知相关的人员。原创 2022-08-25 10:43:10 · 540 阅读 · 0 评论 -
GO微服务实战第三十三节 如何处理 Go 错误异常与并发陷阱?
错误处理是软件开发中不可回避的问题,Go 中主要通过 error 和 panic 分别表示错误和异常,并提供了较为简洁的错误异常处理机制。作为一门并发性能优越的语言,Go 虽然降低了协程并发开发的难度,但也存在一些并发陷阱,这就需要我们在开发时额外注意。在本课时,我们就来介绍 Go 中的一些错误处理机制,并讲解如何去规避一些常见的并发陷阱。错误处理是每个开发人员都需要面对的问题,在我过去接触的编程语言中,大多是通过try-catch 的方式对可能出现错误的代码块进行包装:程序运行 try 中代码,如果 tr原创 2022-08-24 10:15:38 · 269 阅读 · 0 评论 -
GO微服务实战第三十二节 如何使用 ELK 进行日志采集以及统一处理?
在前面的一系列课时,我们介绍了微服务各个组件的相关实践,从本课时开始我们将会介绍微服务日常开发的一些“利器”,这些工具会帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。ELK 技术栈本课时将重点介绍(ELK 是 Elasticsearch、Logstash 和 Kibana 的简称),准确地说是 ELKB,即 ELK + Filebeat,其中 Filebeat 是用于转发和集中日志数据的轻量级传送工具。原创 2022-08-24 10:14:20 · 1367 阅读 · 0 评论 -
GO微服务实战第三十一节 案例:如何在微服务中集成 Zipkin 组件?
我们首先来定义 protobuf 文件及生成对应的 Go 文件。package pb;}1;2;3;}1;2;}这里提供了字符串服务中的 Diff 方法,客户端通过 gRPC 调用字符串服务。生成的 string.pb.go 可以参见源码,此处不再展开。在字符串服务中增加 gRPC server 的实现,并织入 gRPC 链路追踪的相关代码。= nil {}()原创 2022-08-24 10:12:21 · 645 阅读 · 0 评论 -
GO微服务实战第三十节 OpenTracing 规范介绍与分布式链路追踪组件选型
在上一课时,我们介绍了分布式链路追踪组件的相关背景和概念。市面上有多款流行的分布式链路追踪组件,包括 Zipkin、Jaeger、SkyWalking 和 Pinpoint 等,那它们具体的工作特性是怎样的呢?在实际工作中,我们又应该如何选型呢?下面我们就首先介绍下分布式链路追踪中的 OpenTracing 规范,然后再分析下这几款组件的相关特性,以及选型时的对比指标。原创 2022-08-24 10:08:41 · 1188 阅读 · 0 评论 -
GO微服务实战第二十九节 如何追踪分布式系统调用链路的问题?
在微服务架构下,原单体服务被拆分为多个微服务独立部署,客户端的请求涉及多个微服务,从而无法知晓服务的具体位置。系统由大量服务组成,这些服务可能由不同的团队开发,可能使用不同的编程语言来实现,多实例部署,这些实例横跨多个不同的数据中心。在这种环境中,当出现错误异常或性能瓶颈时,获取请求的依赖拓扑和调用详情对于解决问题是非常有效的。所谓分布式链路追踪,就是记录一次分布式请求的调用链路,并将分布式请求的调用情况集中展示。其中,调用详情包括各个请求的服务实例信息、服务节点的耗时、每个服务节点的请求状态等;原创 2022-08-24 10:02:46 · 448 阅读 · 0 评论 -
GO微服务实战第二十八节 案例:如何保证微服务实例资源安全?
今天我和你分享的是如何保证微服务实例资源安全的案例。在上一课时中,我们实践了如何使用 Go 搭建一个基本的,它的主要功能是颁发访问令牌和验证访问令牌的有效性。在统一认证与授权服务体系中,还存在对用户数据进行保护,它允许携带有效访问令牌的客户端请求用户资源。在本课时,我们将基于 Go 实现一个基本的资源服务器,让其为用户数据保驾护航。原创 2022-08-24 10:01:11 · 392 阅读 · 0 评论 -
GO微服务实战第二十七节 案例:如何自定义授权服务器?
今天我和你分享的是如何自定义授权服务器的案例。在上一课时中,我们基于 OAuth2 和 JWT 设计了认证与授权服务体系,在本课时,我们将通过 Go 来搭建一个授权服务器。授权服务器的主要交互对象为客户端和资源服务器,它们之间的交互流程如下图所示:交互流程示意图客户端在访问资源服务器中用户存储的数据之前,需要携带用户凭证向授权服务器请求访问令牌。授权服务器会验证客户端以及其携带的用户凭证,验证通过的话将会生成并返回访问令牌。原创 2022-08-24 09:59:35 · 351 阅读 · 0 评论 -
GO微服务实战第二十六节 如何设计基于 OAuth2 和 JWT 的认证与授权服务体系
在上一课时中,我们介绍了在微服务架构中存在的一些必要性和挑战,并介绍了 3 种主流的统一认证与授权方案,包括 OAuth2、分布式 Session 和 JWT。在本课时,我们将基于 OAuth2 和 JWT 设计一个认证与授权服务,让其。微服务架构的演进使得服务体系变得分散,如果让每个微服务独立管理自身的用户信息容易造成信息隔离,阻碍应用的发展,因此将分散的认证和授权进行统一管理显得尤为必要。原创 2022-08-24 09:57:42 · 818 阅读 · 0 评论 -
GO微服务实战第二十五节 统一认证与授权如何保障服务安全?
用于验证当前用户的身份,而意味着用户在认证成功后,会被系统授予访问系统资源的权限。只有具备相应身份和权限的人才能访问系统中的相应资源,比如在购物网站中你只能支付你自己购物车内的商品,这就保护了用户和系统的信息安全。微服务架构不同于单体应用的架构,单体应用的认证和授权非常集中,但是当服务被拆分之后,对各个微服务的认证与授权就会变得非常分散,因此,在微服务架构中,就将集成统一认证与授权的功能作为横切关注点,为应用服务提供信息安全保障。原创 2022-08-24 09:56:36 · 619 阅读 · 0 评论 -
GO微服务实战第二十四节 案例:如何在 Go 微服务中实现负载均衡?
只有一个 SelectService 方法,接受 ServiceInstance 也就是可用服务列表作为参数,根据一定负载均衡策略从服务实例列表中选择一个服务实例返回。而可用服务列表则可以通过服务注册和发现客户端从 Consul 等服务注册和发现中心获取。原创 2022-08-24 09:55:13 · 472 阅读 · 0 评论 -
GO微服务实战第二十二节 案例:如何通过 Service Meh 实现熔断和限流?
在前面的课时中,我们分别学习了熔断、限流在服务高可用架构中的重要性和具体使用方式。但是,在具体使用过程中,我们会发现实现熔断和限流的代码和实现业务逻辑的代码耦合在一起,对系统的可维护性产生了不良的影响。而 Service Mesh 作为下一代的微服务架构,它将服务间的通信从基础设施中抽离出来,还可以替这些业务服务完成熔断和限流等功能,而且完全对业务代码透明,这妥妥地提高了开发效率,因为普通开发者能够更加专注于业务开发。下面我们就来看一下如何通过Service Mesh 实现熔断和限流。原创 2022-08-22 10:47:02 · 570 阅读 · 0 评论 -
GO微服务实战第二十一节 如何实现接口限流和降级?
在前面的第 23 课时中,我们已经介绍了限流和降级的相关概念以及在服务高可用架构中的重要性。那本课时我们就继续往下剖析,来详细讲解限流和降级的使用场景以及二者的区别,接着我还会给你一些具体的案例,让你更好地掌握如何去进行限流和降级。原创 2022-08-22 10:44:51 · 1437 阅读 · 0 评论 -
GO微服务实战第二十节 如何实现熔断机制?
Hystrix 是 Netflix 开源的一个优秀的服务间断路器。它能够在服务提供者出现故障时,隔离服务调用者和服务提供者,防止服务级联失败;同时提供失败回滚逻辑,使系统快速从异常中恢复。Hystrix 完美地实现了断路器模式,同时还提供了信号量和线程隔离的方式保护服务调用者的线程资源,对延迟和失败提供强大的容错能力,进而保护和控制系统。err := hystrix.Do( "test_command" , func() error { // 远程调用&或者其他需要保护的方法 return nil。原创 2022-08-22 10:43:02 · 622 阅读 · 0 评论 -
GO微服务实战第十九节 如何保障分布式系统的高可用性?
高可用性是我们经常提到的名词,指系统提供的服务要始终可用,无论是系统内部运行出现故障,还是系统的外部依赖出现问题,甚至遇到系统硬件损坏、停电等致命性打击,系统都要保证基本可用。因此,高可用系统关注用户使用体验,并且通过降低系统出现故障的概率,以及缩短系统因突发故障导致的宕机时间,减轻了开发运维人员的工作。目前,主流的互联网产品都采用了大量手段来保证系统可用性,比如淘宝在双十一时会采用限流和降级设计等手法,来保证系统能够承受住秒杀活动时产生的巨量瞬时流量;原创 2022-08-22 10:41:39 · 567 阅读 · 0 评论 -
GO微服务实战第十八节 案例:Go-kit 如何集成 gRPC?
首先定义了 UserService 结构,它有一个名为 CheckPassword 的 grpc_transport.Handler 的方法。这个方法会调用 grpc_transport.Handler 的 ServeGRPC 方法来将请求交由 Go-kit 处理。// 定义接口 type UserService interface {}}原创 2022-08-22 10:39:48 · 844 阅读 · 0 评论 -
GO微服务实战第十七节 gRPC 和 Apache Thrift 之间如何进行选型?
gRPC 是由 Google 开源的高性能 RPC 框架。自 2015 年发布以来,gRPC 日益成熟,并成为跨语言 RPC 通信中最流行也最受欢迎的选择之一。内置流式 RPC 支持。这意味着你可以使用同一 RPC 框架来处理普通的 RPC 调用和分块进行的数据传输调用,这在很大程度上统一了网络相关的基础代码并简化了逻辑。内置拦截器的支持。gRPC 提供了一种向多个服务端点添加通用功能的强大方法,这使得你可以轻松使用拦截器对所有接口进行共享的运行状况检查和身份验证。内置流量控制和 TLS 支持。原创 2022-08-22 10:31:03 · 316 阅读 · 0 评论 -
GO微服务实战第十六节 Go RPC 如何实现服务间通信?
在上一课时,我们讲解了 RPC 的相关概念和常见的 RPC 框架。其中, Go RPC 是指 Go 语言原生支持的 RPC 框架,它虽然简单但却十分经典,非常适合作为你后续深入了解 RPC 框架时的研究对象。在本课时,我们将先通过一个字符串服务为案例简单讲解 Go RPC 是如何进行通信的,然后再具体剖析 Go RPC 的底层原理和实现,对以服务端注册服务、接收并处理客户端请求和客户端发起请求等步骤分别进行详细介绍,相信你学习后,一定会对 Go RPC 有更加全面的了解和认识。原创 2022-08-22 10:27:42 · 633 阅读 · 0 评论 -
GO微服务实战第十五节 微服务间如何进行远程方法调用?
在微服务架构中,每个服务实例负责一个单一领域的业务实现,不同服务实例之间需要进行频繁交互来共同实现业务。那它们是如何通信的呢?。),是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC 只是一套协议,基于这套协议规范来实现的框架都可以称为 RPC 框架,比较典型的有 Dubbo、Thrift 和 gRPC。原创 2022-08-22 10:26:25 · 313 阅读 · 0 评论