-
Notifications
You must be signed in to change notification settings - Fork 167
Cloud Native with RSocket
主要介绍一下RSocket对Cloud Native架构的促进作用以及整合方式。
在下图中,我们将设计到的整合点用红笔勾选了一下,接下来我们会对这些点进行说明。
Reactive又被称之为Reactive Stream,RSocket是基于Reactive语义的全异步二进制消息通讯协议。
所以RSocket天生就支持Streaming和Messaging。 在具体产品化方面,当然不可能超越Kafka等产品,
但是如果不涉及存储等,基于RSocket做一个Streaming & Messaging产品非常容易。
注意: 目前Alibaba RSocket默认支持CloudEvents规范;同时支持对接各种消息产品,包括Kafka, RabbitMQ, NATS, RocketMQ等。
RSocket当然支持RPC调用,就是Request/Response通讯模型。当然同时还支持Fire_and_Forget, Request/Stream, Channel等, 对比RPC单一的Request/Response和部分Stream支持,RSocket的通讯模型更丰富,满足各种微服务应用的通讯场景。
RSocket Broker本身就包含服务注册,你不需要外接一个服务注册中心,如Eureka,ZooKeeper等。 对比传统的注册中心,RSocket拥有的连接复用机制、安全保证、完备的事件通知机制和健康度检查,特性更加丰富。
RSocket使用Broker作为中心化的Proxy,实现了服务消费方和服务提供方的解耦,做到通讯双方完全透明。 RSocket Broker是中心化的Proxy,但是大家不用担心性能,独特的路由设计和内存零拷贝技术,网络损耗非常小。 当然作为Proxy,RSocket通过Gateway机制,可以实现其他协议和RSocket协议相互适配,如HTTP, MQTT等等。
基于Broker的设计,通讯双方的流量都会以RSocket协议经过Broker,Service Mesh的特性全部包含,而且实现更加简单。 服务治理、A/B测试、动态流量调度、Metrics、Tracing等,这些全支持。
传统的HTTP REST API Gateway,你需要解决两个问题: Load Balance和反向通知的问题。你需要支付LBS(Load Balance Service)服务费用, 当然你也可以自建基于Nginx的Gateway集群,同样花费你不少。反向通知接入,这个流程也非常复杂,需要对方也有类似的API Gateway。 这两者在RSocket中都不存在,RSocket Broker集群内置load balance服务,反向通知是RSocket协议的一部分。
RSocket基于Broker协调通讯双方,对网络没有任何要求,不问你来自Kubernetes、传统网络架构、或者互联网的任何地方,只要能接入就能通讯。 你完全不用担心网络架构的问题,这些都不需要,没有iptables转发、不需要DNS系统支持等等。
基于高性能的中心化结构设计,让观测和分析更加容易,服务治理方面,你不需要在应用端埋点、日志打印和采集、metrics采集等,也不需要安装各种Agent,这些在Broker端就可以完成。 RSocket内置Tracing的元信息支持,Zipkin也有对应的RSocket Collector;Metrics方面支持Prometheus的反向采集metrics特性,在云端的Prometheus可以采集你家中树莓派的metrics信息。 另外考虑到数据采集的快速性,RSocket支持基于UDP通讯的Aeron,同时Fire and Forget不需要调用确认(ACK),网络传输速度非常快。
RSocket不是天生为Chaos设计的,但是RSocket让服务间调用的混沌测试更简单,在不借助外部工具的情况下,RSocket Broker就可以给你模拟各种各种故障,方便你的混沌测试。 可以参考:RSocket by Example的 Chaos - 混沌测试
并不是说更多数据库产品在支持RSocket协议,而是更多的数据库产品支持Reactive和R2DBC。 R2DBC让关系型数据库以Reactive方式接入,目前支持的数据库有PostgreSQL、MySQL、MS SQLServer、Google Cloud Spanner等,Oracle也在开发中。 众多的NoSQL产品基本都有对应的Reactive支持,如Redis, Cassandra、MongoDB等等,而且性能有非常显著的提升。 当然我们也在尝试将一些NoSQL产品的协议切换到RSocket上,这样就不需要开特定SDK客户端开发,而且通讯性能也非常高。
多语言支持(Polyglot),这个在Cloud Native中并没有,但是Cloud Native中产品都是有各种语言开发,Golang、Rust、Java、C++等等,这些RSocket都有对应的SDK支持,
你完全不用担心因为选择不同的开发语言,而无法接入RSocket协议,这个都不会有问题。
- Binary: byte stream
- Async message
- Multi transports
- Reactive Semantics
- request/response
- request/stream
- fire-and-forget
- channel
- TCP+TLS
- WebSocket+TLS
- UDP(Aeron)
- RDMA