![](https://pic1.zhimg.com/v2-460c691431d36f93bc4ab0c007d80505_qhd.jpg?source=57bbeac9)
分布式系统
详细内容
概述
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据[1]。
![](https://pic2.zhimg.com/v2-763a3de5494378f850b2444ce6aa571b_720w.jpg)
特征
- 异构性
- 开放性
- 并发性
- 缺乏全局时钟[2]
类别
分布式系统分为分布式计算(computation)与分布式存储(storage)[3]。
通信机制
分布式系统之所以能够成为一个系统,作为一个整体为用户提供服务和存储,必须依赖以网络通信,以Java语言为基础,阐述网络通信间的基本原理及一些常用的通信协议。
通信的基本原理
通信就是把信息完整有效的从一台计算机传输到另一台计算机。计算机的网络模型有七层网络模型和TCP/IP四层模型。
七层网络模型
TCP/IP四层模型跟OSI七层模型的对比关系如下图[4]。
![](https://pic4.zhimg.com/v2-66003048bf87d8445bf4dd6d3a1602f0_720w.jpg)
![](https://pic2.zhimg.com/v2-3cb874b9f9311104f725b6eb5d054830_720w.jpg)
均衡调度算法
在分布式系统中,整个系统的效率,并不是由单台服务器的所决定的,而是多台服务器共同协作的结果。分布式系统的能力受到单台服务器的性能、网络延迟、任务的分配、资源调度等各种因素的影响,所以在整个系统中网络负载均衡,任务调度显得尤其重要。通过这些基础方法的又可以组合使用,形成更高级一些负载均衡方法。
随机法
Random随机法顾名思义,就是采用随机的算法对集群的中的各个服务器节点进行调度,随机方法又可以分为完全随机和加权重随机。
轮询法
Round Ribbon轮询法,可以把集群中的服务器看成是一个环装的结构,依次对环上节点进行调度,轮询法和随机法和类似,不同之处在岁轮询法釆用一种顺序调用的方式。
加权法
Weight加权法,是负载均衡中最基础的一个方法,加权法顾名思义就是对集群中不同的机器进行不同的权重评估。
散列算法
Hash散列算法也叫哈希算法,常用的哈希算法有普通哈希算法、一致性哈希算法,基于IP的哈希算法和基于URL的哈希算法。
最少连接算法
Least Connect最少链接算法,是指从集群服务器列表中找到链接最少的机器,把请求转发大这台机器上[5]。
传统无源式系统
同轴电缆分布系统
单路分布系统为了实现多系统覆盖,釆用合路的方式建设GSM与TD-LTE信号源。
双路分布系统
为了实现TD-LTE的MIMO特性,在需要覆盖的区域建设两路相同的分布系统,TD-LTE的两路信号分别馈入。
光纤分布系统
光纤分布系统由主单元(接入单元)、扩展单元和远端单元组成。主单元釆用光纤与扩展单元连接,扩展单元釆用光纤或网线与远端单元连接。
服务链追踪与监控
调用链
- 当一个用户发起一个业务菜单页面请求时,Web前端生成唯一的traceid来标识本次动作。
- 在服务层的每个环节都有各自唯一的id标识,通过parentid标识其环节。
![](https://pic1.zhimg.com/v2-74a240de80c279f257f72f6c083efc21_720w.jpg)
跟踪树
- 基于traceid,将不同环节的跟踪信息进行归并汇总。
- 基于id和parentid,还原调用链上下层的父子关系,包含于嵌套关系。
应用实践研究
软件设计组件化
电信运营支撑系统在实践中经常应用一种与技术没有关系的体系结构开展,系统在实践中不仅仅局限于特定的技术手段,此种系统结构是一个完全的分布模式的系统结构,在分布不同的物理位置之上的各个组件共同的完成业务流程。
企业流程抽象化
运营支撑主要目的就是保障企业流程的通畅性,对其进行有效控制。而流程控制的主要目的就是组件个体无需具备与流程操作具有关联的整体逻辑知识。
实行接口合同
电信运营支撑系统通过综合接口合同机制,组件的每一个接口都利用合同规范要求对其进行描述。
分层调度算法
数据集调度功能的伪代码实现如下:
Template template= init— template(“Template.xml”);//加载模版文件
page1:load(template);//加载数据分类
for each(1ist—url in page 1){put list_url into queue—list;
while(queue—list is not nul1)//当队列非空的时候
{
String list— url=queue— list.pull();
int pageNum = 1;
do{page2=load(1ist—url,pageNum);
for each(data_list in page2)
{ write(data jist,”data.txt”);}//将数据信息写入文件
pageNum++;
}while(pageNum<maxPageNum);
}
queue—product=load(”data.txt”);//初始化数据详情信息队列
while(queue—product is not nul1)//当维度队列非空的时候
{ String data=queue—data.pull();//从维度队列中取出数据
page:load(data);
for each(regular in template){ //事先定义好的凝聚层次聚类规则
locate and fetch the pro_ //进行数据信息分层
info;
}
}
挑战
- 异构的机器与网络
- 普遍的节点故障
- 不可靠的网络[6]