我们在设计一个系统的时候,需要考虑几件事。
首先,有哪些模块我们是需要设计的,每个模块我们有哪些选择,这些选择有什么不同?
其次,这些模块如何合作,比如数据怎么通信?
最后,我们如何最大化的利用这些模块,这里面没有可以解决一切的银弹,要怎么平衡(TARDE-OFF)。
我们在设计一个系统一上来就考虑如何做的高可用,分布式 是没有必要的。好的系统都是一步一步演进来的。所以没有必要在一开始想好一个完美的设计。但你在设计的时候能考虑到未来的变化,将会会你未来的开发节约很多时间和精力资源。能够直接扩展已满足未来的需求是个好的设计。
在接下来的章节中,我会讲一些概念可以让你们更好的了解分布式系统。包括一致性HASH,CAP理论,负载均衡,缓存,数据分块分表,索引,代理,复制和备份,SQL VS NOSQL。