# 如何制作无限可扩展的关系数据库管理系统(RDBMS)
> 原文: [http://highscalability.com/blog/2013/11/25/how-to-make-an-infinitely-scalable-relational-database-manag.html](http://highscalability.com/blog/2013/11/25/how-to-make-an-infinitely-scalable-relational-database-manag.html)
![](https://img.kancloud.cn/da/16/da16e2c5224bd98706beb8158395d277_238x39.png)
*这是 [InfiniSQL](@infinisq) 的创始人 [Mark Travis](@infinisq) 的来宾帖子。*
[](http://www.infinisql.org)InfiniSQL 是标题所指的特定“无限扩展 RDBMS”。 它是免费软件,有关其获取,构建,运行和测试的说明,请参见[指南](http://www.infinisql.org/docs/guide/)。 [基准测试](http://www.infinisql.org/blog/2013/1112/benchmarking-infinisql)显示,一个 InfiniSQL 群集每秒可以处理 500,000 个复杂事务,并具有 100,000 多个并发连接,所有这些都位于十二台小型服务器上。 测试的方法已记录在案,并且所有代码都可用,因此任何从业人员都可以取得类似的结果。 InfiniSQL 具有两个主要特征:
1. 它比任何集群/分布式 RDBMS 更好地执行在多个节点上具有记录的事务
2. 它是免费的开放源代码。 不仅仅是具有专有技术的预告片“社区”版本。 准备就绪时,InfiniSQL 的社区版本也将是企业版本。
InfiniSQL 仍处于开发的早期阶段-它已经具有许多功能,但是要使其在生产环境中有用,还需要更多的功能。
## 谁会做这种事情?
我的职业背景可以在 [LinkedIn](http://www.linkedin.com/pub/mark-travis/1/a3a/1a2) 上找到。 我已经为一些相当大的事务处理环境进行了容量规划,系统工程,性能工程等工作,其中几秒钟的停机时间使成千上万的客户损失了成本。 保姆式的环境告诉我,传统的企业数据库基础结构非常适合需要 24x7 全天候运行,持续增长并快速响应新业务需求的现代环境。 这确实是一个典型的故事-我们都知道 70 年代设计的系统无法满足当今的需求。 因此,我决定构建适合现代事务处理环境的东西。
## 目标用户/用例
我敢肯定,大多数[高可扩展性](http://highscalability.com/)的读者都会理解为什么新的数据库体系结构如此必要的原因,而且我们当中许多人也认为更快,更大的规模是自我调整的价值。 我们就像赛车手。 但是重要的是要知道用例,以帮助其他人学习如何利用我们正在构建的强大功能。 就 InfiniSQL 而言,有几种主要客户类型,每种类型都有各种特定的用例。 我将简要介绍一下客户类型,以及我如何看待 InfiniSQL 为他们解决业务问题。
* Look no further than the example application cited in [Design Decisions For Scaling Your High Traffic Feeds](http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic-feeds.html), which is a very recent entry on this site. Imagine there's no *Part Two* and *Part Three*, meaning that their original RDBMS of choice was able to perform "`select * from love where user_id in (...)`" well beyond 100M rows and 1M users. There'd be no need to design a new framework from scratch, or to rip and replace two back ends before settling on one that seems fine for the time being. InfiniSQL is capable of performing that kind of query. I haven't benchmarked that specific workload--but it's the type of thing that I designed InfiniSQL for: transactions with records distributed across multiple nodes.
成功的 Internet 应用程序几乎不可避免地从它们启动时所使用的基础结构中发展而来。 RDBMS 通常是首选的初始数据库-但实现了变通方法,并且实现了完全不同的体系结构-所有这些都是因为原始数据库无法处理成功。 那是一个非常破坏性的过程。 InfiniSQL 适用于具有 RDBMS 工作负载但由于其原始 RDBMS 不能随业务增长而被迫实施变通方法的任何公司。 这些解决方法包括分拆 SQL 数据库以及将一些工作负载迁移到各种 NoSQL Point 解决方案。 实际上,InfiniSQL 应该成为公司开始使用的数据库,以避免将来的迁移成本。
* InfiniSQL 的另一类目标用户包括那些在单片平台上负责每秒处理数以万计的复杂事务的应用程序的用户。 这种工作负载很难脱离大型系统架构。 这类公司包括信用卡协会,旅行预订系统和交易所。 这些不是新的业务模型。 数十年来,他们的基础设施一直在挣扎。 他们执行的每项操作都代表着(至少)两方之间的资金转移-他们转移了人们的资金。 稳定性和数据完整性是最重要的价值。 InfiniSQL 能够以预期的数量和更高的容量执行此类工作负载,但可以在运行 Linux 而不是大型的超昂贵平台的 x86_64 服务器上执行。 实际上,InfiniSQL 会进一步扩展-因为这些大型的整体平台在其扩展插槽用完的情况下会用光。
## 问题及其原因(以及几个相关问题)
(如果我能找到其他在我之前说过的夸夸其谈的声明,我会编成信誉,否则,我会接受-每个人都需要报价,对吗?我会接受。)
*问题*使多个节点全部组成一个数据库。 通过将静态 Web 服务器与数据库进行比较,可以轻松说明此问题。 通过简单地将 Web 服务器的内容镜像到不同的盒子上,然后以循环方式或其他方式向它们喷射流量,来扩展 Web 服务器很简单。 简单。 但是对于数据库而言,并不是那么简单。 取两个盒子,然后将您喜欢的数据库放在上面。 给每个相同的模式。 然后,连接到框 A 并插入一条记录-任何旧记录。 然后连接到方框 B 并查找该记录。 当然不存在! 这就是水平扩展数据库的问题:逻辑和数据都在同一个盒子中!
### 锁定主要是坏的
传统数据库设计在性能方面的另一个问题是锁定。 为了数据完整性,每个工作程序(线程或进程)都锁定与其操作的记录关联的内存或存储区域。 这些不是高级数据锁,例如行或表锁(尽管它们也可能有问题)。 不,它们被实现为互斥或信号量。 互斥体和信号量是多线程/进程应用程序阻止其他线程/进程踩踏共享数据的方式。 随着共享内存区域的锁争用增加,性能下降。 锁定争用的一个很可能的指标是数据库速度很慢,但是有大量可用的 CPU,并且没有 I / O 瓶颈。
### I / O 慢,没有问题,它有多快
传统数据库的另一个大性能问题是事务日志瓶颈。 为了[持久性](http://en.wikipedia.org/wiki/Durability_(database_systems)),传统数据库在完成事务之前,会将包含书面记录的所有事务实时实时写入等效于日志文件的日志。 当电源关闭时,当指示灯重新点亮时,数据仍将存在。 问题在于这会减慢写入速度。 在最快的固态存储和海量 I / O 总线上使用任何经过调整的数据库。 它将成为写入事务日志的瓶颈。
## InfiniSQL 解决这些问题的方法
InfiniSQL 并不是解决某些或所有这些问题并成功实现集群 RDBMS 的唯一项目。 我敢肯定,此博客的大多数读者都知道这样的各种系统,即使它们还不是用户。 我正在描述如何解决这些问题,以及它们如何有助于 InfiniSQL 的独特优势。 其他人则以自己的方式解决了这些问题。
### 演员们
InfiniSQL 在并发编程的[参与者模型](http://en.wikipedia.org/wiki/Actor_model)上实现了一种变体。 C ++是用于创建 InfiniSQL 的主要语言,该语言本身不支持 actor 模型。 实现 InfiniSQL 的许多工作涉及使角色在 C ++中工作。 actor 模型通过将事务处理逻辑与存储断开耦合并且不锁定内存区域来解决上述前两个问题。 有关详细信息,请阅读[概述](http://www.infinisql.org/docs/overview/)。 这与传统的 RDBMS 体系结构完全不同。
角色模型解决了[问题](#0.1_theproblem),因为处理逻辑由一组角色处理,而数据存储由另一组角色处理。 它们的功能在 InfiniSQL 中松散耦合。 无论参与者位于哪个节点,消息传递都是在参与者之间进行的:管理特定事务的参与者不知道或不在乎数据是驻留在本地还是远程。 并且管理特定数据分区的参与者响应消息,而不管其来源。 从理论上讲,参与者模型允许 InfiniSQL 无限扩展。 基于其第一字段的哈希值将每个记录分配给特定的数据区域,并且基于索引值的哈希将每个索引记录分配给一个区域。
actor 模型的另一个有益效果是它解决了低级别锁定的问题。 由于每个数据区域仅具有一个关联的参与者,因此不需要互斥或信号量来限制访问。 分区的参与者根据来自交易参与者的消息来处理对数据操作的请求。 发送方参与者无需等待(阻止)等待响应,而是可以自由地处理其他任务。 当分区的 actor 用数据响应时,发出请求的事务 actor 从中断的地方继续。 它要么完成交易并向客户端发送回复,要么与其他参与者保持互动。
下面的示例试图以图形方式说明数据库设计的传统共享内存模型与 InfiniSQL 的参与者模型之间的区别:
![](https://img.kancloud.cn/8e/5d/8e5d7aef7e4b710a3b28a08c5a7851a0_500x230.png)
对于参与者,没有 锁定。 当需要更多处理时,将添加更多的参与者,每个参与者*大致*最佳对应于单个 CPU 线程或内核。 随着内核的添加,基于角色的体系结构可以保持很好的状态。 但是,传统的锁定共享内存模型在添加内核方面会遭受更多的痛苦-因为锁争用只会增加。 大型整体数据库具有非常复杂的锁管理方法,可以最大程度地减少此问题。
actor 模型的另一个好处是它支持大量并发。 InfiniSQL 实现角色的方式与传统角色模型略有不同,但是在保持高吞吐量的同时,它仍然可以实现很高的连接速率。 大多数传统数据库都有一个连接阈值,超过此阈值,聚合系统的性能将大大降低。 这主要与已经描述的争用有关,并且还因为每个连接的成本都很高-如果每个客户端在服务器端都需要专用的进程(或线程),则会消耗大量内存。 此外,高度多线程的应用程序会遭受过多的上下文切换。 内核调度程序始终必须使线程进入睡眠状态,复制它们的状态,然后复制并激活另一个线程。 使用 InfiniSQL,维护每个连接的成本相对较低-内核必须管理一个开放的套接字。 另外,将创建一个用于管理连接的对象。 添加了两个地图条目,以允许相关角色识别连接。 与必须启动一个新线程(更不用说进程)相比,每个连接的开销要低得多。 为了最大程度地减少上下文切换,每个参与者大致对应一个 CPU 线程,因此等待 CPU 的线程更少。
为了解决 I / O 缓慢的问题,InfiniSQL 目前已成为内存数据库,从而避免了这种情况。 与块支持的存储相比,在内存中实现起来更简单,尤其是使用 actor。 但这显然带来了一些问题。 即,耐久性和成本。 如果断电,则内存中数据库的单个副本将消失。 并且 RAM 的成本高于磁盘的成本。 [概述](http://www.infinisql.org/docs/overview/)描述了计划在开发工作中花时间解决这些问题的计划。
InfiniSQL 计划的内存持久性的关键在于强调-它是从高端存储领域借来的。 高端存储系统之所以表现出色,是因为它们将更改写入内存中,并且仅在以后将这些更改写入磁盘中。 他们可以避免这种情况,因为它们具有冗余的备用电池系统,并且每次写入都分布在多个缓存区域中。 断电或单点故障都不会导致高端存储系统中的数据丢失,这才是真正重要的。 世界上最大的交易处理平台依赖于这种存储阵列。 除了冗余和电源管理将保护数据库服务器节点本身以外,InfiniSQL 打算实现相同的模型。 这尚未完全实现,但是如果可用,将意味着 InfiniSQL 将提供持久的内存性能。
## 事务处理
事务处理的详细信息在[概述](http://www.infinisql.org/docs/overview/)中进行了描述。 我发现使用参与者实现 ACID 功能的原因是还需要实现其他技术。 即,参与者间远程过程调用(RPC)是一种在 OSI 模型和后续版本上受到宽松启发的本地协议栈。 这引入了一定程度的实现复杂性-我正在寻找重构和降低复杂性的方法。 但是所有的 ACID 特性(如上所述的耐用性除外)都可以发挥作用。
## 基于行的表,索引和类似的东西
基于参与者的核心和事务处理功能*可以与任何数量的不同类型的数据库一起使用。 基于列的简单密钥库,xml 文档库,graphdb。 任何需要扩展并从并行性中受益的事物。 但是我选择实现基于行的 RDBMS 作为 InfiniSQL 的第一个底层存储方案。 尽管有其他类型,该模型仍支持多种应用程序。 大多数备用数据组织类型都针对特定类型的工作负载进行了优化,而其他类型的组织则非常糟糕。 例如,列数据存储不适合事务处理。 除了获取/设置简单对象之外,密钥库实际上不能做任何其他事情。 关于 InfiniSQL 组织和操作数据的方式,没有什么破天荒的创新,但是底层体系结构克服了许多限制,这些限制促使采用许多备用数据库类型。*
PostgreSQL 客户端用于执行 SQL 查询,因此实际上任何平台和语言都应该能够使用 InfiniSQL。 他们已经很好地记录了[前端/后端协议](http://www.postgresql.org/docs/7.4/static/protocol.html),因此为 InfiniSQL 实施它非常简单。 (InfiniSQL 和 PostgreSQL 是完全独立的项目。)
## 摘要
就 InfiniSQL 的介绍以及如何将其设计为无限可扩展的 RDBMS 而言,这几乎就是如此。 到目前为止,从字面上看,这是一个人在他的客厅里全天候敲出代码的工作。 请喜欢 InfiniSQL,并从中学习,如果您想谈论它,请在上述链接中找到我! 另外,请考虑参与-它仍处于早期状态,并且正在积极寻求贡献。 它是免费的开放源代码,并且有很大的发展空间。 愿意进行此项目的 Alpha 测试的人们也很受欢迎-如果您认为 InfiniSQL 可以解决您的某些问题,请与我谈谈!
[关于黑客新闻](https://news.ycombinator.com/item?id=6795263)
*主页: [http://www.infinisql.org](http://www.infinisql.org/)
博客: [http://www.infinisql.org/blog/](http://www.infinisql.org/blog/)
IRC: [irc.freenode.net](http://irc.freenode.net/) #infinisql
Twitter:@infinisql
论坛: [https://groups.google.com/forum/#!forum/infinisql](https://groups.google.com/forum/#!forum/infinisql)*
虽然这是一个有趣的开始,但我最想知道 InfiniSQL 如何计划处理聚合功能和大表的联接。 尤其是联接是使关系数据库吸引人的原因,但是当您扩展规模时,尤其是对于复杂数据,它们也是最难的事情之一。
我很好奇,想知道 InfiniSQL 是否计划提供某种东西来比在外部进行连接(例如在 map reduce 中)或购买带有硬件的数据库设备来使更大的连接成为可能。
您的徽标与 VoltDB 有点类似:http://i.imgur.com/93x1CWJ.jpg
嗨,戈登。 对于聚合,我认为它应该相对简单:
向每个分区发送一条消息,以使其返回其自身数据集的聚合结果。 然后让交易代理收集结果,并简化为正确的答案。 地图/缩小效果如何? ;-)我还在考虑为每个表(甚至字段)提供一个选项,以便在每个插入/更新/删除操作中更新其聚合值,以节省聚合查询的时间。
对于联接,我正在考虑让每个分区创建一个临时表,该表代表相关表中的联接值,并将这些值返回给事务代理。
在 InfiniSQL 上,某些大规模的多方联接很可能无法很好地完成工作-这很可能是只有整体数据库(或 MPP 数据仓库)才能很好地工作的领域。 我认为 InfiniSQL 至少对于现有的基于行的存储而言,并不是真正繁重,长时间运行的分析的最佳选择。 现在,对于柱状存储,可能会有不同的故事。
我还编写了大多数代码来支持子查询,但尚未对其进行完整的测试。 因此,几乎*支持子查询。
您想帮忙吗? :-)
我真的不认为可以基于“ 12 台小型服务器”来“证明”“无限可扩展性”。 在那 12 之后再加上两个零; 如果每个服务器的数量看起来仍然相同,那将更有说服力。
如果我没记错的话,VoltDB 说了类似的话,第三方稍后显示当您达到 50 到 100 台服务器(不确定精确限制)时,数字下降了。
I don't really think that "infinite scalability" can be "proved" based on "12 small servers." Add another two zeros after that 12; if the numbers per server *still looked the same*, that would be a lot more convincing.
If I remember well, VoltDB said something similar, with third party showing later that the numbers went down when you reached 50 to 100 servers (not sure about precise limit).
------
嗨,塞巴斯蒂安。 我认为演员模型很适合扩展规模。 本质上,限制因素将是节点间通信。 我不确定随着节点的增加,效率会降低多少。 另外,诸如高性能节点间联网之类的技术将改善这一状况。 有一次,我正在研究 Infiniband 动词作为集群间通信协议,但是 TCP / IP 更容易并且无处不在。 但是我想为 InfiniSQL 实现一个选项,以使其本机使用 Infiniband 进行群集通信-我认为这对于扩展可伸缩性将大有帮助。
我不认为我们不同意-至少,到目前为止,我已经很清楚自己已经能够走多远了,我希望有机会进一步走好。 如果像 SGI 这样的人能像为 VoltDB 一样借给我无数的服务器,那就太好了。 ;-)
我也不认为我们不同意。 我只是指出“ 12 台小型服务器”。 不是那么...令人印象深刻。
我也是 Actor 模型的忠实拥护者,因为我是新的(仍然是 1.0 之前的版本)Actor API 的提交者。 但是对于许多 DB 而言,节点间的通信很快成为瓶颈,因此需要 12 个以上的节点来说明是否(或以何种大小)这种情况。
> 如果像 SGI 这样的人能像为 VoltDB 一样借给我无数的服务器,那就太好了。 ;-)
:D
>我还在考虑为每个表(甚至字段)
>提供一个选项,以便在每次插入/更新/删除时将其汇总值更新为
>,从而节省汇总时间 查询。
您是说要维护每个表的每个字段的*每个*汇总值? 我认为这没有太大意义。 例如,您将使用以下查询做什么:
从员工那里选择 AVG(薪水)WHERE employee_name LIKE'H%';
?
或者您将如何处理用户创建的聚合函数? 当将记录插入表中时,这些功能甚至不存在。 只要考虑一下 postgresql 的 CREATE AGGREGATE 语句。
我有一个问题,这个帖子没有答案
-根据文档,每个写入都可以同步复制。 但是,即使在内存中,同步复制也很难扩展(CAP 定理?)。 尽管该功能尚未完成,但我认为这可能是对无限可扩展性的很大限制。
你同意吗 ?
Csongor 说:
“您是说要维护每个表的每个字段的*每个*聚合值?我认为这样做没有太大意义。”
--------------
仅作为选择。 该用例适用于希望为每个插页上的列收集 AVG 的人员。 保存每个分区的滚动总条目数和条目数量会节省计算时间。 但是对于您提到的情况,不,这不是一个好主意。
主要是想表达我在 InfiniSQL 中进行聚合没有问题。
slefebvr 说:
我有一个问题,这个帖子没有答案
-根据文档,每个写入都可以同步复制。 但是,即使在内存中,同步复制也很难扩展(CAP 定理?)。 尽管该功能尚未完成,但我认为这可能是对无限可扩展性的很大限制。
Do you agree ?
---------------
不,我不同意。 我几乎完成了同步复制。 扩展并不难-尽管它会消耗一定数量的系统资源才能完成。 但是随着节点的增加,每个节点的系统资源有望保持稳定。
我看到的关于可伸缩性的唯一硬性限制是打开的可用 TCP / IP 套接字的数量-副本中的每个节点都连接到网格中的每个其他节点。 类似 UNIX 的系统不能同时处理无限数量的 TCP / IP 连接。 我认为极限是无限 10。 ;-)
塞巴斯蒂安写道:
I'm a believer in the Actor model too, as I'm a commiter to a new (still pre-1.0) Actor API. But for many DB, inter-node communication quickly becomes a bottleneck, and a lot more then 12 nodes are needed to show if (or at which size) this is the case.
---------------------
InfiniSQL 批处理节点间消息并使用 LZ4 压缩。 它牺牲了一些延迟,但是在我看来,吞吐量的增加是值得的。 同样,10GB 以太网比 1GB 更好,多个 NIC RX 队列比单个更好。 我想使用 Infiniband Verbs API(https://www.openfabrics.org/index.php)来实现 RDBMA,但是 TCP / IP 较容易编码,并且用户基础更加广泛。 但是我认为 Infiniband 可以大大减少集群内部的通信开销。
有趣的项目。
在许多情况下,您可以将聚合推送到参与者。 AVG 怎么了? 您从每个演员返回计数和平均值,然后根据计数加权最终平均值。 感觉就像一个很简单的地图/缩小模型。
正如其他人所提到的,问题可能是节点间通信,尤其是在某些联接情况下。 我喜欢您已经认识到这一点,但是您可以将 10GB 扩展到某种上限。 我不知道我会称其为无穷大,但“高”似乎是可能的。
期待看到这片土地,尤其是当您获得 ACID 中的 D 以后,您会发现更多。
干杯!
- 八月
>如果像 SGI 这样的人像为 VoltDB 一样借给我无数的服务器,那就太好了。 ;-)
EC2 FTW :-)
FWIW,我认为正确处理节点故障和分区,最终获得一个可靠且性能良好的系统至关重要。 没有人愿意为后者牺牲前者。
第一部分是所有群集节点必须在配置上达成一致。 如果您以前从未接触过它,则可能想看看[木筏](https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf)算法作为 Multi-Paxos 的替代方法。
但是,为了确定哪些写入已传播到副本节点,还需要在某种程度上进行类似的操作。 您可以确定,每种可能的故障模式-节点消失并在事务处理周期的不同点返回-*或早或晚都会发生。
- LiveJournal 体系结构
- mixi.jp 体系结构
- 友谊建筑
- FeedBurner 体系结构
- GoogleTalk 架构
- ThemBid 架构
- 使用 Amazon 服务以 100 美元的价格构建无限可扩展的基础架构
- TypePad 建筑
- 维基媒体架构
- Joost 网络架构
- 亚马逊建筑
- Fotolog 扩展成功的秘诀
- 普恩斯的教训-早期
- 论文:Wikipedia 的站点内部,配置,代码示例和管理问题
- 扩大早期创业规模
- Feedblendr 架构-使用 EC2 进行扩展
- Slashdot Architecture-互联网的老人如何学会扩展
- Flickr 架构
- Tailrank 架构-了解如何在整个徽标范围内跟踪模因
- Ruby on Rails 如何在 550k 网页浏览中幸存
- Mailinator 架构
- Rackspace 现在如何使用 MapReduce 和 Hadoop 查询 TB 的数据
- Yandex 架构
- YouTube 架构
- Skype 计划 PostgreSQL 扩展到 10 亿用户
- 易趣建筑
- FaceStat 的祸根与智慧赢得了胜利
- Flickr 的联合会:每天进行数十亿次查询
- EVE 在线架构
- Notify.me 体系结构-同步性
- Google 架构
- 第二人生架构-网格
- MySpace 体系结构
- 扩展 Digg 和其他 Web 应用程序
- Digg 建筑
- 在 Amazon EC2 中部署大规模基础架构的六个经验教训
- Wolfram | Alpha 建筑
- 为什么 Facebook,Digg 和 Twitter 很难扩展?
- 全球范围扩展的 10 个 eBay 秘密
- BuddyPoke 如何使用 Google App Engine 在 Facebook 上扩展
- 《 FarmVille》如何扩展以每月收获 7500 万玩家
- Twitter 计划分析 1000 亿条推文
- MySpace 如何与 100 万个并发用户一起测试其实时站点
- FarmVille 如何扩展-后续
- Justin.tv 的实时视频广播架构
- 策略:缓存 404 在服务器时间上节省了洋葱 66%
- Poppen.de 建筑
- MocoSpace Architecture-一个月有 30 亿个移动页面浏览量
- Sify.com 体系结构-每秒 3900 个请求的门户
- 每月将 Reddit 打造为 2.7 亿页面浏览量时汲取的 7 个教训
- Playfish 的社交游戏架构-每月有 5000 万用户并且不断增长
- 扩展 BBC iPlayer 的 6 种策略
- Facebook 的新实时消息系统:HBase 每月可存储 135 亿条消息
- Pinboard.in Architecture-付费玩以保持系统小巧
- BankSimple 迷你架构-使用下一代工具链
- Riak 的 Bitcask-用于快速键/值数据的日志结构哈希表
- Mollom 体系结构-每秒以 100 个请求杀死超过 3.73 亿个垃圾邮件
- Wordnik-MongoDB 和 Scala 上每天有 1000 万个 API 请求
- Node.js 成为堆栈的一部分了吗? SimpleGeo 说是的。
- 堆栈溢出体系结构更新-现在每月有 9500 万页面浏览量
- Medialets 体系结构-击败艰巨的移动设备数据
- Facebook 的新实时分析系统:HBase 每天处理 200 亿个事件
- Microsoft Stack 是否杀死了 MySpace?
- Viddler Architecture-每天嵌入 700 万个和 1500 Req / Sec 高峰
- Facebook:用于扩展数十亿条消息的示例规范架构
- Evernote Architecture-每天有 900 万用户和 1.5 亿个请求
- TripAdvisor 的短
- TripAdvisor 架构-4,000 万访客,200M 动态页面浏览,30TB 数据
- ATMCash 利用虚拟化实现安全性-不变性和还原
- Google+是使用您也可以使用的工具构建的:闭包,Java Servlet,JavaScript,BigTable,Colossus,快速周转
- 新的文物建筑-每天收集 20 亿多个指标
- Peecho Architecture-鞋带上的可扩展性
- 标记式架构-扩展到 1 亿用户,1000 台服务器和 50 亿个页面视图
- 论文:Akamai 网络-70 个国家/地区的 61,000 台服务器,1,000 个网络
- 策略:在 S3 或 GitHub 上运行可扩展,可用且廉价的静态站点
- Pud 是反堆栈-Windows,CFML,Dropbox,Xeround,JungleDisk,ELB
- 用于扩展 Turntable.fm 和 Labmeeting 的数百万用户的 17 种技术
- StackExchange 体系结构更新-平稳运行,Amazon 4x 更昂贵
- DataSift 体系结构:每秒进行 120,000 条推文的实时数据挖掘
- Instagram 架构:1400 万用户,1 TB 的照片,数百个实例,数十种技术
- PlentyOfFish 更新-每月 60 亿次浏览量和 320 亿张图片
- Etsy Saga:从筒仓到开心到一个月的浏览量达到数十亿
- 数据范围项目-6PB 存储,500GBytes / sec 顺序 IO,20M IOPS,130TFlops
- 99designs 的设计-数以千万计的综合浏览量
- Tumblr Architecture-150 亿页面浏览量一个月,比 Twitter 更难扩展
- Berkeley DB 体系结构-NoSQL 很酷之前的 NoSQL
- Pixable Architecture-每天对 2000 万张照片进行爬网,分析和排名
- LinkedIn:使用 Databus 创建低延迟更改数据捕获系统
- 在 30 分钟内进行 7 年的 YouTube 可扩展性课程
- YouPorn-每天定位 2 亿次观看
- Instagram 架构更新:Instagram 有何新功能?
- 搜索技术剖析:blekko 的 NoSQL 数据库
- Pinterest 体系结构更新-1800 万访问者,增长 10 倍,拥有 12 名员工,410 TB 数据
- 搜索技术剖析:使用组合器爬行
- iDoneThis-从头开始扩展基于电子邮件的应用程序
- StubHub 体系结构:全球最大的票务市场背后的惊人复杂性
- FictionPress:在网络上发布 600 万本小说
- Cinchcast 体系结构-每天产生 1,500 小时的音频
- 棱柱架构-使用社交网络上的机器学习来弄清您应该在网络上阅读的内容
- 棱镜更新:基于文档和用户的机器学习
- Zoosk-实时通信背后的工程
- WordPress.com 使用 NGINX 服务 70,000 req / sec 和超过 15 Gbit / sec 的流量
- 史诗般的 TripAdvisor 更新:为什么不在云上运行? 盛大的实验
- UltraDNS 如何处理数十万个区域和数千万条记录
- 更简单,更便宜,更快:Playtomic 从.NET 迁移到 Node 和 Heroku
- Spanner-关于程序员使用 NoSQL 规模的 SQL 语义构建应用程序
- BigData 使用 Erlang,C 和 Lisp 对抗移动数据海啸
- 分析数十亿笔信用卡交易并在云中提供低延迟的见解
- MongoDB 和 GridFS 用于内部和内部数据中心数据复制
- 每天处理 1 亿个像素-少量竞争会导致大规模问题
- DuckDuckGo 体系结构-每天进行 100 万次深度搜索并不断增长
- SongPop 在 GAE 上可扩展至 100 万活跃用户,表明 PaaS 未通过
- Iron.io 从 Ruby 迁移到 Go:减少了 28 台服务器并避免了巨大的 Clusterf ** ks
- 可汗学院支票簿每月在 GAE 上扩展至 600 万用户
- 在破坏之前先检查自己-鳄梨的建筑演进的 5 个早期阶段
- 缩放 Pinterest-两年内每月从 0 到十亿的页面浏览量
- Facebook 的网络秘密
- 神话:埃里克·布鲁尔(Eric Brewer)谈银行为什么不是碱-可用性就是收入
- 一千万个并发连接的秘密-内核是问题,而不是解决方案
- GOV.UK-不是你父亲的书库
- 缩放邮箱-在 6 周内从 0 到 100 万用户,每天 1 亿条消息
- 在 Yelp 上利用云计算-每月访问量为 1.02 亿,评论量为 3900 万
- 每台服务器将 PHP 扩展到 30,000 个并发用户的 5 条 Rockin'Tips
- Twitter 的架构用于在 5 秒内处理 1.5 亿活跃用户,300K QPS,22 MB / S Firehose 以及发送推文
- Salesforce Architecture-他们每天如何处理 13 亿笔交易
- 扩大流量的设计决策
- ESPN 的架构规模-每秒以 100,000 Duh Nuh Nuhs 运行
- 如何制作无限可扩展的关系数据库管理系统(RDBMS)
- Bazaarvoice 的架构每月发展到 500M 唯一用户
- HipChat 如何使用 ElasticSearch 和 Redis 存储和索引数十亿条消息
- NYTimes 架构:无头,无主控,无单点故障
- 接下来的大型声音如何使用 Hadoop 数据版本控制系统跟踪万亿首歌曲的播放,喜欢和更多内容
- Google 如何备份 Internet 和数十亿字节的其他数据
- 从 HackerEarth 用 Apache 扩展 Python 和 Django 的 13 个简单技巧
- AOL.com 体系结构如何发展到 99.999%的可用性,每天 800 万的访问者和每秒 200,000 个请求
- Facebook 以 190 亿美元的价格收购了 WhatsApp 体系结构
- 使用 AWS,Scala,Akka,Play,MongoDB 和 Elasticsearch 构建社交音乐服务
- 大,小,热还是冷-条带,Tapad,Etsy 和 Square 的健壮数据管道示例
- WhatsApp 如何每秒吸引近 5 亿用户,11,000 内核和 7,000 万条消息
- Disqus 如何以每秒 165K 的消息和小于 0.2 秒的延迟进行实时处理
- 关于 Disqus 的更新:它仍然是实时的,但是 Go 摧毁了 Python
- 关于 Wayback 机器如何在银河系中存储比明星更多的页面的简短说明
- 在 PagerDuty 迁移到 EC2 中的 XtraDB 群集
- 扩展世界杯-Gambify 如何与 2 人组成的团队一起运行大型移动投注应用程序
- 一点点:建立一个可处理每月 60 亿次点击的分布式系统的经验教训
- StackOverflow 更新:一个月有 5.6 亿次网页浏览,25 台服务器,而这一切都与性能有关
- Tumblr:哈希处理每秒 23,000 个博客请求的方式
- 使用 HAProxy,PHP,Redis 和 MySQL 处理 10 亿个请求的简便方法来构建成长型启动架构
- MixRadio 体系结构-兼顾各种服务
- Twitter 如何使用 Redis 进行扩展-105TB RAM,39MM QPS,10,000 多个实例
- 正确处理事情:通过即时重放查看集中式系统与分散式系统
- Instagram 提高了其应用程序的性能。 这是如何做。
- Clay.io 如何使用 AWS,Docker,HAProxy 和 Lots 建立其 10 倍架构
- 英雄联盟如何将聊天扩大到 7000 万玩家-需要很多小兵。
- Wix 的 Nifty Architecture 技巧-大规模构建发布平台
- Aeron:我们真的需要另一个消息传递系统吗?
- 机器:惠普基于忆阻器的新型数据中心规模计算机-一切仍在变化
- AWS 的惊人规模及其对云的未来意味着什么
- Vinted 体系结构:每天部署数百次,以保持繁忙的门户稳定
- 将 Kim Kardashian 扩展到 1 亿个页面
- HappyPancake:建立简单可扩展基金会的回顾
- 阿尔及利亚分布式搜索网络的体系结构
- AppLovin:通过每天处理 300 亿个请求向全球移动消费者进行营销
- Swiftype 如何以及为何从 EC2 迁移到真实硬件
- 我们如何扩展 VividCortex 的后端系统
- Appknox 架构-从 AWS 切换到 Google Cloud
- 阿尔及利亚通往全球 API 的愤怒之路
- 阿尔及利亚通往全球 API 步骤的愤怒之路第 2 部分
- 为社交产品设计后端
- 阿尔及利亚通往全球 API 第 3 部分的愤怒之路
- Google 如何创造只有他们才能创造的惊人的数据中心网络
- Autodesk 如何在 Mesos 上实施可扩展事件
- 构建全球分布式,关键任务应用程序:Trenches 部分的经验教训 1
- 构建全球分布式,关键任务应用程序:Trenches 第 2 部分的经验教训
- 需要物联网吗? 这是美国一家主要公用事业公司从 550 万米以上收集电力数据的方式
- Uber 如何扩展其实时市场平台
- 优步变得非常规:使用司机电话作为备份数据中心
- 在不到五分钟的时间里,Facebook 如何告诉您的朋友您在灾难中很安全
- Zappos 的网站与 Amazon 集成后冻结了两年
- 为在现代时代构建可扩展的有状态服务提供依据
- 细分:使用 Docker,ECS 和 Terraform 重建基础架构
- 十年 IT 失败的五个教训
- Shopify 如何扩展以处理来自 Kanye West 和 Superbowl 的 Flash 销售
- 整个 Netflix 堆栈的 360 度视图
- Wistia 如何每小时处理数百万个请求并处理丰富的视频分析
- Google 和 eBay 关于构建微服务生态系统的深刻教训
- 无服务器启动-服务器崩溃!
- 在 Amazon AWS 上扩展至 1100 万以上用户的入门指南
- 为 David Guetta 建立无限可扩展的在线录制活动
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿个通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训
- 缩放原理
- TripleLift 如何建立 Adtech 数据管道每天处理数十亿个事件
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿条通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训