java分布式应用学习(一) ----分布式系统介绍

分布式概念

理解分布式系统,需要明白一下2个方面

1.分布式系统一定是由多个节点组成的系统
其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
2.这些连通的节点上部署了我们的节点,并且相互的操作会有协同。
分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已,而实际上这些服务是通过背后的众多服务器组成的一个分布式系统,因此分布式系统看起来像是一个超级计算机一样。
例如淘宝,平时大家都会使用,它本身就是一个分布式系统,我们通过浏览器访问淘宝网站时,这个请求的背后就是一个庞大的分布式系统在为我们提供服务,整个系统中有的负责请求处理,有的负责存储,有的负责计算,最终他们相互协调把最后的结果返回并呈现给用户。

分布式之数据库访问

随着网站的访问量越来越大,数据量也越来越多,系统对数据库的各种操作越来越频繁,导致单机的数据库服务器越来越慢,数据库压力越来越大,那么这个时候就需要对数据库层进行优化,目前可以从几个方面进行下手:
1.优化应用,看看是否有不必要的压力给了数据库(应用的优化)。这个减压作用相对小。
2.看看有没有通过引入缓存、搜索引擎等地中间件来对数据库进行检验。这个对局部数据减压作用大,但是对整体上作用不是很大。
3.最后一种思路就是,把数据库的数据和访问转移到多台数据库上,分开支持,这也是最优的减压方式,下面主要介绍这种方式:

1.数据的拆分的2种方式及带来的影响

a.垂直拆分
垂直拆分就是把一个数据库中不同业务单元的数据分到不同的数据库里面。比如用户相关信息放到一个库中,订单先关数据放到另一个库中,费用相关信息放到另外一个数据库中等等,这种通过划分不同的库的方式就是数据的垂直划分方式。
带来的影响:
(1) 单机的事务ACID特性的保证被打破了。数据到了多机后,原来在单机通过事务进行的处理逻辑会收到很大的影响。我们面临的选择是,要么放弃原来的单机事务,修改实现。要么引入分布式事务机制。
(2) 一些联表操作会变得比较困难,因为数据可能在不同的数据库中了,所以不能很方便的利用数据库自身的join,需要应用或者其他方式来解决。
(3) 靠外键去进行约束的场景会收到影响。
b.水平拆分
水平拆分是根据一定的规则把同一业务单元的数据拆分到多个数据库中。
即,比如将订单相关的库,部署到多台服务器中,每台服务器中的订单库的表结构完全一样,但是不同的服务器中的订单库中的数据分别存放了不同的订单相关数据。
带来的影响:
1.同样具有与垂直划分带来的三种影响。
2. 依赖单库的自增序列生成唯一id会受影响。
3.针对单个逻辑意义上的表的查询要跨库查询了。
总之,这2种方式都是将原来一个数据库中的数据拆分到了不同的数据库中,所以原来单机数据库可以支持的特性现在未必支持了。而且数据库的拆分给应用带来的影响还是比较明显,这里只是列出其中的几部分,比如存储过程,触发器等也需要改写才能完成相应的工作。

2.数据的拆分带来的影响对应的解决方案

缓存系统之memcache
为了在内存中提供数据的快速查到能力,memcache使用key-value形式存储和访问数据,在内存中维护一张巨大的hashtable,保证了数据的高性能访问。但是内存大小总是有限的,当内存中无法再存放更多的数据时,memcache就采用LRU(Lastest Recently Used)的算法(大意是将最近不经常访问的数据删掉,从而腾出空间来存放新数据)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值