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