我目前正在开发一个java web应用程序,并且正在研究如何将不同类型的技术组合在一起,以便最大限度地利用单个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)这个设计有什么问题吗?当涉及到这一点时,缩放和集群又如何呢?有没有其他(更好的)解决方案?
谢谢!
发布于 2011-05-12 02:17:15
我并不认为webapp会以传统的方式出现--而是在服务提供商和消费者方面。在工作中,我们有一个运行在Tomcat下的Shindig层,它是通过实现RESTful接口构建的。该层与MySQL和MongoDB进行交互。我们有使用Memcached的近/远缓存,我们计划将其转移到Redis,因为我们使用了大量基于列表和集合的操作。这一层还与Twitter和Facebook进行接口,以实现某些API(如推送状态更新)。所有端点都可以通过OpenSocial兼容的REST/XML调用进行访问。我们使用NewRelic来监控服务性能和服务等级协议。目前我们做的是略高于30K RPM,响应时间为10ms。我们有一个由4个Tomcat,3个memcacheds,3个MySQL (1M 2S)和3个MongoDB (副本集)组成的集群。所有堆栈都运行在XenServer托管的虚拟机上,运行Centos。我们使用RabbitMQ进行消息传递/异步操作,比如发送通知或与第三方(Twitter/Facebook)交谈,这样就不会阻塞VM线程。我们计划在不久的将来随着平台变得流行起来而转向HornetQ+Scala演员。搜索在Solr上运行,但我们正在积极迁移到ElasticSearch。
我们在这个基于API/服务的模型中构建了系统,这样我们就可以为多个客户端平台提供服务。因此,当我们的移动应用程序启动时,可以重用API,而不是为移动应用程序单独设置相同的堆栈。此体系结构抽象了后端产品,而不耦合到前端。我们的前端是用PHP/Zend构建的,它广泛地使用了JQuery。我们正在构建一个使用HTML5,Phonegap和Sencha touch的移动前端。
为了安全起见,我们有开放的GET,但是写操作是通过两条腿的oauth来保护的。一旦我们向外部消费者和应用程序开发人员开放API,我们将需要提供3条腿的oauth。
我希望这个总结能有所帮助。如果您需要进一步的信息或有任何问题,请不要犹豫地发表意见。
发布于 2011-05-11 16:51:01
我们正在使用我们的高流量门户网站(约55mil。PI /month )3个Varnish代理,3个Apache (2)负载均衡器,6个服务器上的4个tomcats通过mod_jk与Apache通信。作为RDBMS,我们有Oracle。我认为DB选择是至关重要的。我们的内容就是我们的存在,因此我们需要一个响应迅速、健壮、可伸缩、可靠、高可用性的数据库产品。在最坏的情况下,我们可能需要支持。出于这个原因,我们选择了Oracle。
Tomcat / Application Server的选择取决于您的应用程序架构。在我们的例子中,我们有Coremedia CMS (基于Spring的CMS,它包含分布式服务,如内容服务器、主实时服务器、feeder等,通过CORBA进行通信)和集群Tomcat就足够了。
我认为你的列表/设置和这个组合看起来很好,在大多数情况下都足够了。
https://stackoverflow.com/questions/5961408
复制相似问题