面对软件错误构建可靠的分布式系统_笔记10

面对软件错误构建可靠的分布式系统 系统存在不完善的环节,但是我们希望我们的系统可靠,矛盾的要求,满足的条件两种解决方案,语言本身或者是方法库 在ERLANG中,对于上述的问题的解决方式采用语言+库一起作用的方式来解决,满足在程序有错误的情况下,我们的代码依旧会按照合理的方式运行 本文不关注算法细节、硬件假设、软件工程方面的要求 而是关注与软件的容错性在语言、库、操作系统方面的要求,纯消息传递式的语言,其它语言可能会存在共享内存的方式来解决这样的问题 速错进程的概念,现成的错误存在互相传递的隐患,会破坏掉系统内部的坚固性 立即下载

6构建应用

一个监督者+三个工作进程(gen_server, gen_event, gen_fsm) 

6.1 behavior库

前三个是工作者+监督者+打包安装

gen_server:构建客户/服务器模型中的服务器

gen_event:构建事件处理程序,

gen_fsm:构建有限状态机

supervisor:构建监督树

application:整个应用程序打包的容器     

 

6.1.1 behaviour库怎么写

eg: 创建module(xyz)

-module(xyz).

-behaviour(gen_server).

-export([init/1,handle_call/3, handl_cast/2,handle_info/2,terminate/2,change_code/3]).

至少要有上面的6个函数

 

6.2通用服务器

6.2.1通用服务器的API

(1)gen_server:start(Name1, Mod, Arg, Options) -> Result.

        Name1:Mod.init(Arg) -> Result.

    Name1:服务器名称,可以为{local, Name2}或{global, Name2},前者在单个节点上创建服务器,后者在一个透明的远端节点创建服务器

    Mod:模块名称

    Arg: 传递给Mod:init/1参数

    Options:控制服务器的一组选项

    Result:Mod:init/1返回值

(2)gen_server:call(Name2,Term) -> Result

        Name2:Mod.handle_call(Term) -> Result.

    Name2:服务器的名字,见上面说明

    Term:传递给Mod:handle_call/3的参数

    Result:Mod:handle_call/1的返回值

(3)gen_server:cast(Name2,Term) -> ok

        Name2:Mod.handle_cast(Term) -> ok

    Name2:服务器的名字

    Term:传递给Mod:handle_cast/3的参数

(4)Mod:init(Arg) -> {ok, State} | {stop, Reason}

        启动服务器gen_server:start/4

    Arg:传递给gen_server:start/4的参数

    {ok, State}启动成功, gen_start:start返回{ok, Pid}

    {stop, Reason}启动失败,gen_start:start返回{error, Reason}.

(5)Mod:handle_call(Term, From, State) -> {reply, R, S1}

        gen_server:call(Name, Term)被调用

    Term:用户定义的参数

    From:标示客户

    State:服务器当前状态

    {reply,R,S1}使gen_server:call/2返回值为R,服务器新状态为S1

(6)Mod:handle_cast(Term, State) -> {noreply,S1} | {stop, R, S1}

        被gen_server:cast(Name, Term)

    Term:任意项式,作为参数

    State:服务器当前参数

    {noreply,S1}服务器新状态S1

    {stop, R, S1}服务器停止,停止时调用Mod:terminate(R,S1).

(7)Mod:terminate(R,S) -> void

    停止时调用,返回空

    R:服务器停止原因

    State:服务器当前状态

6.2.2通用服务器例子

通过gen_server实现Key_Value服务器

eg:

-module(thesis_kv).
-behaviour(gen_server).

-export([init/1, start/0, stop/0, terminate/2, handle_call/3,handle_cast/2]).
-export([lookup/1, store/2]).

start() -> gen_server:start_link({local, thesis_kv}, thesis_kv, arg1, []).
 
stop() -> gen_server:cast(thesis_kv, stop).

init(arg1) ->
 io:format("Key-Value server starting~n"),
 {ok, dict:new()}.

store(Key, Val) ->
 gen_server:call(thesis_kv, {store,Key, Val}).
 
lookup(Key) -> gen_server:call(thesis_kv, {lookup, Key}).  

 
handle_call({store,Key,Val}, From, Dict) ->
 Dict1 = dict:store(Key, Val, Dict),
 {reply, ack, Dict1};
handle_call({lookup, Key}, From, Dict) ->
 {reply, dict:find(Key, Dict), Dict}.
 
handle_cast(stop,Dict) ->  {stop, normal, Dict}.
 
   
terminate(Reason, Dict) ->
 io:format("Key-Value server terminate~n").  

 
面向软件错误构建可靠的分布式系统 本论文所描述的成果源于1981年开始的一个研究项目,该项目的目的是探索更好的编写电信应用软件的方法。电信类应用都是一些大型的程序,虽然经过了严密的测试,但是投入运行后难免会有许多错误。我们假设这些程序不可避免地会含有错误,进而寻求在软件包含错误的情况下构建可靠系统的方法。 立即下载

相关推荐

树莓派4B系统安装及SSH远程控制(简单易操作)

​自从2022年4月树莓派官网更新了RaspberryPiImager版本v1.7.2后,便不再支持自行建立ssh文件,并用默认用户名pi和密码raspberry的方式进行远程控制(亲测不行,输密码时一直access denied)。但是该版本软件提供了烧录系统前设置ssh用户及密码功能。本文记录了系统安装和SSH远程操作步骤。........................

机械人的代码路 5790

面对软件错误构建可靠的分布式系统_笔记01

作为erlang的入门教材,《面对软件错误构建可靠的分布式系统》这篇博士论文很值得好好研究。学习笔记,就是有话则多,无话则少 2.6语言需求并行和可容错的编程语言要求(1)并发性: 轻量级的并行机制,在进程间发送消息。(2)错误封装:一个进程中的错误,不能破坏其它进程(3)故障检测:可以检测本地和远端进程中的异常(4)故障识别:可以识别报告异常原因(5)代码升级:可以动态替换运行的系统

cpusoft 617

Weblogic安装与部署

27.免密登录,在目录Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer和Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\Server-TA目录下,新建security\boot.properties文件,13.点击新建按钮,填写服务器名称,服务器监听地址,再点击下一步,最后点击完成。

m0_46259466的博客 6635

面对软件错误构建可靠的分布式系统-1摘要

面对软件错误构建可靠的 分布式系统 (瑞典)Joe Armstrong 撰 段先德 译 邓 辉 审 声明:本文版权属原文作者所有,译文仅用于个人学习和交流,不得用于任何商业目的。> 原文链接:http://www.erlang.org/download/armstrong_thesis_2003.pdf 译 感 近年来,“多核”、“分布式计算”、

zhunj80的专栏 971

病理图像处理个人手札(三)WSI & MIL

1.什么是WSI? WSI全称是Whole Slide Image,也就是全视野数字切片,主要应用在病理学细胞图像领域。WSI 是利用数字扫描仪对传统的病理切片进行扫描,采集具有高分辨率的数字图像,再通过计算机将得到的碎片化图像进行无缝拼接整合,制作可视化数字图像的一项技术。与传统载玻片相比,很好地解决了传统的玻璃切片易损坏、易褪色、易丢片、检索困难的问题。 一言以蔽之,WSI是对传统载玻片进行数字化。 由于是全视野,因此它将包含多尺度的切片在一个文件上面。因此WSI将使用到金字塔模型满足其支持不同分辨率的

baiweizeng的博客 1万+

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。还原数据库时把序列取消勾选,选择不还原序列。因为还原表的同时,会自动将自增序列还原上去,此处勾选会导致数据库重复创建序列。点击还原数据库完毕后,可以看到序列仅有一个,没有出现重复序列。但此时的序列当前值是从1开始的,需要重置。点击菜单“其它”-》“序列”,可以看到有多个重复序列。

奋斗鱼 1043

面对软件错误构建可靠的分布式系统_笔记02

3.3 Erlang顺序化编程3.3.1 数据结构:8种原始的数据类型+2扩展类型(1)整数integer:(2)浮点数float:(3)原子atom: 字母打头的小写字符串,类似枚举类型。如果单引号包括,则可以有空格:a atom(4)二进制数binary: 二进制存储空间, >(5)字符串:双引号包括的字符串 "cat",实质是ASCII码。比如"cat"实质为[97,99,116](6)

cpusoft 468

工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定

上图: 说明一下,工业相机有TTL逻辑电平触发,也有光耦触发等。 这里一般我们用电路板驱动,就用GPIO触发模式, 这里,准备了两个GPIO触发模式,为LINE2,LINE3都可以选择,然后有一个GPIO_GND 如果,你只有一个触发接口,那么如图,选两个就好了。 实际接法如图。 ...

山云的专栏 1万+

面对软件错误构建可靠的分布式系统-11总结

 总结 从某种意义上来说,一切还远没有完成,但是,你却不得不结束……在这篇论文中,我罗列了许多东西——一种新的编程语言和一种编写可容错系统的方法。对于编写可靠系统来说,Erlang确实是一个很有用的工具。令人惊奇的是,Erlang已经被用在了许多应用上,这些应用已经远远超出了Erlang当初设计时所针对的问题领域。 10.1 我们已经做到了哪些? 本文中所描述的工作,以及其他人做的

zhunj80的专栏 585

手把手教你学Simulink--基于光伏(PV)系统的建模与仿真场景:-不同天气条件下光伏系统的输出性能分析

本文介绍了使用Simulink和Simscape Electrical工具箱进行光伏系统建模与仿真的完整流程。内容涵盖准备工作、模型构建、仿真分析三大步骤,重点演示了如何模拟不同天气条件(光照强度、温度变化)对光伏输出性能的影响。通过添加PVArray模块、配置参数、设置环境变化条件、连接测量仪器等操作,实现了光伏系统在动态天气条件下的输出特性分析。文章还提供了仿真参数设置建议和结果分析方法,帮助用户理解环境因素与光伏性能的关联性,为光伏系统设计和优化提供参考。

MHD0815的博客 189

5G无人机安全研究综述

国内多所高校提出混合信任模型,南京航空航天大学于2020年提出了起源信息感知的无人机网络信任模型[26],模型基于报文的完整性对报文创建和操作节点的行为评判并生成观测证据,收集证据进行信任评估,识别网络中的恶意节点并进行路由隔离,实现准确的对等信任评估。同时,5G技术的高速率、高可靠性、低时延等特点,能够为无人机提供实时高清图像回传,保证通信网络的稳定,拓展无人机飞控距离限制,丰富了5G无人机的应用场景。5G和无人机技术的融合,丰富了传统无人机的应用服务场景,然而5G无人机仍存在安全隐患。

weixin_70923796的博客 765

分布式系统的可靠性指的是什么 —— 你可能从来就没有认真思考过

本文节选之 DDIA 《Design Data Intensive Applications》,DDIA是一本神书,是一本可以让很多高级资深工程师醍醐灌顶的书。人们对于一...

shellquery的博客 1357

硬件描述语言Verilog学习(一)

主要学习综合和仿真、模块结构和信号类型Verilog 是用代码的形式描述硬件的功能,最终在硬件电路上实现该功能。在 Verilog 描述出硬件功能后需要使用综合器对 Verilog 代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将 Verilog 代码转成网表的工具就是综合器。 上图左上角是一段 Verilog 代码,该代码实现了一个加法器的功能。在经过综合器解释后该代码被转化成一个加法器电路。QUARTUS、ISE 和 VIVADO 等 FPGA 开发工具都是综合器,

安静到无声 1499

[Erlang 0060] Joe Armstrong 论文《面向软件错误构建可靠的分布式系统》笔记

周末读了两篇论文"On Designing and Deploying Internet-Scale Services"和Joe Armstrong的论文"面对软件错误构建可靠的分布式系统",这两篇论文实战内容相当多,整理笔记于此,备忘.   On Designing and Deploying Internet-Scale Services [HTML] 英文版"Making reliab

坚强2002@优快云 1040

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

周志明:《凤凰架构:构建可靠的大型分布式系统》

架构模式的每一次演进都是凤凰涅槃系统架构的每一次迭代都是浴火重生构成系统的每一个部件都是一只不死鸟构成大规模系统的每一个部件都可以是不可靠的,会出错,会老朽,甚至是消亡,如何让不可靠部件构...

华章IT官方博客 5337

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

面对软件错误构建可靠的分布式系统_笔记05

3.5错误处理3.5.1异常包括6类异常(1)值错误value error: 类似除0错误(2)类型错误type error:函数的参数错误(3)模式匹配错误pattern-matching error:在case/receive/if中无法匹配 (4)显示调用exit:相当于主动抛出异常, exit(Why)抛出Why异常(5)错误传播error propagation:进程收到一个exit

cpusoft 397

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

面对软件错误构建可靠的分布式系统-6编写可容错系统

 编写可容错系统 电话交换机的设计者们在软件设计中花了一 半的精力在错误的检测和纠正上[48]。 Richard Kuhn,国家标准与技术协会 什么是可容错系统?如何编写可容错系统?这个问题是本论文的重点所在,也是我们理解如何构建可容错系统的关键。在本章中,我们定义了我们所说的“容错”的含义,并提出了用来编写可容错系统的一种特殊方法。我们以两条引述来开始本章: 如果一个系统

zhunj80的专栏 682

面对软件错误构建可靠的分布式系统_笔记07

4 编程技术4.1抽象并出发eg:thesis_server1.erl-module(thesis_server1).-export([start/3, stop/1, rpc/2]).start(Name, F, State) ->    register(Name, spawn(fun()->loop(Name, F, State) end)).loop(Name, F,

cpusoft 440

第八章:分布式系统的麻烦

设想一个具有不对称故障的网络:一个节点能够接收发送给它的所有消息,但是来自该节点的任何传出消息被丢弃或延迟【19】。即使该节点运行良好,并且正在接收来自其他节点的请求,其他节点也无法听到其响应。经过一段时间后,其他节点宣布它已经死亡,因为他们没有听到节点的消息。半断开(semi-disconnected)的节点被拖向墓地,敲打尖叫道 “我没死!” —— 但是由于没有人能听到它的尖叫,葬礼队伍继续以坚忍的决心继续行进。

Mr.Phoebe的专栏 1万+

面对软件错误构建可靠的分布式系统-3架构模型

 架构模型 对于软件架构这个术语来说,没有一个标准的、被普遍 接受的定义,因为它还是一门年幼的学科,……虽然没 有标准的定义,却也不乏定义…… 卡内基·梅隆大学软件工程学院 本章提出了一个用于构建容错系统的软件架构。虽然每个人对于架构一词都有一个模糊的概念,但是这个词却几乎没有一个广为接受的定义,这就导致了很多误解。我认为如下定义对软件架构进行了比较全面的总结: 架构是

zhunj80的专栏 732

面对软件错误构建可靠的分布式系统_笔记08

4.2 Erlang世界观一切皆进程web服务器的架构server(Client) ->    receive        {Client, close} ->            true;        {Client, Request} ->            Response = generate_response(Request),      

cpusoft 468

面对软件错误构建可靠的分布式系统(阅读笔记)

阅读笔记 joe Armstrong 段先德 译 核心问题:如何在存在软件错误的情况下编写具有合理行为的软件 ,如何避免像死锁。死循环等问题 ERLANG的世界观,一切皆进程。将任务分离成层次化的一系列任务,强隔离的进程负责来执行每个具体化的任务,进程之间不共享状态(实际上ETS跨越了这个准则)。 只能通过消息传递来通信,必须注意进程消息的堵塞问题 工作者和监督者...

weixin_34357267的博客 361
上一篇: 面对软件错误构建可靠的分布式系统_笔记09
下一篇: 面对软件错误构建可靠的分布式系统_笔记11
cpusoft
博客等级 码龄22年 8粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值