在CockroachDB上运行Flowable
什么是CockroachDB?
CockroachDB是一個我一直關(guān)注很長一段時間的項目。 這是一個開放源代碼的Apache 2許可數(shù)據(jù)庫( Github鏈接 ), 極大地從Google Spanner白皮書中汲取了靈感 。 它的核心是可水平擴(kuò)展的鍵值存儲。 但是,對我們而言真正有趣的是:1)它通過使用Postgres有線協(xié)議支持SQL; 2)具有完整的ACID語義和分布式事務(wù)。 如果您對他們?nèi)绾螌崿F(xiàn)這一目標(biāo)感興趣,請確保閱讀CockroachLabs博客上的技術(shù)文章(我承認(rèn),有時這并不適合膽怯的人;-)。 請注意,它仍然是分布式系統(tǒng),因此遵循CAP定理,更具體地說,它是CP系統(tǒng)。
正如您將在其常見問題解答中所讀到的那樣,這還處于初期階段,因為許多事情尚未進(jìn)行優(yōu)化。 但是,既然他們最近增加了對join的基本支持 ,我想我應(yīng)該使用Flowable引擎來嘗試一下。 在本文中,我將展示在CockroachDB上運行Flowable v6流程引擎有多么容易。
(旁注:我喜歡這個名字!對于不了解它的人:蟑螂是地球上能夠幸存于核爆炸等生物中的少數(shù)生物之一。相當(dāng)有彈性的小動物……您也希望將其用于數(shù)據(jù)收集��)
設(shè)定
CockroachDb網(wǎng)站上的入門文檔非常清楚,但為清楚起見,這是我遵循的步驟:
- 下載最新的CockroachDB tarball(或您的系統(tǒng)需要的任何文件)
- 解壓并啟動第一個節(jié)點:
- ./cockroachdb開始
- 啟動第二個節(jié)點:
- ./cockroach start –store = node2 –port = 26258 –http-port = 8081 –join = localhost:26257
- 啟動第三個節(jié)點:
- ./cockroach start –store = node3 –port = 26259 –http-port = 8082 –join = localhost:26257
歡呼,您現(xiàn)在有一個運行著三個節(jié)點的集群,它們將很高興地在彼此之間復(fù)制數(shù)據(jù)。 有一個不錯的管理應(yīng)用程序,可在8080上運行,并概述了群集:
下一步:我們需要Flowable引擎的數(shù)據(jù)庫。 通過CockroachDB SQL shell創(chuàng)建數(shù)據(jù)庫并向默認(rèn)用戶(maxroach)授予權(quán)限:
./cockroachdb sql > CREATE DATABASE flowable; > GRANT ALL ON DATABASE flowable TO maxroach;遺憾的是,CockroachDB尚未實現(xiàn)JDBC元數(shù)據(jù)功能,我們在Flowable引擎中使用了該功能來自動創(chuàng)建數(shù)據(jù)庫模式。 另外,在某些情況下我無法完全使外鍵正常工作,因此我復(fù)制/粘貼了Flowable SQL腳本并刪除了這些腳本。 該文件已上傳到Github上 。
同樣,這意味著當(dāng)前您需要“手動”創(chuàng)建數(shù)據(jù)庫模式。 如果您使用的是bash終端,則可以從github下載上面的腳本,并按如下所示將其提供給CockroachDB SQL Shell。 或者,您可以將其粘貼到SQL Shell中。
sql=$(wget https://raw.githubusercontent.com/jbarrez/flowable-cockroachdb-demo/master/engine-schema.sql -q -O -) ./cockroach sql –database=flowable –user=maxroach -e “$sql”在CockroachDB上可流動
現(xiàn)在數(shù)據(jù)庫已準(zhǔn)備就緒。 是時候使用此數(shù)據(jù)庫作為數(shù)據(jù)存儲來啟動Flowable引擎。 所有源代碼都可以在Github上獲得: https : //github.com/jbarrez/flowable-cockroachdb-demo
由于CockroachDB使用Postgres有線協(xié)議,我們只需要將Postgres JDBC驅(qū)動程序添加到pom.xml中 :
<dependency><groupId>org.flowable</groupId><artifactId>flowable-engine</artifactId><version>6.0.0.RC1-SNAPSHOT</version> </dependency> <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>9.4.1211.jre7</version> </dependency>我在這里使用當(dāng)前的v6 master分支,尚未發(fā)布。 通過克隆flowable-engine項目并在根目錄中執(zhí)行“ mvn clean install -DskipTests”,您可以輕松地自己構(gòu)建它。 用于引擎的配置文件非常簡單,看起來就像連接到常規(guī)Postgres關(guān)系數(shù)據(jù)庫一樣。 請注意,我有點“欺騙” databaseSchemaUpdate設(shè)置以避免自動模式檢查。
<property name="jdbcUrl" value="jdbc:postgresql://127.0.0.1:26257/flowable?sslmode=disable" /> <property name="jdbcDriver" value="org.postgresql.Driver" /> <property name="jdbcUsername" value="maxroach" /> <property name="jdbcPassword" value="" /><property name="databaseSchemaUpdate" value="cockroachDb" />我們將使用的流程定義是一個簡單的演示流程,它行使一些任務(wù),例如用戶任務(wù),服務(wù)任務(wù),子流程,計時器等:
以下代碼段顯示了如何以幾種不同方式使用Flowable API。 如果您遵循CockroachDB管理員UI,則會看到流量增加了一段時間。 這里發(fā)生的是:
- 第3-9行:從上方使用配置文件啟動Flowable流程引擎,并獲取所有服務(wù)
- 第11行:部署流程定義
- 第15-19行:啟動100個流程實例
- 第24-33行:完成系統(tǒng)中的所有任務(wù)
- 第35行:進(jìn)行歷史查詢
因此,正如您所看到的,簡單地觸摸各種API并對其進(jìn)行驗證就可以了,這在CockroachDB上是沒有用的。
public static void main(String[] args) {ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("flowable.cfg.xml").buildProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();RuntimeService runtimeService = processEngine.getRuntimeService();TaskService taskService = processEngine.getTaskService();HistoryService historyService = processEngine.getHistoryService();repositoryService.createDeployment().addClasspathResource("demo-process.bpmn").deploy();System.out.println("Process definitions deployed = " + repositoryService.createProcessDefinitionQuery().count());Random random = new Random();for (int i=0; i<100; i++) {Map<String, Object> vars = new HashMap<>();vars.put("var", random.nextInt(100));runtimeService.startProcessInstanceByKey("myProcess", vars);}System.out.println("Process instances running = " + runtimeService.createProcessInstanceQuery().count());LinkedList<Task> tasks = new LinkedList<>(taskService.createTaskQuery().list());while (!tasks.isEmpty()) {Task task = taskService.createTaskQuery().taskId(tasks.pop().getId()).singleResult();if (task != null) {taskService.complete(task.getId());}if (tasks.isEmpty()) {tasks.addAll(taskService.createTaskQuery().list());}}System.out.println("Finished all tasks. Finished process instances = "+ historyService.createHistoricProcessInstanceQuery().finished().count());processEngine.close(); }輸出完全符合您的期望(并且與在關(guān)系數(shù)據(jù)庫上運行的輸出完全相同)。
Process definitions deployed = 1 Process instances running = 100 Completed 10 tasks Completed 20 tasks … Completed 400?tasks Finished all tasks. Finished process instances = 100結(jié)論
在CockroachDB上運行Flowable流程引擎幾乎是微不足道的,特別是通過出色的SQL層和CockroachDB開發(fā)人員添加的關(guān)系支持。 還有一段路要走(正如您將在他們的博客上閱讀的那樣),但是現(xiàn)在肯定已經(jīng)是一項很酷的技術(shù)了! 誰又不喜歡不犧牲ACID交易的水平可擴(kuò)展性呢? 它非常適合流程引擎的用例。
我將繼續(xù)密切關(guān)注CockroachDB項目,因為與Flowable的結(jié)合顯示出很大的潛力。 而且,正如您所知,一旦他們開始關(guān)注性能,我也非常期待能夠運行一些基準(zhǔn)測試:-)。
翻譯自: https://www.javacodegeeks.com/2016/11/running-flowable-cockroachdb.html
總結(jié)
以上是生活随笔為你收集整理的在CockroachDB上运行Flowable的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 午餐前如何安装OpenStack Clo
- 下一篇: 谷歌地球操作快捷键(谷歌地球使用方法)