2011-05-11 49 views
0

我目前正在开发一个java web应用程序,并且正在研究如何组合不同类型的技术以便最大限度地利用单个web服务器。什么是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) 

是否有这样的设计有问题吗?当涉及到扩展和集群时,怎么办?有没有其他(更好的)解决方案?

谢谢!

+0

这取决于 - 我不会考虑使用Varnish第1天,除非您正在构建的应用程序会受到严重打击。你也可以考虑在Tomcat和MySQL之间使用memcached(缓存层)。 – lobster1234 2011-05-11 08:37:21

+0

啊忘了,我有eclipse之间的tomcat和mysql – netbrain 2011-05-11 08:41:17

回答

1

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

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

为了安全起见,我们已经打开GETs,但是写操作通过双腿oauth进行保护。一旦我们向外部消费者和应用程序开发人员开放API,我们将需要提供三方oauth。

我希望这个总结有所帮助。如果您需要进一步的信息或有任何问题,请不要犹豫,评论。

+0

确实很有趣。感谢您对平台和技术选择以及其他实用程序的意见。 – netbrain 2011-05-12 07:15:36

1

我们正在使用我们的高流量门户(大约55 mil。PI /月)3个光漆代理,3个Apache(2)负载均衡器,6台服务器专业服务器4个tomcats通过mod_jk与apaches进行通信。作为RDBMS,我们有Oracles。我认为数据库选择至关重要。我们的内容是我们的存在,因此我们需要一款数据库产品,它的响应能力强,可靠,可靠,可用性高等等。在最坏的情况下我们可能需要支持。出于这个原因,我们选择了Oracle。

Tomcat /应用程序服务器选择取决于您的应用程序体系结构。 在我们的例子中,我们有Coremedia CMS(基于Spring的CMS包含内容服务器,主服务器,馈线等分布式服务,通过CORBA进行通信)和集群雄猫就足够了。

我认为你的清单/设置和这个组合对于大多数情况来说似乎非常好和足够。

相关问题