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



Forrester报告为移动应用程序提出了一种新的四层架构:客户端、交付、聚合和服务。

几篇文章描述了该模型:

  • http://blogs.forrester.com/ted_schadler/13-11-20-mobile_needs_a_four_tier_engagement_platform
  • https://www.nginx.com/blog/time-to-move-to-a-four-tier-application-architecture/
  • https://strongloop.com/strongblog/node-js-api-tier-enterprise/

我似乎理解客户端、聚合和服务层的典型实现,但我仍在努力理解交付层通常是如何实现的。

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

  • 客户端:在客户端设备上运行或在浏览器中作为JS运行
  • 交付:不清楚。可能是负载均衡器与ApacheHTTPServer/Nginx的组合这样正确吗
  • 聚合:我的应用程序驻留在tomcat/nety中。代表客户端与其他服务/微服务进行通信,通常通过REST进行通信
  • 服务:其他内部或外部应用程序

以上描述正确吗
我需要一个简单的例子来说明交付层通常是如何实现的,最好是在Java堆栈中
请不要在你的答案中包括CDN——我对不使用它们的例子感兴趣。

Forrester的文章在一定程度上提供了答案"…并利用网络边缘缓存功能来获取日益动态的数据。Akamai提供的CDN,以及Instart Logic等交付优化解决方案、Riverbed Stingray等应用程序交付控制器和内部部署内存数据库缓存,今天就可以实现这一点…"

为了回答"交付层应该使用哪种软件?"这个问题,让我们考虑一下以下内容:Forrester提出了除CDN之外的3种可能的解决方案,并只关注它们。

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

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

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

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

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

内存中数据库缓存关于内存中数据库缓存,任何内存中数据库都可以用作起点。例如,Oracle Ten times DB、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/developming-apps-with-windows-azure/building-real-world-cloud-apps-with-windows-anzure/distributed-caching

Web缓存除了以上三点之外,还值得描述一下web缓存和数据库缓存之间的讨论。反向代理/负载平衡器级别的Web缓存与内存数据库缓存不同。大多数服务器,如Nginx、Squid等,也兼作反向代理、Web缓存。例如,请参阅:http://nginx.com/blog/nginx-caching-guide关于如何使用nginx进行web缓存。

因此,正如您从上面看到的,对于交付层中应该使用哪种软件的问题,答案是"可能是一个单一的软件/解决方案"。

根据a)应用程序提供的内容类型,b)其客户端在哪里,c)他们如何访问它,d)如果内容仅部分交付,他们如何感知内容等,可以确定ADC或ADO、Web缓存或内存数据库缓存中的解决方案的哪种组合适合整体解决方案。

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

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

最新更新