Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KUBERNETES 上に GO 言語と NOSQL で、 独自のマイクロサービスフレームワークを 構築した話

iwask
January 24, 2021

KUBERNETES 上に GO 言語と NOSQL で、 独自のマイクロサービスフレームワークを 構築した話

iwask

January 24, 2021
Tweet

Other Decks in Technology

Transcript

  1. 自己紹介 岩崎 英俊 / Hidetoshi Iwasaki ⚫ 株式会社Hexabase 代表取締役 CEO

    ⚫ 文系学部出身、システム開発会社でSE経験後、販売・会計・人事システムなどの企業開発 プロジェクトなどに参加 ⚫ SaaS/IaaS事業の企画・立ち上げ・事業運営などを経験 ⚫ 2016 年に起業 ~ クラウドバックエンドのど真ん中にチャレンジ中 ⚫ エンタープライズ BaaS「Hexabase」を提供中 Copyright 2021 Hexabase, Inc
  2. 初期のドラフト 2016 Copyright 2021 Hexabase, Inc ⚫ スケーラビリティ ⚫ 変化への対応

    ⚫ 汎用性 ⚫ 処理スピード あらゆる企業システムを1つのプラットホームで
  3. バックエンドに特化 Copyright 2021 Hexabase, Inc クラウドDB 設定画面 API 開発会社がUIを開発 Angular

    入力フォーム 案件一覧 新規案 件登録 要件にあわせてUIを制作
  4. 技術的な特徴 Copyright 2021 Hexabase, Inc 1. Kubernetesによるマイクロサービス管理 2. アプリケーションフレームワークを nodejs/Goで独自開発

    3. 技術トレンドにあわせて.NET C#, Pythonなども活用 4. NoSQL の組み合わせで データストアを実現 5. FaaS(Function as a Service)を組み合わせてバックエンド拡張も可能
  5. KUBERNETESで運用を最適化 Copyright 2021 Hexabase, Inc はオートスケールによる拡張例 dev staging, production Clusters

    Node Pools Pods Zone: northeast1 (TOKYO) Zone: northeast1 (TOKYO) mongodb mysql elasticsearch dd-agent(※) redis (minio) configctl nginx-ingress beee-lp web-ui apicore importer notificator linkerProxy sentinel(※) Persistent Disks Persistent Disk 1TB Persistent Disk 10GB SSD Persistent Disk 500GB Persistent Disk 10GB (postfix) (nsq)
  6. マイクロサービスをどのように分割したか? Copyright 2021 Hexabase, Inc • 受注登録 • ユーザ登録サービス •

    決済サービス • 認証サービス • : • 通常のリクエスト処理 • 大量データ投入 • データの一括更新(遅延処理) • キューイングされた重い処理(順番待ち) • Timer起動される(定期処理) • 外部サービスとのやりとり • 拡張プログラムの実行 • マイクロサービス間通信Hub Function(処理の特性)単位 提供サービス(目的)単位 Hexabaseは こちらを選択
  7. なぜ複数のDBが必要なのか? Copyright 2021 Hexabase, Inc 適材適所 •非構造化データをmongodb •複雑な権限の関連をArrangoDB •全文検索、ファイル内検索でelastic •データキャッシュをRedis

    •採番など厳密なトランザクション管理 にMySQL データアイテム 権限関連の制御 ユーザー情報 採番などトランザクション キャッシュ 全文検索
  8. NOSQLの組み合わせでDBを実現 Copyright 2021 Hexabase, Inc アイテムリンク table_1 table_2 X Y

    Z データベースの関連 個々の データアイテムを MongoDBに格納 データ間の 関連付け情報を保持
  9. グラフDBで、権限管理 Copyright 2021 Hexabase, Inc A G1, G2, G3, G4,

    G5, G6, G7, G7, G8 R1 A B workspace ワークスペース 事業部門 顧客 ClientA ClientB Sales DevOps customers staff A B C H システム管理 admin A members G1 G2 G3 G4 R1 R2 R3 R4 G5 G6 G7 G8 B G2, G3, G4 R1, R2 ユーザAがもつアクセスキー ユーザBがもつアクセスキー ユーザアクセスキー グループアクセスキー ロールアクセスキー
  10. NOSQLの組み合わせでRDB機能を実現 Copyright 2021 Hexabase, Inc 一般的なRDB Hexabase 論理設計(ER表記) どちらも、概念的には同様の表記が可能 関連の保持

    双方でテーブルのキーフィールドを指定 し、論理的に関連をもつ。 関連データの実体を持たない。 それぞれのデータアイテムごとに 関連の実体データ(Item_links)を 持つ。 テーブル間の結合検索 SQL発行時に、各テーブルデータを検索 してJOINする。データ量や構造によって パフォーマンスが劣化するケースがある。 クエリ実行時に、実体の関連デー タをたどってJOINするため、高速。 データ登録・更新・削除時 の挙動 テーブルデータのみを更新し、関連情報 の更新は発生しない。 更新データをもとに、関連データ をUpdateする。 リアルタイム性 ACID特性 ACIDによるデータ整合が完全に担保さ れる。 関連データが作成されるまでの間 に多少のタイムラグが発生
  11. 開発ツールは固定しない • メイン言語は、変わらずGo言語 • .NET が Docker の上で動くようになった。(C#も進化してる!) →次のマイクロサービスをC#で開発 •

    フロントエンドのモバイルアプリも、C#で動いている • FaaS内のコードはPython • フロントエンドはTypeScript など Copyright 2021 Hexabase, Inc