带你认真了解一下Java分布式系统的基本特性

一般,分布式系统需要支持以下特性:

  • 资源共享
  • 开放性
  • 并发性
  • 可伸缩性
  • 容错性
  • 透明性

下面分别讨论。

容易理解的

资源共享

一旦授权,可以访问环境中的任何资源

资源:包括硬件(e.g. printer, scanner, camera)、软件(服务)、数据(file, database, web page)。

如资源管理器控制资源的访问:

  • 提供命名机制
  • 控制并发访问

开放性

新共享资源添加并被各种客户程序使用的(难易)程度。

如支持异构资源的添加和使用:

  • 提供统一的通信机制
  • 发布访问共享资源的接口

并发性

分布系统中的各个组成部分可以在并发的过程中被执行。

如:

  • 多个用户同时访问(和更新)资源
  • 多个服务进程同时运行,相互协作

资源定义同上。

可伸缩性

主要强调“伸”;偶尔也强调“缩”。

在资源和用户数较大增长的情况下,系统性能仍能维持甚至提高。

通常表现为:

  • 利用网络环境可以为更多的用户服务、而且响应更快
  • 通常通过增加更多/更快的处理器,能实现更可靠、更完善的服务

如:

  • DNS的解析:一方面,不仅可以为每个根域名设置单独的服务器,还可以为访问量大的二级、更多级域名也单独设置服务器;另一方面,当访问量变小时,还可以将多个访问量小的根域名的解析合并到一台服务器上。

不容易理解的

容错性

错误发生时,系统能够继续工作的能力。

基于这样一个假设:硬件、软件、网络的错误不可避免。

要容错,就要先知道有哪些错误(故障),再针对故障类型一一解决。

故障类型

分布式系统中的典型故障如下:

其中,随意性故障是最严重的故障,也被称为拜占庭故障。当发生故障时,服务器可能产生它从来没有产生过的输出,但是又不能检测出错误。更坏的情况是,发生故障的服务器恶意的与其他服务器共同工作来产生恶意的错误结果。

容错方案

如果系统是容错的,那么它能做的最好的事情就是对其他进程隐藏故障的发生。由于故障无法避免,我们只能依靠冗余来掩盖故障,包括:

  • 信息冗余:添加额外的位可以监测出错误位甚至纠正。如在数据中增加checksum等。
  • 时间冗余:执行一个动作,如果需要就再次执行。如事务、超时重传等。
  • 物理冗余:添加额外的设备或进程使系统作为一个整体来容忍部分组件的故障。如HDFS的多备份、HA等等。

部分书籍将物理冗余与软件冗余分开,本质上无法完全分开,因为软件冗余可能在部署在单机或多机上。这里将二者统一为物理冗余。

则针对各故障,可取的主要解决方案为:

  • 崩溃性故障——时间冗余、物理冗余
  • 遗漏性故障——物理冗余
  • 定时故障——时间冗余、物理冗余
  • 响应故障——信息冗余、时间冗余、物理冗余
  • 随意性故障——信息冗余、时间冗余、物理冗余

透明性

网络环境对于用户和应用程序而言,应该是一个整体,而不是一个互相协作的简单的构件集合。包括多项性质:

  • 位置透明性:用户不必关心对象位于何处。
  • 如DNS、Consul等分布式命名系统。
  • 重定位透明性:对象的位置可以变化而不影响对它的调用。
  • 仍然如DNS、Consul等。
  • 迁移透明性:系统内部可以迁移对象的位置。
  • 仍然如DNS、Consul等。
  • 访问透明性:可用一致的方式访问不同类型的机器上的对象。
  • 如Yarn、Mesos等分布式资源调度系统。
  • 持久透明性:对象所处的状态既可以是活动的,也可以是静止的。
  • 如HBase的WAL,计算机中的cache、段表、页表等。
  • 失败透明性:屏蔽被访问对象的失败及恢复过程 (容错)。
  • 如MapReduce、Spark等分布式计算框架。
  • 事务处理透明性:与事务处理相关的调度、监控和恢复。
  • 如2PC等分布式事务协议。
  • 复制透明性:用户不知道有多少个对象副本存在。
  • 如HDFS、Tair等分布式存储系统。

位置透明性、迁移透明性、重定位透明性是对命名系统的基本要求。

原文地址:https://www.cnblogs.com/CQqfjy/p/12290161.html

时间: 2024-10-30 04:41:03

带你认真了解一下Java分布式系统的基本特性的相关文章

atitit. 文件上传带进度条 atiUP 设计 java c# php

atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.xml 3 6. struts extand url 3 7. behide code 3 8. 简化设计 3 1. 设计要求 带进度条 完成提示动画效果.. 2. 原理and 架构 如果需要显示进度条,实时显示文件上传进度 需要使用Ajaxj技术..up到个在的iframe黑头.. 工作原理 其实际

Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: 1 class Star8 2 { 3 public static void main(String[] args) 4 { 5 /* 空格 6 * 1 2*i-1 3 4-1 4-i 7 *** 3 2 4-2 8 ***** 5 1 4-3 9 ******* 7 0 4-4 10 */ 11 //第一层循环控制的是行数 12 for(int i = 1;i<=

[原创]关于自带的sql developer修改java.exe版本的解决办法

第一次安装oracle11gR2后,就很好奇的点了一下,当点击应用程序开发下的sql developer后,就弹出一个窗口,要选择一个java.exe的路径,我就讲本机中的JDK1.7下的java.exe填进去了,然后自己关掉了界面,下次进入时,发现报出警告,最高版本不得高于1.6,而且没有提示更改,直接进入界面,可是没找到修改的位置,后来,想到软件安装的配置文件,于是,就开始寻找,终于找到了:E:\app\liangjian\product\11.2.0\dbhome_1\sqldevelop

Kotlin学习与实践 (九)带接收者的lambda及Java的函数式接口

带接收者的lambda * 在lambda 函数体内可以调用一个不同对象的方法,而且无须借助任何额外限定符:这种能力再Java中是找不到的.* 这样的lambda叫做"带接收者的lambda" 先举个普通函数作为反例: fun alphabet(): String { val result = StringBuilder() for (letter in 'A'..'Z') { result.append(letter) } result.append("\nNow ,I k

Java 8的新特性—终极版

声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己翻译了一版(写作驱动学习,加深印象),有些地方参考了该同学的. Java 8 前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas

Java 8 新特性:Java 类库的新特性之 Stream类 ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  Java 类库的新特性之 Stream类 (注:此文中涉及到的一部分图片为网络图片,若有问题,请联系我将其删除.) 一.Java8对IO/NIO 的改进 Java 8 对 IO/NIO 也做了一些改进,主要包括: 改进了java.nio.charset.Charset 的实现,使编码和解码的效率得以提升: 精简了jre/lib

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前

java 对象的this使用 java方法中参数传递特性 方法的递归

一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this  --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或者构造器中  不存在成员变量与局部变量同名的情况,可直接不写this 否则方法中或构造器中使用的就是局部变量 3.static 静态方法不能调用this,不能调用任何非static修饰的成员变量 或者方法 二.java方法中  参数传递特性 1.基本数据类型--实际是新增变量,并赋值而已   不过代

Atitit..jdk&#160;java&#160;各版本新特性&#160;1.0&#160;1.1&#160;1.2&#160;1.3&#160;1.4&#160;1.5(5.0)&#160;1.6(6.0)&#160;7.0&#160;8.0&#160;9.0&#160;attilax&#160;大总结

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 1.2. Java版本:JDK 1.02 1.3. Java版本:JDK 1.13 1.4. Java版本:JDK 1.2 (Java 2)4 1.4.1. 1999年5 1.4.2. 2000年5 1.5. Java版本:JDK 1.35 1.5.1. 2001年6 1.5.2. 2002年7