ギガノトカップ

はっく2る

https://github.com/naoido/hackz-giganoto

Go

Kubernetes

Redis

Electron

Docker

discordライクなハッカソン向けアプリ

Naoto Kido

推しアイデア

2というテーマだったので「通貫」した構成ということで、Goaを用いたマイクロサービスを構築。インフラからフロントまで構築しました!

作った背景

ハッカソン時にdiscordを使用していましたが、タスク管理や、情報の管理などで様々なサービスを使う必要があったため、一つで完結するようなアプリが欲しかった。

推し技術

golangのフレームワークGoaです!Goaを使うことでgRPCのprotoやOpenAPIを記述する手間が省け、designを描かないと開発が始まらないのでスキーマ駆動にもなって最高です!

プロジェクト詳細

はっく2る 🛠️

概要

Discordでチャットや情報共有をしたいけれど、結局他のサービスへのリンク集になってしまったり、サービスも様々なものを使用することで管理が雑になったりするなどの問題がありました。それを解決するための第一歩としてこのソフトウェアの開発を思いつきました。

目指したところ

大規模な開発でも運用が続けれるような技術選定を心掛け、さらにインフラ部分も自前で用意して構築し、クラウドを使うより深めな技術に触れる。

結果、つなぎこみが間に合わず、完成には至りませんでした(泣

技術紹介

構成図 image

フロント

  • Electron
    • デスクトップアプリケーションを作成するために使用。
  • WebRTC SFU
    • VCと画面共有で使用しました。

バックエンド

  • Goa
    • Goのフレームワークでバックエンドを作成する際に使用。
  • Redis
    • 一時的なデータ保存や、PubSubでのチャット実装などに活用。
  • KongGateway
    • フロントのデータをAPI Gatewayで受け止めセキュリティやトレースのしやすさを追求し採用。
  • MediaSoup
    • 画面共有で配信される動画を処理するためのサーバーに使用。

インフラ・監視

  • OpenTelemetry
    • サービスの状態を可視化するためのデータを、一箇所に集めてログの収集や、トレースをするために採用。
  • Proxmox
    • 仮想化基盤を構築するための採用。
  • Kubernetes
    • 今までdocker-composeに甘えていたのでこの際にチャレンジしてみたく採用。
  • ArgoCD
    • Kubernetes上でデプロイを自動化するならこれなイメージがあったため採用。
  • Jaeger
    • OpenTelemetryで収集したトレースデータを可視化するために採用。
  • TrueNAS
    • Kubernetes上で使用するストレージや、仮想環境のイメージを格納するために採用。

分散トレース

全てのサービスがOpenTelemetryにログやトレース情報などを送信し、Jaegerでトレース表示している状態↓ image

推しポイント

完全ではないと思いますが、フロントが持つトークンはOpaqueトークンに限定し、API Gatewayを通過する際に内部用のJWTに変換することで、直接エンドポイントを叩けないようにし、万が一内部に侵入されたとしても、他のpodには侵入されないような仕組みを目指しました。 さらに、内部の通信はgRPCを用いることでマイクロサービス間の通信を早くすることを目指しました。 そしてOpenTelemetryを配置することで様々な情報を一箇所に集めた後、複数のサービスで使用できるため、運用面でも実装面でも効率化を図りました。

Naoto Kido

@naoido