设计可扩展的应用程序

时间:2011-07-11 19:35:19

标签: java spring rest scalability distributed

启动一个新项目的电子商务,基本上由两个主要的分离项目组成:核心应用程序和Web客户端。

  1. 核心应用程序将充当服务提供者,Web客户端(或其他客户端)的后端,在REST-ful Web服务/ JSON中公开其所有功能。

  2. Web客户端将充当核心应用程序的前端和服务使用者。

  3. 这两个项目主要基于:Spring,Apache CXF,Maven以及Tomcat或Jetty。 Git作为VCS。 CouchDB作为DB。也是像Memcached这样的分布式缓存系统。

    原则是设计项目(核心和Web),以便在互联网上的几个节点上进行扩展和分发。

    也许这个主题太大而且复杂,无法在一个主题中讨论;我们的想法是在继续实施之前制定有助于做出正确决策的主要标题。

    问题:

    1. 根据上面的技术堆栈,可能会遗漏或值得添加什么?
    2. 任何涉及此主题的书籍,材料或案例研究建议?

4 个答案:

答案 0 :(得分:0)

在服务器端,您应该以这样的方式构建URL和应用程序状态,即它们可以静态生成并通过Apache等Web服务器提供,也可以由app服务器动态生成和提供。静态内容生成可以是一种非常有效,相当简单的方法来提高性能。无论如何,将API点与实现无关是一种很好的做法。

High Performance Websites有一些很棒的东西。另外,请查看Squid以获取HTTP缓存。

答案 1 :(得分:0)

看看CQRS原则。尽管很好的可扩展性只是应用CQRS的副作用,但它理想地适用于cloud computing,其主要目标是提供弹性可伸缩性。 Here is来自Greg Young班级的精彩视频。

PS。尽管大多数材料都基于.NET堆栈,但这些原则是跨平台的。

答案 2 :(得分:0)

@Ellead:通过Tomcat集群(会话复制):http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

在spring中处理单例对象(记住每个JVM的单例)

答案 3 :(得分:0)

您没有提到性能和负载测试 - 您应该衡量应用程序的性能和可伸缩性:

  • 单个节点如何应对高负载?
  • 通过添加单个节点可以获得哪些性能提升?

不要期待或猜测任何事情并尽快开始 - 只有这样才能为你节省财富。

对于基于REST的解决方案,请查看Apache httpd和mod_jk以获取负载平衡