绝对不要信托单点故障
发布日期:2023-04-10浏览量:133
绝对不要实现且必然要削减单点数障。在架构图上我出单点实例。尽可能采用积极/积极设置。经由过程量个实景可用性。尽可能采用积极/积极设置,不要用积极被动解决计划。行使平衡器平衡跨服求实例的流量。对付单例形式,运用积极/被动设置的控制。
在数学中,单位素汇合是只要一个元素的汇合,如{a}。在程序设计中,单例形式指的是一种设计形式,它仿照了数学观点,限定了一个类只能实例化一个对象。这类设计形式对协调十分有效,但程序员常为了费事而过分运用它,这个话题咱们之后再接头。在零碎架构中,单例形式,或者更恰本地说是单例反形式,被称为单点故障(spof)也就是说,当零碎中的某个组件只要一个实例时,一旦该实例出故障,就会形成零碎范畴的影响。
spof在零碎中随处可见,从单个的web服务器到单个的网络设备,但零碎中最多见的spof是数据库。其起因在于数据库是最难扩展到多个节点上的,因而它只要一个实例。在图9-1中,即便登陆、搜索和结账服务器都有冗余,数据库还是spof。更精的是,一切服务池都依赖于这一个数据库。尽管任何spof都欠好,但数据库spof的问题更大,若是数据库速率降落或者期读了,那末对数据库进行同步骤用的一切服务池都将遭到这一事宜影响。
咱们常说给客户的一句口头禅是“一切城市出故障”。这句话合用于服务器、存储零碎、网络设备和数据中心。只要你知道的,城市出故障。
尽管不少人以为数据中心是不会出故障的,但多年来,咱们本身阅历了十几回数据中心运转间断。高可用的存储区域网络也是云云,尽管它们比旧的scsi硬盘阵列靠得住得多,但如故会出故障。
大大都解决spof的要领是申请另外一台硬件,如x轴扩展所示的经由过程克隆服务,让每种服务都有两个或更多个实例在运转。遗憾的是,事实并不是老是云云简略。让咱们转头再看看编写单例形式的步骤。尽管不是一切的单例类都不容许在多台服务器上运转一个服务,但有些实现绝对会让你免于蒙受恐怖的结果。较简略的情况是,若是代码中有一个类,用于从用户账户中减去基金,用单例形式实现它就会让用户的余额免于意外,如成为负数。若是把这段代码放在两台自力的服务器上,没有分外的控制措施或联络旌旗灯号,则很能够会形成两个事务同时在用户账户中记人借额,从而招致毛病或不想产生的状态。对付这类情况,咱们需求修复代码,或者依赖外部控制来预防。但最让人满合意的解决计划是修复代码,在多个主机上实现服务,常规咱们需求疾速修复spof。作为本准则的末了一个要点,咱们接下来将接头多少疾速修复要领。
第一个要领最简略,是运用积极/被动设置。一个服务在一台服务器上积极运转,在另外一台服务器上被动运转(不接管流量)。这类热/冷设置,常被用作删除数据库spof的第一步。接下来的要领是用零碎中的另外一个组件控制数据访问。若是spof是服务,那末用数据库锁可以控制数据的访问。若是spof是数据库,那末可以设置主一从设置,由应用控制数据访问,写更新操纵由主数据库完成,读选择操纵由从数据库完成。末了一个用于修复spof的设置是负载平衡器。若是web服务器或应用服务器的一个服务是spof,且在代码中不克不及解除,那末可以行使负载平衡器把一个用户的要求只发送给池中的一台服务器。这是经由过程会话 cookie实现的,即设置用户的阅读器,且容许负载平衡器每次都把该用户的要求重定向到统一个web或应用服务器,从而形成一种一致状态。
咱们引见了几种解除spof的要领,在不克不及实时修改代码的情况下可以轻松地实现它们。可是末了的要领最佳,即修复代码,容许网页设计服务的多个实例在差别的物理服务器上运转,从而尽能够解除spof。记住,“一切城市出故障”,以是当spof出故障时,请不要受惊。
相关文章: