Forrester 移动 Web 应用程序 4 层模型中的交付层示例

Delivery tier example in Forrester 4-tier model of mobile web apps

Forrester 报告建议移动应用采用新的 4 层架构:客户端、交付、聚合和服务。

有多篇文章描述了该模型:

我似乎了解客户端、聚合和服务层的典型实现,但我仍在努力理解交付层的典型实现方式。

到目前为止我对模型的理解:

以上描述是否正确?
我需要交付层通常如何实现的简单示例,最好是在 Java 堆栈中。
请不要在您的答案中包含 CDN - 我对不使用它们的示例感兴趣。

Forrester 文章在某种程度上提供了答案“......并利用网络边缘缓存功能来处理日益动态的数据。CDN(例如 Akamai 提供的那些)以及交付优化解决方案(例如 Instart Logic、应用程序像 Riverbed Stingray 这样的交付控制器和本地内存数据库缓存,今天就实现了这一点......"

回答“交付层应该使用哪个软件?”这个问题让我们考虑一下以下问题: Forrester 建议了 3 种可能的解决方案,而不是 CDN,让我们只关注它们。

  1. 应用程序交付控制器 (ADC)
  2. 应用程序交付优化 (ADO)
  3. 内存缓存

应用程序交付控制器 (ADC) 是数据中心中的计算机网络设备,通常是应用程序交付网络的一部分,有助于执行常见任务,例如网站完成的任务从网络服务器本身移除负载。许多还提供负载平衡。 ADC 通常位于防火墙或路由器与网络场之间的 DMZ 中。 {维基百科}。这就是 Riverbed 提供的 Stingray 等设备的作用。

这给我们留下了 2 个可能的软件选择 - ADO 或缓存

应用程序交付优化 (ADO) 解决方案 在显示内容和执行 JavaScript 代码之前,浏览器通常会下载一整套数兆字节的组件——HTML、CSS、图像、JavaScript。我们是否可以利用现代 HTML5 浏览器的不同缓存和存储机制(每个都有自己的性能和容量特征)来提高应用程序性能,而不是一直发送所有内容或完全发送所有内容。这就是 ADO 背后的原理。

因此,应用程序交付优化 (ADO) 解决方案试图通过实时决定应用程序的每个元素(例如图像或代码片段)应如何放置在浏览器的不同层中来加快内容交付缓存。他们还利用从用户通常如何感知元素的完整性中学到的知识来决定流式传输元素的速率。例如,图像在被识别之前不需要完全流式传输。像 Instart Logic 这样的产品提供了多种组件来解决这些技术中的每一种。我想可能有一些开源实现,但没有亲自遇到/探索过。

内存数据库缓存 关于内存数据库缓存,任何内存数据库都可以用作起点。例如Oracle Ten times DB,像 Memcached 这样的键值存储,或者如果您在 AWS 中托管,那么 Amazon ElasiCache 或像 Coherence 等这样的内存数据网格。请参阅 http://www.slideshare.net/MaxAlexejev/from-distributed-caches-to-inmemory-data-grids 上的精彩幻灯片以获取更多信息。哪个内存数据库取决于您要解决的特定问题情况。

通常情况下,内存中的分布式数据缓存在数据/对象级别很有用,并且需要一个服务/网络/应用程序来处理它,正如您所期望的那样。请在此处参考一个好的/简单的 Azure 示例,其中包含一个可能有助于理解的简单图表。 www.asp.net/aspnet/overview/developing-apps-with-windows-azure/building-real-world-cloud-apps-with-windows-azure/distributed-caching

网络缓存 除了以上三点之外,还有必要划清 Web 缓存和数据库缓存之间的话题。反向代理/负载平衡器级别的 Web 缓存与内存数据库缓存不同。大多数服务器,如 Nginx、Squid 等,也兼作反向代理、Web 缓存。例如参考:http://nginx.com/blog/nginx-caching-guide 关于如何使用 nginx 进行网络缓存。

因此,正如您从上面看到的,交付层应该使用哪个软件这个问题的答案是“可能是也可能不是单个 software/solution”。

取决于 a) 应用程序所服务的内容类型,b) 其客户所在的位置,c) 他们如何访问它,d) 如果仅部分交付内容,他们可能如何看待内容等等。确定 ADC 或 ADO 或 Web Cache 或 In Memory 数据库缓存中的哪种解决方案组合适合整体解决方案。

基于以上,选择产品包括Nginx(或等效的Web缓存)、Stingray(或等效的ADC)、Instart Logic(或等效的ADO)、各种内存缓存(如上所述)。

(PS: 创建了一个图表,但将所有这些放在一起,但上传到 Whosebug 失败...)