Skip to content
earlgray edited this page Jul 3, 2023 · 2 revisions

システムアーキテクチャ図

開発方針

  • !!!!!保守性!!!!!
    • 開発者が卒業した後でも大木研の誰かが引き継いでメンテを行えるようなシステムにする
  • スキーマ駆動開発にする
    • backend は frontend のために存在する。frontend と backend 間で仕様の誤解などが発生してはならないため、必ず最初に proto でスキーマや rpc の仕様を決めた後に開発を行う。

Envoy とは

基本的に通信は全て gRPC で行われています。 ただし、エンドユーザが利用するブラウザでは HTTP/2 が実装されていないため gRPC の仕様を満たすことができません。そのため、client と backend の間に envoy と呼ばれる proxy を挟み、ここで HTTP/1.1 な application/grpc-web-text を HTTP2 な application/grpc に変換をして gRPC backend に送信しています。 https://grpc.io/blog/state-of-grpc-web/#the-tech

なぜ gRPC なのか

主な理由としては以下の2点が挙げられます。

  • frontend と backend で型の共有がしたい
  • 単純な興味

2023年度からベンチマークシステムは大幅な改修をすることとなりましたが、その中でも最も大きかったのは frontend と backend が分離されたことでした。また、それぞれの開発も別々で行われていたため、frontend と backend 間で型の共有をすることは最重要課題として考えていました。 ここで、単純に型の共有をしたいのであれば、OpenAPI とその generator を利用することが有力候補として挙がるでしょう。しかし、OpenAPI は API の仕様として description 等を記述を必須としている他、形式が yaml のために非常に多くの時間を費やすという問題がありました。今回の目的は API の仕様を記述するのではなく、単純に型の共有をするということであったため、OpenAPI の採用は見送ることとなりました。