Aurora: An innovative relational database service
本文将介绍Amazon Aurora。Aurora是AWS提供的关系型数据库服务,专门用于处理在线事务处理(OLTP)工作负载。Aurora的设计目标是提供高性能、高可用性和高可扩展性,同时保持与MySQL和PostgreSQL的兼容性。 论文参考:《Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases》 Amazon...
C++ Lock-free thread-safe data structures(2) - Stack
NOTE:本文还未完成! 本文及下一篇文章将主要介绍一些不基于锁的线程安全的c++数据结构的实现,c++中无锁的数据结构主要基于原子操作和内存序实现。本文将主要介绍无锁栈的实现。本文会使用到一些c++17或c++20的新特性。 参考书目:《c++并发编程实战》 完整代码在GitHub:Github 基于锁的数据结构的实现:C++ concurrent data structures based on lock 建议先看:C++ Lock-free thread-safe data structures(1)- Atomic operations and memory ordering 前言 无锁的数据结构主要基于原子操作与内存序实现。还是从自旋锁这个例子看起: 1234567891011121314class spinlock_mutex{ std::atomic_flag flag;public: spinlock_mutex(): flag(ATOMIC_FLAG_INIT) {} void...
CRAQ:A distributed object storage system
本文将介绍CRAQ(Chain Replication with Apportioned Queries)分布式对象存储系统,该系统主要解决大量读负载的分布式系统中的强一致性与高吞吐量之间的权衡问题。 论文参考:《Object Storage on CRAQ —— High-throughput chain replication for read-mostly workloads》 在当今云计算时代,分布式存储系统扮演着至关重要的角色。CRAQ(Chain Replication with Apportioned...
ZooKeeper
本文将介绍ZooKeeper,一个开源的分布式协调服务框架,它主要用于解决分布式系统中的一致性问题,提供可靠的协调服务。 论文参考:《ZooKeeper: Wait-free coordination for Internet-scale systems》 引言 ZooKeeper是一个开源的分布式协调服务框架,由Yahoo开发,后捐赠给Apache基金会,现已成为Apache的顶级项目。它旨在为分布式应用提供高效、可靠的协调服务,解决分布式系统中常见的协调问题,如数据一致性、配置管理、集群管理、分布式锁等。 ZooKeeper的核心设计理念是提供一个简单、高性能的“协调内核”,允许开发者基于其API构建更复杂的分布式协调功能。它通过树形结构的数据模型(类似文件系统)存储数据,并支持顺序一致性、原子性和实时性等特性。此外,ZooKeeper采用了Zab协议(ZooKeeper Atomic...
C++ Lock-free thread-safe data structures(1)- Atomic operations and memory ordering
本文及其后续文章将介绍一些不基于锁的线程安全的c++数据结构的实现,c++中无锁的数据结构主要基于原子操作和内存序实现。本文主要介绍c++中的原子操作和内存序。本文会使用到一些c++17或c++20的新特性。 参考书目:《c++并发编程实战》 完整代码在GitHub:Github 原子操作 原子操作可以替代互斥量,来完成同步操作。C++17中,所有原子类型有一个static constexpr成员变量,如果相应硬件上的原子类型X是无锁类型,那么X::is_always_lock_free将返回true。只有 std::atomic_flag 类型不提供 is_lock_free() 。该类型是一个简单的布尔标志,并且在这种类型上的操作都是无锁的。当有一个简单无锁的布尔标志时,可以使用该类型实现一个简单的锁,并且可以实现其他基础原子类型。对 std::atomic_flag...
C++ concurrent data structures based on lock
本文将介绍一些c++中基于锁实现的并发数据结构。包括线程安全的Stack、Queue、List和Map。本文代码主要基于c++14,有时也会使用一些c++17和c++20的新特性,同时会使用到一些基本的特性和并发开发工具,文中不会详细介绍,建议查阅资料或书籍《c++并发编程实战》。文中也会体现一些并发编程的基本思想和思考。 完整代码在GitHub:GitHub 如何实现并发主要需要考虑两个方面,一个方面是确保访问的安全,另一方面是实现真正的并发。 如何确保数据的线程安全: 确保没有线程可以看到不变量的中间状态(修改过程对其它线程不可见)。 小心会引起条件竞争的接口,可以选择提供完整的操作函数,而不是单一步骤。 防止异常的发生而导致数据丢失。 防止死锁的产生。 如何防止死锁: 避免嵌套锁:尽量不要在持有一个锁的情况下再去请求另一个锁。 避免在持有锁时调用外部代码:外部程序可能做任何事情,包括获取锁。在持有锁的情况下,如果用外部代码要获取一个锁,就会违反1,并造成死锁。 使用固定顺序获取锁:当硬性要求获取两个或两个以上的锁,并且不能使用 std::lock...
Raft: A Understandable Consensus Algorithm
本文将详细介绍Raft共识算法。 论文参考:《In Search of an Understandable Consensus...
VMware FT: Practical System for Fault-Tolerant Virtual Machines
本文将介绍2010年由VMware公司提出的商业级的容错虚拟机系统,该系统基于VMware vSphere 4.0设计。该系统通过在另一台服务器上复制主虚拟机的执行来提供容错支持,同时可以在故障发生后自动恢复冗余。 论文参考:《The Design of a Practical System for Fault-Tolerant Virtual...
GFS: The Google file system
本文将详细介绍由Google在2003年提出的分布式文件系统GFS(Google File System)。GFS是一个分布式的可扩展文件系统,主要用于大规模的数据密集型应用。 论文参考:《The Google File...
Golang编程技巧——TDD
本文将介绍一种应用于Go语言中的编程技巧TDD(Test Driven Development测试驱动开发),这一技巧主要得益于Go语言强大的testing包。 参考书目:《Go Design...