SofaRpc

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,那么当该服务的调用情况正常时,则会对其进行权重恢复。
  • 整个计算和调控过程异步进行,不会阻塞调用。

链路追踪

对一些调用日志进行打印。

你可能感兴趣的:(sofa)