一、分布式概念
1,分布式系统一定是由多个节点组成的系统。其中节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
2,这些联通的节点上部署了我们的节点,并且相互的操作会有协同。分布式系统对于用户而言,他们面对的就是一个服务器,提供用户下需要的服务而已,而实际上这些服务是通过背后的众多的服务器组成的一个分布式系统,因此分布式系统看起来想一个超级计算机一样。
例如淘宝,平时大家都会使用,它本身就是一个分布式系统,我们通过浏览器访问淘宝网站时,这个请求的背后就是一个庞大的分布式系统在为我们提供服务,整个系统中有的负责请求处理,有的负责存储,有的负责计算,最终他们相互协调把最后的结果返回并呈现给用户。
二、使用分布式系统主要特点
1,增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或者是水平拆分业务系统,让其变成一个分布式架构。
2,加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意外着架构中不能存在单点故障。这样,整个系统不会因一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。
3,因为模块化,所以系统模块重用度更高
4,因为软件服务模块被拆分,开发和分布速度可以并行而且变得更快
5,系统拓展性更高
6,团队协作流程也会得到改善
三、分布式之数据库访问
随着网站的访问量越来越大,数据量也越来越大,系统对数据库的各种操作越来越频繁,导致单机的数据库服务器越来越慢,数据库压力越来越大,那么这个时候就需要对数据库层进行优化,目前可以从几个方面进行下手:
1,优化应用,看看是否有不必要的压力给了数据库(应用的优化)。这个减压作用相对小
2,看看有没有通过引入缓存,搜索引擎等中间件来对数据库进行检验。这个对局数据减压作用大,但是对整体上作用不是很大。
3,最后一种思路就是,把数据库的数据和访问转移到多平台数据上,分开支持,这也是最有的减压方式,下面主要介绍这种方式:
1.数据的拆分的2中方式及带来的影响
a.垂直拆分
垂直拆分就是把一个数据库中不同业务单元的数据分到不同的数据库里面。比如用户相关信息放到一个库中,订单相关数据放到另一个库中,费用相关西西放到另一个数据库中等等,这种通过划分不同的库的方法就是数据的垂直划分方式。
带来的影响:
(1)单机的事务ACID特性的保证被打破了。数据到了多机后,原来在单机通过事务进行处理逻辑会受到很大的影响。我们面临的选择是,要么放弃原来的单机事务,修改实现。要么引入分布式事务机制。
(2)一些联表操作会变得比较困难,因为数据可能在不同的数据库中了,所以不能很方便的利用数据库自身的join,需要应用或者其他方式来解决。
(3)靠外键去进行约束的场景会受到影响
b、水平拆分
水平拆分是根据一定的规则把同一业务单元的数据拆分到了多个数据库中。即比如将订单相关的库部署到多台服务器中,每台服务器中的订单库的表结构完全一样,但是不同的服务器中的订单库中的数据分别存放了不同的订单相关数据。
带来的影响:
1,同样具有与垂直划分带来的三种影响
2,依赖单裤的自增序列生成唯一id会受影响
3,针对单个逻辑意义上的表查询要跨库查询了。
总之,这2中方式都是将原来一个数据库中的数据拆分到了不同的数据库中,所以原来单机数据库可以支持的特性现在未必支持了,而且数据库的拆分给应用带来的影响还是比较明显的,这里只是列出了其中的几部分,比如存储过程,触发器等也需要改写才能完成相应的工作。
四、分布式系统的类型有三种:
1,分布式处理,但只有一个总数据库,没有局部数据库
2,分层式处理,每一层都有自己的数据库
3,充分分散的分布式网络,没有中央控制部分,各个节点之间的联系方式又可以有多种,如松散的联接等
五、什么是Java分布式应用
一个大型的系统往往被分为几个子系统来做,一个子系统可以部署在一台机器的多个JVM上,也可以部署在多台机器上。但是每一个系统不是独立的,不是完全独立的。需要相互通信,工作实现业务的功能。
一句话来说:分布式就是通过计算机网络将后端工作分布到多台主机上,多个主机一起协同完成工作。
六、实现分布式主要的方式
分布式应用用到的技术:网络通信,基于消息方式的系统间通信和基于远程调用的系统间通信。
缺点:就是会增加技术的复杂度。
系统间的通信还需要对数据进行处理,比如同步IO和异步IO。
远程调用实现系统间的通信:通过调用本地的java接口的方法来透明的调用远程java的实现。具体的细节有框架来实现