后端的服务间通常采用固定的协议&rpc框架通信,当前主流的方案是以protobuf协议为基础,采用grpc进行通信,这种方式在Golang的开发中尤其突出。因此,笔者决定做一个小的golang应用来踩坑protobuf+grpc编码模式,上传到github分享——这便是protobuf-grpc-starter。
protobuf-grpc-starter主要受到了PasteBin的启发,用户post一段代码到服务器,得到一个短链接(shortLink),其它用户可以通过这个短链接取查看这个用户所发送的代码,实现代码文本分享。当存储文本量较大、且用户访问量较多时,数据库不一定能够承载的了查询的压力,这样就需要缓存来分担查询的任务。因此在protobuf-grpc-starter中,笔者编写了两个小server:WebSvr和CacheSvr,其中WebSvr用于处理用户的查询以及post文本请求,post的文本存储在单独的文件中;CacheSvr则在内部实现了一个驻留内存的LRU缓存,用来缓存短链接查询的结果(短链接only,保证强一致)。WebSvr和CacheSvr间基于protobuf协议采用grpc-go框架通信,处理获取/设定查询缓存的操作。为了保证新接触protobuf+grpc的同学能够专注于此,这个项目的prerequisities里也不会引入类似redis的中间件,而只有go、grpc、protobuf等相关的内容,包括:
- golang v1.16:有最新的库和特性
- protoc:用来编译protobuf协议文件,需要在protoc下载地址下载较新的版本(protobuf3)
- protoc-gen-go:用来生成golang的协议定义文件,可以在protobuf-go教程了解如何下载及生成文件
- protoc-gen-go-grpc:用来生成golang的协议grpc定义的文件,可以在grpc-go教程了解如何下载及生成文件
- make:项目里用了Makefile,因此需要支持make。Makefile里包含了文件生成(proto)以及服务器二进制文件生成(server)的指令
整个项目的结构如下: