抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

RockScript:用于编配微服务的脚本语言和引擎

2017 年 10 月 31 日

Tom Baeyens 发布了预览版的 RockScript ,一个用于在基于事件驱动的架构里集成和编排微服务的脚本语言和引擎。RockScript 使用了一种类似 JavaScript 的语言,用于在微服务系统里协调事务性活动,这种方式有点类似 Business Process Execution Language(BPEL)和 Business Process Modelling(BPM)。

在分布式系统中协调服务之间的交互一直以来都是一个巨大的挑战,传统的 SOA(面向服务架构)社区已经针对“编配(orchestration)还是编排(choreography)”展开了广泛的争论。服务编配是指按照由集中的引擎(如 BPEL )预定义的业务流程来自动执行服务。而服务编排一般不包含集中式的服务监管流程,服务之间的交互是由服务自身建立起来的,微服务大师 James Lewis 和 Martin Fowler 将其称为“聪明的端点和笨拙的管道”。

关于编配和编排的争论在微服务社区愈演愈烈,不过服务编排还是成为人们可接受的最佳实践。不过,随着采用微服务架构企业数量的增长(以及在编配流程方面的巨大投入)和使用无服务器架构或FaaS(Function-as-a-Service) 框架的服务逐渐流行,编配框架再度引起人们的关注。RockScript 就是这样的一个专门用于编配微服务的框架。

RockScript 的 wiki 页上写道,“大部分微服务之间的交互都是通过 JSON 和 HTTP 来完成的”,所以这些交互很难具备事务性。在发生交互的任意时刻,被调用的服务都有可能发生崩溃,或者底层的基础设施组件出现故障。如果一个业务流程中涉及多个服务间交互,为了保持一致性,需要把服务间的调用图以及调用成功和失败的结果记录下来。在微服务架构里,一般使用 Saga 模式来处理多阶段事务协议。

RockScript 被设计用于捕捉对事件的响应。一般会使用一个外部事件作为输入触发器,然后发送命令到其他微服务 API,在这一过程中可能还会伴随数据转换。RockScript 可以用于连接 HTTP API 和消息交换服务,不过目前仅实现了 HTTP API 连接。Activiti 和 jBPM 平台的作者 Baeyens 表示,RockScript 旨在“让编写连接企业系统事件的脚本变得更简单,并更容易建立起到脚本的触发器连接”。这与工作流框架 IFTTT Zapier 的触发器概念十分相似。

RockScript 的执行过程具备弹性,而且运行时引擎可以确保脚本的执行在应用程序或基础设施发生崩溃时自动恢复。每个脚本执行的状态通过事件溯源的方式保存在一个集群上,所以,当脚本在等待异步活动时就不会占用线程或内存。因为使用了事件溯源,在发生故障时(如服务器崩溃)可以追查问题的细节,而且可以从最后一次保存的执行状态中恢复过来。

Baeyens 向 InfoQ 透露了开发 RockScript 背后的动机。

InfoQ:欢迎来到 InfoQ,Tom!你参与工作流和 Business Process Management(BPM)方面的工作已经有很长时间了(曾经创立了 jBPM、Activiti 和 Effektif),那么为什么要创立这个新项目呢?

Baeyens:过去的项目让我积累了大量实现异步引擎的经验。但从产品方面来看,我发现开发者需要奔忙于两个世界:工作流是基于图表的,需要在活动(activity)之间进行数据转换,而它们一般是使用 JavaScript 或其他编程语言编写的。 开发者需要在这两个世界之间来回切换。我想这也是工作流没能一举成为主流开发技术的原因。将工作流活动的概念带到像 JavaScript 这样的编程语言上,开发者就可以只呆在一个他们喜欢的世界里。我的目标是把微服务集成带给更广大的开发者社区,让微服务之间的交互变得更容易。

InfoQ:有什么其他技术可以与 RockScript 进行比较的吗?

Baeyens:最近,一些云平台供应商推出了类似 AWS Step Function 和 Microsoft Logic App 的服务。它们把自己定位成 API、自定义 App 和 Serverless Cloud Function(也即 lambda)之间的粘合剂。现今,几乎所有的服务间交互都基于 JSON,并通过 HTTP 传输,或转向异步消息系统。BPEL 的目标是解决基于 XML 的服务的集成问题,尽管这种解决方案太过复杂。不过这也说明了我们需要一门用于集成的编程语言。RockScript 致力于成为最好的 API 和微服务生态系统集成脚本语言。

InfoQ:我们知道你有很深厚的 Java 背景,而 RockScript 却使用了 JavaScript 作为基础,这是为什么?

Baeyens:有三方面的原因。

  1. 在我的愿景里,我们完全可以在基于无服务器架构的云基础设施上使用在线 IDE 开发应用程序,而且只需要掌握 JavaScript。
  2. 对于 CTO 和开发团队领导来说,尽快让开发人员进入状态,让新加入的开发人员尽快掌握公司使用的技术,这点是非常重要的。RockScript 是 JavaScript 的一个子集,所以对于大部分开发者来说是很容易掌握的。
  3. JavaScript 语法也非常适合用来在微服务之间做数据转换。大部分微服务是基于 JSON 的,而 JavaScript 最适合用来操控这种类型的数据。

RockScript 的 wiki 页上写道,该项目目前还处在概念性验证阶段,实现的功能还不太稳定。目前的实现主要专注在开发者体验上,持久化的东西还只是保存在内存里(后续计划使用SQL 系统或Kafka 来进行持久化),而且覆盖到的JavaScript 特性还非常少。开发者可以通过 GitHub Issues Twitter 邮件组反馈他们的想法。

有一些新出现的编配框架,感兴趣的读者可以在它们的项目主页上找到更多信息:

现有的一些集成框架,如 Apache Camel Spring Integration 也可以用来模拟大部分的编配行为。一些 BPM 工具也提供了类似的功能,如 Activiti jBPM MS BizTalk BPM

关于 RockScript 更多的信息可以在该项目的 GitHub 仓库上找到,项目主页上还提供了一个入门教程

查看英文原文 RockScript: An Open Source Scripting Language and Engine for Microservice Orchestration

2017 年 10 月 31 日 19:001489
用户头像

发布了 321 篇内容, 共 113.4 次阅读, 收获喜欢 114 次。

关注

评论

发布
暂无评论
发现更多内容

Nginx加密套件配置不当,造成SSL无法建立连接

运维研习社

nginx zabbix SSL证书 证书监控

为行动而读书-《麦肯锡精英高效阅读法》读书笔记

代码技艺

读书笔记

创业公司人力资源体系建设的几点思考

一笑

人力资源 28天写作

抓包带你详解TCP的11种状态

运维研习社

三次握手 四次挥手 TCP/IP 抓包

你好,2021~

数据社

程序员 2021年展望

2021年目标,我打算这样去实现

谙忆

学习 Java 语言,你必须知道的 Java 简史

白色蜗牛

Java spring 程序员

翻译:《实用的Python编程》02_02_Containers

codists

Python 人工智能 容器 后端 数据结构与算法

面试官一上来就问我Chrome底层原理和HTTP协议(万字长文)

魔王哪吒

前端 后端 chorme 28天写作 2月春节不断更

为什么做这样一个产品之容量评估篇

数列科技杨德华

28天写作

如何解决Nginx实现动静分离或反向代理时资源路径不匹配

运维研习社

nginx 反向代理 动静分离

做出赋能其他人的产品是技术牛人最好的证明

刘华Kenneth

敏捷 平台

【STM32】CubeMX+HAL 输出PWM

AXYZdong

硬件 stm32 2月春节不断更

Kafka.03 - Message 介绍

insight

kafka 2月春节不断更

测试技术

牛鬼蛇神VS魑魅魍魉

BOE(京东方)全面发力8K 成为央视8K超高清技术合作伙伴

爱极客侠

Jenkins通过OpenSSH实现Windows下的CI/CD

运维研习社

jenkins CI/CD Windows Server 2012 R2

实例详解Linux下ulimit每个参数

运维研习社

Linux ulimit linux系统资源管理 open file

一文搞懂Linux下Ulimit资源限制

运维研习社

Linux linux命令 ulimit

关于Linux系统中Message中的Session日志详解

运维研习社

Centos 7

IO 模型知多少 | 理论篇

圣杰

io

Instana:如何评价可观察性方案?

行人23

京东方“8K+5G”技术助力牛年春晚 开启超高清视频直播时代

爱极客侠

iOS BAT面试对答题

ios 面试题

管理笔记 [9]:组织与督导,管理者的两个宝

俊毅

28天写作

说说规则引擎

张老蔫

28天写作

Dart 后台开发 Aqueduct集成Swagger客户端

人生如梦

flutter dart

Nginx如何监控各server的流量

运维研习社

nginx Prometheus zabbix upstream

牛启新春|优质文章人气大挑战

InfoQ写作平台官方

活动专区

第十三周 数据应用二 作业 「架构师训练营 3 期」

feiyun123

二、MongoDB基础知识

Kylin

读书笔记 七日更 分布式数据库mongodb 二月春节不断更

Study Go: From Zero to Hero

Study Go: From Zero to Hero

RockScript:用于编配微服务的脚本语言和引擎-InfoQ