Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest gRPC对NATS或卡夫卡有意义吗?_Rest_Websocket_Apache Kafka_Grpc_Nats.io - Fatal编程技术网

Rest gRPC对NATS或卡夫卡有意义吗?

Rest gRPC对NATS或卡夫卡有意义吗?,rest,websocket,apache-kafka,grpc,nats.io,Rest,Websocket,Apache Kafka,Grpc,Nats.io,很长一段时间以来,当涉及到微服务架构时,我首先想到的是NATS和卡夫卡。但最近我在dotnet core中发现了这个gRPC模板,它吸引了我的注意力。我读了很多关于它的书,看了很多视频,但我不认为其中任何一个能够正确地处理gRPC,因为它们通常对比gRPC和消息代理或REST之类的协议,我想这是非常不合适的,尽管SOAP在这里是相关的。 我的假设是,gRPC是SOAP的现代版本,由于使用了it协议缓冲区,因此具有更好的性能和更少的实现麻烦。我认为gRPC绝对不能与卡夫卡或NATS相比。而且它不能

很长一段时间以来,当涉及到微服务架构时,我首先想到的是NATS和卡夫卡。但最近我在dotnet core中发现了这个gRPC模板,它吸引了我的注意力。我读了很多关于它的书,看了很多视频,但我不认为其中任何一个能够正确地处理gRPC,因为它们通常对比gRPC和消息代理或REST之类的协议,我想这是非常不合适的,尽管SOAP在这里是相关的。 我的假设是,gRPC是SOAP的现代版本,由于使用了it协议缓冲区,因此具有更好的性能和更少的实现麻烦。我认为gRPC绝对不能与卡夫卡或NATS相比。而且它不能像SOAP一样替代RESTful服务

现在,问题是,我的假设在多大程度上是正确的?例如,当选择一个集群上的节点之间的通信桥时,我必须将GPRC加入到我现在的选项NATS、Kafkam Rabbit等中吗?或者我应该在创建Web代理来将外部请求桥接到我的微服务时考虑到吗?
最后,关于实时通信,gRPC能否完全取代websocket/socket.io/Signal?它取代了什么?

您的直觉是正确的,gRPC无法与kafka、Rabbit等异步排队系统相比


但是,它可以替代通常通过SOAP、RPC、REST、,等。您希望从另一台服务器获得响应,而不是向队列中发送消息,然后实际上忘记了消息。

您的直觉是正确的,gRPC无法与kafka、Rabbit等异步排队系统相比


但是,它可以替代通常通过SOAP、RPC、REST、,等。您希望从另一台服务器获得响应,而不是将消息发送到队列中,然后实际上忘记了消息。

gRPC绝对是实时通信的一个选项。如果您没有流式传输到browserNo gRPC支持,它可以取代套接字通信。请查看双向流式传输支持


关于替换Kafka/Rabbit,gRPC可以用作PubSub系统,因为它支持双向流媒体,但我不推荐它。

gRPC绝对是实时通信的一个选项。如果您没有流式传输到browserNo gRPC支持,它可以取代套接字通信。请查看双向流式传输支持


关于取代Kafka/Rabbit,gRPC可以用作PubSub系统,因为它支持双向流媒体,但我不推荐它。

我经常看到人们在一个关键方面错误地使用这些技术:公共认证

例如,检查以下图表:

这是一个反向Json的基准测试,比较了一些工具,如iJson、RabbitMQ、Nats、0MQ等

请注意,NAT、ZeroMQ和iJson并不打算用作公共端点。例如,NAT具有用户/密码、令牌和密钥,但在开放环境(如web浏览器)中它是无用的,因为无法使密钥非公共

另一方面,GRPC与JWT和Oauth2配合得很好,使公共端点完全安全,与任何其他HTTP端点一样安全,因为这些令牌是服务器签名的,所以即使它们是公共的,也不能伪造或篡改

所以,我想说的是:有些技术是面向公众的,有些技术是将服务器和进程粘在一起的,这些服务器是私有连接

GRPC是公共的,ZeroMQ和iJson是完全私有的iJson,例如,没有任何类型的身份验证。Nats与密钥或密码一起工作,因此,尽管比iJson和ZeroMQ更安全,但它并不意味着是公开的

当你说REST时,我在这里假设HTTP,因为REST只是一个架构,websocket/socket.io/signar,你描述的是所有公共接口。GRPC将在这里介绍它与REST作为请求/响应和websocket/socket.io/signar相当,因为它支持与socket类似的半双工和全双工流

另一方面,NAT、iJson和ZeroMQ并不打算这样做。它们用于服务之间的通信

因此,基本上,REST/websocket/socket.io/signal=gRPC

相同或不同服务器中服务之间的内部通信=NAT、iJSON、ZeroMQ


请注意,我甚至没有考虑图中的其他技术,因为它们是产品,IMO,而不是可以用来实现目的的简单库,例如RabbitMQ、nginx,其他一些我还不太熟悉,无法发表意见,但我对图表中的uvloop感到惊讶。

我经常看到人们在一个关键方面错放了这些技术:公共认证

例如,检查以下图表:

这是一个反向Json的基准测试,比较了一些工具,如iJson、RabbitMQ、Nats、0MQ等

请注意,NAT、ZeroMQ和iJson并不打算用作公共端点。例如,NAT具有用户/密码、令牌和密钥,但在开放环境(如web浏览器)中它是无用的,因为无法使密钥非公共

另一方面,GRPC与JWT和Oauth2配合得很好,使公共端点完全安全,与任何其他HTTP端点一样安全,因为这些令牌是服务器签名的,所以即使它们是公共的,也不能伪造或篡改

所以,我想说的是:有些技术是面向公众的,有些技术是将服务器和进程粘在一起的,这些服务器是私有连接

GRPC是公共的,ZeroMQ和iJson是完全私有的iJson,例如,没有任何类型的身份验证。Nats与密钥或密码一起工作,因此,尽管比iJson和ZeroMQ更安全,但它并不意味着是公开的

当你说REST时,我在这里假设HTTP,因为REST只是一个架构,websocket/socket.io/signar,你描述的是所有公共接口。GRPC将在这里介绍它与REST作为请求/响应和websocket/socket.io/signar相当,因为它支持与socket类似的半双工和全双工流

另一方面,NAT、iJson和ZeroMQ并不打算这样做。它们用于服务之间的通信

因此,基本上,REST/websocket/socket.io/signal=gRPC

相同或不同服务器中服务之间的内部通信=NAT、iJSON、ZeroMQ


请注意,我甚至没有考虑图中的其他技术,因为它们是产品,IMO,而不是可以用于实现目的的简单库,如RabbitMQ、nginx等。其他技术我还不太熟悉,无法发表意见,但我对该图中的uvloop感到惊讶。

注意,支持gRPC for Web!我使用过它,它工作得很好,尽管没有其他gRPC库Java、Python、Node等多功能gRPC不是为发布/订阅而构建的。它是为RPC而构建的,没有代理。截至2020年9月,没有使用gRPC制作的维护良好的开源发布/订阅代理。我的意思是浏览器不支持它。Grpc web使用特使代理请求。这是一个我强烈不推荐的解决办法。您添加了一个不需要的复杂性。无论如何,您的答案是错误的,因为浏览器支持gRPC,我在浏览器上进行了gRPC流式处理。当然,CORS和HTTP/1.1回退安全性和兼容性需要特使。浏览器不支持gRPC。如果特使不向gRPC代理HTTP请求,它将无法工作。我建议你多研究一下。如果您说可以在浏览器上执行gRPC,请尝试删除。作为项目负责人,我不想将特使添加到我的堆栈中。grpc web的整个复杂性是不必要的。您可能希望查看此项目以了解如何有效管理gRPC API注意,gRPC for Web是受支持的!我使用过它,它工作得很好,尽管没有其他gRPC库Java、Python、Node等多功能gRPC不是为发布/订阅而构建的。它是为RPC而构建的,没有代理。截至2020年9月,没有使用gRPC制作的维护良好的开源发布/订阅代理。我的意思是浏览器不支持它。Grpc web使用特使代理请求。这是一个我强烈不推荐的解决办法。您添加了一个不需要的复杂性。无论如何,您的答案是错误的,因为浏览器支持gRPC,我在浏览器上进行了gRPC流式处理。当然,CORS和HTTP/1.1回退安全性和兼容性需要特使。浏览器不支持gRPC。如果特使不向gRPC代理HTTP请求,它将无法工作。我建议你多研究一下。如果您说可以在浏览器上执行gRPC,请尝试删除。作为项目负责人,我不想将特使添加到我的堆栈中。grpc web的整个复杂性是不必要的。您可能需要检查此项目,以了解如何有效地管理gRPC API