【问题标题】:Designing a Scalable Application设计可扩展的应用程序
【发布时间】:2011-10-03 02:00:13
【问题描述】:

开始一个新的电子商务项目,它基本上由两个主要的独立项目组成:一个核心应用程序和一个网络客户端。

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

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

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

原则是将项目(核心和网络)设计为可扩展且可分布在互联网上的多个节点上。

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

问题:

  1. 根据上面的技术栈,有什么可能缺少或值得添加的?
  2. 是否有任何涉及该主题的书籍、材料或案例研究推荐?

【问题讨论】:

    标签: java spring rest scalability distributed


    【解决方案1】:

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

    High Performance Websites 有一些很棒的东西。此外,请查看 Squid 以了解 HTTP 缓存。

    【讨论】:

    • 我认为大部分内容必须动态生成,但这是一个值得考虑的好点。
    【解决方案2】:

    看看CQRS 原则。尽管出色的可扩展性只是应用 CQRS 的副作用,但它非常适合 cloud computing,其主要目标是提供弹性可扩展性。 Here is Greg Young 课堂上的精彩视频。

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

    【讨论】:

      【解决方案3】:

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

      只需在 spring 中处理单例对象(请记住单例对象是每个 JVM)

      【讨论】:

        【解决方案4】:

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

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

        不要期待或猜测任何事情,尽快开始 - 仅此一项就能为您节省财富。

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

        【讨论】:

          猜你喜欢
          • 2015-05-25
          • 1970-01-01
          • 2010-10-28
          • 1970-01-01
          • 2015-12-03
          • 1970-01-01
          • 2010-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多