Kagisys3のソフトウェアアーキテクチャ
この記事はMMA Advent Calendar 2016 20日目の記事です。
昨日19日目は、G_noOtokoくんのMMA部誌、表紙のすべてでした。
やばい、すっかり忘れてた。今日俺の担当だった。急ピッチで書いてるので、挨拶はいいよね!三回目だしね!
さて、MMAの部室には、古くから鍵シスという、ICカードでドアの鍵の開閉を行うシステムがあります。このシステムをもっといいものにしようと、MMAでは新しいバージョンを開発するプロジェクトが動いています。今日は、その紹介を簡単にすると共に、次期候補として開発中のKagisys3のソフトウェア部分の構成について話したいと思います。
Kagisysとは
Kagisysのシステム自体は、だいぶ大昔(10年ほど前?)からあるようです。色々と使いにくさもあって、色々な人が新造の計画を立てていた様ですが、頓挫してます。
Kagisysは、単純なシステムで、ICカードリーダから読まれたカードが部員のであれば、ドアの鍵を開閉するシステムです。ドア自体は、何人かが持っている物理鍵を使えば、開けることができるのですが、ICカードの登録は部員の誰もができる様になっています。他にもドアの開閉を誰が行ったかメールで通知する機能などがあります。
さて、6年ほど前に本格的に、新造計画が始まってKagisys2という新しいシステムが設計されていました。先日、旧システムがお亡くなりになり、これを機にKagisys2に移行しようと、MMAでは週に一回有志がKagisys2の移行プロジェクトを行っています。その間、部長が実験的に作っていて、急遽調整したシステムが動いています。
さて、そもそも夏休みに僕が、「夏休み中に移行しような」と言って現在お蔵入りしてしまっているKagisys3プロジェクトというものがありました(各位すまねえ)。現状全く開発が進んでいませんが、今日はその仕様を紹介しようと思います。
Kagisys3で取り入れたい機能
Kagisys3で想定されていた、新機能は以下のものです
- 鍵システムを別途サーバーでなく、システムの制御をおこなっているシングルボードコンピュータ本体に載せる
- Web画面から諸々の操作を出来る様にする
- LDAPと連携して、アカウント情報を管理できる様にする
- 通信路においてTLS対応をする
- システムの拡張を容易に行える様にする
- システムのバージョンアップを簡単に行える様にする
Kagisys3の構成
+----------+
| Webサーバ |
+----------+
| ^
| |
JSON API
| |
v |
+---------+ +------+ +-----------+
| | <------ | | ------------> | |
| sqlite3 | SQL | Core | JSON API | Interface |
| | ------> | | <------------ | |
+---------+ +------+ <----- +-----------+
/ ^ \
/ / \
Lightweight Protocol \
| | Idm on USB
v | \
+-------+ +--------+
| 制御系 | | PaSoRi |
+-------+ +--------+
まず、シングルボードコンピュータにはBeagleBone Blackが採用されています。Core/制御系/sqlite3が、BeagleBone Black上に乗ることになっており、Coreサーバの制御を行う為、CoreサーバとUnixソケットで通信するCLI InterfaceもBeagleBone Black上に乗る予定です。
Coreサーバと通信を行うWebサーバは部のサーバに置かれる予定です。なお、WebサーバもBeagleBone上に載せることは可能な様開発する予定ですが、正直うちの部ではあまり載せてもありがたみが無いので、載せない予定です。
Coreサーバとインターフェースとは、TLS上でHTTP JSON通信をする予定です。反映時間よりとりあえずは、開発速度と障害対応優先ということで、HTTP JSON通信を採用していますが、安定してきたらgRPC with Protocol Bufferに置き換えたいですね。認証は単純に、HTTPのBasic認証で実装します。
Coreサーバと制御系は別々のシステムで動き、独自の簡単なプロトコルで通信をします。これは、ドアの制御部分が置かれる側で異なるかもしれない場合への対応ですが、もしかしたら一緒になるかもしれません。
データベースにはユーザIDとICカードの情報が入っており、この情報をもとにICカードの認証を行います。データベースは軽くて使い勝手の良いsqlite3を使おうかなと思っていますが、現状あまりどれを使うか具体的には決まっていません。今回はそれほど複数種類の大量データを投入するわけではないので、noSQLでもいいかなとは思っていますが、現状思案中です。これによってコアサーバ単体でも認証は動く様になります。
アカウント情報をLDAPに紐付けする役割や、メールの送信、ログや鍵の管理などは全てWeb Interfaceが受け持つことにしようと考えています。
以上が現状考えられているKagisys3のソフトウェアアーキテクチャです。
最後に
来年の春休みには空きが出来るはずだから、待ってくれ。申し訳ねえ。。。
いつの間にか、12月も2/3過ぎてたんだよなあ。。。まじかよ。。。
明日21日目は、su_zu__くんの「My ffmpeg」の話だそうです。
ということで、今までの記事を読んでもらった方はありがとうございました。
これで、僕の担当分は全部終了です。では、またどこかでノシ