Forrester报告为移动应用提供了一种新的4层架构:客户端,交付,聚合和服务。
有几篇文章描述了这个模型:
我似乎理解客户端,聚合和服务层的典型实现,但我仍然在努力了解如何通常实现交付层。
到目前为止我对模型的理解:
以上描述是否正确?
我需要有关如何实现交付层的简单示例,最好是在Java堆栈中。
请不要在答案中包含CDN - 我对不使用CDN的示例感兴趣。
答案 0 :(得分:0)
Forrester文章在某种程度上提供了答案,并且为越来越多的动态数据利用网络边缘缓存功能。像Akamai提供的CDN,以及像Instart Logic这样的交付优化解决方案,像Riverbed Stingray这样的应用交付控制器,以及内部部署的内存数据库缓存,今天就实现了这一目标......"
要回答“应该在交付层中使用哪个软件?”的问题,让我们暂时考虑以下问题: Forrester提出了除CDN之外的3种可能的解决方案,并且只关注它们。
应用交付控制器(ADC)是数据中心中的计算机网络设备,通常是应用交付网络的一部分,可帮助执行常见任务,例如网站完成的任务,以消除网络负载服务器本身。许多还提供负载平衡。 ADC通常放置在防火墙或路由器与Web场之间的DMZ中。 {}维基百科。这就是像River Stingray这样的Riverbed提供的设备的作用。
这给我们留下了两个可能的软件选择 - ADO或缓存
应用交付优化(ADO)解决方案 浏览器通常在显示内容和执行JavaScript代码之前下载整个多兆字节的组件集 - HTML,CSS,图像,JavaScript。我们不是一直发送所有内容或完全发送所有内容,而是利用Modern HTML5浏览器的不同缓存和存储机制,每种机制都有自己的性能和容量特性,以提高应用程序性能。这是ADO背后的原则。
因此,应用交付优化(ADO)解决方案尝试通过实时决定应用程序的每个元素(例如图像或代码片段)应如何放置在浏览器缓存的不同层中来加速内容交付。他们还利用用户通常如何感知元素完整性的知识来决定流元素的速率。例如,图像在被识别之前不需要完全流式传输。像Instart Logic这样的产品提供了解决这些技术的多个组件。我想可能有一些开源实现,但没有亲自接触/探索过它们。
内存数据库缓存 关于内存数据库缓存,任何内存数据库都可以用作起点。对于例如Oracle十次数据库,一个像Memcached这样的Key Value存储,或者如果您在AWS中托管Amazon ElasiCache或者像Coherence等内存数据网格,请参阅http://www.slideshare.net/MaxAlexejev/from-distributed-caches-to-inmemory-data-grids的这个好幻灯片以获取更多信息。哪个内存数据库取决于您尝试解决的特定问题情况。
通常,内存中的分布式数据缓存在数据/对象级别非常有用,并且需要服务/ Web /应用程序来按照您的预期进行操作。在这里引用一个好的/简单的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进行Web缓存。
因此,正如您从上面看到的那样,关于应该在交付层中使用哪个软件的问题的答案是“可能或可能不是单个软件/解决方案”。
取决于a)应用程序所服务的内容类型,b)其客户端的位置,c)他们如何访问它,d)如果内容仅部分传递,他们可能如何感知内容等。 ADC或ADO或Web Cache或In Memory数据库Cache中的解决方案组合适用于整体解决方案。
基于以上所述,选择产品包括Nginx(或等效的Web缓存),Stingray(或等效的ADC),Instart Logic(或等效的ADO),各种内存缓存(如上所述)。
(PS:创建了一个图表但将所有这些放在一起,但上传到stackoverflow失败了......)