Application protocol providing Reactive Streams semantics
Jonathan Sedrez
Frontend | ilegra
RSocket é um protocolo binário para uso
em transportes de fluxo de bytes, como
TCP, WebSockets e Aeron.
Motivação
Para possibilitar isso é necessário o trade off de latência dos
usuário e quantidade de recursos para construir.
Times grandes e distribuídos precisam facilmente se comunicar,
usando tecnologias e linguagens diferentes. Todo comunicação deve
ser confiável e suportar grande evolução.
Os sistemas reativos contam com a passagem de mensagens assíncronas
para estabelecer um limite entre os componentes que garante acoplamento
fraco, isolamento, transparência de localização e fornece os meios para delegar
erros como mensagens. Empregar a passagem explícita de mensagens permite
o gerenciamento de carga, elasticidade e controle de fluxo, moldando e
monitorando as filas de mensagens no sistema e aplicando contrapressão
quando necessário. … A comunicação sem bloqueio permite que os
destinatários consumam recursos apenas enquanto estiverem ativos,
levando a menos sobrecarga do sistema.
Manifesto Reativo
Orientado por mensagem
A comunicação da rede é assíncrona. O protocolo RSocket adota isso e
modela todas as comunicações como fluxos multiplexados de
mensagens em uma única conexão de rede e nunca bloqueia de
forma síncrona enquanto espera por uma resposta.
Modelos de interação
O padrão ainda é suportada e espera-se que represente a maioria das
solicitações em uma conexão RSocket. Essas interações de solicitação / resposta
podem ser consideradas “fluxos de apenas 1 resposta” otimizados e são
mensagens assíncronas multiplexadas em uma única conexão.
Request/Response(single-response)
Permite que várias mensagens sejam transmitidas de volta. Pense nisso
como uma resposta de “coleção” ou “lista”, mas em vez de recuperar todos os
dados como uma única resposta, cada elemento é transmitido de volta em
ordem.
Request/Stream(multi-response, finite)
Um canal é bidirecional, com um fluxo de mensagens em ambas as
direções.
Channel
É uma otimização de solicitação / resposta útil quando uma resposta não é
necessária. Ele permite otimizações de desempenho significativas, não apenas
no uso de rede salvo ao ignorar a resposta, mas também no tempo de
processamento do cliente e do servidor, uma vez que nenhuma contabilidade é
necessária para esperar e associar uma resposta ou solicitação de
cancelamento.
Fire-and-Forget
Agnóstico de linguagem
JAVA GO .NET C++ JAVASCRIPT RUST
- Feito para alcançar alta performance
- Cloud native suporte
- Resiliência
PROS
- Tecnologia nova
- Ainda em desenvolvimento
- Documentação
- Ainda nao suporta algumas linguagens (swift/Python/Rust)
CONS
Conclusão
Obrigado!
- https://rsocket.io/
- https://www.youtube.com/watch?v=KapSjhUYSz4&ab_chan
nel=Jfokus
Referências

RSocket

  • 1.
    Application protocol providingReactive Streams semantics
  • 2.
  • 4.
    RSocket é umprotocolo binário para uso em transportes de fluxo de bytes, como TCP, WebSockets e Aeron.
  • 5.
  • 6.
    Para possibilitar issoé necessário o trade off de latência dos usuário e quantidade de recursos para construir. Times grandes e distribuídos precisam facilmente se comunicar, usando tecnologias e linguagens diferentes. Todo comunicação deve ser confiável e suportar grande evolução.
  • 8.
    Os sistemas reativoscontam com a passagem de mensagens assíncronas para estabelecer um limite entre os componentes que garante acoplamento fraco, isolamento, transparência de localização e fornece os meios para delegar erros como mensagens. Empregar a passagem explícita de mensagens permite o gerenciamento de carga, elasticidade e controle de fluxo, moldando e monitorando as filas de mensagens no sistema e aplicando contrapressão quando necessário. … A comunicação sem bloqueio permite que os destinatários consumam recursos apenas enquanto estiverem ativos, levando a menos sobrecarga do sistema. Manifesto Reativo
  • 9.
  • 10.
    A comunicação darede é assíncrona. O protocolo RSocket adota isso e modela todas as comunicações como fluxos multiplexados de mensagens em uma única conexão de rede e nunca bloqueia de forma síncrona enquanto espera por uma resposta.
  • 11.
  • 12.
    O padrão aindaé suportada e espera-se que represente a maioria das solicitações em uma conexão RSocket. Essas interações de solicitação / resposta podem ser consideradas “fluxos de apenas 1 resposta” otimizados e são mensagens assíncronas multiplexadas em uma única conexão. Request/Response(single-response)
  • 13.
    Permite que váriasmensagens sejam transmitidas de volta. Pense nisso como uma resposta de “coleção” ou “lista”, mas em vez de recuperar todos os dados como uma única resposta, cada elemento é transmitido de volta em ordem. Request/Stream(multi-response, finite)
  • 14.
    Um canal ébidirecional, com um fluxo de mensagens em ambas as direções. Channel
  • 15.
    É uma otimizaçãode solicitação / resposta útil quando uma resposta não é necessária. Ele permite otimizações de desempenho significativas, não apenas no uso de rede salvo ao ignorar a resposta, mas também no tempo de processamento do cliente e do servidor, uma vez que nenhuma contabilidade é necessária para esperar e associar uma resposta ou solicitação de cancelamento. Fire-and-Forget
  • 16.
    Agnóstico de linguagem JAVAGO .NET C++ JAVASCRIPT RUST
  • 17.
    - Feito paraalcançar alta performance - Cloud native suporte - Resiliência PROS
  • 18.
    - Tecnologia nova -Ainda em desenvolvimento - Documentação - Ainda nao suporta algumas linguagens (swift/Python/Rust) CONS
  • 19.
  • 20.
  • 21.

Notas do Editor

  • #5 Antes de falarmos propriamente de socet.io eu vou explicar m passo anterior que são os websockets. Ele faz parte das especificações do html 5 é suportado pelas ultimas versões dos navegadores
  • #7 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #8 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #9 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #11 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #13 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #14 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #15 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #16 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #18 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #19 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.
  • #22 Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema. Sistemas grandes e distribuídos são frequentemente implementados de forma modular por equipes diferentes, usando uma variedade de tecnologias e linguagens de programação. As peças precisam se comunicar de maneira confiável e suportar uma evolução rápida e independente. A comunicação eficaz e escalável entre os módulos é uma preocupação crucial em sistemas distribuídos. Isso afeta significativamente a quantidade de latência que os usuários experimentam e a quantidade de recursos necessários para construir e executar o sistema.