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

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

有帮助吗?

解决方案

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

高可扩展性= 37signals架构

询问37signals:怎么做你处理信用卡?

关于数据库的数量,来自David Heinemeier Hansson的你想知道什么?

  

一些技术答案…

     

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

     

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

     

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

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

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

     

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

其他提示

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

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

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top