一头强壮的大象,敌不过成群的狼。
一个欣欣向荣的大草原,既需要羊,也需要狼,正是不同的生物种群构成了稳定的生态圈。
我们的系统,既是强壮的大象,也是成群的狼。
我们的系统群,也要做稳定的生态圈。
生态圈:关于依赖与蝴蝶效应
现代的大规模应用程序,往往需要多个系统的支持,系统之间不可能完全没有依赖,就像一个生态圈,我们需要去考虑各种系统之间相互影响。
我们都知道,草原上草、羊、狼都是生生相息的食物链,草没有了,羊就没有了,狼最后也没有了。草没有了,最后的结果变成狼没有了完全是有可能的。我们可以看到,依赖是可以传递的,影响也是可以传播的。
如果一斤草养活二头羊,二头羊养活三只狼,那么这种层级放大的影响,就变成了蝴蝶效应。
不要觉得惊讶,这种情况完全有可能发生。一份的数据,被多个系统依赖,每个系统又被更多的系统依赖,这种树状的结构,在数据异常的情况下,打击是致命性的。
我们能做一些事情稍微改善一下情况:
1.简化依赖,不要增加无谓的依赖,不要把弱依赖变成强依赖
比如,同步系统是强依赖,异步系统是弱依赖。很显然,可以通过异步方式交互的系统,不要因为数据库方便就改成同步系统,那样产生故障的可能性就被扩大了。
2.虽然依赖是传递的,但是影响的传递必须切断
比如,前端应用 强依赖于数据库,数据库 弱依赖于 数据同步系统,数据同步系统 弱依赖于 运营支撑系统。
A. 运营支撑系统发送数据让数据同步系统去做同步。
B. 数据同步系统把数据同步给了数据库
C. 数据库做更新
风险在于,A如果出现问题(比如被攻击),突然产生海量的数据需要同步。
我们可以分别在A、B或者C作控制。
如果是A中做控制,那么运营支撑系统严格限制数据同步数量。
如果是B中做控制,那么数据同步系统拒绝同步。
如果是C中做控制,那么数据库拒绝更新。
这个例子中很明显,在A中控制更合理。
从资源的角度来想,可以分为共享资源和独占资源。
共享资源,被多个使用者共享,从这个角度去看,每个使用者独占了它自己的资源,共享了共享资源。如果共享资源已经不堪负荷,我们通常希望已经在使用共享资源的继续使用,而仅仅只是拒绝新的使用者。
而所有的系统可以相对的分为关键系统和非关键系统,显然关键系统就是共享资源,因为关键系统总是被更多的非关键系统依赖,非关键系统就是使用者。再用类似的角度去想,Client和Server。Server是稀缺的,为多个Client服务。
如果Server已经处于高负载的情况,为了保证大部分Client的利益,只有拒绝少量Client,甚至主动丢弃一部分Client,来保证整体运作。
回过头来看我们的系统
1) 运营支撑系统是数据同步系统的客户端
2) 数据同步系统是数据库的客户端
3) 前端应用是数据库的客户端
基于这些分析,运营支撑系统上的超负载压力,甚至不应该蔓延到数据同步系统。
但是我们还可以从另一个角度来视审我们的策略。
象与狼:关于风险控制的策略
一头象也许不怕一头狼,但是一头象面对数量不断增加的狼群,总有一天会被拖死。
就像上一个例子里面,我们已经限制了运营支撑系统向数据同步系统同步行为。但我们还需要从效率、可用性的角度去考虑。
一般关键性系统的数量都是较稀缺的,对非关键性系统而言,又是不可或缺的。往往关键性系统的压力已经到了接近极限的时候,它不可能也无力为非关键性系统提供容错性的服务。即使在正常的情况下,任何在关键性系统上提供的容错性服务,都会消耗它的性能,而且这种消耗随着非关键性系统的数量呈不确定上升。
就像之前的运营支撑系统,一旦有海量的数据,大大超过数据同步系统的负载时,如果运营支撑系统自己控制这些数据的容错,比如延时发送,那么虽然一样会造成运营支撑数据的滞后,但至少数据同步系统仍然是正常运作的,不会因此把故障蔓延到其它系统。更重要的是,如果运营支撑系统的数量很大,那么所有运营支撑系统能够容错的总量,放在数据同步系统上必未可以支持得住。
对于一个关键性系统,也许它可以提供一些cluster或者distributed cluster的服务。但基本上,我们应该忽略这些。就cluster而言,任意一个结点可用,以及保证任意时刻所有结点的数据一致性,意味着完全的数据复制,这在一个大集群里面代表了无休止的数据复制,通常是不可接受的。对于distributed cluster而言,系统本身提供的数据自动平衡,同样意味着系统内部对资源的消耗。在负载很高的时候,在负载不高的时候,策略不尽相同。即使假定一个前提,自动平衡的策略已经可以达到完全智能化的标准,在负载高的情况下,在集群很大的情况下,互相之间的通讯,互相之间的心跳,都对系统的负载提出新的挑战。
memcached的伟大,我认为不仅仅在于它前瞻性地适应了内存越来越便宜的潮流,与时俱进,更在于它的简单。不做server之间的通讯,不做server之间的数据复制,这使得server完全只专注于I/O。GFS的伟大,绝不仅仅因为它适应了磁盘越来越便宜的潮流,同样地与时俱进,更在于它的专注简单:master只负责location,chunkserver只负责I/O。它们都同样把目光放在client,所有的分布式逻辑全部由client维护。也就是说,client维护所有的自动平衡逻辑。
不论一头象有多强壮,狼群数量的增大总有一天会打破实力的平恒。从系统的角度讲,给server更少的负担,它可以专注地提供更好的服务。而client强化控制,也意味着随着client的数量增长,系统的容错能力依然是增长的,至少这不会成为系统的瓶颈。事实上,往往现实情况中,server成本往往大于client的成本,通过client的增长来获得健壮性,远远比通过server的增长来获得健壮性要可靠的多。
分享到:
相关推荐
谷歌公司的这份文档主要围绕构建安全可靠的系统提供了详细的最佳实践指导。在当今信息安全形势日益严峻的背景下,这份文档对于任何企业或个人来说都具有极高的参考价值。 文档首先从基本的安全与可靠性的概念入手,...
总的来说,《高可用MySQL群集构建健壮的数据中心》是一本全方位、深度解析MySQL高可用性的指南,适合数据库管理员、系统架构师、开发人员以及对数据库管理感兴趣的读者学习。通过阅读这本书,读者可以掌握构建高可用...
本书《高可用MySQL:构建健壮的数据中心》深入探讨了如何在生产环境中部署MySQL数据库,确保数据的高可用性和系统的稳定性。书中详细介绍了MySQL的复制、集群和监控特性,并在此基础上提供了针对性的解决方案,帮助...
由于它的灵活性、健壮性、开源性等特点,目前Linux成为构建嵌入式系统时优先选择的操作系统。目前嵌入式Linux的种类繁多,大体上可以分为两类:一是为嵌入式应用环境而设计的嵌入式Linux操作系统,如uClinux、RT-...
《高可用MySQL:构建健壮的数据中心》是一本专注于如何设计和实现稳定、高效且具有高可用性的MySQL数据库系统的权威指南。这本书分为中文版和英文原版,分别为“高可用MySQL_构建健壮的数据中心.pdf”和“MySQL.High...
《高可用MySQL:构建健壮的数据中心》是一本深度探讨MySQL数据库系统在高可用性方面的专著。本书旨在帮助读者理解和实施一系列策略,以确保MySQL数据库在面临各种故障时仍能保持服务连续性和数据完整性。MySQL是全球...
高可用MySQL:构建健壮的数据中心 在当今信息化时代,数据几乎贯穿了所有业务流程的核心,而数据库作为数据存储与管理的核心组件,其稳定性和可靠性对于企业业务的连续性至关重要。尤其是在互联网企业,电子商务和...
通过以上介绍可以看出,MySQL作为一种成熟可靠的关系型数据库管理系统,在构建健壮数据中心方面具有得天独厚的优势。无论是从数据完整性与安全性出发,还是考虑系统的高可用性、扩展性以及性能优化等方面,MySQL都...
这说明本书可能涵盖以上提到的各个知识点,并可能包含案例分析、操作指南、最佳实践以及行业经验分享等,旨在为数据库管理员提供一个全面、系统的学习资源,帮助他们提升技能,更好地构建和维护健壮的数据库系统。
4. **广泛的标准库**:Python的标凑库很庞大,包含用于互联网通信、网络通信、数据压缩、加密、系统管理等的模块。 5. **跨平台**:Python可以在多种操作系统上运行,包括但不限于Windows、Mac OS X、Linux等。 6. *...
《高可用MySQL_构建健壮的数据中心_第2版》这本书深入探讨了如何在实际环境中构建和维护高可用性的MySQL数据库系统。MySQL是全球最受欢迎的开源关系型数据库管理系统之一,其高可用性对于企业的业务连续性和数据安全...
《构建健壮的地理信息共享平台》是一份源自ESRI北京公司的专业文档,详细阐述了在2008年如何设计并实现一个高效且稳定的信息共享平台,专注于地理信息系统(GIS)的应用。这份资料的核心内容可能包括以下几个关键...
它提供了静态类型、编译时错误检查以及反应式编程模型,可以帮助开发者构建健壮、高性能的前端应用。Elm与Node.js后端通过API进行交互,传递数据并执行业务逻辑。 在实际项目中,开发流程可能包括以下几个步骤: 1....
在系统科学的视角下,高校实验管理与智能分析系统的构建是当前高等教育领域信息化发展的重要课题...通过深入研究和创新,有望构建出更符合现代教育需求的实验管理系统,为高校实验教学质量的提升提供强有力的技术支撑。
标题与描述均指向了一个主题:“高可用MySQL_构建健壮的数据中心”。这表明文档的核心内容是围绕如何在数据中心环境中实现MySQL的高可用性展开的。高可用性(High Availability,简称HA)通常指的是系统能够在遇到...