$30 off During Our Annual Pro Sale. View Details »

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

iwask
January 24, 2021

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

iwask

January 24, 2021
Tweet

Other Decks in Technology

Transcript

  1. KUBERNETES 上に GO 言語と NOSQL で、
    独自のマイクロサービスフレームワークを
    構築した話
    株式会社Hexabase 岩崎 英俊
    Copyright 2021 Hexabase, Inc

    View Slide

  2. 自己紹介
    岩崎 英俊 / Hidetoshi Iwasaki
    ⚫ 株式会社Hexabase 代表取締役 CEO
    ⚫ 文系学部出身、システム開発会社でSE経験後、販売・会計・人事システムなどの企業開発
    プロジェクトなどに参加
    ⚫ SaaS/IaaS事業の企画・立ち上げ・事業運営などを経験
    ⚫ 2016 年に起業 ~ クラウドバックエンドのど真ん中にチャレンジ中
    ⚫ エンタープライズ BaaS「Hexabase」を提供中
    Copyright 2021 Hexabase, Inc

    View Slide

  3. サマリー
    1. システム開発に感じてきた課題、起業の背景
    2. 開発したクラウドサービス「Hexabase」の特徴
    3. Micro-service, k8s, NoSQL, 様々な開発言語などの技術を
    実活用してみた感想 (Q&A形式でふりかえり)
    Copyright 2021 Hexabase, Inc
    3

    View Slide

  4. システム開発に、
    こんな課題を持っていませんか?
    Copyright 2021 Hexabase, Inc

    View Slide

  5. システム開発に感じてきた課題
    企業システム開発
    ⚫多くのコストと長い期間をかけて開発
    ⚫使いやすいものにならない
    ⚫開発の現場はいつも戦々恐々…
    Copyright 2021 Hexabase, Inc

    View Slide

  6. システム開発の手段が大きく変わる
    Copyright 2021 Hexabase, Inc
    SPA
    Micro-service
    API- economy
    Cloud-Native
    NoSQL

    View Slide

  7. コンシューマ向け技術が先導
    Copyright 2021 Hexabase, Inc

    View Slide

  8. 一方で相変わらない現場・・・
    Copyright 2021 Hexabase, Inc
    身動きできず
    ⚫ガチガチなモノシリック・アーキテクチャー
    ⚫スケールアウトできないDB
    ⚫凍結された開発言語
    Web APP DB

    View Slide

  9. モダン技術を利用できれば、
    企業システムも変わることができるはず・・・
    Copyright 2021 Hexabase, Inc

    View Slide

  10. エンジニアの負担は大きい
    Copyright 2021 Hexabase, Inc
    (参考)Guide to becoming a modern developer
    Front-end Back-end DevOps

    View Slide

  11. 企業システムをモダン化するための
    クラウドプラットフォームを作りたい…
    Copyright 2021 Hexabase, Inc

    View Slide

  12. そんなとき、
    すごいエンジニアに会った!
    Copyright 2021 Hexabase, Inc

    View Slide

  13. CTO:Jeane Paul Banayat Soliva
    Copyright 2021 Hexabase, Inc
    13

    View Slide

  14. いっしょに起業
    Copyright 2021 Hexabase, Inc
    14

    View Slide

  15. 企業システムのための
    クラウドサービスを開発
    Copyright 2021 Hexabase, Inc

    View Slide

  16. 初期のドラフト 2016
    Copyright 2021 Hexabase, Inc
    ⚫ スケーラビリティ
    ⚫ 変化への対応
    ⚫ 汎用性
    ⚫ 処理スピード
    あらゆる企業システムを1つのプラットホームで

    View Slide

  17. 当初開発したクラウドサービス
    Copyright 2021 Hexabase, Inc
    ⚫ いまでいう『NoCode』指向のサービス
    ⚫ データベースやワークフローを設定すると、
    フロントエンドが動的にできあがる
    ⚫ RPA的な、Bot機能を追加
    ⚫ 外部SaaSの連携設定

    View Slide

  18. 学び
    NoCodeツールの限界
    ⚫システム設定だけで、お客様システムを組み上げることの限界
    ⚫フロントエンドの要望は、お客で千差万別
    Copyright 2021 Hexabase, Inc

    View Slide

  19. バックエンドに特化
    Copyright 2021 Hexabase, Inc
    クラウドDB
    設定画面
    API
    開発会社がUIを開発
    Angular
    入力フォーム
    案件一覧
    新規案
    件登録
    要件にあわせてUIを制作

    View Slide

  20. 誕生 『HEXABASE』
    システム開発会社、エンジニアがお客様
    ⚫ クラウド時代のバックエンド機能をまとめたサービス
    ⚫ フロントエンドは自由開発できる
    ⚫ バックエンド機能を APIサービスで提供
    ⚫ 開発支援ツールの充実(CLI、SDK)
    Copyright 2021 Hexabase, Inc
    企業システムを短期間・低コストで開発できる

    View Slide

  21. 技術的な特徴
    Copyright 2021 Hexabase, Inc
    1. Kubernetesによるマイクロサービス管理
    2. アプリケーションフレームワークを nodejs/Goで独自開発
    3. 技術トレンドにあわせて.NET C#, Pythonなども活用
    4. NoSQL の組み合わせで データストアを実現
    5. FaaS(Function as a Service)を組み合わせてバックエンド拡張も可能

    View Slide

  22. マイクロサービスアーキテクチャー
    まだ、コードベースも小さかった時期にkubernatesを採用 (2016年)
    Copyright 2021 Hexabase, Inc
    Proxy
    Proxy
    Proxy
    Hexabase
    Core API services

    View Slide

  23. 5種類のデータベース
    Copyright 2021 Hexabase, Inc
    データアイテム
    権限関連の制御
    ユーザー情報
    採番などトランザクション
    キャッシュ
    全文検索
    ドキュメント型NoSQL
    グラフ型NoSQL
    全文検索DB
    インメモリ高速DB
    RDBMS

    View Slide

  24. 用途に分けたマイクロサービスを開発
    Copyright 2021 Hexabase, Inc

    View Slide

  25. 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)

    View Slide

  26. 実活用してみて
    Q&A形式でふりかえり
    Copyright 2021 Hexabase, Inc

    View Slide

  27. マイクロサービスをどのように分割したか?
    Copyright 2021 Hexabase, Inc

    View Slide

  28. マイクロサービスをどのように分割したか?
    Copyright 2021 Hexabase, Inc
    • 受注登録
    • ユーザ登録サービス
    • 決済サービス
    • 認証サービス
    • :
    • 通常のリクエスト処理
    • 大量データ投入
    • データの一括更新(遅延処理)
    • キューイングされた重い処理(順番待ち)
    • Timer起動される(定期処理)
    • 外部サービスとのやりとり
    • 拡張プログラムの実行
    • マイクロサービス間通信Hub
    Function(処理の特性)単位
    提供サービス(目的)単位
    Hexabaseは
    こちらを選択

    View Slide

  29. なぜ複数のDBが必要なのか?
    DBをどのように使い分けているのか?
    Copyright 2021 Hexabase, Inc

    View Slide

  30. なぜ複数のDBが必要なのか?
    Copyright 2021 Hexabase, Inc
    適材適所
    •非構造化データをmongodb
    •複雑な権限の関連をArrangoDB
    •全文検索、ファイル内検索でelastic
    •データキャッシュをRedis
    •採番など厳密なトランザクション管理
    にMySQL
    データアイテム
    権限関連の制御
    ユーザー情報
    採番などトランザクション
    キャッシュ
    全文検索

    View Slide

  31. NOSQLの組み合わせでDBを実現
    Copyright 2021 Hexabase, Inc
    アイテムリンク
    table_1
    table_2
    X
    Y
    Z
    データベースの関連
    個々の
    データアイテムを
    MongoDBに格納
    データ間の
    関連付け情報を保持

    View Slide

  32. グラフ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がもつアクセスキー
    ユーザアクセスキー
    グループアクセスキー
    ロールアクセスキー

    View Slide

  33. NOSQLの組み合わせでRDB機能を実現
    Copyright 2021 Hexabase, Inc
    一般的なRDB Hexabase
    論理設計(ER表記) どちらも、概念的には同様の表記が可能
    関連の保持 双方でテーブルのキーフィールドを指定
    し、論理的に関連をもつ。
    関連データの実体を持たない。
    それぞれのデータアイテムごとに
    関連の実体データ(Item_links)を
    持つ。
    テーブル間の結合検索 SQL発行時に、各テーブルデータを検索
    してJOINする。データ量や構造によって
    パフォーマンスが劣化するケースがある。
    クエリ実行時に、実体の関連デー
    タをたどってJOINするため、高速。
    データ登録・更新・削除時
    の挙動
    テーブルデータのみを更新し、関連情報
    の更新は発生しない。
    更新データをもとに、関連データ
    をUpdateする。
    リアルタイム性
    ACID特性
    ACIDによるデータ整合が完全に担保さ
    れる。
    関連データが作成されるまでの間
    に多少のタイムラグが発生

    View Slide

  34. K8Sにしてよかったこと、難しかったこと
    Copyright 2021 Hexabase, Inc

    View Slide

  35. K8Sにしてよかったこと、難しかったこと
    Copyright 2021 Hexabase, Inc
    • 少人数でのサービス管理では、もはや必須ツール
    • 初期の段階から、DBをpodで運用→マルチクラウド化
    • DevOpsとの親和性で、さらに効率的に

    View Slide

  36. MICROSOFT AZUREへ
    • 当初は、GCPで動かしていた
    • Azure Kubernetes Serviceの登場で移行
    • MongoDBなどのDBがpodで稼働していたため、移行が容易
    • 数時間で完全移行完了
    Copyright 2021 Hexabase, Inc

    View Slide

  37. 開発言語をどのように選定している?
    Copyright 2021 Hexabase, Inc

    View Slide

  38. 開発ツールは固定しない
    • メイン言語は、変わらずGo言語
    • .NET が Docker の上で動くようになった。(C#も進化してる!)
    →次のマイクロサービスをC#で開発
    • フロントエンドのモバイルアプリも、C#で動いている
    • FaaS内のコードはPython
    • フロントエンドはTypeScript
    など
    Copyright 2021 Hexabase, Inc

    View Slide

  39. 進歩する技術に追随することの難しさ
    • 技術ロックされ、ビジネスの足かせになる。
    • 二言目には、『全部初めから作り直さなきゃ』
    • みえない技術的負債が、ビジネスの足を引っ張る状況
    • 常に作り直し続けている。新旧が混在している状態。
    • マイクロサービスとそれを支える技術の成果
    Copyright 2021 Hexabase, Inc
    BEFORE
    AFTER

    View Slide

  40. 技術自体の進化
    Copyright 2021 Hexabase, Inc
    ビジネス環境の変化
    システムもエンジニアも成長し続ける環境が必要
    ビジネスと技術の両立

    View Slide

  41. 今後の機能向上
    ⚫ マルチクラウド対応
    ⚫ GraphQL
    ⚫ RDBを利用したデータ管理エンジン
    ⚫ SDKやCLIの強化
    ⚫ サンプルSPAを、オープンソースで提供
    Copyright 2021 Hexabase, Inc

    View Slide

  42. 法人システムも
    REACT VUE などで開発しまくる時代に
    Copyright 2021 Hexabase, Inc
    古い法人システムをリプレースしよう

    View Slide

  43. Copyright 2021 Hexabase, Inc
    https://hexabase.com
    まずはお試しを!

    View Slide

  44. ご清聴ありがとうございました
    Copyright 2021 Hexabase, Inc

    View Slide