`
ahuaxuan
  • 浏览: 633341 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

工作流引擎在视频网站架构中的应用

阅读更多
如果对工作流引擎没有了解过的同学可以先看前一篇文章:
土制状态机在工作流引擎中的应用
http://ahuaxuan.iteye.com/blog/505124

/**
* @author: ahuaxuan(张荣华)
* @date: 2009-11-23
*/
[size=medium]
       在一个视频网站中,用户从上传一个视频,一直到视频能够正确的被其他用户下载观看,其中经历了一个很长的流程。


下面ahuaxuan来画一张图来表示这个简要的流程,但是实际上不同视频网站由于其架构的不同,可能也会导致流程图中有些环节的增加或者减少。




从上面这张图上,我们可以看到的是一个简要的视频处理流程,而这个流程理论上来将并不是一成不变的,它会随着业务的变更而变更。如何更好的打造出一个视频处理系统应该是每个视频网站都比较关注的话题。


如何能够快速的变更流程,如何灵活的做到这一点,而无需大量的修改代码或者重新开发一个项目来替代老的项目呢?

其实工作流引擎在这个领域更为合适,一个轻量级的工作流引擎即可以满足这样的需求,大部分人对工作流的认识或者经验都停留在一些OA, ERP, PLM系统上,对于无人参与的工作流系统可能并没有相关的经验,关于这个话题,下面ahuaxuan来作一个较为详细的说明(我们将基于工作流引擎的视频处理系统称为VideoProcessSystem)。

在视频处理的流程中,转码和CDN发布尤为重要,而对于转码服务器来说都是一个个群组,而CDN发布则有不同的方式,有推或者拉两种模型,推模型有专门的CDN发布程序来将转码之后的视频主动的发布到各CDN节点上去。而拉模型中,CDN节点将来主动下载需要发布的视频,而在这之前,它首先要得到需要发布的视频的地址。

这意味着我们VideoProcessSystem将会有很多的client, 而且这些client有不同的类型。
上面这句话其实还有另外一层的含义,它可以抽象另外一个模型----》user role.
不同的转码服务器或者发布服务器其实就是VideoProcessSystem的user,而转码服务器则是它们的角色,发布服务器则是另外一种角色。这意味着工作流引擎的用户都是机器,而根据机器工作的类型,我们可以给其分配角色

在一个视频处理的流程中,不同的role的user会在不同处理流程的不同阶段对视频进行处理。而由于工作流引擎的存在,每个步骤都变得相对独立.

举例来说:
1. 当用户上传一个视频之后,其实就在VideoProcessSystem启动了一个视频处理流程,流程启动之后得第一个节点(state, step)应该应该是选择一个转码服务器(可能根据cpu, memory得历史负载选择一个),然后这个被选中得服务器会访问VideoProcessSystem,拿到属于自己的这个节点(state, step)信息,其中包含视频的下载地址。


转码服务器得到地址之后开始下载源视频,下载成功之后校验视频的checksum,正确之后开始转码。

转码成功之后回报给VideoProcessSystem, VideoProcessSystem会为这个视频创建CDN发布的节点(state, step)

............

就这上面短短的三步中,其实就已经包含了很多内容,为什么呢,比如说下载视频,可能发生源视频下载url不正确的错误(404),也可能发生缴验码不正确的情况,或者转码的时候进程崩溃等等,总而言之,有可能发生一堆错误,那么如何处理这些错误就变成了VideoProcessSystem的重中之重,不过得益于我们的工作流引擎,我们在遇到这些错误的时候可以更灵活的处理它们,比如转码服务器遇到checksum的错误,则可以汇报给VideoProcessSystem, VideoProcessSystem会通过流程的定义来决策下一节点(state, step), 比如说可以告诉客户端重新下载,重新下载之后还不正确就通知流程创建着,或者跳转到结束或者挂起节点(state, step)。

我们来看一个基于osworkflow的VideoProcessSystem的流程处理片段:
<action id="13" name="failure">
					<!-- 
					What's the failure reason here?
					1. how to do if the target URL is error
					2. how to do if the checksum is not match
					 -->
					<restrict-to>
						<conditions type="AND">
							<condition type="class">
								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
								<arg name="status">Underway</arg>
							</condition>
						</conditions>
					</restrict-to>
					<results>
						<!-- 
						Pls think the different result here. Why?
						Different reason, different next step!
						 -->
						<result old-status="Finished" status="Queued" step="1" owner="${mostRecentOwner}">
							<conditions type="AND">
								<condition type="beanshell">
									<arg name="script">
									propertySet.getString("checksum error").equals("test")
									</arg>
								</condition>
							</conditions>
							<!-- TODO this post functions is very important because if the checksum is error, 
							the function should reset the task, which is associated with this step, here the step is existed, no problem-->
							<post-functions>
								<function type="beanshell">
									<arg name="script">
                                        System.out.println("reset the task");
                                    </arg>
								</function>
							</post-functions>
						</result>
						<result old-status="Finished" status="Queued" step="1" owner="${mostRecentOwner}">
							<conditions type="AND">
								<condition type="beanshell">
									<arg name="script">
									propertySet.getString("url error").equals("url error")
									</arg>
								</condition>
							</conditions>
							<!-- TODO if the download error error, the step should go, but where to go??  
							End the step and notify the client, or something else-->
							<post-functions>
								<function type="beanshell">
									<arg name="script">
                                        System.out.println("url error, ask the client to get new url, how the step go?????????????????????");
                                    </arg>
								</function>
							</post-functions>
						</result>
						<unconditional-result old-status="Finished" status="Queued" step="1"/>
					</results>
					<post-functions>
						<function type="beanshell">
							<arg name="script">
								System.out.println("if download failure, the logger should log the reason here, log to DB, or somewhere");
                            </arg>
						</function>
					</post-functions>
				</action>


这意味着有了工作流引擎,整个VideoProcessSystem将会变得非常的灵活,我们不需要硬编码整个流程,不需要硬编码某个错误处理。

当然其实我撒谎了,其实上面说道无人参与的视频处理流程这个言论是不正确的,因为我们还有审片,见下图:


在视频网站中, 视频的发布离不开审片,而审片目前都是靠人来完成的。那么也就是说转码之后,其实我们并不是要将视频发布到CDN,而是先将视频交给审片组审查,那么这里通过之后才能发布,不通过则不能发布。虽然ahuaxuan到最后才提出这一点,但是这并不能难倒我们VideoProcessSystem的,我们之需要再定义一个节点(state, step),然后将这个节点的操作者将会是human,审片的xdjm们同意就点击approve, 不同意就reject,然后流程就能按照我们定义的方式转化,比如说reject之后这个流程就跳到一个有害视频处理的节点,approve就产生CDN发布的节点(state, step)

于是,VideoProcessSystem就变成了一个客户端是人机混合的基于工作流引擎的视频处理系统。

在拥有了这么一个灵活的,基于配置的视频处理系统之后,接下来做什么? 当然是继续优化其他的架构。
[/size]
  • 大小: 30.3 KB
  • 大小: 34.6 KB
3
0
分享到:
评论
2 楼 jeftom 2012-06-11  
楼主是土豆的么?
1 楼 化蝶自在飞 2010-05-22  
转换格式应该放最后吧? 太深奥,看不懂 ^

相关推荐

    介绍一款工作流引擎设计思路

    工作流引擎在实现方法上可以基于不同的软件技术架构,引擎本身应该是与具体业务无关的,但又需要考虑各类应用领域,工作流引擎设计的重点应该是有一定差异的,但无论基于什么架构,无论基于哪个领域,有些原理是相通...

    Java四大主流开源工作流引擎分析Shark,osworkflow,jbpm,jflow

    从j2ee应用服务器,到o/rmapping工具,到这个工作流引擎等等。为什么Shark的持久层采用DODS来实现?就是因为他们是一家人。 Jbpm的靠山是jboss。Jbpm3的持久层采用hibernate3来实现,也是因为这个原因吧。Jbpm3的...

    .net工作流开发架构

    流程管理无处不在,企业、政府、学校都离不开规章制度和管理流程,...利用E8.Net工作流引擎软件可以对各种管理流程进行建模、执行、监控和分析,实现流程管理(BPM)的电脑化和自动化;可以二次开发各类业务应用系统。

    工作流程引擎,系统架构设计

    一个应用MIS的系统的架构离不开工作流引擎,具有流程引擎思维的架构人员设计系统的时候就有流程的思维,他区别于过程思维,过程思维开发出来的系统,用户面对的是菜单、模块。而流程思维设计出来的系统就是发起、待...

    C#完整工作流系统源码(vs2005).rar

    本文论述的是一个基于WEB技术的工作流管理系统的设计与实现,提出了一种将工作流技术应用于企业的工作流管理系统的通用架构,阐述了经典petri网调度算法在工作流引擎中的应用与实现,分析并实现了工作流引擎对三种...

    C#完整工作流系统源码(vs2005)

    一个基于WEB技术的工作流管理系统的设计与实现,提出了一种将工作流技术应用于企业的工作流管理系统的通用架构,阐述了经典petri网调度算法在工作流引擎中的应用与实现,分析并实现了工作流引擎对三种常见的流程模型...

    最新工作流引擎Activiti7基础与进阶

    Activiti 是目前使用最为常用的工作流引擎,工作流业务在企业中应用非常广泛,目前企业中多使用Activiti6版本,Activiti7是目前的最新版本。Activiti7不但提高的工作流引擎的效率,提供了新封装的新API,还提供了和...

    Flowable工作流实战课程

    课程分享——Flowable工作流实战课程,完整版视频课程下载。 Flowable是Activiti原班人马开发的一套新的工作流框架,支持了cmmn...让零基础学员通过学习了解Bpmn发展前景及应用范围,通过系统学习能成为工作流架构师!

    利用工作流引擎技术设计应用系统的思路

    有产品化的工作流引擎、有带应用架构的工作流引擎、有工作流二次开发平台、有工作流基础框架等,在工作流的二次开发平台里又有自带编译器的,有专用语法分析的,有依托Visual StudioIDE环境及编程语言的等等。工作流...

    imixs-workflow, 面向业务应用的开源工作流技术.zip

    imixs-workflow, 面向业务应用的开源工作流技术 imixs工作流imixs工作流是一种基于Java企业架构( JEE )的开源工作流引擎。 在imixs工作流项目中,为构建以灵活和健壮的框架为中心的工作流应用。 业务逻辑可以使用...

    JBPM4工作流应用开始指南.rar

    第一篇 jBPM工作流开发基础 1 第1章 工作流基础 2 1.1 工作流概念 2 1.1.1 工作流管理思想之于企业现代化管理 2 1.1.2 工作流技术在企业中的应用 5 1.1.3 如何从一个开发者的角度看工作流技术 6 1.2 工作流管理系统...

    工作流建模及应用介绍.ppt

    培训ppt有100多页,为国内知名企业结合实际业务进行讲解,对于想深入了解工作流开发的朋友有很好的帮助 1、工作流基本原理 1.1背景介绍 1.2基本概念 1.3整体架构 2、详细功能介绍 2.1基本概念 2.2环境...

    ccbpm工作流引擎功能列表说明

    驰骋工作流程引擎简称ccbpm,是驰骋流程引擎与驰骋表单引擎的组合。 Ccbpm有.net版本的ccflow,java版本的jFlow,以及python版本的pFlow. ccbpm既可以独立运行,也可以作为中间件植入到您的开发架构里去,支持集团分...

    《疯狂Workflow讲义:基于Activiti的工作流应用开发》

    第4部分:如何在实际企业应用中使用Activiti,并与其他流行的开源框架进行整合,包括企业应用开发所必需的Web Service、企业服务总线、规则引擎、IoC框架和ORM框架等,除了本书主要的Activiti知识外,这些企业中常用...

    09.大数据工作流引擎Oozie.pptx.pptx

    Oozie由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是用于Hadoop平台的开源的工作流调度引擎,是用来管理Hadoop作业,属于web应用程序,

    SUPERFLOW工作流平台-V6.0核心引擎调度二次开发技术文档

    SuperFlow工作流平台基于Microsoft .Net开发技术和模型驱动架构,是面向业务应用的工作流管理软件开发平台。SuperFlow工作流平台提供数据实体定义工具、表单界面设计工具、工作流定义工具、报表自定义工具、组织机构...

    python课程设计大作业基于Flask开发的Web应用系统框架源码+详细的使用教程.zip

    项目集成了工作流引擎,内置了组织机构权限管理等功能,可以应用于OA、HR、CRM、PM等系统开发。 项目集成了工作流引擎,内置了组织机构权限管理等功能,可以应用于OA、HR、CRM、PM等系统开发。项目集成了工作流引擎...

    基于jbpm与activiti的工作流平台技术架构介绍

    【图一】工作流引擎中心 1.BPMX3的特点 1.是一个开放式、轻量级的开发平台 2.BPMX3多层系统架构 3.基于模板代码生成 4.丰富的报表展示 5.跨数据库的数据访问支持 6.简易的前端使用 7.参照最新的BPMN2标准设计 8....

    慧正工作流系统V6版技术白皮书.pdf

    《慧正工作流系统V6版技术白皮书》主要介绍了慧正工作流系统采用的技术架构、应用场景、产品特点、技术创新、软硬件技术参数等资料,是一份比较详细的文档

Global site tag (gtag.js) - Google Analytics