设计Web应用程序时要注意可伸缩性

  适合工作的工具

  Indelicato的第一个建议是“为工作选择正确的工具”,想要达到这个目的,就要选择下列架构解决方案中的一种:

  • 使用云部署解决方案
  • 使用可伸缩的数据存储解决方案,像MongoDB、CouchDB、Cassandra或者Redis。
  • 添加高速缓存层,像Memcached。

  他认为在开始开发应用程序的时候,这些解决方案并不是必须的,但是在开始时就选择可伸缩的数据存储解决方案是很明智的,因为那会避免之后再进行切换。将应用程序部署到云中会为我们带来一些好处,特别是对于创业公司来说,因为他们无法准确地确定他们的应用程序在启用之后会有多少人使用。将应用程序部署到云中之后,当需求增加时,就可以让应用程序以优雅的方式进行伸缩。很多软件架构师都讲述了他们不得不对应用程序进行扩展的事件,其中他们会引入高速缓存层,那会解决大部分问题。但是我们应该在设计阶段就考虑相应的解决方案。这样在之后就很容易实现了。

  可伸缩的数据存储

  接下来,Indelicato建议选择支持分区、复制并且有弹性的数据存储,包括以下几种: MongoDB、Cassandra、Redis、Tokyo CabiNET、Project Voldemort,或者选择MySQL作为关系型数据库。这是很必要的,因为不管怎样,在应用程序的生命周期中,分区都是必要的。对于可伸缩性来说,分区并不是必需的,但是对于“确保高可用性”就是必需的。灵活性可以让我们快速地增加更多的节点,这可能是出现流量峰值的时候,也可能是“由于硬件故障或升级、大型的伸缩模式的变更或者任何需要让节点下线的情况下,需要对节点进行维护的时候。”

  可伸缩的数据模式

  Indelicato建议创建一种模式,从而让我们可以很容易地进行数据sharding,他还给出了下面的临时组件的例子,User和UserFeedEntry:

Collection (or Table, or Entries, etc) User
{
UserId : guid, unique, key
Username :
string
PasswordHash :
string
LastModified : timestamp
Created : timestamp
}

Collection (or Table, or Entries, etc) UserFeedEntry
{
UserFeedEntryId : guid, unique, key
UserId : guid, unique, foreign key
Body :
string
LastModified : timestamp
Created : timestamp
}

it知识库设计Web应用程序时要注意可伸缩性,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。