分布式系统基础( 三 )


这个架构的变化会带来几个问题:
主从数据库之间的数据同步; 可以使用 mysql 自带的 -slave 方式实现主从复制;对应数据源的选择,采用第三方数据库中间件,例如 mycat 。3.5 使用搜索引擎缓解读库的压力
数据库做读库的话,尝尝对模糊查找效率不是特别好,像电商类的网站,搜索是非常核心的功能,即便是做了读写分离,这个问题也不能有效解决 。那么这个时候就需要引入搜索引擎了使用搜索引擎能够大大提高我们的查询速度,但是同时也会带来一些附加的问题,比如维护索引的构建 。
3.6 引入缓存机制缓解数据库的压力
随着访问量的持续增加,逐渐出现许多用户访问统一部分内容的情况,对于这些热点数据,没必要每次都从数据库去读取,我们可以使用缓存技术,比如 、redis 来作为我们应用层的缓存; 另外在某些场景下,比如我们对用户的某些 IP 的访问频率做限制,那这个放内存中又不合适,放数据库又太麻烦,这个时候可以使用 Nosql 的方式比如来代替传统的关系型数据库 。
3.7 数据库的水平/垂直拆分
我们的网站演进的变化过程,交易、商品、用户的数据都还在同一个数据库中,尽管采取了增加缓存,读写分离的方式,但是随着数据库的压力持续增加,数据库的瓶颈仍然是个最大的问题 。因此我们可以考虑对数据的垂直拆分和水平拆分 。
垂直拆分:把数据库中不同业务数据拆分到不同的数据库 。(比如,用户数据,商品数据,交易数据)
水平拆分:把同一个表中的数据拆分到两个甚至更多的数据库中,水平拆分的原因是某些业务数据量已经达到了单个数据库的瓶颈,这时可以采取将表拆分到多个数据库中 。(历史数据压缩)
3.8 应用的拆分
随着业务的发展,业务越来越多,应用的压力越来越大 。工程规模也越来越庞大 。这个时候就可以考虑讲应用拆分,按照领域模型讲,我们的用户、商品、交易拆分成多个子系统 。

分布式系统基础

文章插图
这样拆分以后,可能会有一些相同的代码,比如用户操作,在商品和交易都需要查询,所以会导致每个系统都会有用户查询访问相关操作 。这些相同的操作一定是要抽象出来,否则就会是一个坑 。所以通过走服务化路线的方式来解决 。
那么服务拆分以后,各个服务之间如何进行远程通信呢?
通过 RPC 技术,比较典型的有:、、http、RMI 等等 。前期通过这些技术能够很好的解决各个服务之间通信问题,but,互联网的发展是持续的,所以架构的演变和优化还在持续 。
总结:
4、分布式领域中冯诺伊曼模型的变化
前面我们讲过经典理论-冯.诺依曼体系,计算机硬件由运算器、控制器、存储器、输入设备、输出设备五大部分组成 。不管架构怎么变化,计算机仍没有跳出该体系的范畴 。
(1)输入设备的变化
在分布式系统架构中,输入设备可以分两类,第一类是互相连接的多个节点,在接收其他节点传来的信息作为该节点的输入;另一种就是传统意义上的人机交互的输入设备了 。
(2)输出设备的变化
输出和输入类似,也有两种,一种是系统中的节点向其他节点传输信息时,该节点可以看作是输出设备;另一种就是传统意义上的人机交互的输出设备,比如用户的终端 。
(3)控制器的变化
在单机中,控制器指的是 CPU 中的控制器,在分布式系统中,控制器主要的作用是协调或控制节点之间的动作和行为;比如硬件负载均衡器;LVS 软负载;规则服务器等 。