关于流程:低代码流程引擎如何通过流程加签功能优化企业审批流程

在流程审批过程中,流程加签通常是为了证实某个事项曾经失去了确认或批准,或者为了证实某个文件曾经通过了相干人员的审核或批准,或者除以后固定审批人外还须要额定的审批意见,须要长期增加其余审批人参加审批。通过流程加签配置,能够确保审批流程可能适应各种简单状况,进步审批效率和准确性,同时也可能增强审批过程中的监督和危险管制。 示例演示: 配置阐明1、启动加签性能:首先,须要激活加签选项,并抉择须要进行加签的具体审批节点。 2、填写加签信息(加签形式、加签人员、加签理由) 3、流程加签页面 ①:开启加签开关,抉择须要加签的节点开启加签。②:加签地位,前加签:在以后审批节点审批前加签;后加签则相同。③:加签审批后果是否失效,开启后加签人审批同意与否和失常审批流程一样,影响流程走向。④:加签按钮设置,指在加签审批页面的按钮设置,默认是批准和回绝。最初保留流程并公布,从新走流程新数据即可查看成果。 在线demo:https://frame.bctools.cn/开源框架:https://gitee.com/software-minister/jvs

February 26, 2024 · 1 min · jiezi

关于流程:流程进化让代码协同更高效

当咱们在我的项目协同过程中,把要做的需要确认分明后,接下来就要思考如何将这些用户故事,转换为可运行的代码程序,这时候就轮到开发者们登上舞台开始表演了。 云效代码治理Codeup就是这样一款服务于开发者的产品。在Codeup上,你能够收费托管代码、进行代码评审和继续集成,并通过数据图表跟踪工作进展。目前已有百万开发者和数十万企业正在应用Codeup托管本人的代码。 在去年,云效Codeup针对代码平安进行了全面的建设,从存储平安、访问控制,到代码加密、备份,在危险事先、事中、预先提供了全面的平安爱护能力。 除了为大家保存好贵重的代码资产外,咱们还心愿可能帮忙大家更高效的工作。因而,往年咱们在合作流程方面进行了一系列的改良,让大家可能更高效地互动,更专一地工作,进而实现更早地上班。 说到合作,作为开发者,大家可能更喜爱独自一人静静坐在电脑背后写代码的感觉,那是武林高手闭关修炼的感觉。然而,古代公司的我的项目个别不可能一个人100%就能全副做完,再厉害的武林高手也须要队友。 随着队友人数的减少,人和人之间沟通的老本成平方增长,这时候沟通的有效性就变得至关重要了。怎么沟通最无效呢, “ 神级程序员 ” 林纳斯答复了这个问题,翻译过去就是“多说无益,放码过去”。在咱们的日常工作中,这种沟通流动被称为代码评审。 如何让代码评审更简略代码评审能够会聚众人之智慧,实现1+1>2的成果。没人评审的代码,其水准仅是编码者的水准,而被团队评审的代码,其水准能够超过团队的最高水准。 代码评审是个好货色,但实际操作起来并不容易。接下来,咱们从评审发起人、评审人和企业管理者的视角,去理解一下他们遇到的懊恼,以及通过云效Codeup如何帮忙他们解决问题。 1.评审发起人的懊恼 首先,对于需要开发同学来说:在创立评审时,他不得不频繁地切出本地IDE,关上浏览器登录代码服务的网页端,填写一堆评审阐明和参数,能力实现创立。 接着,评审建好了,但因为管理员设置了各种合并的条件卡点,他首先得弄清楚哪些条件还没满足,而后能力一一去解决卡点。否则代码就无奈上线,万一误了迭代周期,可不好和产品经理交代。 在解决反馈问题时,因为评审回复是个异步过程,没人晓得评审人什么时候有空来评审,特地是几个人独特评审的状况下,评论扩散,在动静里一条一条的找甚是麻烦,效率真不太高。 应用云效代码治理Codeup之后,他当初能够这样做: 无需频繁地切换 IDE,在本地编辑器里间接推送代码,就能够在网页端主动创立一个代码评审,本地和云端链接更加晦涩; 即便在网页上创立评审时,也反对分支、题目、评审人参数主动填充和形容模板倡议,创立评审更轻松; 在推动评审的过程中,当初他无需思考太多,在页面能够清晰地看到聚合的卡点条件和实时的达成状况,像打怪降级一样解决掉这些卡点,就能够实现合并,推动评审更加专一。 在解决评审人反馈的时候,他无需在扩散的工夫线动静中寻找蛛丝马迹,只须要关注待解决的事项面板,一眼可见全副待办,解决效率大幅晋升。 2.评审人的懊恼另外,咱们的评审人段誉同学也很不容易: 在专一工作时,他常常不断收到评审申请,打断了手上的工作,临时搁置吧,挤压的评审一多,又不知从何看起; 在执行评审时,发现问题根本靠教训,肉眼一行一行看代码还是可能脱漏危险,肩负审查的责任,压力山大; 而且,评审交换经常重复,音讯告诉不及时,沟通效率起不来; 应用云效Codeup之后: 在安顿评审工夫方面,当初,他开启了云效的评审耗时预估能力,能够直观地查看每个评审的预估耗时。再依据预估见缝插针地合理安排碎片工夫,利用午饭前的10min间隙也能够实现一个评审,执行力更强了。 在代码评审的过程中,基于云效开箱即用的自动化查看能力,辅助人工评审,好像为代码上了双重保险,让查看更疾速,更精密,大幅升高问题脱漏到线上的危险。 在针对问题的探讨交换阶段,评审音讯能够通过邮件钉钉等形式快捷触达,音讯感知更及时,沟通合作更顺畅。 3.管理者的懊恼咱们的管理者也有一些懊恼。咱们来看看他的一份聊天记录: 有一天,产品经理在群里焦急地督促:咱们性能什么时候能力上线啊,再不上可要被他人领先了! 而开发人员这样答复:性能写完了,然而还在等评审,而且有一些技术部要求的查看还没跑过,须要优化下代码。 可是业务第一啊,在残暴的市场上有时候速度就是生死牌,这时候他决定站进去保业务,放弃掉一些品质。 在面对迭代速度和工程质量的抉择上,其实他心里也很纠结。业务必须跑起来,然而如果不论开发的品质,只会给业务埋下一个一个随时会引爆的暗雷。 业务开发既要快又要好,应用云效代码治理之后,当初,他的团队能够依据业务性质自行决定 “扫描的规定” 和 “卡点的规定”,让代码更快地流动起来。 在扫的规定上,咱们晓得,规定并不是越多越好。过多的规定只会给开发团队带来累赘,因而抉择适合的规定很重要。云效精选了一批规定内置到了产品中,开箱即用,主动触发,包含通过阿里团体多年实际经验总结的阿里巴巴Java开发规约、敏感信息检测、源码破绽检测等,将咱们的教训分享给大家。 除了扫描的规定外,他还能够自定义流程卡点的规定。例如对一些必须高速迭代,对工程质量有肯定容纳度的我的项目,能够走轻量评审,最低老本做自动化查看,不设置严格卡点,便于必要时疾速合并代码。而对于迭代速度绝对稳固,且对编码程度有高要求的我的项目,可设置严格的评审卡点,确保代码品质。 应用云效之后,当初他能够在高速迭代的业务下同时兼顾代码品质,从一部分适合的业务开始,逐渐搭建起评审标准和流程,而后过渡到更多团队。 云效的自动化评审能力,均匀每月为每个企业主动发现200多个无效问题。以人工发现一个问题大略须要10min算,累计每月为企业节俭33小时的专家人力,让他们能够把工夫投入到产生更大价值的事件中去。 保持代码评审就像保持静止健身一样,不要高估它的短期价值,也不要低估它的长期价值。当初就开始吧,云效将帮助你把评审这件事变得更简略。 分支合作如何能力更顺畅除了评审代码外,开发者们在分支合作上的互动也十分频繁。 我已经遇到过一些团队,开发者提交代码没有流程,生产分支常常抵触,甚至呈现强行笼罩了他人代码的状况,搞的大家差点友尽。 开发者之间分支合作是否顺畅,决定着他们是否能成为敌人。小团队尚且如此,合作人数达到十几或者几十人呢,多人共同开发一个模块,这时候就须要约定一些大家都恪守的合作规定了。 对此,业界总结了不少协同的教训,常见的有三种:Git-Flow、Github-Flow、Gitlab-Flow,每种模式有本人适宜的场景: 例如大型项目交付周期长,参加人数多,须要防止不同环境下的代码相互烦扰,这种状况下抉择简单的Git-Flow可能更残缺地撑持; 而对于以DevOps疾速迭代的团队来说,在开发得足够快的时候,Master 和 Develop 两个分支可能常常都是一样的,而开发过程也会因为过多的分支而变得复杂。如果不小心切换错了工作分支,回滚又是另一件麻烦事了。这种状况下抉择github或gitlab的模式会更加轻量一些。 但无论 Github 模式还是 Gitlab 模式,依然须要创立新的仓库或者长期的分支,这些都将成为资产负债。那么有没有一种形式,不须要创立库,甚至连长期分支都不必创立呢?这样治理老本最低,仓库也更洁净。 ...

January 5, 2023 · 1 min · jiezi

关于流程:流程编排如此简单通用流程编排组件JDEasyFlow介绍

作者:李玉亮 JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,实用于服务编排、工作流、审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-easyflow),目前在部门的外部业务零碎和科技输入零碎中广泛应用,其余部门也有应用。 它的特点是简略、灵便、易扩大,开发人员个别30分钟可入门上手,半天可把握其原理。它分为一个外围模块和若干扩大模块,模块之间松耦合,开发应用时可按需抉择、疾速集成、渐进式利用,同时反对JSON内置标准和BPMN标准。它的实现原理也有其特色,前面有介绍。 反对的场景性能节点流转类型反对程序流转、条件流转、循环流转等。 节点性能类型反对脚本节点、用户节点和音讯节点。 • 脚本节点:节点执行时运行一段代码脚本 • 用户节点:依据用户的操作指令触发节点执行 • 音讯节点:接管音讯后触发节点执行 节点串并类型反对串行执行、并行执行、串并组合执行等。 流程交互场景反对单次交互一次执行多节点、屡次交互一次执行一节点、屡次交互一次执行多节点等。 子流程场景JDEasyFlow反对子流程的场景,可将把简单的流程节点拆分为子流程,便于业务逻辑形象。 审批流程场景JDEasyFlow提供了流程工作审批的能力;罕用的审批、撤销、驳回、会签、加签等性能都可反对;内置了简略的动静表单。既反对从页面发动和操作流程工作,也反对API的形式,京东OA审批零碎也有对接。 性能架构整体性能架构JDEasyFlow的性能架构如下图,功能模块之间松耦合, 开发时可按需抉择、疾速集成、渐进式利用。最简略的应用形式为只在业务利用端引入jar包应用流程引擎。如果须要流程可视化性能,可集成BPMN标准模块,如果还须要流程实例长久化、流程定义长久化等更丰盛性能,则能够集成其余相干模块。 流程引擎模块JDEasyFlow的外围模块,此模块提供了基于JSON格局的JDEasyFlow标准进行流程编排的能力,其余模块均基于该模块扩大,相当于流程执行的发动机、CPU。该功能模块为独立组件,无数据库依赖,利用中引入jar包便可应用。 BPMN标准模块提供了基于BPMN标准进行流程定义和可视化的能力,流程可视化基于[bpmn-js](https://bpmn.io/),其本质为提供了将BPMN格局流程定义转换为JDEasyFlow格局的能力。该模块为独立组件,仅依赖流程引擎模块,无数据库和服务依赖,利用中引入jar包便可应用。 目前可反对罕用的BPMN元素: • 工作:脚本工作、用户工作、音讯工作 • 事件:开始事件、完结事件、音讯接管事件 • 网关:排他网关、并行网关、容纳网关 流程定义和实例治理模块流程定义模块反对流程定义的中心化、版本化治理,流程实例模块反对流程实例的长久化和生命周期治理。该性能依赖数据库,有服务端和ERP治理端。 工作/审批模块反对工作生成、任务分配等性能,罕用的审批、撤销、驳回、会签、加签等性能都可反对。该性能依赖数据库,有服务端和ERP治理端。 零碎架构整体零碎架构JDEasyFlow的残缺零碎架构如下,次要有三个端:业务利用端、流程服务端、流程治理端,三个端可部署在单体利用中,也可离开部署。 中间件依赖· 关系型数据库(如Mysql) · 缓存(如Redis或R2M) · 服务通信框架(如Java API调用或Http调用或JSF调用) 数据库数据模型比较简单清晰,见下图: 性能阐明· 如果仅是服务编排场景,则流程的执行仅依赖内存和CPU,并且是在流程客户端执行,性能上依赖于客户端服务器的性能,一般笔记本实测1秒可执行一个流程申请的1w+个节点,1秒可执行1万+次含1个节点的流程申请 · 如果须要流程状态治理和流程长久化性能,流程引擎在执行时会到流程服务端查问和保留流程实例和流程节点的状态,性能上次要依赖于数据库的查问和插入效率 · 对于流程工作审批性能,流程的工作审批流转是在服务端执行,一方面取决于流程服务端的计算性能,另一方面同样取决于数据库的查问和插入效率 可伸缩性阐明· 流程引擎属于无状态,可随利用实例线性伸缩 · 流程服务端利用实例反对线性扩大 · 流程数据库可通过分库分表的形式反对大数据量的增长 实际倡议在具体实际中,倡议部署对立的流程核心(见下图),对流程定义对立治理。各零碎的利用只需集成流程客户端jar包进行流程节点开发和流程调用便可。如果零碎只应用工作审批的性能,则只须要通过API和音讯与流程核心交互便可。 应用示例流程引擎应用示例在源码的test目录下有quickstart测试用例(easyflow\easyflow-flow\src\test\java\com\jd\easyflow\flow\quickstart\QuickStartTest.java),可间接运行或调试以理解应用形式和运行原理。具体实际步骤如下: 1、代码中引入easyflow-flow jar包,以maven为例: <dependency>        <groupId>com.jd.easyflow</groupId>        <artifactId>easyflow-flow</artifactId>        <version>{替换为最新版本}</version></dependency>2、编写流程定义文件,以node001->node002→node003的执行程序为例: {"id": "quickstart_001", "name": "Quick Start 001","nodes": [  {"id": "node001","name": "Node001","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart001Node01Action()"},"start": true,"post": {"to": "node002"}},  {"id": "node002","name": "Node002","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart002Node01Action()"},"post": {"to": "node003"}},  {"id": "node003","name": "Node003","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart003Node01Action()"}}]}其中QuickStart001Node01Action等为java节点动作类。残缺的流程定义配置项可见: https://github.com/JDEasyFlow/jd-easyflow/wiki/Flow-engine-usage (公网) ...

November 25, 2022 · 1 min · jiezi

关于流程:基于蓝鲸流程服务实现发布管理

作者:王浩 背景在 PingCode 我的项目启动之初,咱们采纳的是通过 Jenkins 来进行的公布治理,实现了下载代码、代码编译、部署等过程的自动化。因为 PingCode 采纳的是微服务架构,在 Jenkins 上每个服务都会对应一条流水线,每个服务都能够独自部署,当开发有部署需要时,通过 Worktile 提交申请单,运维人员这边手动触发线上环境的部署。当服务数量不多,并且部署频率不高时,运维人员还是能应酬过去的。然而当服务数量越来越多,部署频率越来越高后,就导致运维人员须要破费大量工夫来解决要部署的利用,每次公布的时候,为了可能跟踪每个申请单的状态,运维人员须要在 Worktile 部署申请单和 Jenkins 之间频繁切换,既消耗了大量工夫,又容易呈现谬误。在这种状况下,咱们迫切需要构建一套部署申请和流程控制系统,首先开发人员提交申请,而后流转到运维人员,运维人员部署实现后,再次流转到开发人员进行确认,如果部署失败,能够再次流转到运维人员,再次执行部署,反复之前的流程,这样的话,运维人员就不须要记住每个服务的部署状态,也不须要再间接告诉相应开发人员,整个过程流程化,主动解决各个环节,会极大进步工作效率。凑巧这个时候,咱们在调研运维平台,当在钻研蓝鲸时,发现它有一个流程服务的利用,看介绍,和咱们的需要很符合,于是决定通过它来实现咱们的流程治理。 实现梳理需要首先,须要先梳理咱们本人的公布场景。 流程服务外围性能和内部服务交互钻研发现,蓝鲸流程服务能够通过调用蓝鲸作业平台的执行计划或是调用内部 API 来和其它零碎交互,在咱们这个场景中,一方面要和 Jenkins 交互,触发流水线,另外一方面是要和 Worktile 交互,发送音讯到相应群组。 审批性能流程节点中反对审批等性能,这样的话,一般开发人员提交申请后,流转到利用负责人进行审批,审批通过后,流转到运维人员这边,运维人员审批通过后,触发 Jenkins 流水线进行部署。 逻辑判断在流程中,会有很多时候须要用到逻辑判断,比方 RC 部署胜利和失败的后续不同操作,胜利后,会持续部署线上,失败后,则再次流转动 RC 部署环节。 流程全景图有了上边这些元素后,就能够开始设计流程了,以下是咱们团队应用的流程的全景图,看着很简单,是因为为了实现部署失败回到初始阶段重新部署等这些性能,减少了很多判断的逻辑。 最初日常工作中会遇到很多重复性的工作,咱们团队会将其梳理,并做成相应的流程,或是自动化工具,帮忙咱们提高效率,能够抽出更多的工夫,对系统进行优化,从而使咱们的服务更加稳固高效。

November 9, 2022 · 1 min · jiezi

关于流程:流程引擎的架构设计

1 什么是流程引擎流程引擎是一个底层撑持平台,是为提供流程解决而开发设计的。流程引擎和流程利用,以及应用程序的关系如下图所示。 常见的撑持场景有:Workflow、BPM、流程编排等。本次分享,次要从BPM流程引擎切入,介绍流程引擎的架构设计办法。 1.1 什么是流程简略来说,流程就是一系列流动的组合。比方,用于企业办公的OA零碎中,就存在大量的申请审批类的流程。在生产制造业,有大量的从销售端的订单,到生产制作,再到签收回款的生产销售流程。在机器学习畛域,有亚马逊AWS Sagemaker的大数据处理、机器学习的利用。综上,流程是一个概念,在和具体实现联合时,就产生了不同的流程产品,如DevOps、Spring Data Stream等。 在流程实现方面,次要能够分为2种实现形式,一种是用代码实现,比方:用代码实现一个加班申请,那么就要本人对接SSO进行单点登录,通过接口拿到发起人和审批人的信息,同时保留表单数据。另一种形式是应用流程引擎来实现,流程引擎对接利用场景所需数据,如加班申请,流程引擎对接SSO、OU、审批人配置、权限等,实现这样一个流程,只须要关怀流程配置、流程节点和流程表单即可,流程流转以及流程的数据处理,都通过流程引擎来实现。 流程引擎能够疾速落地流程实现,这也是流程引擎存在的价值。 1.2 什么是引擎一般而言,引擎是一个程序或一套零碎的反对局部。常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等。引擎是脱离具体业务场景的某一类业务场景的高度形象和封装。 比方,某OA公司,封装了一套审批用的workflow,施行人员只须要配置流程和表单即可交付我的项目。再比方,美国某公司做了一个AI引擎做NBA(Next Best Action)举荐,封装了举荐畛域的罕用算法,在不同的场景主动抉择和组合多种算法,进行智能举荐。 1.3 流程设计器流程设计器是流程和引擎的连贯方,用户通过流程设计器,将某种layout和rule固化成某种流程,而后通过数据和数据上下文,应用流程引擎主动依照某种固化的流程进行执行。 我将目前见到的流程设计器的实践根底,分为以下三类:1,自定义系;2,UML中的流动图系;3,BPMN系。 1.3.1 自定义系 用于Sagemaker等场景的AWS Step Function(自定义流程节点) 1.3.2 UML Activity Diagram Flowportal BPM的流程设计器 1.3.3 BPMN系 activiti的流程设计器 炎黄盈动的流程设计器 题外话:炎黄盈动的流程设计器,和processon中的流程设计器界面简直一样,因为实质上是一家的。 2 流程引擎的利用2.1 Workflow工作流治理联盟(Workflow Management Coalition,WfMC)作为工作流治理的标准化组织而成立。 WfMC对工作流给出定义为:工作流是指一类可能齐全主动执行的经营过程,依据一系列过程规定,将文档、信息或工作在不同的执行者之间进行传递与执行。 在workflow中,流程引擎次要用于撑持流程审批和数据流转,利用场景十分宽泛。 国外产品(开源或商用)通常需要和操作比较简单,不会有国内的需要那么简单。国内的产品,经验了泛滥客户的锻炼,性能目前都比拟弱小。 一般而言,workflow应用场景最多的是OA产品。在OA办公中,蕴含了企业办公中的大量元素,这些元素足够造成特定的产品,比方门户零碎、挪动办公。在OA的我的项目落地过程中,联合行业、业务侧重点又能够造成行业解决方案和专题计划。 以下是某OA公司产品和解决方案。 2.2 BPM(Business Process Management)Workflow次要是解决审批和数据流转,而BPM次要是解决端到端、信息孤岛等问题而存在的。大多数用BPM产品的客户,都是在BPM根底上进行零碎搭建,比方在BPM下面搭建OA、CRM、HR等零碎。 BPM的应用场景,比Workflow更宽泛,BPM产品中蕴含大量的和第三方零碎交互的组件和自定义SQL、代码组件。比方,BPM零碎中的文件触发器,能够在海关等交互场景下,通过监控FTP服务器中的文件,主动触发流程实例;能够通过定时器Timer,主动每日执行数据同步,并通过Mail节点将同步后果告诉到相干经营成员等。 BPM的利用,能够依照执行前、执行中和执行起初划分。 2.3 流程编排流程编排是脱离流程业务畛域的更高一层形象,应用方能够通过流程编排零碎,联合本人的业务场景进行业务定制。比方,能够将相干业务代码,封装成function,而后通过云厂商平台的FAAS平台,将不同业务的function进行关联和调度,从而实现某项工作。 3 流程引擎的架构设计鉴于一些敌人可能没有应用和接触过流程引擎,先介绍流程引擎的组成单元,再介绍基于某个BPM产品的我的项目是如何进行开发的。咱们通过BPM我的项目开发,对流程引擎的作用有个初步的意识。 3.1 BPM流程引擎的组成单元组织、角色、用户、成员的组织架构托管;流程资源文件的配置、校验、存储和执行,对不同的流程节点,流程引擎主动联合配置、数据处理其对应的业务逻辑,流程数据主动解决;表单配置、数据绑定,表单数据的依据流程配置主动解决;通用的数据接口;3.1.1 组织架构的设计 3.1.2 流程设计器 ...

October 14, 2022 · 2 min · jiezi

关于流程:2022爱分析-流程挖掘厂商全景报告

流程开掘是指通过采集和剖析企业IT零碎的事件日志数据,以可视化流程图还原企业理论产生的业务流程,进而评估流程运行状况、诊断流程运行问题、发现流程改良机会,实现流程的继续优化和监控。 流程开掘综合了数据挖掘、机器学习、业务流程治理等多种技术,可通过数据采集、荡涤企业各类IT零碎中记录业务流程的事件日志数据,可视化还原企业实在产生的业务流程,利用各类算法模型进行流程剖析,从流程治理视角发现实在流程与设定流程的差别与瓶颈,再进行流程革新、流程仿真与流程优化,并对流程运行状况进行监控,一直发现新的流程瓶颈和改良机会,实现流程继续优化的闭环。 8月24日,爱剖析正式公布《2022爱剖析·流程开掘厂商全景报告》,爱剖析综合思考企业关注度、行业落地停顿等因素,对流程开掘市场进行了深度剖析,帮忙企业更清晰地理解流程开掘的市场状况,同时遴选出可能服务企业发展流程开掘利用落地的优质厂商,助力推动企业数字化转型。 评估厂商:(按简称首字拼音排序)弘玑Cyclone、九科信息、如影科技、容智信息、望繁信科技 一、 钻研范畴定义 流程开掘是指通过采集和剖析企业IT零碎的事件日志数据,以可视化流程图还原企业理论产生的业务流程,进而评估流程运行状况、诊断流程运行问题、发现流程改良机会,实现流程的继续优化和监控。 企业业务流程精细化经营需要的增长与数据根底的欠缺,独特推动流程开掘市场快速增长。需要方面,随着业务的倒退,企业在经营过程中逐渐建设了一系列简单的业务流程,并建设了泛滥业务零碎,这些跨组织、跨零碎的业务流程在理论运行过程中产生了大量简单且不通明的流程变体,理论流程难以观测。面对更加强烈的市场竞争,企业迫切需要对业务流程进行无效的精细化治理,以达成晋升经营效率、改善客户体验等指标。 与此同时,国内中大型企业的信息化、数字化建设逐步完善和深入,以ERP为代表的业务零碎建设实现了业务的数据化,以数据仓库、数据中台为代表的数据基础设施建设进一步实现了业务数据的治理和资产化,使得基于数据挖掘伎俩对企业业务流程进行精细化治理具备了根底条件。 图 1: 流程开掘的外围价值 在这样的背景下,流程开掘应运而生。流程开掘综合了数据挖掘、机器学习、业务流程治理等多种技术,可通过数据采集、荡涤企业各类IT零碎中记录业务流程的事件日志数据,可视化还原企业实在产生的业务流程,利用各类算法模型进行流程剖析,从流程治理视角发现实在流程与设定流程的差别与瓶颈,再进行流程革新、流程仿真与流程优化,并对流程运行状况进行监控,一直发现新的流程瓶颈和改良机会,实现流程继续优化的闭环。目前,流程开掘市场的倒退尚处于晚期。从需要侧来看,曾经进行流程开掘利用的甲方企业多为业务流程简单、数据基础设施较为欠缺的中大型企业,例如中国移动、国家电网、华润集团、腾讯、百度、美的团体,典型利用场景包含财务、供应链、客户体验治理、OA审批等。本报告通过对流程开掘市场的定义和代表厂商的评估,为企业的决策层、业务部门与IT部门负责人进行流程开掘厂商选型提供参考。 厂商入选规范本次入选报告的厂商需同时合乎以下条件:厂商的产品服务满足各市场定义的厂商能力要求;厂商至多服务过1家付费客户(参考第3章市场定义局部); 厂商全景地图爱剖析基于对甲方企业和典型厂商的调研以及桌面钻研,遴选出在流程开掘市场中具备成熟解决方案和落地能力的入选厂商。 三、市场定义与厂商评估 爱剖析对流程开掘市场定义如下。同时,针对参加此次报告的局部代表厂商,爱剖析撰写了厂商能力评估。更多厂商评估详情请复制下方链接,获取完整版PDF报告。https://ifenxi.com/research/c... 流程开掘 定义: 流程开掘是指通过采集和剖析企业IT零碎的事件日志数据,以可视化流程图还原企业理论产生的业务流程,进而评估流程运行状况、诊断流程运行问题、发现流程改良机会,实现流程的继续优化和监控。 终端用户:企业业务部门、IT部门和决策层 外围需要: 随着业务和组织的倒退,以及信息化、数字化建设的推动,中大型企业逐步造成了诸多简单、长链条且跨组织、跨零碎的业务流程。流程的复杂性、数据的割裂和不透明性,给企业的流程治理带来了诸多挑战。与此同时,企业又亟需通过对流程的无效治理和优化晋升经营效率和敏捷性,保障流程合规,并改善客户体验。企业对流程开掘的具体需要如下:流程可视化,对流程的理论运行状态和细节进行全局的理解和掌控。企业的业务流程多而简单,在理论执行过程中会产生大量的反复、断点等流程变体,造成流程低效或者不合规,且流程的可见性较差。企业须要通过流程数据生成可视化的流程图来主观还原理论流程,实现对流程的全局洞察。流程剖析,评估流程运行状况、诊断流程运行问题。在流程可视化的根底上,企业须要对流程运行状况进行剖析,评估流程运行的合理性并进行问题诊断。依据业务指标,通过要害指标剖析,评估流程运行的效率,发现流程低效的瓶颈和改良空间;查看流程执行的合规性等。流程优化,实现业务指标。针对流程运行中存在的问题,企业须要参考流程最佳实际,制订流程改良计划并进行流程仿真验证,最终通过流程批改或重构、流程自动化等形式,实现流程优化,最终实现经营效率晋升、合规、客户体验改善等指标。流程监控,实现流程继续优化的闭环。企业对流程进行重构、减速后,须要对流程运行状况进行监控,评估流程优化的成果,继续获取新的流程瓶颈和改良机会,实现流程优化的闭环。厂商能力要求:厂商须要可能提供成熟的流程开掘产品,并具备流程开掘服务教训,具体包含以下能力:具备较欠缺的事件日志数据采集能力。因为企业外部IT零碎较多并且流程简单,流程开掘产品须要具备数据接入模块,反对多种数据接入协定,反对与企业ERP、CRM、OA等零碎的数据对接,买通洽购流、领取流、销售流、审批流等流程零碎,从而在流程开掘平台中实现数据的集成,并具备数据荡涤能力。流程引擎具备较强的数据高并发解决能力。针对简单流程场景对应的大量(数亿行级别)事件日志数据,可能反对数据实时/准实时的查问和剖析,满足流程剖析和流程监控的性能要求。领有成熟的流程开掘算法模型,具备流程可视化还原能力。厂商能基于自研流程开掘的算法模型,疾速还原造成合乎企业业务需要的动静柱状、饼状、组合图表与整体流程图。具备流程剖析和优化能力。流程开掘产品须要反对将业务数据与流程关联,依据需要配置KPI体系,联合产品积攒的流程参考规范,评估企业流程运行效率,辨认流程问题;反对通过流程仿真、集成流程优化工具(如RPA)和流程优化征询能力,帮忙企业实现流程的继续优化。产品易于部署。领有性能残缺、成熟的产品组件,反对私有云、本地化部署等模式,从而让企业疾速利用。保障服务质量。要求厂商可能深刻理解企业的业务需要、业务流程并疾速响应,提前预警交付过程的各类问题并及时解决,无效建设整体服务质量保证体系。入选规范:厂商的产品服务满足市场定义的厂商能力要求;厂商至多服务过1家付费客户。代表厂商:上海弘玑信息技术有限公司(以下简称“弘玑Cyclone”)成立于2015年,专一于提供端到端的软件自动化平台和数字化转型解决方案,可能为用户主动实现跨行业、跨组织的数字化转型。弘玑Cyclone总部位于上海,目前已在国内外24个城市设有分公司和办事处,并在美国硅谷设立了研发核心。九科信息技术(深圳)有限公司(以下简称“九科信息”)作为国企、央企数字化转型专家,率先推出了当先的超级自动化平台,帮忙企业疾速进行数智化转型。九科信息构建了业内当先、平安自主可控、高效智能的企业数字化、智慧化转型“数字技术底座”解决方案,助力企业提速、降本、增效,推动数字化转型过程。北京如影随形科技有限公司(以下简称“如影科技”)成立于2021年,是一家专一于服务能源行业、离散制作行业To B类销售、交付场景的流程开掘解决方案服务商,其开创团队由飞书、钉钉、京东、美团等背景的团队成员独特组成,具备大型企业流程开掘我的项目的落地施行教训。上海容智信息技术有限公司(以下简称“容智信息”)成立于2016年,是国内最早一批研发流程开掘和RPA产品的厂商之一,目前产品笼罩流程开掘+RPA+AI三大畛域。容智信息作为领有智能自动化产品矩阵的数字生产力服务畛域的领导先驱,致力于为企业和机构提供最全面、业余、好用的数字生产力解决方案。上海望繁信科技有限公司(以下简称“望繁信科技”)成立于2019年,是一家专一于大数据流程开掘畛域的科技公司,致力于通过流程开掘赋予企业自我征询的能力,使企业流程治理变得简略高效,其开创团队是寰球最早一批从事流程开掘畛域的人员,团队成员来自UiPath、IBM、SAP、Oracle等知名企业,均有多年资深的流程开掘钻研及实战服务教训。

August 25, 2022 · 1 min · jiezi

关于流程:Mac项目流程管理工具OmniPlan-Pro-4

OmniPlan Pro 4 for Mac是利用在Mac上的最好用的我的项目流程管理工具,以拖放反对为特点,对您日常工作想法做记录,帮忙咱们创立合乎逻辑的我的项目打算治理,OmniPlan 4 Mac版全新设计,拖放反对更加简略,但却更加先进弱小,它还能被用来优化资源、精简估算疾速共享或增加工作。 性能介绍 工作视图:增加组、工作和里程碑,同时在工作合成中定义重要的详细信息,而后观赏 OmniPlan 如何将我的项目的工夫线转变成丑陋的甘特图。 智能安顿:只需点击两次,OmniPlan 就能实时剖析和安顿工作,最大限度地提高效率,同时还会思考您的资源调配及优先级设定。 过滤:暗藏不须要的我的项目详情,让您专一于眼下的工作。 多重基线:对安顿进行快照,而后将其与我的项目进度比照,从而确保我的项目停顿无误。 宰割工作:将当前任务宰割并将余下的局部调配到未来实现。

August 17, 2022 · 1 min · jiezi

关于流程:项目中工作流部署详细解析Spring中部署Activiti流程定义的三种姿势

业务文档为了部署流程,须要包装在一个业务文档中 一个业务文档是Activiti引擎部署的单元一个业务文档相当与一个压缩文件,它蕴含: BPMN2.0流程工作表单规定其余任意类型的文件业务文档是蕴含命名资源的容器当一个业务文档被部署,它将会主动扫描以.bpmn20.xml或者.bpmn作为扩展名的BPMN文件.每个那样的文件都将会被解析并且可能会蕴含多个流程定义 业务归档中的Java类将不可能增加到类门路下为了可能让流程运行,必须把存在于业务归档程中的流程定义应用的所有自定义的类(例如:Java服务工作或者实现事件的监听器)放在 [activiti引擎的类门路] 下编程式部署通过一个压缩文件(反对Zip和Bar)部署业务文档也能够通过一个独立资源(例如bpmn,xml等)构建部署 String barFileName = "path/to/process-one.bar";ZipInputStream inputStream = new ZipInputStream(new FileInputStream(barFileName));repositoryService.createDeployment() .name("process-one.bar") .addZipInputStream(inputStream) .deploy();通过Activiti Explorer控制台部署Activiti web控制台容许你通过web界面的用户接口上传一个bar格局的压缩文件(或者一个bpmn20.xml格局的文件).抉择Management 标签和点击Deployment: 内部资源流程定义保留在Activiti所反对的数据库中当应用服务工作,执行监听器从Activiti配置文件中配置的Spring beans时,流程定义可能援用这些委托类.这些类或者Spring配置文件对于所有流程引擎中可能执行的流程定义必须是可用的 Java类当流程实例被启动的时候,在流程中被应用的所有自定义类应该存在流程引擎的类门路下: 服务工作中: JavaDelegates事件监听器工作监听器在部署业务文档时,这些类不用都存在于类门路下.当应用Ant部署一个新的业务文档时,意味着你的委托类不用存在类门路下当应用示例设置增加自定义类: 应该增加蕴含自定义类的jar包到activiti-explorer控制台activiti-rest的webapp lib文件夹中不要疏忽蕴含你自定义类的依赖关系还能够将你自定义的依赖增加到你的Tomcat容器的装置目录中的${tomcat.home}/lib 流程中应用Spring beans当表达式或者脚本应用Spring beans时,这些beans对于引擎执行流程定义时必须是可用的如果要构建自定义的web利用并且依照Spring集成在利用上下文配置流程引擎.要记住,如果在应用Activiti rest web利用,那么也应该更新Activiti rest web利用的上下文.能够把在activiti-rest/lib/activiti-cfg.jar文件中的activiti.cfg.xml替换成的Spring上下文配置的activiti-context.xml文件 创立独立利用能够将Activiti rest web利用退出到web利用之中,只须要配置一个 ProcessEngine,从而不必确保所有的流程引擎的所有委托类在类门路上面并且是否应用正确的spring配置 流程定义的版本BPMN中并没有版本的概念,而在Activiti中,流程定义的版本会在部署时创立,在部署的时候,流程定义被存储到Activiti应用的数据库之前,Activiti将会主动给流程定义调配一个版本号业务文档中每一个的流程定义,都会通过下列部署执行初始化属性key,version,name和id: XML文件中流程定义(流程模型)的id属性被当做是流程定义的key属性XML文件中的流程模型的name属性被当做是流程定义的name 属性.如果该name属性没有指定,那么id属性被当作是name属性带有特定key的流程定义在第一次部署的时候,将会主动调配版本号为1,对于之后部署雷同key的流程定义时候,这次部署的版本号将会设置为比以后最大的版本号大1的值.该key属性被用来区别不同的流程定义流程定义中的id属性被设置为 {processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个惟一的数字被增加, 用于确保在集群环境中缓存的流程定义的唯一性 <definitions id="myDefinitions" ><process id="myProcess" name="My important process" >...当部署了这个流程定义之后,数据库中的流程定义如下: idkeynameversionmyProcess:1:676myProcessMy important process1假如部署用一个流程的最新版本号(扭转用户工作),然而流程定义的id放弃不变.流程定义表将蕴含以下列表信息:idkeynameversionmyProcess:1:676myProcessMy important process1myProcess:2:870myProcessMy important process2当runtimeService.startProcessInstanceByKey("myProcess") 办法被调用时,它将会应用流程定义版本号为2的, 因为这是最新版本的流程定义.能够说每次流程定义创立流程实例时,都会默认应用最新版本的流程定义 创立第二个流程,在Activiti中,定义并且部署它,该流程定义会增加到流程定义表中: <definitions id="myNewDefinitions" ><process id="myNewProcess" name="My important process" > ...表构造如下所示:idkeynameversionmyProcess:1:676myProcessMy important process1myProcess:2:870myProcessMy important process2myNewProcess:1:1033myNewProcessMy important process1留神: 新流程的key与咱们的第一个流程是不同的,只管流程定义的名称name是雷同的(当然,名称name也能够是不雷同的),Activiti仅仅只思考id属性判断流程. 因而,新的流程定义部署的版本号为1 ...

May 31, 2021 · 1 min · jiezi

Online开发初体验JeecgBoot-在线设计流程

Online开发——初体验(在线设计流程) 01 在线设计流程02 在线设计流程和表单对接03 表单业务申请 演示在线设计流程 演示在线设计流程与表单对接 演示业务OA申请

July 16, 2019 · 1 min · jiezi

谈谈接入各种第三方推送的技术方案和坑点

在移动互联网时代,为了运营好一个APP,消息推送是一个优质廉价的渠道。消息推送的使用场景简单来说,可以包括运营类的消息推送,如活动推广期间的推送等,还包括通知类的消息推送,如社交场景中的新消息提醒等。对于APP来说,消息推送能够起到内容告知、提高日活,甚至召回用户的作用。那么如何接入第三方推送平台呢?本篇文章中,网易云信资深研发工程师将和大家聊聊接入各种第三方推送平台的技术方案,分享接入推送平台的一些实用经验。 如何接入第三方推送1、 推送的一般流程推送是一种服务器主动push消息到设备端的行为,因此依赖于设备端和服务器的长连接。整体的架构和流程如下: 具体如下:1) 设备和推送服务器建立长连接2) 设备会根据某些规则生成或从推送服务器获取到一个DeviceToken,推送服务器可以根据DeviceToken定位到具体的设备3) 设备会上报DeviceToken到应用服务器(由应用自己完成)4) 应用服务器根据需要调用推送的服务端接口发起推送5) 推送服务器收到推送请求,根据请求中的DeviceToken定位到具体的设备,下发推送通知6) 设备收到推送消息,可以进行通知栏弹窗或者其他行为2、 IOS苹果官方提供了APNS推送,有很高的推送送达率。早先的APNS推送提供了一套基于TCP协议的接口,但是该接口使用方式比较复杂,稍有不慎就会导致推送失败,但调用方还误以为推送成功。后来苹果又提供了一套新的基于HTTP2协议的接口,新接口的一个好处是可以追踪到每个推送请求是被APNS服务器拒绝了还是成功了,再也不用去猜请求到底是被苹果服务器给丢了还是接受了。3、 安卓谷歌官方最早提供了GCM推送,后来又推出了FCM推送来代替GCM,但由于国内的环境不适合使用,因此各个手机厂商又相继推出了各自的推送,推送的原理都是类似的,都是依赖于设备和推送服务器的长连接,但是厂商推送的优势在于这样的长连接可以和自己的手机系统绑定到一起,从而可以不同应用共享同一条长连接,节省了心跳的流量消耗,并且这样的系统级长连接可以不用担心应用被杀导致的应用内长连接断连导致消息推送不可达。目前已经推出厂商推送的包括小米、华为、魅族、OPPO等,FCM也可以算安装了谷歌服务的设备的系统级推送。不同于IOS,安卓阵营的推送服务器接口都是HTTPS接口,并且通过SecretKey的方式来进行安全校验。 一点经验1、 DeviceToken的管理我们知道DeviceToken标识了一台具体的设备,但是推送服务本身是不知道应用本身的账号体系的,因此同一个APP,假设注销了A账号,改用B账号登录,此时DeviceToken一般来说是没有变化的,此时应用服务器需要去标识A账号的该设备属于注销状态,不然一条针对A账号的推送消息就会被B账号收到。2、 应用被卸载的情况应用被卸载的时候(这时候登录的A账号),应用本身感知不到,此时针对A账号的该设备的推送还是会发出去,推送服务器收到推送消息,找不到对应的设备,此时没有问题,只是会消耗一些资源。假设此时设备上的应用又重新安装了,然后登录了另一个账号B,假设DeviceToken没有变化,此时针对A账号的推送将会被B账号收到。上面这种情况出现的前提条件是DeviceToken没有发生变化,测试发现华为推送存在这个问题(经过询问华为推送技术支持,2018年3月之后的设备不存在该问题),其他推送没有。为了解决这个问题,服务器必须自己管理DeviceToken-用户账号的映射关系,并在发现有DeviceToken冲突的情况下去把老的账号设置为注销状态。3、 IM场景下推送时机问题IM场景下,应用服务器有自己长连接服务,此时第三方推送服务的作用是利用第三方厂商推送的系统级长连接来提高消息推送的送达率。首先对于IOS端,应用无法常驻后台,我们会在应用切换前后台的时候通过IM长连接发送一个标记位,服务器会在设备离线或者处于后台的情况下触发APNS推送,从而减少设备在前台情况下APNS推送的流量消耗。而对于安卓端,服务器会在设备处于离线的情况下触发第三方推送,否则会走IM长连接下发通知,当设备处于后台但还活着的时候,会在收到消息之后主动弹窗以便提醒用户有新消息。对于安卓端还有一个场景是这样的,安卓端在后台的某个时刻进程死了,此时过来一条需要推送的消息,服务器发现设备处于离线状态,尝试调用第三方推送(可能有也可能没有)。过了一会进程自己活回来了,重新连接到了IM服务器,拿到了未读消息,此时一般的逻辑下,进程会主动弹窗告知有消息到达,造成设备端的通知栏有两条推送。为了解决这个问题,需要IM服务器在设备重连的时候下发未读消息是否需要弹窗的信息。 以上就是网易云信对于第三方推送平台技术方案的介绍和经验分享。想要阅读更多技术干货文章,欢迎关注网易云信博客。了解网易云信,来自网易核心架构的通信与视频云服务。__网易云信(NeteaseYunXin)是集网易18年IM以及音视频技术打造的PaaS服务产品,来自网易核心技术架构的通信与视频云服务,稳定易用且功能全面,致力于提供全球领先的技术能力和场景化解决方案。开发者通过集成客户端SDK和云端OPEN API,即可快速实现包含IM、音视频通话、直播、点播、互动白板、短信等功能。

June 28, 2019 · 1 min · jiezi

基于Azkaban的任务定时调度实践

本文由云+社区发表作者:maxluo一、Azkaban介绍Azkaban是LinkedIn开源的任务调度框架,类似于JavaEE中的JBPM和Activiti工作流框架。Azkaban功能和特点:1,任务的依赖处理。2,任务监控,失败告警。3,任务流的可视化。4,任务权限管理。常见的任务调度框架有Apache Oozie、LinkedIn Azkaban、Apache Airflow、Alibaba Zeus,由于Azkaban具有轻量可插拔、友好的WebUI、SLA告警、完善的权限控制、易于二次开发等优点,也得到了广泛应用。下图为Azkaban的架构图,主要有三部分组成:Azkaban Webserver、Azkaban Executor、 DB。Webserver主要负责权限验证、项目管理、作业流下发等工作;Executor主要负责作业流/作业的具体执行以及搜集执行日志等工作;MySQL用于存储作业/作业流的执行状态信息。图中所示的是单executor场景,但是实际应用中大部分的项目使用的都是多executor场景。1.1 作业流执行过程 Azkaban webserver会根据搜集起来的Executor的状态选择一个合适的任务运行节点,并将任务推送给该节点,管理并运行该工作流的所有job。1.2 部署模式Azkaban支持三种部署模式,分别用于学习和测试,高可用部署方式。solo-server模式DB使用的是一个内嵌的H2,Web Server和Executor Server运行在同一个进程里。这种模式包含Azkaban的所有特性,但一般用来学习和测试。two-server模式DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同的进程中。分布式multiple-executor模式DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同机器上,且有多个Executor Server。1.3 编译部署编译环境yum install git yum install gcc-c++yum install java-1.8.0-openjdk-devel下载源码&解压mkdir –p /data/azkaban/installcd /data/azkabanwget https://github.com/azkaban/azkaban/archive/3.42.0.tar.gzmv 3.42.0.tar.gz azkaban-3.42.0.tar.gztar -zxvf azkaban-3.42.0.tar.gz编译cd azkaban-3.42.0./gradlew build installDist -x testsolo-server模式部署下面为了部署测试简单,采用solo-server模式进行部署。cd /data/azkaban/install tar -zxvf ../azkaban-3.42.0/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C .修改时区cd /data/azkaban/install/azkaban-solo-server-0.1.0-SNAPSHOTtzselect #选择Asia/Shanghaivim ./conf/azkaban.propertiesdefault.timezone.id=Asia/Shanghai #修改时区启动./bin/azkaban-solo-start.sh注:启动/关闭必须进到/data/azkaban/install/azkaban-solo-server-0.1.0-SNAPSHOT/目录。登录http://ip:port/监听端口具体见配置./conf/azkaban.properties:jetty.port=8081IP为服务器地址。用户名见配置./conf/azkaban-users.xml, 具有admin角色的用户名是azkaban,密码是azkaban:<azkaban-users> <user groups=“azkaban” password=“azkaban” roles=“admin” username=“azkaban”/> <user password=“metrics” roles=“metrics” username=“metrics”/> <role name=“admin” permissions=“ADMIN”/> <role name=“metrics” permissions=“METRICS”/></azkaban-users>详细配置方法内容见:https://azkaban.github.io/azk…二、Azkaban与数仓集群的网络互通目前Azkaban与云产品Snova网络互通基于两个事实:1,Azkaban Executor的服务器能够访问外网或者能够访问Snova的服务端IP。2,Snova提供外网IP访问的能力。下图为网络连通示意图:Azkaban Executor在执行运行job时,其脚本或者命令通过公网IP访问Snova。接下来分步骤讲解如何基于Azkaban的工作流。三、前期准备工作3.1 Snova集群创建外网IP在Snova集群控制台,基础配置页面,点击“申请外网地址”,等待运行成功后,会看到访问该集群的外网IP地址。3.2 添加Snova访问地址白名单在Snova控制台,集群详情页,配置页,新建白名单如下所示。为什么要建这个访问白名单?为了系统安全,Snova默认情况是拒绝不在白名单的地址或者用户访问数据库。即配置IP白名单CIDR地址为xx.xx.xx.xx/xx,包括所有Azkaban Executor的所有IP或者网段。3.3 用户授权在3.2章节中,建议单独创建一个用户用于SCF的任务调度和计算。因此需要授权该用户访问对应数据库和表的权限。创建用户CREATE USER scf_visit WITH LOGIN PASSWORD ‘scf_passwd’;并设置用户访问密码。数据库表授权GRANT ALL on t1 to scf_visit;四、定时调度任务http://node1:8081/index登录Azkaban,Create Project=>Upload 上一步生成的zip包 =>execute flow执行一步步操作即可。具体步骤可以见 参考文档:https://www.cnblogs.com/qingy…4.1 创建工程4.2 创建jobjob1文件名:job.job,必须以.job结尾。内容如下:type=commandcommand=echo “job1"retries=5注:type类型及使用方式见https://azkaban.github.io/azk…job2type=commanddependencies=job1retries=5command=echo “job2 xx"command.1=ls –al注:dependencies为该job依赖的任务文件名(不包括.job后缀)。如果依赖多个,则以逗号分隔,如job2,job5。job3type=commanddependencies=job2,job5command=sleep 60job5type=commanddependencies=job1command=pwdjob6type=commanddependencies=job3command=sh /data/shell/admin.sh psqlx其中/data/shell/admin.sh ,注意作用可以封装用户功能代码,脚本内容如下,实现读取表中的数据,并进行打印:function psqlx() { result=PGPASSWORD=scf_passwd psql -h xx.xx.xx.xx -p xx -U scf_visit -d postgres <<EOF select * from t1; EOF echo $result }4.3上传job压缩包压缩所有job文件到一个zip包中。注意:所有文件必须在压缩包的根目录中,没有子目录,如下:4.3运行查询执行过程和结果。4.4设置周期调度在调试成功完成后,可以设置周期调度计划,比如每天定时进行工作流的调度,完成运行计划。五、实践总结对市面上最流行的两种调度器,给出以下详细对比。知名度比较高的应该是Apache Oozie。5.1 对比从功能上来对比 两者均可以调度linux命令、mapreduce、spark、pig、java、hive、java程序、脚本工作流任务 两者均可以定时执行工作流任务从工作流定义上来对比 1、Azkaban使用Properties文件定义工作流 2、Oozie使用XML文件定义工作流从工作流传参上来对比 1、Azkaban支持直接传参,例如${input} 2、Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}从定时执行上来对比 1、Azkaban的定时执行任务是基于时间的 2、Oozie的定时执行任务基于时间和输入数据从资源管理上来对比 1、Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作 2、Oozie暂无严格的权限控制5.2 应用场景对于数据分析基本上可以概括为三个步骤: 一、数据导入。二、数据计算。三、数据导出。三个类型的任务可能是多个并发运行,且任务依赖。因此Azkaban基本上能满足以上的任务调度管理和运行场景需求。首先创建一个job1,用于用户数据导入,比如从cos导入,任务内容执行以下SQL命令。insert into gp_table select * from cos_table;数据的导入也可以通过其他导入工具,如DataX将其他数据库的数据周期性的导入Snova数据仓库中。因此只需把DataX部署到Azkaban Executor机器对应目录,并进行调用即可其次,创建job2,用户数据计算分析。该步骤可以是多个job多次运行的结果,也可以是并发运行。最后,可以把计算结果出库到应用数据库。insert into cos_table select * from gp_table;5.2 不足1,Azkaban目前Job粒度的失败重试理解相对复杂,在Projects->Executions找到对应的执行失败的Id,选择该执行实例ID,进入详情,点击重新运行,则会生成一个全新的工作流实例ID,而不是重新运行原来失败的实例ID,新的实例ID从失败的job开始运行,已经成功运行的直接跳过,不再运行。2,job通过shell命令启动复杂的程序,shell返回成功,并不代表程序运行成功。3,job运行管理容错性不足,当一个job提交一个运行任务后,此时重启或者executor进程挂掉,该任务将出现状态失败的情况,实际可能任务已经运行成功。此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

March 14, 2019 · 1 min · jiezi

第三方支付的流程分析与总结

这几年的工作中一直与支付打交到,借着 skr-shop 这个项目来与大家一起分享探索一下支付系统该怎么设计、怎么做。我们先从支付的一些常见流程出发分析,找出这些支付的共性,抽象后再去探讨具体的数据库设计、代码结构设计。相关项目:PHP 版本的支付SDKGo 版本的支付SDK-开发中支付整体而言的一个流程是:给第三方发起了一笔交易,用户通过第三方完成支付,第三方告诉我支付成功,我把用户购买的产品给用户。看似简单的流程,这里边不同的支付机构却有不同的处理。下面以我接触过的一些支付来总结一下国内支付国内的典型支付代表是:支付宝、微信、银行(以招商银行为例),由于国内的支付都支持多种渠道的支付方式,为了描述简单,我们均以pc上的支付为例进行讲解。支付宝支付宝的接入是我觉得最简单的一种支付。对于在PC上的支付能力,支付宝提供了【电脑支付】。当用户下单后,商户系统根据支付宝的规则构建好一个url,用户跳转到这个url后进入到支付宝的支付页面,然后完成支付流程。在支付成功后,支付宝会通过 同步通知、异步通知 两种方式告诉商户系统支付成功,并且两种通知方式的结果都是可信的,而且异步通知的消息延迟也非常短暂。对于退款流程,支付宝支持全额、部分退款。并且能够根据商户的退款单号区分是否是同一笔退款进而避免了重复退款的可能。支付的退款是调用后同步返回结果,不会异步通知。微信支付微信并没有提供真的PC支付能力,但是我们可以利用【扫码支付】来达成电脑支付的目的。扫码支付有两种模式,这里以模式二为例。微信调用下单接口获取到这个二维码链接,然后用户扫码后,进入支付流程。完成支付后微信会 异步通知,但是这里并没有 同步通知,因此前端页面只能通过定时轮训的方式检查这笔交易是否支付,直到查询到成功、或者用户主动关闭页面。退款流程与支付宝最大的不同是,有一个 异步通知 需要商户系统进行处理。第一个不同点:异步通知的接口需要处理多种不同类型的异步消息招商银行随着在线支付在国内的蓬勃发展,各家银行也是不断推出自己的在线支付能力。其中的佼佼者当属 招商银行。大家经常用的滴滴上面就有该支付方式,可以体验一下。招商支付使用的是银行卡,因此首次用户必须进行绑卡。因此这里可能就多了一个流程,首先得记录用户是否绑过卡,然后用于签名的公钥会发生变化,需要定期更新。招商所有平台的支付体验都是一致的,会跳转到招行的H5页面完成逻辑,支付成功后并不会自动跳回商户,也就是没有 同步通知,它的支付结果只会走异步通知流程,延迟非常短暂。退款流程与支付宝一样,也是同步返回退款结果,没有异步通知。第二个不同点:支付前需要检查用户是否签约过,有签约流程小结国内在线支付流程相对都比较完善,接入起来也非常容易。需要注意的一点是:退款后之前支付的单子依然是支付成功状态,并不会变成退款状态。因为退款与支付属于不同的交易。这一点基本上是国内在线支付的通用做法。国际支付国际支付的平台非常多,包括像支付宝、微信也在扩展这一块市场。我以我接触的几家支付做一个简单的总结。WorldPay这是比较出名的一家国际支付公司,它主要做的是银行卡支付,公司在英国支付流程上,也是根据规则构建好请求的url后,直接跳转到 WorldPay 的页面,通过信用卡完成支付。这里比较麻烦的处理机制是:支付成功后,他首次给你的异步/同步消息通知并不能作为支付成功的依据。真的从银行确认划款成功后,才会给出真的支付成功通知。这中间还可能会异步通知告诉你支付请求被拒绝。最头痛的是不同状态的异步消息时间间隔都是按照分钟以上级别的延迟来计算退款流程上,状态跟微信一样,需要通过异步消息来确认退款状态。其次它的不同点在于无法根据商户退款单号来确认是否已经发起过退款,因此对于它来说只要请求一次退款接口,那它就默认发起了一次退款。第三、四不同点:支付成功后的通知状态有多种,涉及到商户系统业务流程的特殊处理退款不支持商户退款单号,无法支持防重复退款需要商户自己处理Assist这是俄罗斯的一家支付公司,这也是一家搞死人不偿命的公司,看下面介绍它的支付发起是需要构建一个form表单,向它post支付相关的数据。成功后会跳转到它的支付页,用户完成支付即可。对于 同步通知,它需要用户手动触发跳回商户,与招商的逻辑很像,同步也仅仅是做返回并不会真的告知支付结果。异步通知 才是真的告知支付状态。比较恶心的是,支付时必须传入指定格式的商品信息,这会在部分退款时用到。现在来说退款,退款也是与 WorldPay 一样,不支持商户的退款单号,因此防重方面也许自己的系统进行设计。并且如果是部分退款,需要传入指定的退款商品,这就会出现一个非常尴尬的局面:部分退款的金额与任何一个商品金额都对应不上,退款则会失败。第五个不同点:部分退款时需要传入部分退款的商品信息,并且金额要一致Doku接下来再来聊聊印尼的这家支付机构 doku。由于印尼这个国家信用卡的普及程度并不高,它的在线支付提供一种超商支付方式。什么是超商支付呢?也就是用户在网络上完成下单后,会获取到一个二维码或者条形码。用户拿着这个条形码到超商(711、全家这种)通过收银员扫码,付现金给超商,完成支付流程。这种方式带来的问题是,用户长时间不去支付,导致订单超时关单后才去付款。对整个业务流程以及用户体验带来很多伤害。再来说退款,由于存在超商这种支付方式,导致这种支付无法支持在线自动退款,需要人工收集用户银行卡信息,然后完成转账操作。非常痛苦不堪。第六个不同点:线上没有付款,只有获取付款码,退款需要通过人工操作AmazonPay亚马逊出品,与支付宝非常类似。提供的是集成式的钱包流程。支付时直接构建一个url,然后跳转到亚马逊即可完成支付。它还提供一种授权模式,能够不用跳转amazon,再商户端即完成支付。支付成功后也会同步跳转,同步通知 的内容可以作为支付是否成功的判断依据。经过实际检查 异步通知 的到达会稍有延迟,大概10s以内。退款方面也支持商户退款单号可以依赖此进行防重。但是退款的状态也是基于异步来的。总结这其中还有一些国际支付,如:PayPal、GooglePay、PayTM 等知名支付机构没有进行介绍,是因为基本它们的流程也都在上面的模式之中。我们后续的代码结构设计、数据库设计都基于满足上面的各种支付模型来完成设计。最后,赠送大家一副脑图,这是接入一家支付时必须弄清楚的问题清单下篇预告:《支付数据库与代码结构设计》这是我们几个小伙伴利用业余时间思考的一些业务设计,如果有写的不对或者不完善的地方,希望大家多多评论,互相学习互相进步~项目地址: https://github.com/skr-shop/m...skr-shop项目成员简介排名不分先后,字典序昵称简介个人博客AStraw研究生创业者, 现于小米科技海外商城组从事商城后端研发工作——–DayuPayment开源作者,服务端开发者dayutalk.cnlwhcv曾就职于百度/融360, 现于小米科技海外商城组从事商城后端研发工作——–TIGERBPHP框架EasyPHP作者,拥有A/B/C轮电商创业公司工作经验,现于小米科技海外商城组从事商城后端研发工作TIGERB.cn

November 26, 2018 · 1 min · jiezi