首页 > > > Go与微服务-确定协议
对于微服务所用的通讯协议,我们希望有以下几点特性:

从以上图表来看,这几种rpc性能差距不算大。thrift几乎没有官方文档,社区不活跃,dubbo主要受众是java。rpcx生态略弱,没有大厂背书。
对于Go生态而言,相比之下grpc的文档更为丰富,社区更为活跃,且grpc基于http2实现,扩展起来更加方便。譬如我们基于nginx中转grpc服务的话,那么很多通用逻辑譬如缓存日志监控鉴权之类的都可以在nginx层面处理了,服务本身尽可能简单,只负责业务逻辑的实现即可。
给个简单定义
syntax = "proto3";
package com.company.base;
option go_package="example";
service Example{
rpc Hello(HelloReq) returns (HelloRes){};
}
message HelloReq {
string name=1;
}
message HelloRes {
string msg=1;
}当微服务数量越来越大,统一管理protobuf就愈发重要,不同人对于微服务的理解可能不同,那么实现上也会千奇百怪,如果我们可以在protobuf定义上进行统一管理,那么就能从根源上避免服务拆分设计不合理的问题。
基于uber/prototool可以很容易实现,它主要提供了以下的工具链:
对于微服务,我们应该预先划分好层次,避免服务互相依赖,举个例子如下:

原则是:
Talk is cheap, show me the protobuf!
该系列接下来的文章将会尝试基于grpc做一些微服务拆分说明
届时会把相关protobuf定义放在 hnlq715/proto 这个仓库,欢迎关注。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1817/viewspace-3170659/ ,如需转载,请注明出处,否则将追究法律责任。