![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang架构直通车
No_Game_No_Life_
这个作者很懒,什么都没留下…
展开
-
Golang架构直通车——ServiceMesh的演化过程
文章目录引入产品演化微服务出现Service Mesh出现总结引入最近接触了以Thrift做序列化和通信的微服务框架,在之前的文章中RPC框架对比也将Thrift、gRPC与其他框架对比过,从中我们可以知道Thrift和gRPC实际上没有自己的服务治理等内容。而目前,业界跟微服务相关的开发平台和框架更是不胜枚举:Spring Cloud, Service Fabric,Linkerd,Envoy,Istio 。这些纷繁的产品和Sevice Mesh有什么样的关联?哪些属于Service Mesh的范畴原创 2020-09-24 20:53:18 · 523 阅读 · 1 评论 -
Golang架构直通车——理解Go GC
文章目录设计原理三色抽象三色不变性插入写屏障删除写屏障垃圾收集器的增量和并发增量式垃圾收集并发式垃圾收集器Go GC演进过程并发垃圾收集回收堆目标混合写屏障设计原理三色抽象标记清除(Mark-Sweep)算法是最常见的垃圾收集算法,为了解决原始标记清除算法带来的长时间 STW,多数现代的追踪式垃圾收集器都会实现三色标记算法的变种以缩短 STW 的时间。白色对象 — 潜在的垃圾,其内存可能会被垃圾收集器回收;黑色对象 — 活跃的对象,包括不存在任何引用外部指针的对象以及从根对象可达的对象;灰色对原创 2020-09-22 15:16:00 · 443 阅读 · 0 评论 -
Golang架构直通车——理解defer
文章目录defer应用defer触发时机defer执行顺序预计算参数defer实现原理defer应用Go 语言的 defer会在当前函数或者方法返回之前执行传入的函数。它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。比如解锁资源:mu.Lock()defer mu.Unlock()我们在 Go 语言中使用 defer 时会遇到两个比较常见的问题,这里会介绍具体的场景并分析这两个现象背后的设计原理:defer 关键字的调用时机以及多次调用 defer 时执行顺序是如何确定的;de原创 2020-09-21 16:59:45 · 208 阅读 · 0 评论 -
Golang架构直通车——理解协程和Go调度器
文章目录进程、线程与协程进程、线程与协程线程或者进程切换会带来大量的系统开销和上下文切换成本,导致严重的系统开销。在之前的文章中,我们提到过切换进程的开销:切换虚拟地址空间(切换页表、页目录以指向新的地址空间)切换内核栈切换硬件上下文虽然线程切换不需要执行第一步(因为线程共享堆内存),但是线程和进程切换仍然存在通病:丢失寄存器中的内容CPU Cache失效(现代cpu速度提升很大一部原因是因为Cache的引入)TLB快表失效...原创 2020-09-21 16:14:47 · 402 阅读 · 0 评论 -
Golang架构直通车——深入理解Gin骨架
文章目录Gin的初始化流程ENGINE初始化注册handler运行和接受请求Gin框架的核心结构ENGINEROUTERCONTEXTContext初始化Context获取请求参数Context 之模型绑定和验证Context 之响应Gin的初始化流程package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Con原创 2020-09-19 19:10:04 · 694 阅读 · 0 评论 -
Golang架构直通车——理解Gin
文章目录Gin是什么Gin代码解析路由(Router)中间件(Middleware)自定义一个全局中间件自定义一个局部中间件Gin是什么Gin 是使用 Go/golang 语言实现的 HTTP Web 框架。接口简洁,性能极高。Gin 特性快速:路由不使用反射,基于Radix树,内存占用少。中间件:HTTP请求,可先经过一系列中间件处理,例如:Logger,Authorization,GZIP等。这个特性和 NodeJs 的 Koa 框架很像。中间件机制也极大地提高了框架的可扩展性。异常处原创 2020-09-19 18:57:09 · 515 阅读 · 0 评论 -
Golang架构直通车——理解Thrift
文章目录什么是ThriftThrift工作原理Thrift IDL语法RPC框架对比什么是Thriftthrift是一个跨语言通信的工具,支持的语言多,而且还提供服务器端的众多网络模型,使服务端的开发可以只专于服务本身的逻辑。用户通过Thrift的IDL(接口定义语言)来描述接口函数及数据类型,然后通过Thrift的编译环境生成各种语言类型的接口文件。简单来说,Thrift是RPC下的序列化协议和传输协议。什么是IDL?IDL(全称:Interface Description Languag原创 2020-09-19 18:51:14 · 1023 阅读 · 0 评论 -
Golang架构直通车——理解gRPC
文章目录gRPC概述关键技术——HTTP/2二进制分帧层数据流优先级流控制服务器推送标头压缩gRPC StreamgRPC GatewaygRPC概述gRPC具有以下特点:基于HTTP/2和Protobuf3的通用rpc框架, 继而提供了连接多路复用、Body 和 Header 压缩等机制。可以节省带宽、降低TCP链接次数、节省CPU使用和延长电池寿命等。支持服务端-服务端,客户端-服务端通信,由于使用了http2所以并不局限于服务器集群之间的通信。IDL层使用了使用Protobuf3,多语言支原创 2020-09-19 18:41:32 · 532 阅读 · 0 评论 -
Golang架构直通车——理解Protobuf
文章目录什么是Protobuf关键技术varints编码zigzag编码message structrue编码其他编码略Protobuf实践Protobuf使用规则Protobuf例子什么是ProtobufProtocol Buffers是一种语言中立,平台无关,可扩展的序列化数据格式,可以用于通信协议、数组存储等等。传输协议存储格式IDLProtobuf的核心优势在于:向前向后的兼容性多语言自动代码生成性能快&压缩小Protobuf基本数据类型:Protobuf基本数原创 2020-09-19 18:29:39 · 502 阅读 · 0 评论