什么是Java应用程序的常见Web架构?

时间:2011-05-11 08:34:39

标签: mysql tomcat apache2 varnish web-architecture

我目前正在开发一个java Web应用程序,我正在研究如何组合不同类型的技术,以便最大限度地利用单个网络服务器。

到目前为止,我的计划是进行以下架构设置

Internet ->
Varnish (reverse proxy) ->
Apache2 (mod_pagespeed, mod_jk) -> 
Ehcache-web (caching html page fragments,spring-cache) ->
Tomcat (java appsrv) ->
Ehcache (cache layer) -> 
MySQL (persistance layer)

这个设计有什么问题吗?那么缩放和聚类呢?还有其他(更好的)解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我们正在使用我们的高流量门户网站(约5500万PI /月)3个Varnish代理,3个Apache(2)负载平衡器,6个服务器专业服务器4个tomcats通过mod_jk与apach通信。作为RDBMS,我们有Oracles。我认为数据库选择至关重要。我们的内容是我们的存在,因此我们需要一个DB产品,它具有响应性,稳健性,可靠性,可靠性,高可用性等特点。在最坏的情况下我们可能需要支持。出于这个原因,我们的选择是Oracle。

Tomcat / Application Server的选择取决于您的应用程序架构。 在我们的例子中,我们有Coremedia CMS(基于Spring的CMS,它包含内容服务器,主实时服务器,馈送器等通过CORBA进行通信的分布式服务)和群集的Tomcats就足够了。

我认为您的列表/设置和此组合在大多数情况下看起来非常好并且足够。

答案 1 :(得分:1)

我没有以传统方式设想网络应用程序 - 但在服务提供商和消费者方面。在工作中,我们在Tomcat下运行RESTful API层,通过实现Shindig接口构建。该层与MySQL以及MongoDB交互。我们使用Memcached进行近/远缓存,我们计划迁移到Redis,因为我们使用了大量的列表和基于集合的操作。对于某些API,此层还与Twitter和Facebook连接(如推送状态更新)。所有端点都可以作为OpenSocial兼容的REST / XML调用进行访问。我们使用NewRelic来监控服务性能和SLA。目前我们的转速略高于30K RPM,响应时间为10ms。我们有一个由4个Tomcats,3个memcached,3个MySQL(1M 2S)和3个MongoDB(replicaset)组成的集群。所有堆栈都在由XenServer托管的虚拟机上运行,​​运行Centos。我们使用RabbitMQ进行消息传递/异步操作,例如发送通知或与第三方(Twitter / Facebook)交谈,以便不阻止VM线程。随着平台的普及,我们计划在不久的将来转移到HornetQ + Scala Actors。搜索在Solr上运行,但我们正在积极迁移到ElasticSearch。

我们在此基于API /服务的模型中构建了系统,以便我们可以为多个客户端平台提供服务。因此,当我们的移动应用程序启动时,可以重新使用API​​,而不是为移动设备单独设置相同的堆栈。这种架构抽象了后端产品,没有与前端的耦合。我们的前端是用PHP / Zend构建的,它广泛使用JQuery。我们正在使用HTML5,Phonegap和Sencha touch构建移动前端。

为了安全起见,我们打开了GET,但写入是通过双腿oauth保护的。一旦我们向外部消费者和应用程序开发人员开放API,我们将需要提供3-legged oauth。

我希望这个摘要有所帮助。如果您需要更多信息或有任何疑问,请随时发表评论。