有危害的架构是甚么?
发布日期:2023-04-07浏览量:147
这里的架构和设计形式存在不少问题,有些只用于十分有限的几种环境中,之以是在这几种环境中有效,是由于你真的大白在做甚么。要是如许的话,你可以跳过这章不读。但为了使我的说法能够安全地合用于一切情况,我倡议你不要运用这些架构。
分片
常常能够听到如许的倡议:“要及早分片,常常分片。”我的倡议则大为差别“除非不得已,不要分片”。假设有足够的教训,大白不克不及不分片,那就要对分片做好筹备,但依然要比及需求分片的时辰再进行分片。分片存在一些问题。
主要问题是分片此刻已经很风行,并且人们分片做得太早、太频仍。我看到的大大都零碎,要末已经做了分片,要末正在思索做分片,理论上基本就不需求逐个只需求对今朝可用的产品硬件进行充实行使便可。以我的概念看来,对一个中等规模的应用,就要将其构建在超过数百台低档机械的分片架构上,试图提供无限伸缩威力,是十分愚笨的。实在,只需求购置几台足够好的机械,在工程上多做些思索,就足够了。对每一个睁大眼睛、指着分片的胜利故事的人(我已经就是此中之一),我可以给你看一些没有运用分片的大规模应用,只是靠了多少智慧的人,就能运维这类大规模应用。我的共事,另有我,也已经看到过大量的最风行的分片应用,透过外浮景象,内部倒是的极大挥霍。
分片架构比你预想的要高贵得多,以至在短时间内也是云云,恒久则必然云云。这方面的例子有:分片一旦建立,则没法为了从头平衡的目的而再次构建;或者运用一种过于简略的要领,如用简略的取模算法作为分片函数。用差劲的工程要领构建分片架构,无疑是一种短视举动,从而也是基本没法实现可伸缩的。对付真正首要的事情也就很难思索和设计,如常见的失效情景。若是要在不少台机械上散布应用,或哪怕只要几台,都要当真地思索失效转移和故障后回切。应用程序也可以需求思索失效的容错性,假设一部分数据集不行用,要能够升级运转。
分片的第三个问题波及过分设计(overengineering)的危害。大大都事情都很难做到正好,不是做过甚了,就是没有做到位。惧怕架构没有足够的灵活性,或惧怕不知道怎么做到正好,很容易招致过分设计。这不只使事情过于庞大,还会发生无休止的贫苦。
写入多台主服务器
存在不少引诱性的陷阱,此中之一就是,将复制拓扑中的多台服务器设置成可写的,你以为如许做就万事大吉了。常规的设法是,“如许就可以普及写操纵的机能”或者“一切节点都是对等的,从而失效转移就容易实现了。”然而,这二者都是毛病的。
在主-主设置中,经由过程向两台主服务器写,是没法普及机能的。一切的写操纵都要经由过程复制发送给从服务器,在每一个节点上都要反复执行该写操纵,以是,写操纵从哪台服务器上发出,是可有可无的。
由于复制是异步执行的8,在多个位置进行写操纵十分容易出错,并且险些必定在不少情况下城市发生贫苦,这些情况包括失效转移、应用程序毛病、程序员毛病,以及大量的其余常见情景。常规招致的后果有丧失数据,以及永劫间的、没日没夜的苦干,试图将零碎恢复到合理的、一致的状况。试图压服你的老板或共事不要如许做,必定很坚苦,但必然要尝尝。
多级复制
若是能够的话,尽可能不要运用多级复制。运用一台主服务器和n台从服务器,而不是从服务器的从服务器的从服务器,要简略得多。麻花链链的从服务器结构,有的时辰是有优点的,但能够的话最佳制止运用。孙子辈的从服务器和重孙子辈的从服务器很难管理,假设在这些从服务器和位于金字塔顶真个主服务器之间的中央级别上发生问题的话。常见的问题有复制延迟、服务器瓦解、毛病以及网络问题。
环形复制(多于两个节点)
要像避让瘟疫同样制止运用环形复制,其失效情景,不管是数目仍是庞大度,都大得超乎想象。就在几天前,我接到一个要求支持的电话,那是由5台服务器组成的环,在试图移掉此中一台而用另外的服务器替换时,却发生了语句死轮回的问题。这类架构十分懦弱,随时城市诱发劫难。
依赖于dns
我已经说过这一点,但依然值得再反复一次。dns很懦弱,依赖于dns终极会自食苦果。将dns用于域名查询是没问题的,但dns不该该受失效转移的影响。不要将轮回dns∞用于负载平衡。同理,也不要运用/letc/hosts,对这个文件的版本变动、管理以及部署都要是原子操纵。
所谓的实体一属性一值(eav)设计形式
每当有人对我说,“我有一个托管的多租户saas应用…”我都能够弥补他的下半句:“你运用的是eav,并且有机能问题。”在你不知道终极的数据形式是甚么,或者基本就没有终极的数据形式时,eav是有引诱力的。这往往泛起在“托管的、多租户的saas应用”中,这只是由于公司想贩卖有灵活性的东西。他们想如许通知客户:“不论你的数据是甚么样的,城市适合咱们的零碎的。”但这其实不是关系数据库的事情体式格局。由于很快就会发生100个表的自连贯(self-joins),而发生的查询方案除了由于搜索整个磁盘而发生的随机io以外,不会做更多的事情。这些搜索在网站制作索引中找到一点儿数据,而后将这些简略的值按行拼接起来逐个这个过程很慢的。在 mysql中,你是没法做100个连贯的, mysql的限定是每一个查询只能至多对61个表做连贯,理论上不到20个表的时辰就已经有问题了,由于执行方案的计较太庞大了。
相关文章: