`

erlang架构原理整理

阅读更多
架构就是一种思考世界的方式。
 
我们必需得把我们看待世界的方式---->
 
实用的手册+一组流程------->
 
它们可以告诉我们如何使用我们看待世界的特定的方式来构造一个特定的系统。
 
 
软件架构通过下面的一些方面来描述
 
1、问题领域(我们架构是为解决什么类型的问题而设计的?)   
     
     软件的架构不是通用,而是为了解决某一类特定问题而设计的。
 
     问题描述:
  • 系统能够应对大量的并发活动
  • 能够在指定的时间内完成任务(如果在指定时间内没有完成,则【终止|重试指定的次数后终止】,编写这样的系统会管理数很多计时器)
  • 可以跨计算机分布运行
  • 系统能够控制硬件
  • 软件系统比代码量比较大
  • 有复杂功能(市场的压力迫使系统的开发和部署有很多复杂的特性,很多特性之间的关系还没有被很好理解时,就必须要上线部署,在系统运行期间,这些特性很可能需要以多种方式 进行修改、维护和扩展,功能和软件的升级必须“线上运行”,也就是说,不能让系统停下来)
  • 可以不间断运行多年
  • 满足苛刻的质量和可靠性的要求
  • 必须提供容错功能,包括硬件失灵和软件错误
 
 
2、哲学(软件构造背后的原理是什么,它的核心思想是什么?,如何才能够构建出软件在错误的时候具有合理行为的可容错的软件系统)
 
  • 列出目标------>与目标对应的任务,并按任务复杂度进行排序
  • 尽力去完成复杂度高的任务
  • 如果出现的问题比较麻烦时,暂时放一下,先去解决别的任务,别和任务处理完时,在处理前面的问题
  • 强有力的任务封装隔离错误的蔓延。
  • 每个任务必须经过严格的测试,才可以集成到主程序中
  • 构建可容错软件系统的核心就是故障隔离。
     
     为了解决故障隔离的问题,我们选择了进程,因为进程之间是互相不受影响的
     
     我们用语言实现进程而不是用宿主机提供的原因
  • 可以一致的运行在不同的操作系统上
  • 基于语言的进程比传统的操作系统进程要轻量的很多,而且很高效
  • 我们的系统对操作系统要求很少。          
     应用程序是通过大量互相通信的并行进程构建起来的,我们采用这种方式的原因
  • 它提供了一个架构基础设施
    我们可以用一组互相通信的进程组织起我们的系统,通过枚举出系统中所有进程,并定义出进程间消息传递的通道,我们就可以很方便把系统划分成良好的子部件,并可以对这些子部件进行单独实现和测试,这种方法学也是SDL系统设计方法学的最高境界。
  • 巨大的潜在效率
    设计成以许多独立的并行进程来实现的系统,可以很方便地实现在多处理器上,或者运行在分布式的处理器网络上,注意,这种效率的提升是潜在的,只有当应用程序可以被分解成许多真正独立的任务时,才能产生实效,如果任务之间有很强的数据依赖,这种提升往往是不可能的

  • 故障隔离(本质进程隔离
    没有共享数据的并发进程提供了一种强大的故障隔离的方法,一个并发进程的软件错误不会影响到系统中的其他运行的进程。
    每一项独立的活动都在一个完全独立的进程中来执行,这些进程没有共享数据进程之间只通过消息传递{发送即祈祷}来方式进行通信,消息传递的方式是异步每个消息都是通过拷贝,这就限制了软件错误造成的影响。
    故障即停:当一个处理器出错时,应当立即停止,而不是继续运行。
    故障曝光性质:当一个处理器发生故障时,系统中的其他处理器应该得到通知,故障原因必须交代清楚
    持久存储性质:处理器的存储器应当分为持久存储器(处理器器崩掉时,数据依然存在),和临存储器。
     
    面向并发语言(COPL)
     
  • 基于现实世界的编程
    我们常常想编写一些对现实世界建模或都和其交互的程序,用COPL编写这样的程序相当容易,它只我下面的在个活动
    (1)、从真实的世界中的活动中识别出真正的并发活动
    (2)、识别了并发活动之间的所有消息通道
    (3)、写下能够在不同的消息通道中流通的所有消息
    然后我们来编写程序,程序的结构要严格保持一问题的结构一致,则每一个真实世界的活动都严格映射到我们编程语言的一个并发进程上,如果从问题到程序的映射比例为1:1,我们就说程序与问题是同构的。

    在分析问题时,我们还必须为我们的模型选择一个合适的粒度,比如,我们在编写一个即时通信信息时,我们使用每个用户一个进程的方式,而不是将用户身上的每一个原子对就到一个进程。

  • COPL的特征
    (1)、应该支持进程,每一个进程应该可以看作是一个自包含的虚拟机器
    (2)、运行在同一台机器上的各个进程应该被隔离。一个进程中的故障不能对其它进程产生影响 。
    (3)、每个进程必须用一个唯一的,不可仿造的标识符来标识,我们称之为进程PID,
    (4)、进程之间没有共享状态。只通过消息来传递数据,只知道PID,就可以发送消息
    (5)、消息传递被认为是不可靠的,无传输保障的。
    (6)、一个进程可以检测另一个进程的故障,并可以知道发生故障的原因(但是故障的原因不一定是正确的,如我们可能收到已经死亡的通知消息,然而事实上是发生了一个网络错误)

     
    系统需求
     并发性  : 支持并发性,创建或销毁一个并发进程的计算开销一定要非常小,即使创建大量的并发进程,也不应该带来空难
     错误封装:一个进程中发生的错误一定不能破坏系统中其他的进程
     故障检测: 一定可以检测到本地异常和远程异常
     故障识别:我们要能够识别出异常产生的原因
     代码升级:要有某种机制来替换执行中的代码,而不必停下系统
     持久存储:我们需要把数据按某种策略存储下来,以便恢复一个已经崩溃的系统
 
     语言要求
     封装原语:语言必须有多种手段来限制错误的蔓延,应当可以把一个进程隔离起来,免得他破坏其它进程。
     并发性   :语言必须提供和种轻量化的机制来创建并行进程,以及在进程间发送消息,进程的上下文切换,消息传递必须非常高效。并行进程还必须以一种合理的方式来分享CPU时                    间,以便当前使用的CPU进程不会垄断CPU,而其他的进程处于“准备好”状态而得不到处理
     错误检测原语:语言应该允许一个进程监控另一个进程,从而检测被监控进程是否因任何原因而终止
     位置透明:如果我们知道了一个进程Pid,我们就应该可以向它发送消息,无论它是本地还是远程的
     动态代码升级:应该可以动态替换运行时系统的代码。注意因为许多进程可能同时按照同一份代码在运行,所以我们需要一种机制,来允许现有的进程按照“老”的代码在运行, 而同时“新”进程按照修改后的代码运行。
 
      
     
3、软件架构指南(我们如何来规划一个系统)
 
     我们需要一个明确的架构指南。系统由一个团队来编写和维护,所以对所有参与人员来说,理解系统的架构和它的潜在哲学是很重要的。
     软件构指南,主要包括编程规则集、例子程序和培训资料等
 
4、预先定义好的部件
 
     以“从一组预先定义的部件中选择”的方式进行设计远比“从头设计 ”的方式要来的 容易
 
     库需求
     基本的程序库提供:
     持久存储:由它存储故障恢复信息
     设备驱动程序:它允许我们升级运行系统中的代码
     运行基础:它解决系统的启动、停止和错误报告问题
 
     应用程序库
     OTP库是我们提供了用来构建可容错系统的一个完整的设计模式库
   
 
5、描述方式 (如何描述某一部件的接口,如果描述两个部件之间的通信协议,如何描述系统中静态和动态的结构?)
 
6、配置方式
     
     我们如何启动,停止和配置我们的系统?我们可以在系统运行过程中对系统进行升级。
 
     
分享到:
评论

相关推荐

    中国移动----笔试试题

    中国移动的笔试试题涵盖了许多移动通信领域的基础知识,以下是根据题目内容整理的相关知识点: 1. **自由空间传播损耗**:自由空间...这些知识点涵盖了无线通信的基础原理、网络架构、信道管理、信号处理等多个方面。

    《数据结构》(02331)基础概念

    内容概要:本文档《数据结构》(02331)第一章主要介绍数据结构的基础概念,涵盖数据与数据元素的定义及其特性,详细阐述了数据结构的三大要素:逻辑结构、存储结构和数据运算。逻辑结构分为线性结构(如线性表、栈、队列)、树形结构(涉及根节点、父节点、子节点等术语)和其他结构。存储结构对比了顺序存储和链式存储的特点,包括访问方式、插入删除操作的时间复杂度以及空间分配方式,并介绍了索引存储和散列存储的概念。最后讲解了抽象数据类型(ADT)的定义及其组成部分,并探讨了算法分析中的时间复杂度计算方法。 适合人群:计算机相关专业学生或初学者,对数据结构有一定兴趣并希望系统学习其基础知识的人群。 使用场景及目标:①理解数据结构的基本概念,掌握逻辑结构和存储结构的区别与联系;②熟悉不同存储方式的特点及应用场景;③学会分析简单算法的时间复杂度,为后续深入学习打下坚实基础。 阅读建议:本章节内容较为理论化,建议结合实际案例进行理解,尤其是对于逻辑结构和存储结构的理解要深入到具体的应用场景中,同时可以尝试编写一些简单的程序来加深对抽象数据类型的认识。

    【工业自动化】施耐德M580 PLC系统架构详解:存储结构、硬件配置与冗余设计

    内容概要:本文详细介绍了施耐德M580系列PLC的存储结构、系统硬件架构、上电写入程序及CPU冗余特性。在存储结构方面,涵盖拓扑寻址、Device DDT远程寻址以及寄存器寻址三种方式,详细解释了不同类型的寻址方法及其应用场景。系统硬件架构部分,阐述了最小系统的构建要素,包括CPU、机架和模块的选择与配置,并介绍了常见的系统拓扑结构,如简单的机架间拓扑和远程子站以太网菊花链等。上电写入程序环节,说明了通过USB和以太网两种接口进行程序下载的具体步骤,特别是针对初次下载时IP地址的设置方法。最后,CPU冗余部分重点描述了热备功能的实现机制,包括IP通讯地址配置和热备拓扑结构。 适合人群:从事工业自动化领域工作的技术人员,特别是对PLC编程及系统集成有一定了解的工程师。 使用场景及目标:①帮助工程师理解施耐德M580系列PLC的寻址机制,以便更好地进行模块配置和编程;②指导工程师完成最小系统的搭建,优化系统拓扑结构的设计;③提供详细的上电写入程序指南,确保程序下载顺利进行;④解释CPU冗余的实现方式,提高系统的稳定性和可靠性。 其他说明:文中还涉及一些特殊模块的功能介绍,如定时器事件和Modbus串口通讯模块,这些内容有助于用户深入了解M580系列PLC的高级应用。此外,附录部分提供了远程子站和热备冗余系统的实物图片,便于用户直观理解相关概念。

    某型自动垂直提升仓储系统方案论证及关键零部件的设计.zip

    某型自动垂直提升仓储系统方案论证及关键零部件的设计.zip

    2135D3F1EFA99CB590678658F575DB23.pdf#page=1&view=fitH

    2135D3F1EFA99CB590678658F575DB23.pdf#page=1&view=fitH

    agentransack文本搜索软件

    可以搜索文本内的内容,指定目录,指定文件格式,匹配大小写等

    Windows 平台 Android Studio 下载与安装指南.zip

    Windows 平台 Android Studio 下载与安装指南.zip

    Android Studio Meerkat 2024.3.1 Patch 1(android-studio-2024.3.1.14-windows-zip.zip.002)

    Android Studio Meerkat 2024.3.1 Patch 1(android-studio-2024.3.1.14-windows.zip)适用于Windows系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/90557033 part2: https://download.csdn.net/download/weixin_43800734/90557035

    4-3-台区智能融合终端功能模块技术规范(试行).pdf

    国网台区终端最新规范

    4-13-台区智能融合终端软件检测规范(试行).pdf

    国网台区终端最新规范

    【锂电池剩余寿命预测】Transformer-GRU锂电池剩余寿命预测(Matlab完整源码和数据)

    1.【锂电池剩余寿命预测】Transformer-GRU锂电池剩余寿命预测(Matlab完整源码和数据) 2.数据集:NASA数据集,已经处理好,B0005电池训练、B0006测试; 3.环境准备:Matlab2023b,可读性强; 4.模型描述:Transformer-GRU在各种各样的问题上表现非常出色,现在被广泛使用。 5.领域描述:近年来,随着锂离子电池的能量密度、功率密度逐渐提升,其安全性能与剩余使用寿命预测变得愈发重要。本代码实现了Transformer-GRU在该领域的应用。 6.作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。

    基于android的家庭收纳App的设计与实现.zip

    Android项目原生java语言课程设计,包含LW+ppt

    大学生入门前端-五子棋vue项目

    大学生入门前端-五子棋vue项目

    二手车分析完整项目,包含源代码和数据集,包含:XGBoost 模型,训练模型代码,数据集包含 10,000 条二手车记录的数据集,涵盖车辆品牌、型号、年份、里程数、发动机缸数、价格等

    这是一个完整的端到端解决方案,用于分析和预测阿联酋(UAE)地区的二手车价格。数据集包含 10,000 条二手车信息,覆盖了迪拜、阿布扎比和沙迦等城市,并提供了精确的地理位置数据。此外,项目还包括一个基于 Dash 构建的 Web 应用程序代码和一个训练好的 XGBoost 模型,帮助用户探索区域市场趋势、预测车价以及可视化地理空间洞察。 数据集内容 项目文件以压缩 ZIP 归档形式提供,包含以下内容: 数据文件: data/uae_used_cars_10k.csv:包含 10,000 条二手车记录的数据集,涵盖车辆品牌、型号、年份、里程数、发动机缸数、价格、变速箱类型、燃料类型、颜色、描述以及销售地点(如迪拜、阿布扎比、沙迦)。 模型文件: models/stacking_model.pkl:训练好的 XGBoost 模型,用于预测二手车价格。 models/scaler.pkl:用于数据预处理的缩放器。 models.py:模型相关功能的实现。 train_model.py:训练模型的脚本。 Web 应用程序文件: app.py:Dash 应用程序的主文件。 callback

    《基于YOLOv8的船舶航行违规并线预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    《基于YOLOv8的工业布匹瑕疵分类系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    CodeCount.exe

    此为代码审查工具 可查 文件数,字节数,总行数,代码行数,注释行数,空白行数,注释率等

    商业数据分析与Python实现:企业破产概率及抽样技术解析(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文档涵盖了一项关于企业破产概率的详细分析任务,分为书面回答和Python代码实现两大部分。第一部分涉及对业务类型和破产状态的边际分布、条件分布及相对风险的计算,并绘制了相应的二维条形图。第二部分利用Python进行了数据处理和可视化,包括计算比值比、识别抽样技术类型、分析鱼类数据集以及探讨辛普森悖论。此外,还提供了针对鱼类和树木数据的统计分析方法。 适合人群:适用于有一定数学和编程基础的学习者,尤其是对统计学、数据分析感兴趣的大学生或研究人员。 使用场景及目标:①帮助学生掌握统计学概念如边际分布、条件分布、相对风险和比值比的实际应用;②教授如何用Python进行数据清洗、分析和可视化;③提高对不同类型抽样技术和潜在偏见的理解。 其他说明:文档不仅包含了理论知识讲解,还有具体的代码实例供读者参考实践。同时提醒读者在完成作业时需要注意提交格式的要求。

    MCP快速入门实战,详细的实战教程

    MCP快速入门实战,详细的实战教程

    python,playwright基础

    python,playwright基础

Global site tag (gtag.js) - Google Analytics