RSocket

Spring RSocket:基于服务注册发现的 RSocket 负载均衡

怎甘沉沦 提交于 2021-02-19 17:07:19
作者 | 雷卷 来源| 阿里巴巴云原生公众号 RSocket 分布式通讯协议是 Spring Reactive 的核心内容,从 Spring Framework 5.2 开始,RSocket 已经是 Spring 的内置功能,Spring Boot 2.3 也添加了 spring-boot-starter-rsocket,简化了 RSocket 的服务编写和服务调用。RSocket 通讯的核心架构中包含两种模式,分别是 Broker 代理模式和服务直连通讯模式。 Broker 的通讯模式更灵活,如 Alibaba RSocket Broker,采用的是事件驱动模型架构。而目前更多的架构则是面向服务化设计,也就是我们常说的服务注册发现和服务直连通讯的模式,其中最知名的就是 Spring Cloud 技术栈,涉及到配置推送、服务注册发现、服务网关、断流保护等等。在面向服务化的分布式网络通讯中,如 REST API、gRPC 和 Alibaba Dubbo 等,都与 Spring Cloud 有很好地集成,用户基本不用关心服务注册发现和客户端负载均衡这些底层细节,就可以完成非常稳定的分布式网络通讯架构。 RSocket 作为通讯协议的后起之秀,核心是二进制异步化消息通讯,是否也能和 Spring Cloud 技术栈结合,实现服务注册发现、客户端负载均衡,从而更高效地实现面向服务的架构

Correct usage of LoadbalanceRSocketClient with Spring's RSocketRequester

雨燕双飞 提交于 2021-02-10 12:48:15
问题 I'm trying to understand the correct configuration and usage pattern of LoadbalanceRSocketClient in a context of SpringBoot application ( RSocketRequester ). I have two RSocket server backends (SpringBoot, RSocket messaging) running and configuring the RSocketRequester on a client side like this: List<LoadbalanceTarget> servers = new ArrayList<>(); for (String url: backendUrls) { HttpClient httpClient = HttpClient.create() .baseUrl(url) .secure(ssl -> ssl.sslContext(SslContextBuilder

Correct usage of LoadbalanceRSocketClient with Spring's RSocketRequester

青春壹個敷衍的年華 提交于 2021-02-10 12:46:23
问题 I'm trying to understand the correct configuration and usage pattern of LoadbalanceRSocketClient in a context of SpringBoot application ( RSocketRequester ). I have two RSocket server backends (SpringBoot, RSocket messaging) running and configuring the RSocketRequester on a client side like this: List<LoadbalanceTarget> servers = new ArrayList<>(); for (String url: backendUrls) { HttpClient httpClient = HttpClient.create() .baseUrl(url) .secure(ssl -> ssl.sslContext(SslContextBuilder

从微服务治理的角度看RSocket、. Envoy和. Istio

笑着哭i 提交于 2021-01-10 13:19:29
很多同学看到这个题目,一定会提这样的问题:RSocket是个协议,Envoy是一个 proxy,Istio是service mesh control plane + data plane。 这三种技术怎么能放在一起比较呢? 的确,从技术定位的角度来讲,它们确实是有很大的差距。但是,如果我们用RSocket来治理微服务,会有哪些不同呢? RSocket RSocket是一种应用层协议,不是一个传输层的协议。一方面,它可以包容和支持不同的传输层协议和相关技术,比如tcp 和 proto buf。另一方面,它的重点是把反应流的实现,提升到应用层上来。 其实在底层的协议中,就有反应流的实现,tcp的滑动窗口就是很好的例子。但是往上,这种好的机制不见了,给编程的工作造成很多的麻烦。很大一部分的线上故障是由于阻塞链接造成的。另一方面,很多应用层的网络软件,从设计的时候就开始避免这样的麻烦,造成结构臃肿,通讯效率底下。简单的例子是如果所有的通讯都是反应式的,那就不用熔断了。 基于RSocket 的应用不止是端到端通讯,Broker也是对这个协议水到渠成的应用。作为一个反应式的Broker,它同样是异步,非阻塞的通讯方式,主要维护与就近的各个应用的链接以及和其它Broker的链接。与其它协议相比,它是多路复用,同时支持长链接。 经过这样的解释,不难理解

Solon rpc 之 SocketD 协议

主宰稳场 提交于 2021-01-09 22:31:13
Solon rpc 之 SocketD 协议 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 SocketD 协议 - 消息应答模式 Solon rpc 之 SocketD 协议 - 消息订阅模式 SocketD 是一种二进制的点对点通信协议,是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲,SocketD可以是RSocket等其他类似协议的替代方案。它的消息协议规范具有异步,背压的双向,多路复用,断线重连,基于消息等特性。暂时只提供Java实现,目前做为Solon rpc的sockte通道协议。 本案以简单的消息上报模式为例演示:(就是你问我答) 包依赖 <dependency> <groupId>org.noear</groupId> <artifactId>solon.boot.socketd.smartsocket</artifactId> <version>1.2.18</version> </dependency> 服务端 //启动服务端 public class ServerApp { public static void main(String[] args) { //启动Solon容器(SocketD bean&plugin 由solon容器管理)

Solon rpc 之 SocketD 协议

久未见 提交于 2021-01-09 21:45:20
Solon rpc 之 SocketD 协议 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 SocketD 协议 - 消息应答模式 Solon rpc 之 SocketD 协议 - 消息订阅模式 SocketD 是一种二进制的点对点通信协议,是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲,SocketD可以是RSocket等其他类似协议的替代方案。它的消息协议规范具有异步,背压的双向,多路复用,断线重连,基于消息等特性。暂时只提供Java实现,目前做为Solon rpc的sockte通道协议。 本案以简单的消息订阅模式为例演示:(即等着服务端给消息,例如配置服务的变更通知) 包依赖 <dependency> <groupId>org.noear</groupId> <artifactId>solon.boot.socketd.smartsocket</artifactId> <version>1.2.18</version> </dependency> 服务端 //启动服务端 public class ServerApp { public static void main(String[] args) { //启动Solon容器(SocketD bean

Get Message From Kafka, send to Rsocket and Receive it from React client

我与影子孤独终老i 提交于 2020-12-31 01:38:01
问题 I am trying to send data from kafka using Spring cloud stream to Rsocket and then represent data on React Here is my configuration. @Configuration public class RsocketConsumerConfiguration { @Bean public Sinks.Many<Data> sender(){ return Sinks.many().multicast().directBestEffort(); } } @Controller public class ServerController { @Autowired private Sinks.Many<Data> integer; @MessageMapping("integer") public Flux<Data> integer() { return integer.asFlux(); } @EnableBinding(IClientProcessor.class

Get Message From Kafka, send to Rsocket and Receive it from React client

点点圈 提交于 2020-12-31 01:36:01
问题 I am trying to send data from kafka using Spring cloud stream to Rsocket and then represent data on React Here is my configuration. @Configuration public class RsocketConsumerConfiguration { @Bean public Sinks.Many<Data> sender(){ return Sinks.many().multicast().directBestEffort(); } } @Controller public class ServerController { @Autowired private Sinks.Many<Data> integer; @MessageMapping("integer") public Flux<Data> integer() { return integer.asFlux(); } @EnableBinding(IClientProcessor.class

云原生实践之 RSocket 从入门到落地:Servlet vs RSocket

六眼飞鱼酱① 提交于 2020-12-16 17:02:47
技术实践的作用在于:除了用于构建业务,也是为了验证某项技术或框架是否值得大规模推广。 本期开始,我们推出《RSocket 从入门到落地》系列文章,通过实例和对比来介绍RSocket。主要围绕RSocket如何实现Polyglot RPC、Service Registry、 Service Discovery、 IoT联结等维度,为读者们揭开RSocket的面纱,希望对大家在Java API规范的技术选型过程中有所借鉴。 第一篇文章我们将通过Servlet和RSocket的对比,快速了解RSocket的一些基本知识。要说明的是其实RSocket与Servlet并不是同类的产品,但是大家对Servlet都很熟悉,功能对比相对方便一些。 阅读本系列文章,需要大家对Java有了解,其中可能会涉及到Kotlin,有少部分C++和Python(不做要求),如果了解Spring Boot则最好。 什么是 Servlet ? 维基百科上的解释是"Servlet,全称Java Servlet,是用Java编写的服务器端程序。 其主要功能在于交互式地浏览和修改数据,生成动态Web内容”。 对于Java程序员来说,解释这个概念直接上代码,这样才能方便理解,如下: public abstract class HttpServlet extends Servlet { protected abstract

阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春

安稳与你 提交于 2020-11-13 11:21:02
简介: 借助 RSocket 的架构提供,我们可以将之前比较复杂的方案简化,当然最最重要的是性能的提升,即便之前的一些性能提升技术点,可能由于一些约束等,现在和 RSocket 对接,那些问题都不存在啦!这篇文章只是一个架构启发,不会浪费你时间让你学习 20 年前的技术和知识。 考虑很久,决定还是写一下这篇文章,主要是 AJP 技术太老,我只能说 Long long ago ,估计我在用这个技术的时候,很多同学小学还没有毕业。但是没有问题,这篇文章只是一个架构启发,不会浪费你时间让你学习 20 年前的技术和知识。 Apache JServ Protocol Apache JServ 协议,简称 AJP ,是一种二进制协议,可以将来自 Web 服务器的入站请求代理到位于 Web 服务器后面的应用程序服务器,部署结构如下: 通常我们不希望直接将应用服务暴露到互联网上,有安全问题,当然还涉及到 DNS,IP等问题,我们会做一个互联网请求入口的 Gateway,也就是一个Web服务负责入站请求,然后再转发给内部的Web应用服务器,这样架构就灵活很多。 为何要使用 AJP 这个二进制协议?我们知道 HTTP 1.1 是文本协议,所以解析协议的工作量还是有的,如果 Gateway 的 Web 服务器已经将 HTTP 协议解析啦,为何不复用解析后的结果,形成一个更高效的二进制结构