自稱十年內取代Java的企業整合語言:Ballerina(芭蕾舞女)

banq發表於2018-09-01
本文雖然是談論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

相關文章