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,那么当该服务的调用状况失常时,则会对其进行权重复原。
- 整个计算和调控过程异步进行,不会阻塞调用。
链路追踪
对一些调用日志进行打印。