前记:进入系统设计与实践的第二周,本周主要讲的是搭建大规模可拓展系统。
分布式系统
定义:
1,组件分布在网络计算机上。
2,组件之间仅仅通过消息传递来通信并协调行动。
分布式系统的意义:
1,升级单机处理能力的性价比
根据摩尔定律来说,如果把时间固定下来,所需要的处理器性能越高,付出的成本就越高,性价比就越低。而且单机处理器始终有瓶颈
2,单机处理能力存在瓶颈
单机处理器的瓶颈只能通过多机来解决
3,稳定性和可用性
如果采用单机系统,如果这台机器一切正常,则一切ok,如果这台机器坏了。整个应用就访问不了了。如果要做容灾备份等方案,就需要考虑分布式系统了。
分布式系统设计原则:CAP理论
CAP理论主张任何基于网络的数据共享系统,都最多只能拥有以下三条中的两条:
1,一致性,意味着系统中所有服务器能达成数据值的一致性,比如你有一个银行账户,每个服务器都应该同意银行账户的数值是多少,也就是说,银行账户的数值应该在所有服务器上是一样的。
2,可用性,系统应当是在线运行,可以与用户形成交互。(有一些人认为CAP定理不包含延迟,其实可用性中有延迟的概念,如果系统等待半天没有响应,延迟很长,用户不知道是服务器死机了还是没有缓过来,可能就离开不用了,这种系统当然没有可用性。)
3,为了容错而进行的分区,(为了保证可靠性,你会将数据分成两个或更多组实现分区,这样,其中一台服务器当机时,数据不会丢失。),当你将数据分区到几个服务器上时,你以为一份数据有两份或多份,很可靠了,但是服务器之间的网络连接会断线,那么这时你就不能又要一致性,又要可用性了,只能在这两者之间选择一个。