A. ローカルSNSについて
1. ローカルSNSの概要
ローカルSNSは、居住している地域をベースにしたオンライン上の交流を主眼にしたソーシャルネットワーキングサービス(SNS)のこと。情報の閲覧や投稿が近隣住民同士に限定される場合が多く、通常のSNSと比べてクローズドなSNSであることが特徴。
2. ローカルSNSの背景
ローカルSNSは、米国のスタートアップNextdoorが老舗。同社は2008年に設立以降、順調に成長してきたがコロナウイルスの影響による移動制限・在宅勤務の影響を受け、地域密着型の特色が追い風となっています。
3. ローカルSNSに関連するRAIZINの考え
インターネットサービスの企画、設計、開発、運営、販売、販売代理及び提供 インターネットを利用した各種情報を提供します。
B. RAIZINの「ローカルSNSフレームワーク」
1. 3つの技術を取組んだシステムの開発
- 行政・市民・事業者のペーパーレス化システム
- 行政の技術の蓄積システム構築
- ローカルで閉じた形の SNS 基盤を構築
2. API-バックエンドシステム概要
- 本システムは、理想的なアプリケーションデプロイ単位であり、自己完結型の実行環境であるLinuxコンテナの上にマイクロサービスベースのアプリを構築しています。このようにマイクロサービスをコンテナ内で使用することで、ハードウェアの有効活用が容易にし、ストレージ、ネットワーク、セキュリティなどのサービスをオーケストレーションできる構造となっています。
このため、マイクロサービスとコンテナをクラウドネイティブ・アプリケーション開発の基盤としています。このアーキテクチャによって開発が迅速になり、他のアプリケーションとの連携を最適化しています。
このように、本システムはマイクロサービス開発を簡素化するGoフレームワークgo-microを使用して構築されたフルスタックのGolangマイクロサービスのアプリケーションです。アプリケーションは、次のサービスを提供する一連のサービスとして構築されています。
- Dockerを使ったIoTプラットフォームです。
- Go言語(Backend)、Svelte(Frontend)、Hugo(Frontend)は、コンパイル型で高速な言語とフレームワークです。
- 開発、テスト、本番までを管理できます。
- 本システム は、go-micro を使用して構築された完全なスタックの Golang マイクロサービス のアプリケーションです。アプリケーションは、次のサービスを提供する一連のサービスとして構築されます。
- ペーパーレス化、文書管理システムは、柔軟に様々な文書構造を作成できるStrapiで処理することで、ノーコードで素早くデータベース設計を可能にします。これらのデータは、APIを使ってフロントエンドで表示することで可能にしています。
また、文書作成・編集・閲覧の権限もユーザー毎に設定できデータベースエンジンを備えてますので検索も可能となりセキュアな環境を構築できます。このことにより、市民、業者、自治体で公開・グループ化など自由な組み合わせが可能となります。
なお、Hugo×Strapiによる文書管理システムは、従来のWordファイルと違い、MarkDown形式により素早く汎用性・ポータブル性の高いモノとなります。
- API-Firstをコンセプトに構築されている本システムでは、SMS、メール、チャット、掲示板、アンケートなどの機能をマイクロサービスとして追加できる機能を備えています。
3. バックエンドとミドルウェアのスタック
- Golang:Go言語を実装技術としています。
- go-Micro:Goのマイクロサービスフレームワークです。
- gRPC:サービス間リアルタイム通信用
- NATS:Pub/Subベント駆動型通信用
- multicast: DNSサービスの登録と検出用
- PostgreSql:トランザクション データ ストレージ用
- TimescaleDB : 履歴監査データストレージに使用される時系列 DB
- ArangoDB : マスター データストレージに使用されるマルチモデル データベースです
- Redis : データをキャッシュし、他のサービスへのデータ要求の数を減らすために使用されます。
- Vault : Kubernetes で実行する場合の資格情報管理用
- Strapi:HTTP-RESTによるAPIを提供します。
Grafana:PostgreSQL監視
Strapiによる文書構造の作成
4. Web フロントエンドのスタック
- Javascriptその主な実装技術
- Svelteコンパイル エンジンとして使用されます。 (ロールアップ経由)
- Sveltekitは javascript フレームワークです。
- Sveltestrapは css フレームワークを提供し、ブートストラップに基づいています。
- Font Awesomeアプリケーションにアイコンを表示します。
- Hugo:Go言語できた高速なWEBフレームワークです。
4-1. 監視アプリケーション
- Prometheusマイクロサービス、データベース、ブローカーからメトリックをスクレープ
- Grafanaアプリケーション メトリックのグラフィック表示を提供します。
4-2. オーケストレーションのスタック
- Dockerアプリケーション イメージの作成
- Docker-composeアプリケーションを実行するには
5. レポジトリ構造
プロジェクトは、各フォルダーがサービス、データベース、または共有ライブラリ パッケージを表す方法で編成されます。現在、以下のようになります。
- arangodb: ArangoDB コンテナにマウントされたボリュームとデータ初期化スクリプト
- audit: 監査サービスを監査し、過去の監査情報を収集および保存する
- cicd: CI/CD およびオーケストレーションに関連するファイルを保持します。
- customer: 顧客マスターデータサービス
- diagramforDocs: Readme ドキュメントで使用される図
- globalErrors: 汎用エラー共有パッケージ
- globalMonitoring: 汎用監視ユーティリティ共有パッケージ
- globalProtos: パッケージ間で共有される汎用 protobuf メッセージ定義
- globalUtils: 汎用ユーティリティ共有パッケージ
- grafana: グラファナの設定とカスタムダッシュボードの定義
- nats: NATS ドッカーファイルと設定
- postgres: PostgreSQL DB コンテナにマウントされたボリュームとデータ初期化スクリプト
- product: 製品マスタデータサービス
- promotion:商品割引を追跡するためのプロモーションサービス(これは最初に構築されたサービスでした)
- prometheus: プロメテウスの構成と輸出業者
- redis: redis コンテナにマウントされたボリュームと、構成ファイル (存在する場合)
- timescaleDB: タイムスケール DB コンテナにマウントされたボリュームとデータ初期化スクリプト
- user: ユーザーと認証サービス
- Vault: Vault を使用して K8s でアプリを実行するために必要なスクリプトとポリシー
- web: アプリケーションウェブフロントエンド