这个话题是从我对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
分享到:
相关推荐
这个“SSH框架亚马逊商城项目”提供了一个实际应用的案例,可以帮助开发者理解和掌握如何在实际环境中运用这些框架。 Struts2是MVC(模型-视图-控制器)设计模式的一个实现,主要负责处理HTTP请求,控制业务流程,...
用于在 Amazon SWF 上构建工作流的 Node.js 框架 该工具包提供了一组命令行实用程序来与 Amazon Simple Workflow (SWF) 服务进行交互。 它们形成了一个框架,用于在 Javascript 中编写和运行 Amazon SWF 活动和决策...
此外,亚马逊还通过收购和开发新的业务模式,如拥有在线社交电影工作室Amazon Studios和提供翻新产品折扣的Amazon Warehouse Deals,来扩大其业务范围和市场影响力。 亚马逊还注重客户服务体验的优化,这在亚马逊的...
Mogy 是一个 Node.js 框架,用于在 Amazon Simple Workflow (SWF) 上构建工作流。 它提供了一个命令行实用程序和约定,用于有效地如何开始? 首先,阅读。 然后,您应该学习,这是工作流执行背后的主要逻辑。 有了...
".net前端界面框架"则是指专为.NET环境设计的前端框架,如Durandal.js、Aurelia、Blazor等,这些框架能够与.NET后端框架协同工作,提供一套完整的开发解决方案。 ".net 左侧导航"强调了框架在设计时特别考虑了左侧...
极佳的扩展性,极好的性能体验排错性能极好,支持任意时刻回滚工作流可以静态地声明,但在任何现有的工作中,可以在执行过程中动态地添加新的工作,允许任意复杂的工作流程图。支持数据库和服务:例如,Apache Spark...
1. S3对象存储接口文档的中文版本提供了关于亚马逊S3存储的官方技术文档,当前主要版本为2015年8月13日发布的版本。 2. 文档中提到了适用于.NET框架的开发工具包(***SDK),它是用于Amazon Web Services的一个开源C#...
亚马逊S3 API文档是Amazon Simple Storage Service (S3)的官方参考手册,它详细描述了如何使用S3的REST API进行数据的存储和检索。文档中包含了关于如何操作S3的基本概念、使用方法、身份验证以及数据类型等重要信息...
亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf 亚马逊分析报告(Amazon)2021.pdf ...
尽管文本中出现了如“(Amazon)(Amazon)(Amazon)”等重复出现的词组,以及数字序列,但这些信息并没有实际含义或具体的上下文,无法用来生成有关于“Amazon亚马逊验厂审核中问题点汇总”的知识点。OCR产生的文本片段...
亚马逊SP-API(Selling Partner API)是亚马逊提供的一项服务,允许第三方开发者和卖家通过API接口直接与亚马逊平台交互,进行各种操作,如管理库存、处理订单、获取销售报告以及进行广告活动等。在这个主题中,我们...
工作流引擎是一种软件应用程序,用于调度和执行工作流任务中的各个步骤。它能够自动化执行一系列任务,这些任务可以是数据处理、信息传递或者其他需要协调的活动。 本文提出的性能评估工作流程,旨在解决缺乏有效...
针对云平台中的MapReduce工作流调度优化,这是一个至关重要的主题,因为它直接影响到系统的性能、效率和资源利用率。本文档将深入探讨云平台MapReduce工作流调度的原理、挑战以及优化策略。 MapReduce由两个主要...
AWS良好架构框架是亚马逊网络服务(AWS)推出的一套架构设计原则和最佳实践,旨在帮助用户构建稳固、高效的云基础设施。该框架的核心是五大支柱:安全性、可靠性、性能效率、成本优化和卓越操作。可靠性作为其中的...
深度学习是人工智能领域的一个重要分支,它通过模拟人脑神经网络的工作原理,让计算机能够从大量数据中自动学习特征并进行预测或决策。在过去的几年里,深度学习框架的出现极大地推动了这一技术的发展和应用。以下是...
亚马逊S3(Simple Storage Service)是亚马逊网络服务(Amazon Web Services,AWS)提供的一个高度可扩展的对象存储服务,主要用于网络上存储和检索任意大小的数据。本文将根据提供的文件内容,详细解读亚马逊S3接口...
在本文中,我们将深入探讨如何使用 Laravel 框架集成亚马逊支付服务,即Amazon Pay,以便在您的电子商务网站上提供安全、便捷的支付选项。Laravel 是一个流行的PHP框架,以其优雅的语法和强大的功能而受到开发者的...
亚马逊的免费开源jdk,版本Corretto8,支持java8无缝切换,只要你没用到Oracle Jdk 的新功能,没有理由拒绝,重要的事情说三遍,免费!免费!免费!