RPC
全称 remote procedure call,即远程过程调用。借助 RPC 可以做到像本地调用一样调用远程服务。二者可以通过不同的协议进行数据传输,如Bolt协议,RESTful协议,Dubbo协议,H2c协议,HTTP协议。
SofaRpc
在sofaBoot的基础上,将服务部署在多个服务器上,供不同服务器上的方法相互调用。
区别
注解方式
服务发布
@SofaService(interfaceType = AnnotationService.class, bindings = { @SofaServiceBinding(bindingType = "bolt") })
@Component
public class AnnotationServiceImpl implements AnnotationService {
@Override
public String sayAnnotation(String stirng) {
return stirng;
}
}
服务引用
@Component
public class AnnotationClientImpl {
@SofaReference(interfaceType = AnnotationService.class, binding = @SofaReferenceBinding(bindingType = "bolt"))
private AnnotationService annotationService;
public String sayClientAnnotation(String str) {
String result = annotationService.sayAnnotation(str);
return result;
}
}
同一服务发布多种协议
同一服务注册多个注册中心
通信协议
支持Bolt协议,RESTful协议,Dubbo协议,H2c协议,HTTP协议。
同步,异步,回调,单向。
同步:在同步的调用方式下,客户端发起调用后会等待服务端返回结果再进行后续的操作。这是 SOFARPC 的默认调用方式,无需进行任何设置。
异步:异步调用的方式下,客户端发起调用后不会等到服务端的结果,继续执行后面的业务逻辑。服务端返回的结果会被 SOFARPC 缓存,当客户端需要结果的时候,再主动调用 API 获取。如果需要将一个服务设置为异步的调用方式,在对应的使用方式下设置 type 属性即可。
@SofaReference(binding = @SofaReferenceBinding(bindingType = "bolt", invokeType = "future"))
private SampleService sampleService;
获取结果
String result = (String)SofaResponseFuture.getResponse(0, true);
回调:
SOFARPC Bolt 协议的回调方式可以让 SOFARPC 在发起调用后不等待结果,在客户端收到服务端返回的结果后,自动回调用户实现的一个回调接口。
单向:
当客户端发送请求后不关心服务端返回的结果时,可以使用单向的调用方式,这种方式会在发起调用后立即返回 null,并且忽略服务端的返回结果。
注册中心
支持SOFARegistry,zookeeper,本地文件,Consul,Nacos作为注册中心。
支持直连调用
@SofaReference(binding = @SofaReferenceBinding(bindingType = "bolt", directUrl = "127.0.0.1:12220"))
private SampleService sampleService;
自动故障剔除
通常一个服务有多个服务提供者。其中部分服务提供者可能由于网络,配置 ,线程池满,硬件故障等导致长连接还存活但是程序已经无法正常响应。单机故障剔除功能会将这部分异常的服务提供者进行降级,使得客户端的请求更多地指向健康节点。当异常节点的表现正常后,单机故障剔除功能会对该节点进行恢复,使得客户端请求逐渐将流量分发到该节点。
运行机制:
- 单机故障剔除会统计一个时间窗口内的调用次数和异常次数,并计算每个服务对应ip的异常率和该服务的平均异常率。
- 当达到ip异常率大于服务平均异常率到一定比例时,会对该服务进行权重降级。
- 如果该服务的权重并没有降为0,那么当该服务的调用情况正常时,则会对其进行权重恢复。
- 整个计算和调控过程异步进行,不会阻塞调用。
链路追踪
对一些调用日志进行打印。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。