关于sofa:SofaRpc

12次阅读

共计 1827 个字符,预计需要花费 5 分钟才能阅读完成。

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

链路追踪

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

正文完
 0