带你认真了解一下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等分布式存储系统。
位置透明性、迁移透明性、重定位透明性是对命名系统的基本要求。
带你认真了解一下Java分布式系统的基本特性的更多相关文章
- Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)
Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...
- 十个问题带你了解和掌握java HashMap
十个问题带你了解和掌握java HashMap 一.前言 本篇内容是源于 " 由阿里巴巴Java开发规约HashMap条目引发的故事",并在此基础上加了自己的对HashMap更多的 ...
- atitit. 文件上传带进度条 atiUP 设计 java c# php
atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.x ...
- 用java自带jdk开发第一个java程序
[学习笔记] 1.用java自带jdk开发第一个java程序: 下面要讲的eclipse要想正常工作,需要先学会配置这里的jdk.jdk要想正常工作,需先学会配置JAVA_HOME和ClassPa ...
- 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
- Java 8的新特性—终极版
作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...
- JDK 15 JAVA 15的新特性展望
目录 JEP 371: Hidden Classes JEP 372: 删除 Nashorn JavaScript Engine JEP 377: 新的垃圾回收器ZGC正式上线了 JEP 378: T ...
随机推荐
- 异常检测算法Robust Random Cut Forest(RRCF)关键定理引理证明
摘要:RRCF是亚马逊发表的一篇异常检测算法,是对周志华孤立森林的改进.但是相比孤立森林,具有更为扎实的理论基础.文章的理论论证相对较为晦涩,且没给出详细的证明过程.本文不对该算法进行详尽的描述,仅对 ...
- 03.21 ICPC训练联盟周赛:UCF Local Programming Contest 2018正式赛
B Breaking Branches 题意:两个人比赛折枝,谁剩下最后1,无法折出整数即为输 思路:树枝长n,若是奇数,则Bob胜出,若是偶数,则Alice胜出,且需要输出1: 1 #include ...
- 网络层协议及ARP攻击
一:网络层介绍及ICMP协议 1,网络层 网络层位于OSI参考模型的第三层,位于传输层和数据链路层之间.向传输层提供最基本的端到端的数据传送服务.定义了基于IP协议的逻辑地址,连接不同媒介类型,选择数 ...
- shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。
shell脚本?在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包 ...
- 010.Python字符串的格式化
字符串的格式化 顺序传参 索引传参 关键字传参 容器类型传参(列表和元组) {}相当于占位符 1 顺序传参 strvar = "他{}牺牲自己,{}出卖组织" res = strv ...
- python中的threading模块使用说明
这段时间使用python做串口的底层库,用到了多线程,对这部分做一下总结.实际用完了后再回过头去看python的官方帮助文档,感觉受益匪浅,把里面的自己觉得有用的一些关键点翻译出来,留待后续查验.th ...
- Spring Cloud 升级之路 - 2020.0.x - 7. 使用 Spring Cloud LoadBalancer (2)
本项目代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Spri ...
- 去除HTML中的标签内容
采集后的数据都带有'<>'html标签: <img src="http://i4.hdfimg.com/www/images/giftrans/3d/da/7b/18414 ...
- golang快速入门(六)特有程序结构
提示:本系列文章适合对Go有持续冲动的读者 阅前须知:在程序结构这章,更多会关注golang中特有结构,与其他语言如C.python中相似结构(命名.声明.赋值.作用域等)不再赘述. 一.golang ...
- Jmeter(四十九) - 从入门到精通高级篇 - jmeter使用监视器结果监控tomcat性能(详解教程)
1.简介 上一篇宏哥讲解了利用jmeter的插件来监控服务器资源,这一篇讲解分享如何使用jmeter的监视器结果监控tomcat性能. 2.准备工作 文章标题中提到jmeter和tomcat,那么只需 ...