自称十年内取代Java的企业集成语言:Ballerina(芭蕾舞女)

本文虽然是谈论Ballerina(芭蕾舞女)编程语言是如何从专门为企业服务总线(ESB)而编程的语言如何转变成云原生语言,但是可以看出传统SOA到云原生转变演进的内在逻辑性。

Ballerina语言是专门设计用来集成不同的企业应用而诞生。“我们正致力于努力改进ESB配置语言已经很长一段时间,一直在寻找正确的方法来演进它,”该语言的创建者、WSO2的首席执行官兼创始人Sanjiva Weerawarana表示。

使用数据流用来集成传统系统的方法并不合适,正因为配置方法不足,才让他们想到如何使用编程实现集成的功能。

但是现有的编程语言如Java或JS等设计目的不是为了轻松处理集成任务,例如引入外部源等,这些工作留给了驱动程序和客户端库,需要开发人员进行额外的工作(以及潜在的错误和性能问题)。


现在企业应用正在迁移到云原生模式,转向微服务架构,小型服务之间彼此通信,所有这些细粒度分解导致更多端点endpoint,这些端点需要通过API访问。

为了创建芭Ballerina语言,Weerawarana借鉴了WSO2经常用于完成客户端部署的工具,也就是序列图,他有编写语言的经验,甚至还教过大学课程,公司建立了一个由60名开发人员组成的团队,“Ballerina语言芭蕾舞女”这个名字来自Weerawarana对于芭蕾舞如何紧密协调的迷恋,他认为这应该是企业整合都应该追求的优雅流程。

Ballerina将网络服务视为一等公民的概念,可实现轻松集成,这是一种能理解网络概念的完整编程语言,Ballerina不是仅针对集成任务的领域特定语言(DSL),它实际上是一种成熟的编程语言,Weerawarana可以自认为在未来十年内取代Java

Weerawarana预测,从长远来看,将不再需要ESB和应用服务器等中间件工具,ESB的路由功能将嵌入代码中,使用诸如Ballerina之类的语言,或者由诸如Kubernetes之类的编排引擎或诸如Istio之类的服务网格软件承担。

最近,WSO2在旧金山召开了第一次Ballerinacon用户大会,与会者了解了Ballerinacon如何成为世界上第一个云原生编程语言。

以下是Ballerina的六个功能,使其成为云原生计算的编程语言。

1.内置容器支持
Ballerina可以为云原生格式运行程序做很多基本准备工作,为开发人员节省时间,可以对代码进行注释,以便编译器自动创建Dockerfile,并将其打包在一个映像中,然后可以作为容器运行,因为编译器可以完成所有这些额外的工作,所以开发人员可以更快地构建和测试多个迭代。

Ballerina还为Kubernetes开源容器编排引擎提供了一个库,如果想通过单个命令协调多个程序的操作,这就很方便。


2.无服务器友好
Ballerina已经受到许多无服务器平台的支持,包括OpenWhisk和Bitnami的Kubeless。

Ballerina由OpenWhisk平台本地支持,WSO2本身运行托管的OpenWhisk服务,称为WSO2无服务器解决方案,在OpenWhisk命令行,只要上传你的函数和服务,它将其编译并将其放在容器中,并提供实际需要的资源,使用负载进行自动扩展。

Kubeless提供了一种将Ballerina程序作为无服务器功能进行管理的方法,Kubeless为该函数设置了自定义资源定义,因此可以由Kubernetes管理,并可通过Kubeless命令行访问。

Ballerina一个有趣的方面是任何函数都可以转换为API端点,实际上使每个函数都成为独立的微服务,反过来,这开启了使用单个语义域进行集成操作,可以生成用于开放API网关的Swagger文件。


3.可观察性
默认情况下,Ballerina程序是可观察的:Ballerina支持基于微服务的日志记录,跟踪和指标,而不是添加额外的库,Ballerina生成的二进制文件默认输出这些数据,除了配置最终客户端来解释和显示数据之外,用户不必为可观察性功能做任何额外的工作。

用于系统调试商用Honeycomb软件,以及开源的Prometheus时间序列监控,这两个平台可以轻松地与Ballerina程序一起使用。对于跟踪,生成的数据已经适合OpenTracing模型,对于可视化,它与Grafana很好地集成,日志数据可以通过ELK堆栈轻松消化或写出到平面文件。拥有各种基于SQL的数据库系统连接器,并且有一个用户API供开发人员创建自定义测量指标。

4.使用或不使用服务网格
由于许多微服务彼此通信的性质,服务网格的作用变得越来越重要,其中它负责诸如服务发现(微服务在动态系统中找到彼此的微服务)和认证之类的职责,Ballerina装备精良,适合这样的环境。

如果你决定使用像Istio这样的服务网格,Ballerina效果很好,只需通过创建单个YAML文件手动注入边车,这对于添加Istio的特定服务(如虚拟服务网关)非常有用,这里的想法是网络功能可以由Istio(用于控制平面)和Envoy(用于数据平面)处理,同时保持Ballerina用于业务逻辑本身。

作为集成语言编写的Ballerina也可以执行类似服务网格的职责,提供内置功能,如服务发现,可观察性和多协议支持,它还可持在代码内封装控制或数据平面逻辑等情况。

5.使用流式SQL轻松处理流
今天的数据来源越来越不仅仅是静态的,通常,数据一旦产生,就从诸如Apache Kafka的流处理系统中收集。

Ballerina具有通过执行复杂事件处理(CEP)来处理流数据的功能,它通过流式SQL的变体来实现这一点,流式SQL是大多数开发人员已经知道的SQL变体,能在时间窗口上处理事件集合,你可以设置包含必填字段的表,然后永久阻止执行,这意味着它会在刷新数据时不断重新评估数据。

在Ballerina中,网络事件是自然原生的,是一流的概念,开发人员可以建立带有丰富注释和过滤器的服务端点和服务客户​​端,此外,支持流行的数据交换格式(如JSON和XML),允许开发人员直接对数据进行编程。


6. 内嵌安全性
安全性也融入了Ballerina,在IDE上实现了一系列安全检查,并具有安全感知编译器,编译器进行静态分析,检查代码是否存在明显的缺陷,例如可能的缓冲区溢出。

还有运行时分析,每个函数都有内置的安全注释,当被激发时,@ sensitive注释将仅接受可信数据,这可以防止SQL注入攻击;@tainted注释将标记任何被认为不可信的计算。

Ballerina: A Programming Language for Cloud Native