A. ローカルSNSについて
1. ローカルSNSの概要
地域密着型のローカルSNSに関するビジネステーマ
2. ローカルSNSの用語の定義
ローカルSNSは、居住している地域をベースにしたオンライン上の交流を主眼にしたソーシャルネットワーキングサービス(SNS)のこと。情報の閲覧や投稿が近隣住民同士に限定される場合が多く、通常のSNSと比べてクローズドなSNSであることが特徴。
3. ローカルSNSの背景
ローカルSNSは、米国のスタートアップNextdoorが老舗。同社は2008年に設立以降、順調に成長してきたがコロナウイルスの影響による移動制限・在宅勤務の影響を受け、地域密着型の特色が追い風となっています。
4. ローカルSNSに関連するRAIZINの考え
インターネットサービスの企画、設計、開発、運営、販売、販売代理及び提供 インターネットを利用した各種情報提供サービスを考えます。
B. RAIZINの「ローカルSNSフレームワーク」
1. 3つのテーマに取組んだシステムの開発
- 行政・市民・事業者のペーパーレス化システム
- 行政の技術の蓄積システム構築
- ローカルで閉じた形の SNS 基盤を構築
2. API-バックエンドシステム概要
本システムは、理想的なアプリケーションデプロイ単位であり、自己完結型の実行環境であるLinuxコンテナの上にマイクロサービスベースのアプリを構築しています。このようにマイクロサービスをコンテナ内で使用することで、ハードウェアの有効活用が容易にし、ストレージ、ネットワーク、セキュリティなどのサービスをオーケストレーションできる構造となっています。
このため、マイクロサービスとコンテナをクラウドネイティブ・アプリケーション開発の基盤としています。このアーキテクチャによって開発が迅速になり、他のアプリケーションとの連携を最適化しています。
このように、本システムはマイクロサービス開発を簡素化するGoフレームワークgo-microを使用して構築されたフルスタックのGolangマイクロサービスのアプリケーションです。アプリケーションは、次のサービスを提供する一連のサービスとして構築されています。
- Dockerを使ったIoTプラットフォームです。
- Go言語(Backend)、Svelte(Frontend)コンパイル型で高速な言語とフレームワークです。
- 開発、テスト、本番までを管理できます。
- 本システム は、go-micro を使用して構築された完全なスタックの Golang マイクロサービス のアプリケーションです。アプリケーションは、次のサービスを提供する一連のサービスとして構築されます。
3. バックエンドとしてのスタック
- Golang:Go言語を実装技術としています。
- go-Micro:Goのマイクロサービスフレームワークです。
- gRPC:サービス間リアルタイム通信用
- NATS:Pub/Subベント駆動型通信用
- multicast: DNSサービスの登録と検出用
- PostgreSql:トランザクション データ ストレージ用
- TimescaleDB : 履歴監査データストレージに使用される時系列 DB
- ArangoDB : マスター データストレージに使用されるマルチモデル データベースです
- Redis : データをキャッシュし、他のサービスへのデータ要求の数を減らすために使用されます。
- Vault : Kubernetes で実行する場合の資格情報管理用
Grafana:PostgreSQL監視
4. Web フロントエンドのスタック
- Javascriptその主な実装技術
- Svelteコンパイル エンジンとして使用されます。 (ロールアップ経由)
- Sapperは javascript フレームワークです。
- Sveltestrapは css フレームワークを提供し、ブートストラップに基づいています。
- Font Awesomeアプリケーションにアイコンを表示します。
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: アプリケーションウェブフロントエンド