go微服务
1.26
微服务的概念
微服务(micro services),是一种分布式系统解决方案
有很多个小的程序分别是微服务器,分别作出反馈
单体式架构和微服务架构的区别
单体式架构
- 复杂性会随着开发越来越高,遇到问题难以解决
- 技术债务逐渐上升
- 耦合度高,维护成本高(出现bug不容易排查,解决旧bug出现新bug)
- 持续交付时间较长
- 技术选型成本高,风险大
- 扩展性较差
- 垂直扩展:增加单个系统负荷
- 水平扩展:增加更多的系统成员
微服务
- 优点:
- 职责单一
- 轻量级通信(RPC协议)
- 独立性
- 迭代开发
- 缺点
- 运维成本高
- 分布式复杂
- 接口成本高
- 重复性劳动
- 业务分离困难
RPC协议
远程过程调用(remote procedure call protocol)
可以跨进程调用函数
为什么使用RPC
- 每个服务都被封装成进程,彼此独立
- 进程和进程之间,可以用不同的语言实现
RPC使用步骤
服务端
- 注册RPC服务对象,绑定方法
- 创建监听器
- 建立连接
- 将连接绑定RPC服务
客户端
- rpc.Dial()
- 调用远程函数
json版rpc
- RPC使用了go语言有特有的序列化gob,其他语言不能解析
- 使用jsonrpc进行通信
rpc封装
- 希望在编译期间可以报错
- 使用interface对服务器端进行封装
- 在客户端把远程调用封装为 自己的函数
protobuf
将proto文件编译为go文件
protoc --go_out=./ *proto
添加RPC服务service 服务名{ rpc 函数名(参数:消息体)returns(返回值:消息) }
默认protobuf在编译期间不编译服务,要使之编译,需要使用grpc
编译指令protoc --go_out=. --go-grpc_out=. filename.proto
GRPC
安装go get -u -v google.golang.org/grpc
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 kristal!