Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
Cassandra 分布式结构化存储系统
摘要
Cassandra 是一个分布式存储系统,用于管理分布在许多商品服务器上的大量结构化数据,同时提供无单点故障(no single point of failure)的高可用服务。Cassandra 的目标是在数百个节点(可能分布在不同的数据中心)的基础设施上运行。在这种规模下,大大小小的组件都会连续出现故障。在面对这些故障时,Cassandra 管理持久状态的方式推动了依赖于此服务的软件系统的可靠性和可伸缩性。虽然在许多方面 Cassandra 很像一个数据库,并在许多设计和实现策略上有很多共同之处,但 Cassandra 不支持一个完整的关系数据模型;相反,它为客户提供了一个简单的数据模型,支持对数据布局和格式的动态控制。Cassandra系 统的设计是为了在廉价的硬件上运行,在不牺牲读效率的情况下有高的写吞吐量。
1.概述
Facebook 运营着最大的社交网络平台,在高峰时期,它通过位于世界各地许多数据中心的数万台服务器为数亿用户提供服务。Facebook 平台在性能、可靠性和效率方面都有严格的运营要求,为了支持平台的持续增长,平台需要具有高度的可扩展性。处理由数千个组件组成的基础设施中的故障是我们的标准操作模式;在任何给定的时间,总是有少量但数量可观的服务器和网络组件出现故障。因此,软件系统需要以一种将失败视为规范而不是异常的方式来构建。为了满足上述可靠性和可扩展性的需求,Facebook 研发了Cassandra。
Cassandra 综合使用了一些著名的技术来实现可伸缩性和可用性。Cassandra 旨在满足收件箱搜索问题(InBox Search Problem)的存储需求。收件箱搜索是一个功能,用户可以搜索他们的 Facebook 收件箱。在 Facebook,这意味着系统需要处理非常高的写吞吐量,每天数十亿的写操作,并随着用户数量的增加而扩展。由于用户是由地理分布的数据中心服务的,因此能够跨数据中心复制数据是降低搜索延迟的关键。收件箱搜索在2008年6月推出,大约有1亿用户,今天我们有超过2.5亿用户,到目前为止 Cassandra 一直都能支撑。Cassandra 现在被部署为多个服务的后端存储系统。
本论文的结构如下:第2节是相关的工作,其中一些工作对我们的设计有很大的影响。第3节更详细地介绍了数据模型。第4节将介绍客户端API的概述。第5节介绍了系统设计和使 Cassandra 工作的分布式算法。第6节详细介绍了使用 Cassandra 工作和改进性能的经验。在第6.1节中,我们描述了 Facebook 平台中的一个应用程序是如何使用 Cassandra 的。最后第7节总结了关于 Cassandra 的未来工作。
2.相关工作
分布式数据的性能、可用性和持久性已经在文件系统和数据库领域得到了广泛的研究。与P2P存储系统相比,P2P存储系统只支持平面命名空间(flat namespaces),而分布式文件系统通常支持分层命名空间(hierarchical namespaces)。像 Ficus 和 Coda 这样的系统会以牺牲一致性为代价来复制文件以实现高可用性。通常使用专门的冲突解决程序来管理更新冲突。Farsite 是一个不使用任何集中式服务器的分布式文件系统。Farsite 使用复制实现了高可用性和可扩展性。Google 文件系统 (GFS) 是另一个分布式文件系统,用于托管 Google 内部应用程序的状态。 GFS 使用简单的设计,使用单个主服务器来托管整个元数据,并将数据分成块并存储在块服务器中。然而,GFS 主服务器现在使用 Chubby 抽象来实现容错。Bayou 是一个分布式的关系数据库系统,允许断开连接的操作,并提供最终的数据一致性。在这些系统中,Bayou、Coda 和 Ficus 允许断开连接的操作,并对网络分区和中断等问题具有弹性。这些系统的冲突解决程序各不相同。例如,Coda 和 Ficus 执行系统级冲突解决,而 Bayou 允许应用程序级解决。然而,所有这些都保证了最终的一致性。与这些系统类似,Dynamo 允许在网络分区期间继续进行读取和写入操作,并使用不同的冲突解决机制解决更新冲突,如一些客户端驱动。传统的复制关系数据库系统关注的是保证复制数据的强一致性问题。尽管强一致性为应用程序编写者提供了一种方便的编程模型,但这些系统在可扩展性和可用性方面受到限制[10]。这些系统无法处理网络分区,因为它们通常提供强大的一致性保证(CAP理论)。
Dynamo 是亚马逊用来存储和检索用户购物车的存储系统。Dynamo 基于 Gossip 的成员资格算法(membership algorithm)可帮助每个节点维护有关每个其他节点的信息。 Dynamo 可以定义为一个结构化的覆盖,最多具有一跳请求路由。Dynamo 使用矢量时钟方案检测更新的冲突,但更倾向于客户端冲突解决机制。Dynamo 中的写入操作还需要执行读取以管理向量时间戳。在系统需要处理非常高的写入吞吐量的环境中,这可能会受到很大限制。Bigtable 提供结构和数据分布,但依赖于分布式文件系统的持久性。
3.数据模型
Cassandra 中的表是由键索引的分布式多维映射。值是高度结构化的对象。表中的行键(row key)是一个没有大小限制的字符串,尽管通常有 16 到 36 个字节长