微内核流程引擎(IVR导航)的设计与实现(一)——开发背景
来源:互联网 发布:数据标签外在哪里设置 编辑:程序博客网 时间:2024/05/18 01:15
开发背景
我们公司是主要从事企业语音方面产品的开发,主要产品比如:调度系统,指挥系统,电话会议系统,呼叫中心系统等。这些系统都有一个共同特点,就是涉及到呼叫,放音,收发按键,会场操作。我们的业务产品都是基于我们的软交换系统之上构建的,软交换系统的应用服务器向外提供这些服务。
产生的问题
我们在开发的过程中就发现一个问题,每个产品在此接口上都会做很多重复的开发,特别是在IVR处理上面。
IVR (Interactive Voice Response)即交互式语音应答,可以提高呼叫服务的质量并节省费用。IVR是一种功能强大的电话自动服务系统。
由于我们的系统重新架构,正在开发软交换API接口,所以我们试图解决这个问题。
为了方便上层对底层接口的调用,减少重复开发,产品能够针对用户需求迅速更改,我们提出了事务流的概念。即上层程序设定一个事务流,比如:相对用户9092发起呼叫,用户应答后对用户放音,让用户输入密码,密码验证成功加入制定会场。上层程序设定好这样的事务流后,发送给下层进行处理。下层处理完毕后,回复处理结果。
事务流的概念最终并没有实现,一是我们对事务流的异常处理分析不足;二是采用事务流的概念扩展性,可维护性不是很好。
后来我们在事务流的基础上引进了SOA的概念,即将底层的接口封装为一系列松散耦合的服务,在上层通过对服务的编排实现流程编辑的功能。但是实施SOA困难非常大,一是SOA没有大规模的应用,文档,经验都比较少,实施风险较大;二是实施SOA要工具的支持,需要投资。这样的话我们宁可重复开发。
最终这个流程编辑的功能并没有完成,但是我们还是在API中实现了一个简单的流程编辑,这个流程编辑是通过硬编码来实现的,和我们的愿望相差较大。
新的思路
后来看了一家平台软件公司的介绍,他们是做企业应用平台的。企业应用中很多的一点就是工作流。他们的平台就是集成了一款开源的工作流引擎:JBPM。第一次接触JBPM,感觉很多思路可以借鉴。后来在网上搜资料的时候搜到几篇研究微内核流程引擎的文章:
揭秘jbpm流程引擎内核设计思想及构架
微内核过程引擎的设计思路和构架
微内核工作流引擎体系架构与部分解决方案参考
这几篇文章是我设计流程引擎的核心基础。看完之后最终决定自己设计一个微内核流程引擎。
使用开源还是自己开发
决定动手开发前,有两种方式,一是使用开源产品,比如JBPM;二是自己动手开发。当时的考虑是:
1、JBPM是用java开发,我们公司的业务产品目前基本上都是c,和java交互不便。
2、JBPM是针对企业工作流设计的,工作流和IVR导航一个重要的区别是,IVR导航对时效性要求很高。要求系统能够及时响应。
3、我不是JAVA出身,当时对java还有些畏难心理。
所以,最终决定自己用C++开发流程引擎。
如果是现在的话,即便是决定自己开发,一会好好研究一下JBPM的源码的。
借鉴的其他思路
1、数据驱动(DD)。在脚本中XML定义流程,程序启动后将流程读入程序,然后供上层程序调用。如果流程更改,这直接修改脚本即可。
2、BPEL。Business Process Execution Language 的缩写,意为业务过程执行语言 ,是一种基于XML的,用来描写业务过程的编程语言。我的脚步语言参考BPEL的描述。
- 微内核流程引擎(IVR导航)的设计与实现(一)——开发背景
- 微内核流程引擎(IVR导航)的设计与实现(一)——开发背景
- 微内核流程引擎(IVR导航)的设计与实现——总体思路
- 微内核流程引擎(IVR导航)的设计与实现(三)——脚本的设计
- 微内核流程引擎(IVR导航)的设计与实现(二)——功能描述
- 微内核流程引擎(IVR导航)的设计与实现 系列
- 微内核流程引擎(IVR导航)的设计与实现(一)——在一次尝试后的优化
- 基于微内核的流程引擎设计
- 第四章 工作流引擎的设计与实现(一)
- 基于模型设计的FPGA开发与实现:基本流程(一)概述
- 基于模型设计的FPGA开发与实现:基本流程(一)之入门小例子(一):跑马灯
- 《Linux内核设计与实现》读书笔记(一)-内核简介
- Linux内核设计与实现 (一) 内核简介
- 《Linux内核设计与实现》读书笔记(一)-内核简介
- 《Linux内核设计与实现》读书笔记(一)-内核简介
- 《Linux内核设计与实现》读书笔记(一)-内核简介
- 《Linux内核设计与实现》读书笔记(一)-内核简介
- 《Linux内核设计与实现》读书笔记(一)-内核简介
- 『MySQL』多表之间字段的匹配
- UVa 10453 - Make Palindrome 字符串dp
- 应用jBPM4解决中国特色的流程需求
- eclipse建立Flex项目之Blazeds篇1(测试成功完整版)
- Creating Dynamic Web Project using Maven in Eclipse
- 微内核流程引擎(IVR导航)的设计与实现(一)——开发背景
- poj1218——THE DRUNK JAILER
- 第17章 容器深入研究
- NSInvalidUnarchiveOperationException
- 构建自己的C/C++插件开发框架(一)——初步设想
- A Multiplication Game
- Mysql基本命令
- 单元测试(3)--参数化测试方法
- ARM命名规则