如何学习设计高度事务性的系统?

How to learn about designing highly transactional systems?

在我的职业生涯中,我主要从事数据分析、BI 工具等方面的工作。我处理的大多数应用程序主要是只读应用程序。虽然我也从事过简单的 CRUD 应用程序,但没有什么特别的事务性。 作为一名软件工程师,如果我不知道如何设计高度事务性的系统和数据库,比如亚马逊、航空公司系统等的工作原理,我觉得我的学习是空白的。 我想在这里请社区推荐一些关于这个主题的资源、书籍或简单项目。在教授必要理论的同时可以采取动手方法的东西。我知道这是一个主观问题,但我可以将最有用的答案标记为绿色。 期待您的建议,感谢期待。

我将把答案分为四大类,即

  1. 理论学术背景,
  2. 热门来源,
  3. 软件和工具,以及
  4. 练习。

书籍和论文

这是该领域的基础 - 如何从 0 发展到相当不错的专业水平,但主要是理论上的。

入门级

Transaction Processing: Concepts and Techniques (The Morgan Kaufmann Series in Data Management Systems) 作者:吉姆·格雷

Silberschatz 的书 (Database System Concepts) 在后面的章节中介绍了高级事务系统的内部工作原理,有一些资源等。

数据库特定

H-store paper - 描述了 in-memory 高交易负载设计的好处。 H-store 工作启发了 VoltDB 的开发。

Calvin paper - 快速分布式事务 对于分区数据库系统。提供了非常好的背景、相关工作以及对最新技术水平的洞察。

Architecture of a Database System 作者:Hellerstein、Stonebraker 和 Hamilton 涵盖了很多方面。

限制和界限

Great paper 关于高可用性事务的优点和限制。

CAP Theorem paper - 关于大规模系统的一致性、可用性和分区的设计权衡。 非常重要。

Parallel Processing and Parallel Databases

流行和当前来源

博客

High Scalability 是您正在寻找的完美博客。 例如,这是一个 great entry on the evolution of Amazon's architecture。非常接近您一直在寻找的内容。

Facebook, LinkedIn, and Twitter engineering blogs are great resources. I would also check Google Research 站点及其 Google+。 Netflix 也不错。

会议

VLDB and SIGMOD conferences (inluding SIGMOD blog) 是大多数最先进的数据系统由 researchers/academia 和公司提供的地方。

HPTS 是一个有趣的 conference/workshop,有很好的议程和出版物。

我什至会检查 USENIX series 最前沿的系统内容。

案例研究架构

VoltDB 是一个 ultra-transaction、in-memory 数据库,由 ACM 研究员 Mike Stonebraker 和 "father" 设计最现代的数据库概念。

IBM 大型机 在大容量交易领域仍然占有非常突出的地位 加工。在撰写此答案时,他们是 touting their Z13 system for extreme, encrypted transaction processing volumes

如果您对 "Big Data" 风格的交易感兴趣,有很多选择,但 HBase 可能是最有趣的一个。 以下是 HBase 的一些建议阅读资源: Yahoo Omid 基于 HBase Transactions over HBase

另一个有趣的架构是Twitter, now Apache Storm. Apache Kafka 用于流式传输和 real-time 处理。

基准和练习

如果您想尝试一些东西,请查看 TPC 基准测试系列。有事务、ETL、BI 和决策 support/mixed 负载分析基准。 这些是 relational-oriented。

您可以采用这些基准测试并针对开源 SMP(例如 postgres,MySQL)和 MPP 数据库(例如 Greenplum(link to a great and comprehensive documentation on querying, performance, some sample setups, and how MPP databases process queries)进行练习。

我为 HBase-oriented 交易系统推荐了 these 实用场景和架构。

对于 state-of-the-art 面向消息和 actor 的事务系统,您可能需要购买一两本书。 对于 Akka(用作 Spark 的内部组件),您可能可以使用 Akka in Action 并完成每章末尾的练习。 还有一些来自培训课程的练习 here.

对于流处理,这里有一些很好的 Apache Kafka 练习 (parts 1 and http://www.confluent.io/blog/stream-data-platform-2/). Cloudera has a good "getting started" guide

要练习message-orientedstate-of-the-art系统,我建议Getting Started with Storm, and perhaps going through these exercises。有 real-topologies 个特色。

老 JMS,你可以用这个 online reference 来练习,或者 使用这些 Active MQ exercises.

变得更复杂

如果你想用主机来折磨自己,试试这个emulator。 它模拟 IBM 的 OS/370-390.