Web applications 如何设计托管的web应用程序?

Web applications 如何设计托管的web应用程序?,web-applications,hosted-app,Web Applications,Hosted App,您将如何设计托管的web应用程序?我正在寻找像Basecamp、Campaign Monitor、Freshbooks等应用程序。。。用户可以在线注册并为其托管应用程序 您是使用一个大数据库来存储所有客户的数据,还是以不同的方式处理数据?您会使用多个数据库吗?你会为每个客户建立一个数据库吗 您会为每个注册/客户复制代码库,还是使用1个代码库来处理所有客户 我还应该考虑其他设计元素吗 有任何网站或书籍谈论这一点吗 编辑: 我发现了一篇讨论多租户数据体系结构的MSDN文章: 参考37signals—

您将如何设计托管的web应用程序?我正在寻找像Basecamp、Campaign Monitor、Freshbooks等应用程序。。。用户可以在线注册并为其托管应用程序

  • 您是使用一个大数据库来存储所有客户的数据,还是以不同的方式处理数据?您会使用多个数据库吗?你会为每个客户建立一个数据库吗
  • 您会为每个注册/客户复制代码库,还是使用1个代码库来处理所有客户
  • 我还应该考虑其他设计元素吗
  • 有任何网站或书籍谈论这一点吗 编辑: 我发现了一篇讨论多租户数据体系结构的MSDN文章:

    参考37signals——他们是这一领域的专家,有很多文章可以回答社区问题(很多像你一样的问题应该会出现)

    关于数据库数量,来自David Heinemeier Hansson的

    一些技术答案

    兰斯,我们所有的预定账单 操作是自动化的。任何东西 那会让我们发疯的。 尤其重要的是要确保 应急处理已经到位 因为信用卡失败。上次我 听着,我相信我们收费的5% 多亏了信用卡 已过期、超过限制或 关闭一定要处理好 优雅地

    我们只使用Authorize.net和 独立信用卡申请(微型) 应用程序在Rails中开发并由 内部网络上的其他应用程序 通过休息)保持数字 安全

    沃伦,我们有免费和付费账户 在同一数据库上。是一个 每个应用程序的数据库。一个数据库 每个帐户通常是一个真正的, 真是个坏主意。通常数据是 相当正常,但我们 绝对不是宗教信仰。我 通常认为源代码比我的 模式。所以如果我能 通过弯曲更好/更漂亮的源代码 一个模式,我通常会这样做。但是 从规范化和非规范化开始 作为性能或代码结构 需要它。

    杰森,我们用电子邮件发短信。我们所有人 航空公司有 phone@carrier-gateway.com网关

    杰克:很好,啊,很好,但是 这是“规模”问题。我是当面回答的 几年前。什么都没有 从那时起,我们的生活发生了变化。我们管理 数以百万计的动态 每天都有要求,甚至没有 使用大量缓存(大多数) 大多数应用程序中的屏幕 在每个用户的基础上是不同的,所以 传统的缓存方案更难实现 适用)

    还有很多其他的轨道 应用程序管理十位数字 每天数百万的请求。全部的 遵循大致相同的共享规则 没有办法。所有的技术 为了爬得更高和更高,我们都出去了 那里这几乎不是交钥匙 解决方案,但任何承诺 要成为这样的人,通常只是充满了它


    如果您只谈论数千个客户(相对于几十万或数百万),那么差异非常小,除非您知道每个客户的表可能有数千行或更多行。那么你的设计可能会改变

    基于关系数据库的数据存储的正常设置是在大多数表上放置
    customer\u id
    外键。然后,只需向该客户以外的任何人显示该数据(或者在他们以某种方式表示已将显式权限授予其他人的情况下)

    在一个表中可能有数百万行之前,不要太担心RDBMS的扩展问题。然后可能是研究分布式密钥/值存储的时候了。但请记住,这类问题是一个很好的问题,因为这可能意味着你赚了一大笔钱


    i、 当你到达时,穿过伸缩桥。尽你目前的能力设计东西,否则,过早的优化是万恶之源。

    我是许多SaaS应用程序的顾问,因此看到了不同的架构。我建议:

  • 为所有客户提供一个数据库。一定要设计好数据库,这样你就有了一个用户的主键,这是你自己的唯一ID。我见过一些混乱的地方,设计有效(实际上不是这样,但也可能是这样)将电子邮件、电话号码等作为主键。另外,不要把所有东西都扔进一个巨大的用户表中

  • 您将希望在某个时候开始跟踪大量用户交互行为。为此,您可以使用NoSQL名称值存储,然后开始向其中抛出事件以供以后分析。或者,使用MixPanel或KISSmetrics之类的工具

  • 通过将行写入KPI表来跟踪每日KPI,这样可以方便地查询随时间发生的情况。否则,您最终会想向db提问,并发现这样做是一个巨大的查询


  • 拥有单个SQL数据库的一个关键优势是,如果您的营销人员知道SQL(推荐!),那么他们可以直接查询它。如果你走NoSQL路线,那就更难了,然后市场营销开始做出通常是错误的假设,你会浪费很多时间根据这些假设走上错误的道路。

    如果我托管它,我会以同样的方式设计它?我一次为客户托管一个应用程序,但现在我想知道如何设计它,这样我就可以为许多客户主持会议,同时又能保持事情的可控性。我不太了解为成百上千的客户开发应用程序需要什么。很有趣。我刚刚读到一篇文章,似乎说如果你能负担得起,孤立的数据库是首选的,而且它们更容易开发。但是一个共享数据库可以处理每台服务器更多的客户。。。但是