1

我目前正在开发一个 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)

这个设计有问题吗?涉及到扩展和集群呢?还有其他(更好的)解决方案吗?

谢谢!

4

2 回答 2

2

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

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

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

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

于 2011-05-11T18:17:14.640 回答
1

我们正在为我们的高流量门户(大约 5500 万个 PI /月)使用 3 个 Varnish 代理,3 个 Apache(2)负载平衡器,在 6 个服务器 pro server 4 个 tomcats 通过 mod_jk 与 apache 通信。作为 RDBMS,我们有 Oracle。我认为数据库的选择很关键。我们的内容就是我们的存在,因此我们需要一个响应迅速、健壮、可扩展、可靠、高可用等的数据库产品。在最坏的情况下,我们可能需要支持。出于这个原因,我们选择了 Oracle。

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

我认为您的列表/设置和这种组合对于大多数情况来说似乎非常好并且足够。

于 2011-05-11T08:51:00.697 回答