Статьи

Работает текучий на CockroachDB

Что такое CockroachDB?

CockroachDB — проект, за которым я следил некоторое время с большим интересом. Это база данных с открытым исходным кодом, лицензированная Apache 2 ( ссылка на Github ), которая черпает вдохновение из документа Google Spanner . По сути, это хранилище ключей и значений, которое масштабируется горизонтально. Что делает его действительно интересным для нас, так это то, что 1) он поддерживает SQL с помощью проводного протокола Postgres и 2) имеет полную семантику ACID и распределенные транзакции. Если вам интересно, как они этого добиваются, обязательно прочитайте технические посты в блоге CockroachLabs (признаюсь, иногда это не для слабонервных ;-)). Обратите внимание, что это все еще распределенная система и, следовательно, следует теореме CAP, более конкретно, это система CP.

cockroachdb_beta_hero

Пока еще рано, как вы прочтете в их FAQ, многие вещи еще не оптимизированы. Тем не менее, теперь, когда они недавно добавили базовую поддержку для соединений , я решил, что мне стоит попробовать его с движком Flowable. В этой статье я покажу, как легко запустить движок Flowable v6 на CockroachDB.

(Sidenote: Мне нравится это имя! Для людей, которые его не понимают: тараканы — это одно из немногих существ на земле, которое может пережить нечто вроде ядерного взрыва. Довольно выносливое маленькое животное … что-то, что вы хотели бы также для ваших данных & # 55357; & # 56898;)

Настроить

Документы по началу работы на веб-сайте CockroachDb вполне понятны, но для ясности вот шаги, которым я следовал:

  • Загрузите последнюю версию архива CockroachDB (или что вам нужно)
  • Распаковать и запустить первый узел:
    • ./cockroachdb начало
  • Запустите второй узел:
    • ./cockroach start –store = node2 –port = 26258 –http-port = 8081 –join = localhost: 26257
  • Запустите третий узел:
    • ./cockroach start –store = node3 –port = 26259 –http-port = 8082 –join = localhost: 26257

Ура, теперь у вас работает кластер из трех узлов, которые с радостью будут реплицировать данные между собой. Есть хорошее приложение администратора, которое работает на 8080 и дает обзор кластера:

Экран-1

Следующий шаг: нам нужна база данных для движка Flowable. Создание базы данных и предоставление разрешений пользователю по умолчанию (maxroach) выполняется через оболочку CockroachDB SQL:

1
2
3
./cockroachdb sql
> CREATE DATABASE flowable;
> GRANT ALL ON DATABASE flowable TO maxroach;

К сожалению, CockroachDB еще не реализовал функцию метаданных JDBC, которую мы используем в движке Flowable для автоматического создания схемы базы данных. Кроме того, в некоторых случаях я не мог заставить работать внешние ключи должным образом, поэтому я скопировал / вставил скрипты Flowable SQL и удалил их. Файл загружен на Github .

Также это означает, что в данный момент вам необходимо создать схему базы данных «вручную». Если вы используете терминал bash, вы можете скачать приведенный выше скрипт с github и передать его в оболочку CockroachDB SQL следующим образом. Кроме того, вы можете вставить его в оболочку SQL.

1
2
./cockroach sql –database=flowable –user=maxroach -e “$sql”

Текучий на CockroachDB

База данных теперь готова. Время загрузить движок Flowable, используя эту базу данных в качестве хранилища данных. Весь исходный код доступен на Github: https://github.com/jbarrez/flowable-cockroachdb-demo

Логотип-1

Поскольку CockroachDB использует проводной протокол Postgres, нам просто нужно добавить драйвер JDBC Postgres в файл pom.xml :

01
02
03
04
05
06
07
08
09
10
<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>

Я использую текущую главную ветку v6, которая еще не выпущена. Вы можете легко создать его самостоятельно, клонировав проект flowable-engine и выполнив ‘mvn clean install -DskipTests’ в корневом каталоге. Конфигурационный файл, используемый для движка, довольно прост и выглядит как подключение к обычной реляционной базе данных Postgres. Обратите внимание, что я немного «обманываю» с настройками databaseSchemaUpdate , чтобы избежать автоматической проверки схемы.

1
2
3
4
5
6
<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" />

Определение процесса, которое мы будем использовать, представляет собой простой демонстрационный процесс, который выполняет несколько вещей, таких как задачи пользователя, задачи обслуживания, подпроцессы, таймеры и т. Д.

diagram2

В следующем фрагменте показано, как Flowable API используется несколькими различными способами. Если вы следите за пользовательским интерфейсом CockroachDB, вы увидите, что трафик на некоторое время возрастает. Что происходит здесь:

  • Строки 3-9: загрузка обработчика процессов Flowable с помощью файла конфигурации, описанного выше, и получение всех служб
  • Строка 11: развертывание определения процесса
  • Строки 15-19: запуск 100 экземпляров процесса
  • Строки 24-33: Завершение всех задач в системе
  • Строка 35: выполнение исторического запроса

Так что, как видите, ничего сложного, просто прикоснуться к различным API и проверить все это работает на CockroachDB.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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();
}

Вывод точно такой, как вы ожидаете (и точно так же, как запуск его в реляционной базе данных).

1
2
3
4
5
6
7
Process definitions deployed = 1
Process instances running = 100
Completed 10 tasks
Completed 20 tasks
Completed 400 tasks
Finished all tasks. Finished process instances = 100

Вывод

Практически тривиально запустить движок процессов Flowable на CockroachDB, особенно благодаря превосходному уровню SQL и реляционной поддержке, добавленной разработчиками CockroachDB. Есть еще способ (как вы прочтете в их блоге), но это, безусловно, классная технология уже сейчас! А кому не нравится горизонтальная масштабируемость без ущерба для транзакций ACID? Это идеально подходит для случаев использования технологического двигателя.

Я собираюсь продолжать внимательно следить за проектом CockroachDB, так как комбинация с Flowable демонстрирует большой потенциал. И, как вы знаете, я также с нетерпением жду, когда они начнут концентрироваться на производительности, чтобы запустить некоторые тесты :-).

Ссылка: Запуск Flowable на CockroachDB от нашего партнера JCG Джорама Барреса в блоге » Маленькие шаги с большими ногами» .