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

时间:2009-10-27 22:02:22

标签: web-applications hosted-app

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

  1. 您是否会使用1个大数据库来存储所有客户的数据,还是会以不同的方式处理数据?你会使用多个数据库吗?你会为每个客户建立一个数据库吗?
  2. 您是否会为每个注册/客户复制代码库,还是会使用1个代码库来处理所有客户?
  3. 我应该考虑其他设计元素吗?
  4. 有关于此的任何网站或书籍吗?
  5. 编辑: 我找到了一篇讨论多租户数据架构的MSDN文章: http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_topic4

3 个答案:

答案 0 :(得分:2)

请参阅37signals - 他们是这一领域的专家,并且有很多文章可以回答社区问题(很多人都会提出问题)。

High Scalability = 37signals Architecture

Ask 37signals: How do you process credit cards?

关于数据库的数量,来自What do you want to know?

中的David Heinemeier Hansson
  

一些技术答案......

     

Lance,我们所有的预定结算   操作是自动化的。什么   那会让我们疯狂。   确保这一点尤为重要   应急处理到位   对于失败的信用卡。最后我   看着,我相信我们收费的5%   由于信用卡而反弹   过期,超过限制,或   关闭。一定要处理   正常。

     

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

     

沃伦,我们免费运行并支付账户   在同一个数据库上。这是一个   每个应用数据库。一个数据库   每个帐户通常是真的,   真的很糟糕。通常数据是   相当正常化,但我们是   绝对没有宗教信仰。一世   通常重视我的源代码   架构。所以,如果我能得到   通过弯曲更好/更漂亮的源代码   一个架构,我通常会这样做。但   从规范化和非规范化开始   作为性能或代码结构   要求它。

     杰森,我们使用电子邮件短信。全美国   运营商有一个   phone@carrier-gateway.com网关。

     杰克,好啊,好吧,但是确实如此   它缩放“问题。我回答了   几年前。什么都没有   从那以后我们改变了。我们管理   数以百万计的动态   每天都要求没有   诉诸于缓存(大多数   屏幕在我们的大多数应用程序   在每个用户的基础上是不同的,所以   传统的缓存方案更难   申请)。

     

还有很多其他的Rails   管理数十个的应用程序   数以百万计的每日请求。所有   跟随或多或少相同的共享   没什么办法。所有的技术   为了扩大高和高   那里。这不是一个交钥匙   解决方案,但任何承诺   通常只是满满的。

答案 1 :(得分:2)

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

基于关系数据库的数据存储的正常设置将在大多数表上放置customer_id外键。然后就是不要向除了那个客户之外的任何人显示该数据(或者在他们以某种方式表明显式权限被授予其他人的情况下)。

在看起来您可能在一个表中开始拥有数百万行之前,不要过于担心RDBMS扩展问题。然后可能是时候调查分布式键/值存储。但请记住,这类问题是一个很好的问题,因为这可能意味着你赚了大量现金。

即,当你来到它时,越过缩放桥。尽可能地设计当前的能力,但除此之外,过早的优化是所有邪恶的根源。

答案 2 :(得分:2)

我是许多SaaS应用程序的顾问,所以看过不同的架构。我建议:

  1. 所有客户的一个数据库。确保将数据库设计得很好,以便为用户提供主键,这是您自己的唯一ID。我已经看到了一些混乱,其中设计有效(实际上不是,但它可能也有)像电子邮件,电话号码等作为主键。另外,不要把所有内容都扔进一个巨大的用户表中。

    1. 您希望在某些时候开始跟踪大量用户互动行为。为此,您可以使用NoSQL名称 - 值存储,并开始将事件放入其中以供以后分析。或者,使用类似MixPanel或KISSmetrics的东西。

    2. 通过将行写入KPI表来跟踪每日KPI,以便于查询随时间发生的情况。否则你最终会想要询问数据库的问题并发现这是一个巨大的查询。

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