API
よりRESTらしいHTTP APIへの変更:/project
のような単数形のエンドポイントを/projects
といった複数形に変更しました; JSONレスポンスのラッパーを取り除きました; PUT, PATCH, POSTなどのHTTPメソッドをRESTのベストプラクティスに適用しました.
Microservice framework
Seneca.jsに依存していた箇所を独自の実装に置き換えました. Seneca.jsはサービス間のメッセージング(HTTP, SQS, NATS)やデータベース(MongoDB, DynamoDB, Postgres)を選定する際にその自由度がツールを切り替える際にとてもよく機能しましたが、すでにNATSとPostgresを使用する決定を下したため、より高度な機能のためにカスタムのマイクロサービスフレームワークを導入しました。Billing Service
よりスケーラブルな支払いシステム. 年払いによる割引とそれぞれの料金プランによるリソースの制限を追加しました. 現在はクレジットカードによる支払いのみをサポートしています.Backend changes
MQTTサービス、デバイスサービス、スクリプトサービスのような小さなサービスをiot-service
として統合しました.Golangにより実装され、MQTTブローカーにはmosquitto
にカスタムの認証プラグインを使用しています。以前はMQTTブローカーはアプリケーションロジックに組み込まれていましたが、より安定性とパフォーマンスを向上させるためにアプリケーションロジックから切り離しました。
IoT Service
IoT Serviceは5つの小さなサービスから構成されます。- メッセージサービス
- 環境変数サービス
- スクリプトサービス
- 認証サービス
- デバイスサービス
メッセージサービス:
メッセージサービスはユーザーアプリケーションのログ, Syslog, isaax-agentのログをハンドリングします. 開発者はログの送り先としてPapertrailのような外部サービスと連携できます. メッセージサービスはサードパーティのサービスとisaax-gatewayに対してデバイスのログメッセージを中継します。環境変数サービス:
環境変数サービスはプロジェクトが持つ環境変数を管理します。isaax-gatewayからの読み取りや更新リクエストを受け取り, 関連するデバイスに対して更新を反映します。スクリプトサービス:
スクリプトサービスは開発者が定義したスクリプトを特定のタイミングで実行するためのサービスです. 現在は下記の3つのタイプをサポートします.pre-install
– ユーザーアプリケーションのインストール前に実行します。pre-update
– ユーザーアプリケーションの更新毎に実行します。post-update
– ユーザーアプリケーションの更新後に実行します。
#!/bin/bash
echo "Hello, I run before|after app installation|update|removal"
内部トリガー:
内部トリガーはプロジェクトの作成・削除のトピックを購読し、イベントを受け取るとプロジェクトの作成または削除に必要な処理を環境変数サービスとスクリプトサービスにリクエストします。認証サービス:
以前は発行済みのJWTをMQTTブローカーの認証手段としていましたが、新たなバージョンではデバイスはプロジェクトトークンを使ってMQTTブローカーに接続し、デバイスの認証のみをおこないます。認証に成功したデバイスはMQTTトピックを購読するためにセッションIDを受け取ってバックエンドで認証します。プロジェクトトークンとデバイスIDはisaax-agentの設定ファイル/etc/isaax.conf
に格納されます。
サービスレジストリ:
サービスレジストリはIoT Serviceのライフサイクルを管理します。設定をJSONファイルから読み取りIoTサービスを初期化します。フロントエンドの変更点
- アカウント削除機能の追加
- 折りたたみ可能なサイドバー
- 決済フォームの改善. 新たなデザインを適用すると共に, 機能追加として複数の請求先住所の登録、クレジットカードの登録, 月払い・年払いの選択が可能になりました
- 新しい料金体系
- ログインエラーに関するより有益なメッセージ
- ログインに連続して失敗した際のアカウントブロックとアカウントの復帰方法に関するメールの送信