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

软件工厂即分布式系统:构建高可用CI/CD的架构、挑战与实战 在软件工程领域,持续集成与持续交付(CI/CD)是现代研发效能的核心支柱,它通过自动化工具链将代码从提交到部署的流程标准化。其底层原理借鉴了分布式系统的设计思想,当各个CI/CD组件(如代码仓库、构建服务器、制品库)部署在不同网络节点并通过消息传递协作时,整个流水线便构成了一个分布式系统。这一架构带来了显著的技术价值:它提升了自动化水平、加快了交付频率,并增强了流程的可重复性。然而,它也引入了分布式系统的典型挑战,包括网络分区、部分故障、状态一致性与并发竞态等问题。在实际应用场景中,尤其是在微服务与云原生架 阅读详情

6.3通用事件管理器Event Manager
(1)behaviour:gen_event
(2)事件处理器:event manager可以完成:错误处理、告警关联、调试、设备管理
一个事件管理器,可以安装0个或多个事件处理器event handler
(3)通知Notification:向一个事件管理器发送一个事件动作
(4)事件处理器event handler:一个可以处理事件的函数
函数结构为
    {ok, SNew } = Mod:handle_event(Event, SOld).
 
6.3.1通用事件管理器API
(1)gen_evnet:start(Name1) -> {ok, Pid} | {error, Why}
    创建一个管理器
    Name1:管理器名称,与签名的通用服器命名相同
    {ok, Pid}:事件管理器开启成功
    {error, Why}: 开启失败
(2)gen_event:add_handler(Name2, Mod, Args) -> ok | Error
     添加一个处理器到事件管理器
    Name2:事件管理器名称,见前
    Mod:回调模块名字
    Arg:传递给Mod:init/1参数
(3)gen_event:notify(Name2,E) -> ok
    发送事件E给事件Name2管理器,事件管理器会调用
    {ok, SNew } = Mi:handle_event(E,SOld).
(4)gen_event:call(Name2,Mod, Args) -> Reply
    执行事件处理器上某个操作,会调用
    Mod:handle_call(Args, S).
(5)gen_event:stop(Name2) -> ok   
    停止事件管理器
(6)Mod:init(Args) -> {ok, State}
    Args:是gen_evnet:add_handler/3的参数,
    State:是事件处理器初始状态
(6)Mod:handle_event(E,S) -> {ok, S1}
    E:是gen_event:notify/2参数
    S:事件处理器原有状态
    S1:事件处理器新状态
(7)Mod:handle_call(Args, State) -> {ok, Reply, State1}
    Args是gen_evnet:call/2参数
    State是原状态
    Reply将成为gen_evnet:call/2返回值
    State1是新状态
(8)Mod:terminate(Reason, State) -> void
    Reason表示停止原因
    State:当前状态
 
eg:
-module(thesis_logger).
-behaviour(gen_event).

-export([start/0,init/1, handle_event/2,handle_call/2,stop/0, terminate/2]).
-export([log/1,report/0]).
 
-define(NAME, my_simple_event_logger).

start() ->
 case gen_event:start_link({local, ?NAME}) of
  Ret = {ok, Pid} ->
   gen_event:add_handler(?NAME, ?MODULE, arg1),
   Ret;
  Other ->
   Other
 end. 

stop() -> gen_event:stop(?NAME).

log(E) -> gen_event:notify(?NAME, {log, E}).

report() ->
 gen_event:call(?NAME, ?MODULE, report).

init(arg1) ->
 io:format("Logger starting~n"),
 {ok,[]}.
 
handle_event({log, E}, S) -> {ok, trim([E|S])}.

handle_call(report, S) -> {ok, S,S}.

terminate(stop,_) -> true.

trim([X1,X2,X3,X4,X5|_]) -> [X1,X2,X3,X4,X5];
trim(L) -> L.  

 

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

相关推荐

面向软件错误构建可靠的分布式系统

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

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

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

cpusoft 617

GIS小白也能看懂的实战:5步教你将ArcGIS里的等高线和水系完美导入CAD做规划图

本文详细介绍了如何将ArcGIS中的等高线和水系数据高效导入CAD,制作专业规划底图的5个关键步骤。从数据准备、ArcGIS处理到CAD优化,涵盖坐标系设置、数据裁剪、格式转换等实用技巧,特别适合设计规划领域的新手快速掌握GIS与CAD协同工作流程。

weixin_27966471的博客 426

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

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

zhunj80的专栏 971

团子杂记:SAP收入确认工具RAR(Revenue Recognition&Reporting)在新收入准则下的应用

SAP收入确认工具RAR知识分享

Lucas1211的博客 4284

Protobuf NDK以及QNX交叉编译

Protobuf 用处很广,尤其是通讯数据序列化,反序列化。TODO。

静虚待令,有物混成 1560

面对软件错误构建可靠的分布式系统_笔记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

Android应用之【巧妙隐藏桌面图标的进阶方案】

本文详细探讨了Android应用中隐藏桌面图标的进阶方案,解决了传统方法在Android 10及以上版本中出现的黑色图标残留问题。通过Intent-Filter配置和厂商适配技巧,实现子应用真正隐身,同时确保主应用正常启动。适用于企业工具套件、模块化系统等场景,提升用户体验和安全性。

weixin_28363123的博客 508

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

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

zhunj80的专栏 585

伺服驱动器启用后对传感器线信号干扰的解决方案

在一些Arduino项目中,研究者发现,当伺服电机启动时,传感器信号会出现显著噪声。例如,在一个假肢项目中,研究者使用光电隔离器成功隔离了伺服驱动器对EMG传感器的干扰。然而,当启用伺服驱动器时,传感器线信号常常受到干扰,导致系统性能下降。传感器线信号是传感器输出的电信号,用于测量物理量,如温度、光线或位置。例如,在一些案例中,伺服驱动器的开关操作可能导致传感器信号出现尖峰或波动,特别是在模拟传感器上更为明显。描述: 使用光电隔离或其他隔离技术,分离伺服驱动器和传感器的电气路径,防止直接干扰。

有用好玩有趣的“电”知识 1466

加法器设计—— 原理图与VHDL设计初步

1、在DE2-115开发板上,完成4位全加器系统的设计、下载和功能演示,并在FPGA上实现1位全加器;2、完成3-8译码器的设计、下载和功能演示(利用板上的8段数码管)本次实验在组合逻辑电路的基础上,运用Verilog编程实现了四位全加器和3-8译码器的设计,同时实现了在DE2-115开发板上的下载和功能演示。整个过程加深了我对电路设计和Verilog编程的理解,同时也锻炼了解决问题的能力。

m0_74749526的博客 1238

阿里最新丰碑:国内第一本凤凰架构,全面构建可靠大型分布式系统

周志明老师的《深入理解Java虚拟机》想必大家都不陌生,这本书凭借着生动易懂的文风、系统实用的知识点、成为原创计算机图书经典中的经典。周老师凭借一己之力拉高了Java开发者内功水平,把JVM带到了初级面试题环节。 如今周志明老师的开源项目《凤凰架构》电子版已到手,这是一本从架构视角讲解如何构建大型分布式系统的著作,是作者多年架构和研发经验的总结,相信本书必将成为原创计算机图书领域的又一座丰碑。 小编在这里斗胆预测:以后的面试题中关于架构方向的问题答案估计都会在这本书中找到。。。 架构模式的每一次演进都

Waiting_now的博客 810

使用STM32H7点亮RGB屏幕

希望本文能对你有所帮助!RGB屏幕是一种具有红、绿、蓝三种颜色通道的显示设备,通过控制每个通道的亮度,可以显示出丰富多彩的图像和动画。要使用STM32H7控制RGB屏幕,我们需要连接适当的引脚,并编写适当的代码来控制每个颜色通道的亮度。在主循环中,我们先点亮红色通道,然后延迟一段时间,接着点亮绿色通道,再延迟一段时间,最后点亮蓝色通道,并再次延迟。需要注意的是,示例代码中的延迟循环使用了一个简单的计数器实现,但实际应用中可能需要更精确的延迟方式,例如使用定时器中断或操作系统提供的延迟函数。

QoyOle的博客 924

分布式系统架构

1.分布式:通过网络连接的多个组件,通过交换信息协作而形成的系统。 分布式不一定就是不同的组件,同一个组件也可以,关键在于是否通过交换信息的方式进行协作。 不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题。 2.分布式系统架构:运行在多个处理器上的软件架构设计。 3.分布式系统:建立在网络之上支持分布式处理的软件系统,由通信网络互联的多处理机体系结构上执行任务的系统。具有高度的内聚性和透明性。 内聚性:每一个数据库分布节点高度自治,有本地的数据

每天进步一点点,不要逃避 9129

数字电路逻辑与设计实验三 译码器和数据选择器

1. 译码器功能测试 将 74LS139 按图 3.1 接线,按表 3.2 输入电平分别置位,填输出状态表。 2. 译码器转换 将双 2-4 线译码器转换为 3-8 线译码器。 (1)画出转换电路图。 (2)在实验箱上接线并验证设计是否正确。 (3)设计并填表写该 3-8 线译码器功能表,画出输入、输出波形。 3. 数据选择器的测试及应用 (1) 将双 4 选 1 数据选择器 74LS153 参照图 3.2 接线,测试其功能并填写功能表 3.3。 (2)将实验箱脉冲信号源中固定连续脉冲 4 个不

欢迎交流学习心得 3086

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

分布式系统的烦恼------《Designing Data-Intensive Applications》读书笔记11

使用分布式系统与在单机系统中处理问题有很大的区别,分布式系统带来了更大的处理能力和存储容量之后,也带来了很多新的"烦恼"。在这一篇之中,我们将看看分布式系统带给我们新的挑战。 1.故障 当我们在使用单机系统时,它通常以一种相当可预测的方式工作:要么它正常工作,要么不工作。 而当我们在使用分布式系统时,情况就不同了。在分布式系统中,系统的某些部分可能以某种不可预知的方式被破坏,即使系统...

a89677418的博客 157

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

分布式系统思维构建高可靠软件工厂:架构设计与工程实践

在现代软件工程领域,分布式系统设计原则已成为构建复杂、高可用应用架构的基石,其核心价值在于通过容错、一致性、可观测性和弹性伸缩等机制,保障系统在大规模、高并发场景下的稳定运行。这一理念正被延伸至研发效能体系本身,即将整个软件交付流水线——包括CI/CD、自动化测试和基础设施管理——视为一个分布式系统进行设计与优化。通过引入消息队列、工作流引擎和分布式追踪等关键技术,软件工厂能够将孤立的构建、测试任务转化为可协调、可观测的分布式服务,从而系统性解决流水线脆弱性、可观测性黑洞和资源弹性等工程挑战。这种架构模式特

weixin_34248705的博客 274

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

读构建可扩展分布式系统:方法与实践03分布式系统要点

分布式系统要点

lyingSeven的博客 1443

preq:开源可靠性问题检测工具,助力分布式系统稳定性

preq:开源可靠性问题检测工具,助力分布式系统稳定性 项目介绍 preq(发音为“preek”)是一款由社区驱动的免费、开源的可靠性问题检测工具。它能够帮助开发者和运维团队发现最新的bug、配置错误、反模式及已知问题,为工程师、值班支持人员以及SRE(站点可靠性工程师)提供影响评估和社区推荐的缓解措施,同时帮助团队在分布式系统中寻找新的问题。 项目技术分析 preq的核心是利用由问题检测社区创建...

gitblog_00009的博客 508

gRPC 的高级错误处理与重试机制:构建高可用服务的关键

项目建议状态码使用明确区分业务错误与系统错误,避免滥用 UNKNOWN 和 INTERNAL错误详情使用errdetails传递结构化错误信息,提高客户端可解析性客户端重试只对可重试状态码进行重试,结合指数退避和最大次数控制幂等性保障在服务端确保幂等操作的正确性,避免因重试导致数据混乱日志记录服务端记录完整的错误日志,包括状态码、消息和上下文信息测试覆盖编写单元测试模拟各种错误码,验证客户端重试逻辑是否符合预期gRPC 的错误处理和重试机制是构建高可用服务的重要组成部分。

Landcc的博客 1467

SpringCloud快速构建分布式系统的工具集(全家桶)

一、开始使用Spring Cloud实战微服务 1、SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具集(全家桶)。 SpringCloud拥有SpringBoot的特点。 2、关于SpringCloud的版本?   大部分spring软件的版本是以:主版本.次版本.增量版本.里程碑版本的形式命名。 Spring Cloud Angel SR6???   Angel是SpringCloud的一个

如果频繁就私信一下呢 433

rabbitmq消息的可靠传递

rabbitmq消息的可靠传递

Java领域优秀创作者 1666

高级分布式系统-第11讲 现场总线技术

国际电工委员会制定的国际标准IEC61158对现场总线(fieldbus)的定义是: 安装在制造或过程区域的现场装置与控制室内的自动控制装置之间的数字式、串行、多点通信的数据总线。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值