微服务
微服务
拆分单体应用 —>解耦合
要求实现高内聚,低耦合
要求既要拆分,又要代码不要有太大的变动,让网络通信用起来像函数一样(远程过程调用RPC)
REST和RPC有什么联系和区别?
REST是一种接口规范,使用http协议,通用性好,一般性能更差,天生跨语言,
RPC是一种具体的技术,一般用私有的协议,通用性差,一般性能更好,要做一些特殊的设计
两种技术会结合使用
边缘节点用REST,为了通用性,内部用rpc,并且边缘节点除了实现转发,甚至可以作为函数的主调方,去调用一个函数,通常把这个边缘节点叫做API网关,比之前的nginx功能更多,而内部的方框就是被调函数,称为服务,这个边缘节点以及内部的服务组成了微服务体系。
好处:实现了高内聚,低耦合
目前流行的API网关 kong,其是基于nginx做的
除了这个还有apisix,也是基于nginx做的
比较有影响力的RPC框架:thrift,被google的GRPC取代,提供了protobuf 序列化方案, 百度提供了brpc,腾讯提供了tars/trpc
sougou的srpc,特点服务端使用workflow写的,序列化方案用的proobuf
grpc代理模式
让网络通信像函数调用,要使用代理模式
通过client_stub可以调用函数,但是这个函数自己运行不了,得把函数参数交给服务端执行,这时候就被函数参数使用protobuf进行序列化,通过网络传输给服务端。
服务端这边也有一个服务端代理,进行反序列化,然后服务端执行函数,函数执行完返回值交给代理,代理进行序列化,通过网络传输给客户端,客户端代理反序列化得到函数返回值,交给主调方
RPC框架得使用
安装protobuf
1 | tar xf protobuf... |
安装成功后会多两个文件
1 | cd /usr/local/bin/protoc#编译器 编译:把一种语言翻译成另外一种语言 |
1 | cd /usr/local/lib/libprotobuf.so |
使用
创建一个proto文件(IDL(接口定义文件)文件)
1 | touch signup.proto |
1 | syntax="proto3";//使用得是proto3而不是proto2 |
将proto文件转换成c++代码
1 | protoc #proto帮助手册 |
参数返回值都有了,现在缺一个函数,函数需要srpc
sprc得使用
需要前置依赖,先安装
1 | sudo apt install libsnappy-dev |
再安装srpc
安装成功多一个可执行程序srpc_generator
用于生成具体得函数
1 | srpc_generator protobuf signup.proto . |
request是函数得参数
response是函数的返回值
ctx是用来获取Signup当前的序列
里面的逻辑跟workflow的process类似,写完逻辑编译