为什么要有分布式系统:
- 升级单机处理能力的性价越来越低
- 单机处理能力存在瓶颈
- 出于稳定性和可用性的考虑
单机处理能力:
- 处理器Cpu,内存,磁盘和网路。
我们都知道摩尔定律:
- 当价格不变时,每隔18个月,集成电路上可容纳的晶体管数目会增加一倍
- 性能也将会提升一倍,单颗处理器有自己的性能瓶颈,即使你花更多的钱,去 买计算能力也买不到的。
强调分布系统的稳定性,可用性的提升:
- 如果采用单机系统,那么这台机器正常的时候一切ok,一旦出问题,系统就不能使用了。当然,可以考虑容灾备份等方案,而这些方案就会让你的单机系统演变成分布式系统了。
- 计算机断电时,内存中的数据会丢失,外存中仍然能够保持存储的数据。
这里所说的多线程,指的是单进程内的多线程
分布式系统的缺点:
- 缺乏全局时钟
- 面对故障独立性
- 处理单点故障
- 事务的挑战(两阶段提交2pc,最终一致,BASE,CAP,PAXOS)
如何判断一个网站是否为大型网站:
- 数据量,访问量,业务的复杂度
读写分离带来两个问题:
- 数据复制问题(数据库系统的自身机制,数据复制时延时问题,以及复制过程中数据的源和目标之间的映射关系及过滤条件的支持,短期数据不一致,5.5之前的版本支持异步的数据复制,会有延迟,完全镜像方式的复制,保证备库和主库的数据一致。5.5中加入了semi-sync的支持,数据安全性上来说比异步好,还是存在着复制的延时)
- 应用对于数据源的选择问题
搜索引擎的倒排表方式,他能够大大提升检索速度,对搜索出来的数据进行排序都是很重要的:
- 引入了搜索引擎后,什么数据应该走数据库。构建搜索用的索引的过程就是一个数据复制的过程,只不过是一个简单复制对应的数据。构建索引的过程需要自己来实现。
构建索引的过程可以两个维度:
- 全量/增量划分
- 实时/非实时划分
- 全量方式用于第一次建索引(可能是新建,也可是重建)
- 而增量方式是在全量的基础上持续更新索引。
* 搜索引擎解决了什么:
-
站内搜索时某些场景下读的问题,提供了更好的查询效率。我们可以把搜索引擎当成一个读库。
-
分布式存储系统通过集群提供了一个高容量,高并发访问,数据冗余容灾的支持。