zoukankan      html  css  js  c++  java
  • 微内核流程引擎(IVR导航)的设计与实现(一)——开发背景

    开发背景

    我们公司是主要从事企业语音方面产品的开发,主要产品比如:调度系统,指挥系统,电话会议系统,呼叫中心系统等。这些系统都有一个共同特点,就是涉及到呼叫,放音,收发按键,会场操作。我们的业务产品都是基于我们的软交换系统之上构建的,软交换系统的应用服务器向外提供这些服务。

     


    产生的问题

     

    我们在开发的过程中就发现一个问题,每个产品在此接口上都会做很多重复的开发,特别是在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的描述。

  • 相关阅读:
    虚拟机vmware下安装Ghost XP——正确的解决方案
    spring结合quartz的定时的2种方式
    Spring ClassPathXmlApplicationContext和FileSystemXmlApplicationContext
    Spring--Quartz 任务调度的配置详解
    Redis并发问题
    Eclipse默认标签TODO,XXX,FIXME和自定义标签
    使用storyboard创建带有navigation的界面的简单方法
    Java高级之线程同步
    XCode中的单元测试:编写测试类和方法(内容意译自苹果官方文档)
    MapReduce 应用:TF-IDF 分布式实现
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959791.html
Copyright © 2011-2022 走看看