架构设计之六个复杂度来源 (2)

如果要说未来扩展方面,目前,根据我们经理的预测,我谈谈我的想法,我觉得我们将来更偏向于集群+任务分解方面。原因很简单,复杂问题简单化。不过在此情况下,一定会遵循前面提到的架构设计三原则,对此有兴趣的朋友,可以读读:架构设计三原则

目前的改进和提升空间,我觉得目前的改进和提升空间不在于架构方面,而在于规范方面。很多规矩都不是特别成型,显得有点散,不过目前相比之前,还是有很大的进步,为此我也感到高兴,我很害怕团队退步,毕竟一个团队的氛围对于一个人影响还是比较大的,不过我觉得当团队规模逐渐扩大时,这个问题,一定会迎刃而解的,目前,只所以这样,也考虑到一个重要的因素,那就是人员的流动性(众所周知,对于创业团队,特别是有一段时间,如果团队中有人离职,将会给这个团队带来不少的损失)。

 

二、高可用

什么是高可用?

系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一(摘自维基百科)

维基百科说的有点太官方了,没有百度百科这么直接。百度百科是怎么说的呢?如下所示:

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

关键字在于“可用”,以诺基亚手机来说,诺基亚手机质量确实不错,用的好几年觉得还是那么的好用,说明诺基亚的可用性还是不错的(虽说功能并没有目前哦苹果、安卓手机那么强大,但是它的质量是没的说的)。

另外再说一点,高性能和高可用是有根本的区别的:

高性能增加机器的目的在于“扩展”处理性能;

高可用增加机器的目的在于“冗余”处理单元。

通过冗余增强可用性,但同时也带来复杂性。

 

(1)计算高可用

这里的“计算”,指的是业务的逻辑处理。计算有一个特点就是无论在哪台机器上进行计算,同样的算法和输入数据,产出的结果都是一样的,所以将计算从一台服务器迁移到另外一台服务器,对业务并没有什么影响。

可以以单机架构和双机架构对比,

单机架构:客户端-服务端

双机架构:客户端-任务分配器-服务端(多了这个中间层,不要小看这个中间层,目前的宽带上网之所以能够确保用户上网隐私不被侵犯,很大原因是因为我们是通过路由器来上网,笔记本电脑-路由器-外网,我们只需连接路由器即可,由路由器连接外网上网,对于外网而言,它只知道是路由器,而不知道是我们)。

 

(2)存储高可用

对于需要存储数据的系统来说,整个系统的高可用设计关键点和难点在于“存储高可用”。存储与计算机相比,有一个本质上的区别:将数据从一台机器搬到另外一台机器,需要经过线路进行传输。线路传输的速度是毫秒级,同一机房内部能够做到几毫秒;分布在不同地方的机房,传输耗时需要几十甚至上百毫秒。

虽然毫秒对于人来说几乎没有什么感觉,或者是说完全就没有什么感觉,但是对于高可用系统而言,就是本质上的不同。按照“数据+逻辑=业务”的这个公式来套,数据不一致,即使逻辑一直,但是最终的业务表现就会不一样,没有达到预计的效果。

(3)高可用业务决策

无论是计算高可用还是存储高可用,其基础都是“状态决策”,即系统需要能够判断当前的状态是正常还是异常,如果出现了异常就要采取行动保证高可用。如果状态决策本身是有问题的,那么后续的处理和行动都是没有意义的。另外有一点要强调一下,状态决策本质上就不可能做到完全正确。

a.独裁式

天下之大,唯我独尊。所有的都要听我的。比如,以集中式举例,SVN是一种集中式的版本控制系统,如果其中央仓库出了问题,会影响整个项目团队的研发。关于SVN和Git的对比分析,可以参考我的这篇文章:SVN和Git的比较

b.协商式

常见的表现就是主备,可以联系到生活实际,男女交往,有不少男性朋友或者不少女性朋友沦为备胎。也许这个例子有些不恰当,但是往往也可以说明一点,当主机出现问题时,不能正常提供服务,备机替代主机保障正常服务,不受宕机的影响(联系到服务器)。

c.民主式

这个民主式我一时看不太明白,不过我认为前两种是比较常见的(a,b) 。

 

摘自李运华先生提出的一个问题,问题如下:

高性能和高可用是系统的核心复杂度,你认为哪个会更复杂一些?理由是什么?

我的回答如下:

我觉得不管是高性能还是高可用,前提是确保业务正常服务于客户。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppgxg.html