Central Dogmaを試してみる(途中)


概要

LINE DEVELOPER DAY 2017で紹介されていたCentral Dogmaが気になったので、そもそも何なのかというところからちょっと触ってみるところまで。

Central Dogmaとは??

各種設定値を中央集権的に管理するリポジトリのこと。
可用性が高く、設定値の変更はバージョン管理される。

設定値の管理にはJSONやYAMLやXML等の様々なフォーマットのファイルが利用でき、その設定値を取得するためのRESTful APIが提供されている。
(クライアントとしては今のところJavaのライブラリとコマンドラインツールがあるよう)

バージョン管理にはGitを使用しているので、設定値の変更の際はレビューのフローを通すことができ、誤った設定変更を事前に防ぐことができる。

どんなことに利用できるの??

とりあえず以下のようなことはできる。汎用的に使えそう。

アプリケーション起動時に設定値を取得する

そのまんま。これは当然のようにできる。
アプリケーションの起動時に必要な設定値を例えばYAMLファイルから読み込んだりすることはよくあると思うが、それと同じことができる。
唯一違うのは、設定値をファイルから読み込むのではなく、API経由で取得するということ。

アプリケーション実行時に設定値を取得する

もちろん、アプリケーション実行時でも設定値の取得は可能。
Central Dogmaで管理されている設定値が更新された場合は、それを通知することで、アプリケーションの再起動無しに設定を反映させることができる。

設定値が更新された際にはアプリケーションは通知が受け取れるので、例えば、

  • A/Bテストのパラメータの動的な変更
  • ユーザやIPアドレスのブラックリストのリアルタイム更新

なんかに使えたりする。

用語

Project

Central Dogmaのストレージモデルにおけるトップレベルの要素。
Projectは少なくとも2つのRepository、mainmetaを持つ。(3つ以上あってもOK)

GitHubにおけるorganizationと似たような存在。

Repository

設定ファイルが格納される場所のこと。
Repositoryにある設定ファイルは、誰が・いつ・どんな変更をしたかの履歴が残される。

Main Repository

Project内でmainと名付けられたRepositoryのこと。
設定ファイルの主要な格納先として使用されるが、ユーザが別なRepositoryを作成することも可能。

Project作成時にはmain repositoryにはサンプルファイルが格納されているが、これは削除してもOK。

Meta Repository

Project内でmetaと名付けられたRepositoryのこと。
Projectの依存関係のメタデータを格納する専用のRepositoryとして使用される。

Commit

Repositoryに加えられた変更のこと。
各CommitにはRevisionが割り振られる。

Revision(あるいはRevision Number)

Repositoryの変更履歴を表す整数値のこと。
Repository作成時にはRevisionが1のCommitから始まる。

Commitが増える毎にRevisionも1、2、3と+1ずつされていく。

Central DogmaはVCSとしてGitを利用しているが、おなじみのSHA1ベースのIDは使用しないらしい。
また、ブランチもサポートしていないとのこと。

Revisionは負数で表現されることもある。
例えば-1は最新のRevisionを表し、これはRepositoryのHEADと呼ばれる。
-2ならHEADの1つ前のRevisionのこと、など。

ちなみに、正数のRevisionをabsolute revision(絶対Revision)、負数のRevisionをrelative revision(相対Revision)と言う。

動かしてみる

インストールして使うこともできるが、今回はDockerで起動する。

$ sudo docker run --name centraldogma -p 36462:36462 line/centraldogma

↓のログが出て無事起動したっぽい。

Environment variables:
======================
APP_BIN_DIR:     /opt/centraldogma/bin
APP_HOME:        /opt/centraldogma
APP_LIB_DIR:     /opt/centraldogma/lib
APP_LOG_DIR:     /opt/centraldogma/log
APP_MAIN:        com.linecorp.centraldogma.server.Main
APP_NAME:        centraldogma
APP_OPTS:        
APP_PID_FILE:    /opt/centraldogma/centraldogma.pid
APP_STDOUT_FILE: /opt/centraldogma/log/centraldogma.stdout
APP_STDERR_FILE: /opt/centraldogma/log/centraldogma.stderr
JAVA_HOME:       /usr/lib/jvm/java-8-openjdk-amd64/
JAVA_OPTS:       -nodetach
JSVC_BIN:        /opt/centraldogma/bin/jsvc.linux-x86_64

Starting up centraldogma ..

設定

後で見る。
https://line.github.io/centraldogma/setup-configuration.html

コマンドラインからいじってみる

ここによればdogmaというコマンドが利用できるらしいが、今はDockerで起動しているので少なくともローカルにはインストールされていない。
一応コンテナ内に入ってないか見てみたが、↓のとおり無いっぽい。

$ sudo docker exec -it centraldogma /bin/bash
root@e9be741f4834:/# which dogma
root@e9be741f4834:/# 

続く……