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

标签 mysql tomcat apache2 varnish web-architecture

我目前正在开发一个 Java 网络应用程序,我正在研究如何结合不同类型的技术以充分利用单个网络服务器。

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

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)

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

谢谢!

最佳答案

我不以传统方式设想 webapp,而是以服务提供者和消费者的方式设想。在工作中,我们有一个在 Tomcat 下运行的 RESTful API 层,它是通过实现 Shindig 接口(interface)构建的。该层与 MySQL 以及 MongoDB 交互。我们使用 Memcached 进行近/远缓存,我们计划将其迁移到 Redis,因为我们使用了大量基于列表和集合的操作。该层还为某些 API 与 Twitter 和 Facebook 交互(例如推送状态更新)。所有端点都可以作为 OpenSocial 兼容的 REST/XML 调用进行访问。我们使用 NewRelic 来监控服务性能和 SLA。目前我们的转速略高于 30K RPM,响应时间为 10 毫秒。我们有一个由 4 个 Tomcat、3 个 memcache、3 个 MySQL (1M 2S) 和 3 个 MongoDB (replicaset) 组成的集群。所有堆栈都在 XenServer 托管的虚拟机上运行,​​运行 Centos。我们使用 RabbitMQ 进行消息传递/异步操作,例如发送通知或与第 3 方(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。

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

关于mysql - Java 应用程序的常见 Web 架构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961408/

相关文章:

PHP:获取数组元素

java - 大多数未打补丁的 Tomcat 网络服务器都容易受到攻击,谁的错?

php - Apache2,线程。 fatal error 。 pthreads 不支持 apache2handler SAPI

ruby - Apache2 不执行 .rb 文件 (mod_ruby)

php - 使用CMS只管理内容,不展示内容

javascript - 如何在 PHP 中检测数据库事件时创建 Web 通知

mysql - 查找在特定上下文中一起出现的所有元素

eclipse webapp欢迎文件显示错误

java - 无法使用来自tomcat的css运行jsp

.htaccess - HTACCESS 重写在 Ubuntu 14、Apache2 上不起作用