在多个.NET应用程序之间进行通信的最有效方式
目前我有一个设置,我的客户端(web应用程序、iOS应用程序等)通过REST调用与我的后端API.NET web应用程序(Nancy)对话。没什么特别的 我现在需要将这个API拆分为微服务,每个服务都可以单独升级/部署 我的主API(public)将只执行身份验证,然后调用我的一个微服务,它将位于我的专用网络中 我的主API和其他微服务API之间的通信方式有哪些不同?每种方法的优缺点? 通信需要实时-例如,请求来自浏览器/设备,主API执行身份验证,然后调用microservice API,然后返回响应。所以我不能使用队列或发布/订阅之类的东西。它不一定需要使用HTTP,但需要实时通信(请求/响应)。我还有其他服务(WebJobs、云服务等)需要与这些微服务进行对话(它们也在专用网络中) 想到的唯一方法是简单的基于REST的调用。完全可以,但是延迟是这里的主要问题 有人能推荐其他解决这个问题的方法吗?Azure中有适合这个的东西吗 非常感谢旨在高效沟通。它是由Facebook(现在是开源的)开发的,现在正在开发一个实现在多个.NET应用程序之间进行通信的最有效方式,.net,rest,azure,architecture,microservices,.net,Rest,Azure,Architecture,Microservices,目前我有一个设置,我的客户端(web应用程序、iOS应用程序等)通过REST调用与我的后端API.NET web应用程序(Nancy)对话。没什么特别的 我现在需要将这个API拆分为微服务,每个服务都可以单独升级/部署 我的主API(public)将只执行身份验证,然后调用我的一个微服务,它将位于我的专用网络中 我的主API和其他微服务API之间的通信方式有哪些不同?每种方法的优缺点? 通信需要实时-例如,请求来自浏览器/设备,主API执行身份验证,然后调用microservice API,然后
高效的序列化机制。协议缓冲区不包括RPC(远程过程调用),但可用于通过各种传输机制发送数据。这也是(SO自己的Marc Gravel的项目)。首先-澄清“实时”、“同步/异步”和“单向/双向”之间的区别。您排除的东西(队列和发布/订阅)当然可以用于双向请求/响应,但它们是异步的 第二,澄清“效率”——效率的衡量标准是什么?带宽?延迟开发时间?客户支持 第三,认识到微服务的成本之一是延迟。如果这是您第一次集成时遇到的一个问题,那么您很可能要走很长的路 我的主API和其他微服务API之间的通信方式有哪些不同?每种方法的利弊 不经意间:
- 单节点和IPC上的主机:优点:性能;缺点:与部署拓扑紧密耦合;对其他节点的可达性;客户支持;失效模式
- REST/SOAP/等。端点:优点:广泛的客户端和服务器支持;调试;网络缓存,缺点:性能;失效模式
- 二进制协议:优点:性能;缺点:版本控制;客户端和服务器支持;调试;失效模式
- 消息队列:优点:异步性;缺点:复杂性
- ESB:优点:异步性;客户支持;缺点:复杂性
- 平面文件:优点:带宽;简单客户支持;缺点:延迟,通用PITA