プレシオカップ

*OM

https://github.com/K-Kizuku/plesio-server

Go

C++

Kubernetes

Redis

Python

ターミナル上で動くzoomのようなミーティングアプリ!!

Kizuku

しめさば

推しアイデア

カメラから受け取った映像をリアルタイムでAAに変換してターミナルに表示してくれる

作った背景

エンジニアたるものWebブラウザを開くことよりターミナルを開くことの方が多いだろうからターミナル上でミーティングできたらいいよねってなった

推し技術

パフォーマンス重視! サーバー側はRedisとin-memory-cacheを用いて,大量のトラフィックも捌けるようにしています. 多言語対応! 諸事情により使えない言語がある人向けに3言語での実装を行いました

プロジェクト詳細

技術構成図

image

クライアント推しポイント

多言語対応

エンジニアたるもの諸事情や宗教上の理由で使えない言語があると思います.そこで,今回のプロダクトではクライアントサイドは複数の言語(C++,Python,Go)で行いました.また,マルチプラットフォーム対応(Mac,Windows,Linux)も行いました. AA化にはOpenCVを用いました

サーバーサイド推しポイント

パフォーマンス重視

今回はリアルタイム通信サーバーということで,パフォーマンスを意識して作りました.通信はUDPで行い,インメモリキャッシュを用いてキャッシュを行い,データの保存にはRedisを用いました.

インフラ推しポイント

HorizontalPodAutoscaler

今回はサーバーへの負荷がかかりやすいサーバーということで,負荷分散ができるようにしました.またargoCDを用いており,開発者体験がとても良かったです.

PM推しポイント

今回はドキュメンテーションにも力を入れてみました.

ADRとDesign Docのドキュメントに関してはscaffdogでテンプレートを自動生成できるようにMakefileに書いてあります.(バージョニングもできます!)

ツリー

. ├── Dockerfile ├── Makefile ├── README.md ├── app │ ├── adapter │ │ ├── controller │ │ │ ├── chat.go │ │ │ ├── controller.go │ │ │ ├── meeting.go │ │ │ └── schema.go │ │ └── gateway │ │ ├── client.go │ │ └── room.go │ ├── di │ │ ├── wire.go │ │ └── wire_gen.go │ ├── domain │ │ ├── entity │ │ │ ├── client.go │ │ │ └── room.go │ │ └── repository │ │ ├── client.go │ │ ├── data_store.go │ │ ├── db.go │ │ ├── in_memory_cache.go │ │ └── room.go │ ├── driver │ │ ├── redis │ │ │ └── init.go │ │ ├── ristretto │ │ │ └── init.go │ │ ├── tcp │ │ │ └── server.go │ │ └── udp │ │ └── server.go │ └── usecase │ ├── ascii_art.go │ ├── chat.go │ ├── meeting.go │ └── session.go ├── changelog.config.js ├── ci.mk ├── cmd │ └── main.go ├── compose.yml ├── data │ └── redis │ └── dump.rdb ├── docs │ ├── ADR │ │ └── 1_ristretto.md │ └── DesignDog │ ├── 1_アスキーアート.md │ ├── 2_ルームの作成.md │ ├── 3_ルームの参加.md │ ├── 4_ルームの退出.md │ ├── 5_音声通信.md │ ├── 6_コメント機能.md │ └── 7_放映者の選択.md ├── go.mod ├── go.sum ├── locust │ ├── data_subnet.tf │ ├── main.tf │ ├── output.tf │ ├── plan │ │ └── basic.py │ ├── provisioner.tf │ └── variables.tf ├── server.go └── utils ├── config │ └── config.go └── uuid └── uuid.go

Kizuku

@Kizuku