恒泰博远,专家级研发软件定制开发公司,为企业定制营销、办公、管理软件 在线咨询 :
咨询电话:010-82969001

六经验教训艰难的历程关于缩放百万用户系统

来源:http://www.hengtaiboyuan.com 作者:恒泰博远 时间:2014-05-22

[摘要]自从来,你觉得你已经学会了如何在帮助他人行驶在同一条路上,希望能分享你的经验了点?这就是马丁Kleppmann在一个精心编写的六件事情我想我们已经知道缩放,文章值得你花时间做了。

自从来,你觉得你已经学会了如何在帮助他人行驶在同一条路上,希望能分享你的经验了点?这就是马丁Kleppmann在一个精心编写的六件事情我想我们已经知道缩放,文章值得你花时间做了。

 

这不是建议有关缩放一个Twitter ,但建立一个百万用户系统,这是甜蜜点了很多项目。他的结论戒指真:

构建可扩展的系统是不是所有的性感roflscale乐趣。这是一个很大的管道和牦牛剃的。很多黑客工具一起,真正应该已经存在,但所有的开源解决方案在那里都太糟糕了(和你结束了坏过,但至少它解决您的特定问题) 。


下面是关于这六个教训(加上奖金课)光泽:

现实的负载测试是很难的。测试一个大型分布式系统并不像科学实验,可以理想的条件下进行。这是很难的科学态度来接受。了解你的实际访问模式是很难的。合成测试数据集大于你确实有困难。旧的正确性比较新的系统是很难的。所以准备回滚,如果新代码并在实践中行不通。


数据的生成是困难的。你有数据所有的地方。在你的数据库,日志和斑点。更新的数据格式,因为他们改变是一个巨大的时间片。规模较大的公司往往有自动化和编排这些流程的优势。


数据库连接是一个真正的限制。数据库连接加起来出奇的快作为一个系统生长在这两个服务和节点计数。每个连接吃掉资源无论在您的机器上,并与您的开发人员,因为他们必须弄清楚如何处理它们。使用连接池或写后面的API数据访问层包裹的数据库访问。


读副本是一个业务疼痛。读副本卸载数据库访问从主是一种常见的缩放策略。它也需要大量的工作,以建立和维护这些系统。故障处理是问题的一个恒定的来源。


想想记忆效率。延迟高峰往往是内存问题引起的。因为它很难搞清楚如何RAM的实际使用更高效地使用内存是很困难的。许多性能问题都是由购买更多的内存解决。如果可能的话适合索引到RAM中。对字符串的散列,而不是字符串本身的索引。


更改捕捉低估。在一个系统中数据的变化也必须流经的许多服务,如数据库,搜索索引,图表,指标,读副本,缓存失效等,你可以有应用程序每次进行更新时写入多个位置,但从来没有在工作实践。你可以有应用程序读取数据库日志,但是这是不可能的每个系统上。一个好的解决方案是使用接收并存储所有的写入到数据库的更改捕获系统。应用程序可以实时收到这些更新和/或他们可以通过更改的历史记录流。这种变化捕捉系统成为真理的所有应用程序数据的单一来源。这种方法的一大优点是数据的生产者和消费者是分离这给“你很大的自由实验,而不必担心拖垮主要场所。 ”


缓存和缓存失效。这是从一个评论者mysteriousllama的文章奖金的教训:如果没有适当的缓存和良好的失效策略数据库就会挨揍。使用redis的和memcache的缓存一切可能。甚至不要连接到数据库,除非你不得不这样做。确保您可以轻松地违反对设备的缓存条目,并保持事物的原子,这样你就不会运行在竞争条件。使用锁来保证当缓存过期的数据库中没有得到狗桩与同一查询的多个副本。你会觉得在查询缓存你所选择的数据库可能同样有效,但相信我,它甚至还没有接近。您也可以缓存更高级别的对象不仅仅是简单的查询。
根据您的可靠性要求,你甚至可以考虑把你的缓存回写,做批量写入数据库在后台。这些通常比由于各种因素,个体的写操作更有效。我已经在几个顶级200排名的网站工作,这一直是缩放主去到战略之一。数据库吸 - 避免查询它们。