A Fault-Tolerant、Self-heal、Hot-upgrade、Distributed design methodology v0.1

本文主要是介绍A Fault-Tolerant、Self-heal、Hot-upgrade、Distributed design methodology v0.1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 本文描述了一种容错、自恢复、热升级、分布式系统的设计方法和框架,其在实践中被证实为一种可靠、可行的方法学。

一、Fault-Tolerant

容错最常用的思想之一是冗余redundancy,防止单点故障SPOF;最常用的机制是复制。

容错设计需要有一个清晰的容错模型Fault Model,它包括故障状态Fault State,状态取得,高级些的特性包括故障传播Failure Propagation。在Mozart-Oz系统中,有四个故障状态:

·         The entity works normally (local fault state ok).

·         The entity is temporarily not working (local fault state tempFail). This is because a remote site crucial to the entity is currently unreachable due to a network problem. This fault state can go away, and the entity work normally again.

·         The entity is permanently not working on the given site (local fault state localFail). This state is enforced by the application itself and is irreversible. It does not affect other sites.

·         The entity is permanently not working on all sites (local fault state permFail). This is because a site crucial to the entity has crashed. This fault state is permanent.

Erlang中的故障传播比较先进,基于link-supervise模型。

 

二、Self-heal

容错的最高境界应该是“在哪时倒了在哪里爬起来”,无人看护地自动恢复。在link-supervise模型中,有三种故障处理策略

 

 

 Restart Strategy

 

one_for_one

If a child process terminates, only that process is restarted.


Figure 5.1:   One_For_One Supervision

one_for_all

If a child process terminates, all other child processes are terminated and then all child processes, including the terminated one, are restarted.


Figure 5.2:   One_For_All Supervision

rest_for_one

If a child process terminates, the 'rest' of the child processes -- i.e. the child processes after the terminated process in start order -- are terminated. Then the terminated child process and the rest of the child processes are restarted.

本文提出了一种多层次的、粒度可控的设计方法。即按业务分为进程级、工作实例级的容错方式。进程级,在JAVA领域,通常一个JAVA进程是一个JVM,在一台机器上往往只会启动一个JVM,例如一个Tomcat服务器,那么全部JAVA相关的业务逻辑就在这个JAVA进程上运行了,是最粗粒度的;这里描述的实例的概念,粒度可小可大。从多年前面向对象的中的表示某个类的运行时状态的对象实例,到Oracle数据库中的实例;跨度很大,这也给我们灵活的抽象能力。我们可以在这个框架内,支持进程级和实例级的自恢复,从而形成高级的容错机制。

 

三、Hot-upgrade

热升级是在不停机下升级程序,或修改配置,以改变程序的运行行为。当前支持这一特性的,在JAVA领域中,有OSGi规范下的各种实现。升级的意思还可以理解为hot-expand,热扩展;例如,在这个框架下,原来有功能A,现在要提供一个功能B,能否不大规模修改此框架的代码而实现B呢?最好的实现方式是,像最近IBM的机器“沃 森”那样,能处理自然语言描述的需求,给出答案。虽然当今计算机系统处理自然语言的能力很有限,像先进如“沃森”,也只是在处理“一句话”式的问题方面能用过人类选手;但是,显然,人类需要的是用计算机来处理复杂的问题。当然,这扯得有点远了,那咱们的这个设计方法和框架,如果能处理用简洁的次编程语言表达的、“一句话”式的需求方面,效率很高,那么就是个很好的工具了,因为复杂的需求通常能够化简为简单的需求,然后由这些简单的需求组合为复杂的需求。

 

 

四、Distributed

程序要获得高性能、高可用、可伸缩,分布式必不可少。分布式首要解决的是通信,各程序节点间的通信协议需要根据具体应用因地制宜地实施。

一个框架或平台,同时支持这些特性将是个巨大的工程,需要持久的兴趣和勇气来实践。

 

 

 

这篇关于A Fault-Tolerant、Self-heal、Hot-upgrade、Distributed design methodology v0.1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725293

相关文章

pytorch torch.nn.functional.one_hot函数介绍

torch.nn.functional.one_hot 是 PyTorch 中用于生成独热编码(one-hot encoding)张量的函数。独热编码是一种常用的编码方式,特别适用于分类任务或对离散的类别标签进行处理。该函数将整数张量的每个元素转换为一个独热向量。 函数签名 torch.nn.functional.one_hot(tensor, num_classes=-1) 参数 t

Axure元件库Ant Design中后台原型模板:提升设计与开发效率的利器

企业对于中后台产品的设计与开发需求日益增长。为了提升用户体验和开发效率,设计者和开发者们不断寻求更加高效、统一的解决方案。Ant Design,作为阿里巴巴开源的一套企业级UI设计语言和React组件库,凭借其丰富的组件和统一的设计风格,已成为众多项目的首选。而在Axure中使用Ant Design元件库,更是为中后台产品的原型设计带来了极大的便利。 Ant Design简介 Ant D

【UVA】11400-Lighting System Design(动态规划)

这道题感觉状态式不是很好推。。。 WA了好几次是因为排序的时候出问题了。 这道题出在线性结构里了,先说一下最长上升子序列吧。 dp[i]代表了以array[i]结尾的时候,最长子序列长度。 推导的时候,以起点递增的顺序进行推导。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#i

终止distributed tensorflow的ps进程

1.直接终止: $ ps -ef | grep python | grep 文件名 | awk {'print $2'} | xargs kill文件名为当前运行的程序,名称如:distribute.py 2.查找pid,后kill: $ ps -ef | grep python | grep 文件名 | awk {'print $2'}$ kill -9 <pid>

Circuit Design 贴片晶振的区分

贴片晶振脚位的区分(非常详细,尤其是如何区分四脚的有源无源晶振): http://ruitairt.com/Article/tiepian_1.html 如何区分有源和无源晶振: http://ruitairt.com/Article/yzjddbfqsq_1.html

Circuit Design RC 震荡电路

为了测试一个信号放大器,手边又没有合适的信号发生器,所以就需要自己手动来一个信号发生器。。。。。由于所需的频率大概也不会太高,手边也没有电感,所以选择用RC震荡电路来实现这个功能。 借鉴的网页: http://www.eepw.com.cn/article/283745.htm RC振荡电路,采用RC选频网络构成,适用于低频振荡,一般用于产生1Hz~1MHz(fo=1/2πRC)的低频信号。

Circuit Design 三极管驱动蜂鸣器电路 及 蜂鸣器两端电压正确但是不响的解决方案

利用三极管进行电流放大的蜂鸣器驱动电路图: (百度图片找的) 我用有源蜂鸣器实现的这个电路,但是蜂鸣器不响。 details: 1. VCC =5V 蜂鸣器两端的直接电压约为4.5V, 但是蜂鸣器不响。 2. 将蜂鸣器直接接在4.5V的电源两端,蜂鸣器响。(说明蜂鸣器是好的) 3. 测了三极管各个管脚的电压, 和理论上的是一致的。 情况很奇怪,换了好几个三极管结果都是一样的,

ant-design-pro 学习01

1、开始学习ant-design-pro,安装啥的自动忽略,参考文档:https://pro.ant.design/docs/getting-started-cn 根据文档学习,添加页面,新增组件都没问题,可以跟着做,但是到了和服务器交互时就有点蒙了,因为ant-design-pro采用了dva框架实现,前段使用react技术,对于只有后台开发经验的我还停留在springmvc 的工作模式上,对

ant design pro 新增页面

1.在 src/routes/ 下面创建一个页面 // 填写如下内容/** NewPage.js内容 */import React, { Component } from 'react';export default class NewPage extends Component {render() {return (<div>这是新页面</div>)}}/** NewPage.le

ant mobile design组件库的PickerView组件不能滑动

问题 PickerView组件在开发环境可滑动,在测试环境不可滑动 正常开发环境是这样正常显示,并且可滑动的 发到测试环境后,变成了这样,并且只有中间那列可滑动,两边的都不能滑动,而且还会报警告 封装的组件代码如下 // 日期选择组件const CustomDatePickerView: FC<any> = ({customizeTab,setCustomizeTime,cus