分布式系统的一个优势是对单点故障的屏蔽:数据的可靠性通过多台服务器间的复制备份得到极大的增强。对于单机,内存数据是易丢失的;但在多机环境下,如果能保证服务器不是同一时间宕机,并辅以严格的策略保证,内存数据在不降低可靠性的情况下,可以极大地提高性能。阿里云的数据中心保证了很好的硬件隔离和冗余,并备有UPS等应急措施,为我们提供了使用内存缓冲的良好硬件环境。
下面主要介绍我们在内存文件数据可靠性上的一些考虑。
写入内存阶段
确保多个数据服务器成功接收数据并放到内存buffer中(这点是redo log的设计基础)。
选择数据服务器充分考虑硬件的隔离性,避免故障的关联。
在接受数据时数据服务器判断自身的健康状态:
所写的磁盘状态是正常的,并且剩余空间足够;
当前的workload状况良好,比如内存和I/O队列没有超负荷。
内存到磁盘持久化阶段
限制从内存buffer到磁盘I/O的最长时间(30秒内)。
发现写入超时后(比如磁盘异常慢或I/O请求超载),立刻通知master服务器进行复制备份。
当发现写入异常(磁盘坏或者满等)后,立刻报警,通知master复制。
检测与复制阶段
监测磁盘异常和后台检查数据完整性,发现异常后立刻通知master复制。
可以看出,写入内存阶段的策略是预防措施;内存到磁盘持久化阶段最危险,我们确保这个阶段尽可能短(保证预期性能的情况下给出最长写入时间),并在确认出错后及时采取措施;检测与复制阶段是典型的磁盘坏掉但保证数据不丢的策略。
小结
在设计和实现飞天云计算平台过程中,工程师们花费了大量努力来应对海量硬件所带来的可靠性的挑战。本文叙述了部分设计思路但远远不是全部。锤炼一个健壮的大规模分布式系统一定需要良好的设计、精致的实现以及严格的测试。有了飞天这个稳定可靠的云OS内核,各种丰富的云计算服务及应用便有了生存、长大的肥沃土壤。我们随后将会介绍的各种云服务,正是运行建立在阿里云自行研发的飞天云计算平台上。