如何连接分离的webapp组件?

时间:2016-12-19 14:23:51

标签: api optimization server

我决定将我的webapp解耦为:

  1. 托管在服务器上的API组件,连接到数据库,包含一些逻辑并将结果返回给消费者应用程序。
  2. 托管在服务器上的Consumer应用程序具有HTML模板,视图逻辑和客户端JavaScript代码。它将请求发送到组件1,将结果放入模板并呈现视图。
  3. 由于消费者应用程序需要API组件才能运行,因此它必须具有低延迟连接。因此,我应该将API和消费者组件放在一台服务器上,并以某种方式优化它们之间的连接吗?或者将它们放在不同的服务器上是否可以,只是让它们快速?

2 个答案:

答案 0 :(得分:5)

现代网络应用程序倾向于使用像Angular这样的库在客户端(浏览器)上生成HTML。这样服务器不提供HTML,而是将Web应用程序(静态文件)提供给客户端,并为客户端提供API调用。客户端从服务器API获取数据并呈现HTML。

  

由于消费者应用程序需要API组件才能运行,因此它必须具有低延迟连接。

由于API提供纯数据(JSON,CSV等)并且没有呈现HTML,因此在客户端和服务器之间的线路上传输的数据更少。它也会更好地压缩。

答案 1 :(得分:1)

任何开销都会增加延迟。在一天结束时,它取决于你的快速质量标准。

您可以通过在客户端应用程序和API之间使用内部网络来减轻物理延迟,但如果您在客户端上进行渲染,浏览器仍然必须在每次服务调用时返回API。

要真正利用内部网络,您需要一个同构应用程序(以前称为通用应用程序),您的应用程序可以在客户端和服务器端呈现。在客户端呈现应用程序中,在第一次调用时以及每次刷新浏览器时,都必须完成额外的工作(下载客户端代码,进行服务调用和呈现)。但是,同构呈现将通过专用网络调用api,在第一次调用时以及刷新浏览器时呈现视图并将其提供给客户端应用程序。

客户端呈现的另一个问题是SEO。网络抓取工具不会处理javascript呈现(谷歌是唯一声称在此问题上的改进)。他们只是希望html作为对他们请求的响应,而没有数据的页面对于索引目的是没用的。但是,通用渲染再次解决了这个问题。

在airbnb中有一篇非常好的博客文章可以讨论它:http://nerds.airbnb.com/isomorphic-javascript-future-web-apps/

还有一些关于云环境中私有网络的链接:

https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking https://aws.amazon.com/vpc/