文档章节

我们来聊聊分布式

page_zxy
 page_zxy
发布于 2016/12/27 11:26
字数 1853
阅读 29
收藏 0

      大型主机时代已经井喷,集中式时代已经无法满足日益健壮复杂的业务和需求,互联网时代的到来,使得由集中式到分布式的革命犹然而生,网络化,微型化发展步伐迫切,分布式的需求越来越能适应需求,一线电商平台迈入分布式时代。

    分布式官方定义为:所谓分布式系统顾名思义就是利用多台计算机协同解决单台计算机所不能解决的计算、存储等。

问题一、 

将一个单机问题使用分布式解决,首先要解决的就是如何将问题拆解为可以使用多机分布式解决,使得
分布式系统中的每台机器负责原问题的一个子集。

 

1.特点:

分布性:分布式多台计算机在空间上可随意分布,机器的分布情况可以随时调整

对等性:分布式系统的计算机没有主从之分,没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有计算机节点都是对等的,每个节点都是用副本的形式来数据冗余的方式保证数据的持久化。

并发性:同一个分布式系统的的多个节点会操作一份共享的资源和数据的分布式存储,如何高效准确的协调控制分布式并发成为了一个难题。

缺乏全局时钟:典型的分布式系统由多台计算机在空间上随意分布的多个进程组成,进程之间通过消息来进行相互通信,很难保证一个次顺问题,比如分布式中的全局唯一ID如何生成等等问题。

2.环境:

通信异常:分布式可以说是多个节点之间依靠不稳定的网络进行通信,网络有可能会出现故障。

网络分区:由于网络异常,导致分布式节点通讯延时或者宕机,只有一部分节点还可以正常运行。

三态: 成功,失败,超时。

节点故障:分布式服务器节点有可能宕机,僵死等等情况。

 

3.异常处理的原则:
在设计、推导、验证分布式系统的协议、流程时,最重要的工作之一就是思考在执行流程的每
个步骤时一旦发生各种异常的情况下系统的处理方式及造成的影响。


例 1.2:某分布式协议实现一个 echo 功能,即由节点 A 向节点 B 发送一个消息,内容是一个整
数,节点 B 收到后返回相同的消息。节点 A 发送的消息每次递增加 1。
节点 A 的处理流程为:
1. 向节点 B 发送一个消息,消息内容为当前需要发送的整数;


2. 等待接收从节点 B 发回的响应消息;


3. 若 B 发回的消息等于当前需要发送的整数,


a) 将当前需要发送的整数加 1;


b) 否则返回 1;


上述简单的流程可能遇到各种异常且不能正确处理:

第一、当前需要发送的整数没有持久化,在上述流程中,一旦节点 A 宕机,节点 A 无法继续上述流程。

第二、节点 B 一旦宕机,节点 A 不会收到响应消息,流程将卡在第二步无法进行下去。

第三、若 A 发给 B 或 B 发回 A 的消息有一个丢失,节点 A 也不会收到响应消息。

在本节中,不讨论如何修改这个流程以处理上述异常,举这个例子是为了说明异常分析的基本方法。

 

被大量工程实践所检验过的异常处理黄金原则是:

任何在设计阶段考虑到的异常情况一定会在系统实际运行中发生,但在系统实际运行遇到的异常却很有可能在设计时未能考虑,所以,除非需指标允许,在系统设计时不能放过任何异常情况。

 

4.数据分布式:

哈希方式:

     哈希方式是最常见的数据分布方式,其方法是按照数据的某一特征计算哈希值,并将哈希值与
机器中的机器建立映射关系,从而将不同哈希值的数据分布到不同的机器上。所谓数据特征可以是
key-value 系统中的 key,也可以是其他与应用业务逻辑相关的值。例如,一种常见的哈希方式是按
数据属于的用户id计算哈希值,集群中的服务器按0到机器数减1编号,哈希值除以服务器的个数,
结果的余数作为处理该数据的服务器编号。工程中,往往需要考虑服务器的副本冗余,将每数台服务器组成一组,用哈希值除以总的组数,其余数为服务器组的编号。   

按数据范围分布:

按数据范围分布是另一个常见的数据分布式,将数据按特征值的值域范围划分为不同的区间,
使得集群中每台(组)服务器处理不同区间的数据。


例1 :已知某系统中用户 id 的值域范围是[1,100),集群有 3 台服务器,使用按数据范围划分
数据的数据分布方式。将用户 id 的值域分为三个区间[1, 33),,[33, 90),[90, 100)分别由 3 台服务器
负责处理。

值得注意的是,每个数据区间的数据大小和区间大小是没有关系的。例如,上例中按用户 id 划
分的三个区间,虽然从用户 id 的值域看来,不是等大小的,但三个区间中的数据量却有可能是差不
多的。这是因为可能有的用户 id 的数据量大,有些用户 id 数据量小。也有可能某些区间中实际存
在的用户 id 多,有些区间中实际存在的用户 id 少。工程中,为了数据迁移等负载均衡操作的方便,
往往利用动态划分区间的技术,使得每个区间中服务的数据量尽量的一样多。当某个区间的数据量
较大时,通过将区间“分裂”的方式拆分为两个区间,使得每个数据区间中的数据量都尽量维持在
一个较为固定的阈值之下。
与哈希分布数据的方式只需要记录哈希函数及分桶个数(机器数)不同,按数据范围分布数据
需要记录所有的数据分布情况。一般的,往往需要使用专门的服务器在内存中维护数据分布信息,
称这种数据的分布信息为一种元信息。甚至对于大规模的集群,由于元信息的规模非常庞大,单台
计算机无法独立维护,需要使用多台机器作为元信息服务器。

© 著作权归作者所有

page_zxy

page_zxy

粉丝 5
博文 20
码字总数 9009
作品 0
朝阳
技术主管
私信 提问
聊聊远程通信_Index

聊聊远程通信 Java远程通讯技术及原理分析 聊聊Socket、TCP/IP、HTTP、FTP及网络编程 RMI原理及实现 RPC原理及实现 轻量级分布式 RPC 框架 使用 RMI + ZooKeeper 实现远程调用框架 聊聊同步、...

陶邦仁
2016/02/23
1K
0
ZooKeeper使用(1)- 简介

首先说下为什么要写ZooKeeper专题吧,从我工作到现在有三年左右的时间了,虽然从一工作就接触到了ZooKeeper,但是都还仅限于简单的配置使用,对于ZooKeeper服务还不甚了解,后来加上要做配置...

andamajing
2017/05/25
0
0
聊聊分布式事务

事务就是一个会话过程中,对上下文的影响是一致的,要么所有的更改都做了,要么所有的更变都撤销掉。就要么生,要么死。没有半死不死的中间不可预期状态。 参考下薛定谔的猫。 事务是为了保障...

tantexian
2016/05/10
68
0
BlockChain Dev Meetup No.7

Dev Meetup 是由 「秘猿科技」和「Nervos」 赞助的技术分享活动,我们是一群崇尚开源、务实笃行的极客,在团队中,一直讲Linux的创始人Linus Torvalds 给 Linux -Kernel 写的一封邮件中提到的...

NervosNetwork
2018/10/15
1
0
BlockChain Dev Meetup No.7

Dev Meetup 是由 「秘猿科技」和「Nervos」 赞助的技术分享活动,我们是一群崇尚开源、务实笃行的极客,在团队中,一直讲Linux的创始人Linus Torvalds 给 Linux -Kernel 写的一封邮件中提到的...

NervosNetwork
2018/10/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
28分钟前
1
0
解决Windows和Ubuntu时间不一致的问题

解决Windows和Ubuntu时间不一致的问题 问题原因是使用的时间不一致导致的。win10直接从bios读出来的时间认为就是实际时间,ubuntu认为加上8个小时 后的才是。win10用的rtc ,ubuntu用的utc 在...

shzwork
31分钟前
2
0
mysql mysql三种插入数据语句和增删改方法

点开题目是不是有点懵X,因为你只知道insert...values这一种,重来没有听说过三种,现在来介绍一下。 插入数据三种方式: insert into 表名(字段名) values(插入值); 最常用的插入语句 inse...

edison_kwok
32分钟前
2
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
44分钟前
1
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部