2017-03-01 39 views
0

我有这种情况,我有一个外部.net核心API网关,我的移动设备与之通话,然后网关调用许多单独的内部“微型”服务。从一个API调用到另一个API时的延迟

我的问题是在本地服务器上和Azure上的IIS/Kestrel(因为我的开发设置在Azure中,但在个人服务器上生产)。

问题是如果在这两种情况下调用内部API的开箱即用尽可能小的延迟潜力?或者我可以做些什么来“连接”外部和内部的API来获得更少的延迟?

我真的不能在这个上找到任何好的数据,所以我想我没有这个问题的正确术语。

希望你能帮我解释一下。

回答

0

简短回答:在调用远程服务时,在.NET代码中使用async/await pattern。尽可能地将服务和服务器放在一起,以减少网络开销。

如果你的代码调用通过HTTPS一些其他的服务,总是会有事情等相关的一些延迟:

  • 网络协议栈开销
  • HTTPS握手
  • 包路由
  • 其实等待远程服务器处理并返回响应

前两个是最小值我不能对他们做太多的事情。数据包在两个物理位置之间所需的时间可能在5ms到200ms(或更多)之间变化,这就是将服务放置在同一地理区域或数据中心的原因。

就你的代码而言,只要你使用的是async/await pattern,你的代码已经以最快的网络速度运行。如果延迟时间不符合您的要求,则需要更快地创建服务器,或者将它们靠得更近。

公平的警告:我不是网络工程师,这是一个非常高层次的概述。我建议在Server Fault处询问技术网络问题。

+0

好吧,这样说我有相同的IIS相邻的外部和内部服务(我不这样做,只是假设)它会总是只用较短的包路由时间击中你的子弹点?我希望对于天蓝,例如,如果你愿意的话,我可以告诉外部API使用内部的API,就像服务层一样。谢谢你的回答,你的推荐文章在SF上发布。 – Sturla

+0

如果您调用的是同一台机器上的服务,则基本上不存在网络和路由延迟。我不太清楚我是否按照你的问题,对不起! –

+0

这可能只是我需要感谢的答案。当在同一台服务器上运行或在网络上运行时,延迟会非常小,对我而言可能无关紧要。我可以在代码中找到其他的东西,并使其更快。关于Azure设置,我认为我已将所有服务归入同一“资源”,因此它们的行为与它们位于同一台服务器上(至少在同一个关闭网络中)相同。但是我会问一些Azure专家。 – Sturla