`

关于“无状态”,从Amazon的工作流框架中获得的思考

阅读更多

这个话题是从我对Amazon云平台的工作流框架AWS Flow Framework的使用研究中想到的,对于一个工作流引擎来说,一个完整工作流的某个阶段完成后,当前阶段的状态必须要被存储下来。

 

Workflow(Decider)来决定任务的执行流程,Activity来执行实际的任务,二者都封装在相应的Worker中执行,但不直接交互,而是通过SWF管理起来。不过,除了SWF的日志,它们都不记录任何当前任务执行状态的信息,即所有的任务执行情况只能从SWF的日志中找到。譬如一个Workflow由Activity1和Activity2组成,在执行完Activity1之后、要执行Activity2之前,Workflow并不知道Activity1已经执行,而是询问SWF,SWF从日志中查询并告知。

 

这整个看似把流程变复杂的办法(被称作Replay),带来了一个好处,避免了在Workflow中记录某个工作流当前执行的状态,而且,当某一步执行遇到了问题,很容易进行某一Activity的重执行和整个Workflow的失败操作

 

这以后,我觉得最容易联想到的是EJB中的stateless bean,它们不包含用户相关的数据,资源需求少,执行速度快,还很容易被池化。当服务提供变成无状态的时候,横向扩展能力就很容易做到,因为不会有状态存储方面带来的瓶颈

 

关于无状态方法:我不知道这样的叫法合不合理,当方法不受到方法外的状态变量影响,输出只取决于输入参数,结果仅通过返回值返回,这样的编程就成了函数式编程。函数式编程带来了很多好处,例如没有外部变量和副作用,支持闭包和高阶函数、支持懒惰优化,和容易使用递归控制流程等等。

 

HTTP是无状态协议,这就是说,HTTP报文不会记录任何前面报文中所携带的当前客户端或者服务端的状态信息,报文简单而且不承载任何业务信息,但是互联网世界是有状态的,于是客户端有了Cookie,服务端有了Session。相较而言,其它有些协议是有状态的,例如DNS,它的报文将承载及其上的一些资源服务器的分布信息等数据,因为这样的协议将要传递的信息的语义规则定义在协议里了

 

另外,关于网站优化方面的一些例子。相较于那些新闻类网站(它们的网站信息展示由少数编辑完成,大部分的东西在不同用户的浏览器上呈现是一致的,这些页面的访问可以获得很高的性能),Web2.0的应用(如各类SNS网站),情况的复杂性显然不可同日而语,当一个页面用户相关时,或者说包含大量用户相关数据时,这样的页面是有状态的,随着用户不同而动态变化的,那么它们的性能优化就会复杂一些。这里容易想到一个思路是抽象出那些变化的数据或者页面片段来,让那些无状态的页面成为片段缓存的主要承载体

 

最后,再回到这个AWS Flow Framework上来,“无状态”给它带来的仅仅是本文开头提到的好处吗?似乎不止,“状态”的存在就意味着状态的同步问题,即状态在Workflow、SWF和Activity之间的一致性问题,而一致性问题往往是伴随着瓶颈产生的。分布式系统中,如果引入了状态的保持、分发和传递,很可能会带来单点业务而产生的问题,例如难以做到去中心化,难以做到节点平等和业务平均分布等等。

 

一个完整的对象,是既需要改变状态的操作,又需要保持状态的属性的,世界亦如此;而做软件,正是改变世界状态这样一件充满意义的事。

 

文章系本人原创,转载请注明出处和作者

  • 大小: 68.5 KB
0
0
分享到:
评论

相关推荐

    SSH框架亚马逊商城项目

    SSH框架亚马逊商城项目完整版,一起交流分享,希望代码对你有帮助

    aws-swf-toolkit:用于 Amazon SWF 上工作流的 Node.js 框架

    用于在 Amazon SWF 上构建工作流的 Node.js 框架 该工具包提供了一组命令行实用程序来与 Amazon Simple Workflow (SWF) 服务进行交互。 它们形成了一个框架,用于在 Javascript 中编写和运行 Amazon SWF 活动和决策...

    mogy:Amazon Simple Workflow 的分布式工作流框架

    Mogy 是一个 Node.js 框架,用于在 Amazon Simple Workflow (SWF) 上构建工作流。 它提供了一个命令行实用程序和约定,用于有效地如何开始? 首先,阅读。 然后,您应该学习,这是工作流执行背后的主要逻辑。 有了...

    跨平台工作流管理系统Toil.zip

    极佳的扩展性,极好的性能体验排错性能极好,支持任意时刻回滚工作流可以静态地声明,但在任何现有的工作中,可以在执行过程中动态地添加新的工作,允许任意复杂的工作流程图。支持数据库和服务:例如,Apache Spark...

    亚马逊分析报告(Amazon)2021.pdf

    亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf ...

    Amazon亚马逊验厂审核中问题点汇总.pdf

    Amazon亚马逊验厂审核中问题点汇总.pdf

    亚马逊(Amazon)称霸电商的秘诀

    亚马逊(Amazon)称霸电商的秘诀,亚马逊(Amazon),作为《财富世界500强》(2012年全球排名206),以网络书店起家的公司,是如何做到霸占美国电子商务市场大约三分之一份额的呢?

    Amazon 亚马逊 博弈比赛 棋

    Amazon 亚马逊 博弈比赛 棋,用来参考还是可以的

    亚马逊Amazon卖家关键词挖掘软件 v4.0.zip

    亚马逊Amazon卖家关键词挖掘软件是从事amazon外贸行业人员的辅助工具,用于亚马逊国际卖家刊登产品时的关键词优化及建议。软件支持amazon的美国,英国,加拿大,德国,西班牙,日本,法国,意大利等国家。完全满足多...

    wms源码java-pegasus:Pegasus工作流管理系统-自动化、恢复和调试科学计算

    使科学家能够以抽象的方式构建工作流,而无需担心底层执行环境的细节或中间件(Condor、Globus、Amazon EC2 等)所需的低级规范的细节。 在此过程中,Pegasus 可以规划和优化工作流,以在复杂的分布式基础架构上高效...

    AWS文档 - 框架和方法.zip

    AWS 架构完善的框架 – 无服务器应用程序详解.pdf AWS 架构完善的框架 – 性能效率支柱.pdf AWS 架构完善的框架 – 卓越运营支柱.pdf AWS 架构完善的框架.pdf AWS 上的 DevOps 简介.pdf AWS 上的开发和测试.pdf AWS ...

    triggerflow:无服务器工作流的基于事件的编排

    得益于Triggerflow完全可编程的触发条件和动作功能,以及结合并链接多个触发器所提供的可扩展性,我们可以编排不同的无服务器工作流抽象,例如DAG(Apache Airflow),状态机(Amazon Step Functions)和工作流如...

    亚马逊s3-api文档.pdf

    亚马逊新接口

    DEWrapperWorkflow:这是一个将EMBL和DKFZ工作流的结果聚合为一个SeqWare工作流的工作流

    有关在由中央启动程序配置和管理的更大数量的工作虚拟机云的上下文中设置此工作流的信息,请从由中央决策程序生成的INI中分配工作,请参阅的文档。 具体来说,我们正在构建PanCancer工作流启动器,使您可以计划工作...

    亚马逊Amazon卖家关键词挖掘软件

    亚马逊Amazon卖家关键词挖掘软件支持amazon的美国,英国,加拿大,德国,西班牙,日本,法国,意大利等国家。完全满足多站点外贸人员需求。

    hadoop 编程框架 cascading

    cascading是在hadoop基础之上的map-reduce编程框架。能够简化hadoop上的分布式编程。目前应用在amazon ec2上。一个非常好的工具。

    亚马逊云计算.pptx

    与Ebay展开直接竞争,获得巨大成功 2002年,推出Amazon Web Service 2003年首次盈利 2005年,成为S&P 500 Index 2006年推出Amazon 云计算 2007年,推出Kindle 2008年,推出Amazon MP3 2005年,推出Amazon Prime 2003...

    完整版Python网络爬虫之Scrapy爬虫框架使用案例教程含源代码共18页.pdf

    Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 Scrapy吸引人的地方在于它是一个框架,任何人都...

    亚马逊工作流程参考标准

    亚马逊工作流程参考标准,如何推广新品,如何打造爆款

    云计算框架

    详细描述云计算的三层框架,saas,paas,iaas及各层的代表产品,软件既服务--IBM lotuslive,平台既服务--Google Application Enginee,基础设施既服务--Amazon web service

Global site tag (gtag.js) - Google Analytics