欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    面向状态编程模式.pdf

    • 资源ID:69627067       资源大小:648.17KB        全文页数:32页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    面向状态编程模式.pdf

    面向状态编程模式探索 State-Oriented Programming Model for Erlang 系统工程师的困惑 Erlang及函数式编程环境下我们采用什么建模工具进行系统分析设计?OOP?没有对象可以面对。函数可以抽象为对象吗?进程可以抽象为对象吗?当前的系统设计方式:重新回到面向过程步骤的编程模式。函数式编程中很弱的时序概念。工具:UML活动图 时序、不完备、易挥发、具象而非抽象 工具:UML状态图 思路:面向状态编程 Erlang/OTP元素 基本元素 函数 进程 交互方式 函数调用 消息传递 联系 link/monitor 数据 不可更改 令牌传递方式 Erlang元素的SOP抽象 进程 状态机 状态 函数 link 关联 发散的平面与聚焦的线条 OOP是对最终设计物的抽象,采用防御性设计模式,抽象程度和设计边界很难把握。SOP只面对具体工作流程,通过异常处理限定为有限状态机,边界清晰,通透清澈。(谁能告诉我怎么画虚线?)面向对象编程 面向状态编程 面、线、点 如果把系统当作一个平面,SOP设计相当于在画线描图,未触及的地方要留白。OOP则更像是做油画。状态机是系统平面上的线条。状态是构成线条的点。分布并发系统抽象 OOP倾向于把设计对象抽象为单一复杂系统。(系统论)SOP倾向于把设计对象分解为松耦合、分布运算的状态机。(还原论)现实世界是面向并发的分布系统。巨系统通常是由分离而相似的组成元素通过简单叠加、共同作用构成的。我们可以使用简单可计算的元素构建不可计算的复杂系统。反之我们无法从不可计算系统中还原基本元素和初始状态。结论:SOP比OOP更“自然”,更符合本次论坛主题 生命体也是分布式并发系统 复杂的生命体都是由小的生命体:细胞组成的。细胞之间是松耦合的,通过一致的方式进行沟通交互。生命体的组成部分与组成生命体本身可能是大不相同的。细胞通过大量简单叠加规则构建复杂生命体,互相之间有很高的相似性。通过自组织自适应生命体的形态也在生长变化。抽象 vs 具象 OOP是站在观察者角度,通过对实体对象的观察进行归纳抽象。SOP直接作为参与者以具体的执行逻辑去构建、组成这个系统,不需要抽象或者只需要轻度的抽象。OOP建立的是想象中的系统,而系统在构建好之前通常是难以捉摸的,对系统人员的要求很高。SOP表达就是系统某个具体的执行元素。系统是这些元素共同作用的结果。空域与时域 OOP侧重于静态空间建模。SOP侧重于动态时序建模。二者可以结合来进一步细化抽象的颗粒度。状态机可以认为是OO与SO的结合。系统系统对象2对象4对象3系统系统对象1状态2状态3状态4状态2系统系统系统系统SOP的概念 面向状态机进行抽象。面向状态进行编程。状态实体:对系统中实体的抽象,一个状态实体通常包含一个或者多个状态机。状态是某个状态实体在特定情况下的表现形式。状态机是状态实体的活动序列,由一系列状态的实例构成的时间单调序列。状态机呈现的状态集合中的状态是互斥完备的。也就是说一个状态机同时只能呈现一种状态,只能呈现自己状态集合中的有限状态。SOP建模 建模的三种抽象层次:模板:泛化的类。(比如公司)对象:模板经过参数化后成为对象。(比如某某公司)实例:在执行过程中对象的实例化。(比如某某公司的一个执行中的状态实体)SOP中我们把模板一致化,模板抽象这一层可以忽略。对象默认情况下不需要参数化,不过为了分离执行逻辑与数据,通常需要进行参数化。实例化过程是在执行过程中的一个对象的寿命周期。OTP对象间交互的抽象 消息 send,发送消息给某对象 receive,接收发送来的消息 组合成函数 cast,等同send,调用后不管结果。call,发送后等回应,封装回应为函数调用结果。把交互当作数据访问 get,获得数据,只读型访问。set,设置数据,写入型访问。cast,发布命令或者传递事件,等同send。对象内部的访问回调 on_get,外部get调用操作触发。on_set,外部set调用操作触发。on_event,当外部事件传递进来时。状态抽象 简化起见,状态机采用类似Moore状态机模型。输出只与状态有关 省略do action 状态作为状态实体的体现,需要实现对状态实体及状态机的代理操作。get:获取数据 set:设置数据 cast:发送事件消息 entry/entry pointdo/actionexit/exit pointStateUML中标准的状态 entry/entry pointexit/exit pointget/read dataset/write datacast/post eventStateSOP中的标准状态 对象模型 沿用面向对象中对象的定义,加入对状态机的支持,归一化对象访问操作。get:return ok,Value|error,Error set:Value=nil 等同于delete.object可以返回以record/tuple封装形式的闭包函数集。object外部提供xlo接口,内部实现xlo回调。get(Key):Valueset(Key,Value)cast(Reqest)xloget(Key):Valueset(Key,Value)cast(Request)xloon_get(Key):Valueon_set(Key,Value)on_cast(Request)xloxl_objectxloxlo状态:xl_state 每一个状态包含两个回调函数,entry和exit分别在进入状态和离开该状态时调用。entry函数是必须的,而exit函数可以不提供。一个状态的具体实现通常是实现了xl_state socket和xl_object的接口与回调。状态实现通常是动态按需组装的。entry()exit()xl_state状态机:xl_fsm xl_fsm提供了对状态机操作的回调函数。start:从指定的状态开始执行状态机。stop:停止当前状态机运行。get_state:给出状态名称,返回xl_state结构的状态。prestate:状态迁移前调用。poststate:状态迁移后调用。start(StartState)stop()xl_fsmxl_stateOTP中状态机的实现 Erlang/OTP中已经实现了gen_fsm状态机。gen_server的init,call/cast,terminate回调可以简单视同一个状态或者一个状态机,对应entry/exit/get/set/cast。gen_sop实现 基于gen_server实现的状态实体behavior。对外提供get/set/cast接口API。内部需要实现on_get/on_set/on_cast/on_entry/on_exit等回调函数。可以扩展自己的函数。start()start_link()start_fsm()stop_fsm()gen_sopxl_objectxl_statexl_object通用状态实体实现 把状态实体接口函数以closure的形式封装到xl_fsm record中。xl_sop基于gen_server实现,代理xl_object函数操作到状态实体中。start()start_link()start_fsm()stop_fsm()xl_sopxl_objectxl_fsmxl_object状态机的加载过程 entry/spawn processdo/call entryInitializationentry/load and present initial statedo/process eventdo/process commanddo/process access requestState Controlstate transferdo/call exitTerminationexitState Control Command Processorprocess event/commandevent orcommandwait for event/commandexit状态转移引擎 State Control State Enginedo/call get_statestate instantiatedo/call prestatepre-statedo/call entryentry pointnext statedo/call entryexit pointhas exitnext statedo/call poststatepost-statefinal statenext stateinitial stateentry/check statedo/call state exitstate cleanupdo/call poststatepost-staterecover statefinal statehas no exit监控与日志 通用函数库提供日志及记账机制。每个状态、状态机、状态实体都有起止时间及统计信息。一个状态机以时序流转顺序串起所有状态实例。状态实体包含当前运行的状态机实例记录和历史状态机实例记录。状态机可以通过pre_state和post_state函数进行状态流转修饰。状态机通过状态实例序号阈值控制死循环。通过日志数据可以实现状态机的重现和回卷,方便调试和跟踪。可以通过统计数据排查故障状态。粒度控制 在研发层面系统的最小逻辑单元是状态。通过一个框架状态模块可以建立定制的状态集合,进入这个状态集合与离开这个状态集合等同于一个状态。理论上可以通过状态的组合实现任意的粒度控制。在线自组织与自适应 状态机执行过程中可以通过替换状态、调整状态参数,修饰状态流转来动态适应系统需求。某个小小的改动有可能引起所谓的蝴蝶效应,造成输出结果的较大差异。需要通过合适的异常处理模块来保持系统的稳态结构。基于SOP构建的分布式平台实例 系统采用对等分布集群方式部署。基于Erlang/OTP平台构建。采用分布式KV Store持久化分布式数据。基于HTTP协议通过Web Server集群对外部提供服务。通过CNode及Port方式扩展性能敏感模块及接口模块。XLP ClusterRepository ClusterRepositoryOTP NodesEdge ClusterWeb ServerOther Nodes系统启动过程 erl启动启动OTP节点节点启动启动xlp application启动启动xlp supervisor启动启动XLP平台对象平台对象启动并挂载启动并挂载 XLP RepositoryXLN建立本节点建立本节点运行环境并加载运行环境并加载其他业务模块其他业务模块系统状态机集合 PlatformRepositoryRegistrarNode KeeperWeb MachineProcessorsRepository状态机 初始化初始化启动启动riak加入加入riak集群集群启动客户端启动客户端连接离自己最近连接离自己最近的的riak节点节点在数据库中建立在数据库中建立平台初始记录平台初始记录建立本节点初始建立本节点初始记录记录响应并处理数据响应并处理数据请求请求exit是初始节点或者服务节点客户节点初始节点非初始节点Node Keeper 初始化初始化加载执行本节点加载执行本节点状态机状态机接收命令和事件处理事件命令处理事件命令下一个状态机加载完毕事件/命令退出处理完毕

    注意事项

    本文(面向状态编程模式.pdf)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开