マイクロサービスアーキテクチャにおける多くのアプリケーションのAPIエンドポイントの維持と文書化


8

マイクロサービスを使用する上での最大の問題点の1つは、APIが十分に文書化され、APIがダウンストリームアプリケーションに影響を与えずに動作を変更しないことを確認することです。この問題は、相互に依存し合うサービスが多数ある場合に増幅されます。多分その時点であなたは間違ったマイクロサービスをやっていますが、私は余談です。

異なるチームが所有する20のマイクロサービスを継承していて、どのアプリケーションが他のどのアプリケーションのAPIエンドポイントを使用するかについての明確なドキュメントがないとします。これを文書化する規定された方法はありますか?最初に、各アプリケーションのエンドポイントを分析してデータベーステーブルに追加し、多対多テーブル(ほとんどすべてがRailsアプリケーションです)で各アプリケーションとアプリケーションのルート間にFK関係を作成することを考えました。しかし、これがこれを処理するための良い方法であるかどうか、または私はここで車輪を再発明しているかどうかわかりません。

振り返ってみると、マイクロサービスをゼロから始めている場合、これはアプリケーションの相互作用を文書化するのにそれほど悪くない方法かもしれません。これにより、データベースを使用して単一の信頼できる情報源が維持され、エンドポイントへの変更は、データベースの変更と連動してアプリケーションで実行されます。考え?

回答:


4

「マイクロサービスアーキテクチャ」の利点の大部分は、それらの関係のすべてを文書化していないことです。各サービスは独自の製品です。また、各サービスの所有者は、独立した製品としてのサービスの運用に責任があります。これには次のようなものが含まれます。

  • 「マーケティング」ドキュメント、ユーザードキュメント、変更ログ(非推奨を含む)の公開
  • 顧客/消費者が機能をリクエストする方法/バグを報告する方法を提供する
  • SLAの維持
  • 可能な限り下位互換性のある更新を行い、変更壊す
  • 彼らが直接利用するサービスのニュースフィードを知り、視聴する
  • 可能な場合は依存関係のプルーニング
  • 保守に関連性がなくなったり、コストがかかりすぎたりした場合のサービス全体の廃止

等々。

とりわけ、私は、マイクロサービスの主要な利点の1つとして、サービス所有者がサービスが行う「1つのこと」に本当に焦点を当てて専門化する機会を強調します。

各製品またはサービスの所有者が独自の依存関係を文書化する場所については、それらがコンパイラの構成(またはビルドスクリプト)に追加されるときに「自然に」発生するはずです。ServiceAが依存しているものを知る必要がある場合はServiceA/Configuration.xml(または何でも)教えてくれます。また、通常、各サービスの所有者は最初に自分の直接の依存関係を図に示しますが、依存関係の依存関係などは想定していません。また、情報が既にコードに含まれている場合、これらの図が今後も維持されるとは必ずしも期待していません。

本当に全体像が必要な場合は、configs / buildスクリプトをスキャンしてください。その出力で何をするか、どのように保存するかなどは、データがどのような決定を下すのに役立つかに完全に依存します。


これは、マイクロサービスでの構築を開始する場合に問題を攻撃する良い方法だと思いますが、既存のセットアップでは、Apacheログを解析して使用状況の情報を取得し、それらを文書化し、アプリケーションとのミーティングを計画しています所有者。
ハイド

@hydeあなたは、サービスの所有者がそれぞれサービスの存在を正当化することを合理的に要求できる立場にありますか?(メトリックでサポートし、データをログ?)それとも、あるあなたは、サービスの所有者?...サービス参照のためにそれらのアプリ構成を検索できるリポジトリの集中リポジトリがありますか?
svidgen 2018年

いいえ、私は現時点でこれらのアプリケーションのセットアップ方法を変更する立場にはありません。これは、サービスの所有者にその存在を正当化するように依頼することによって示唆したことだと思います。;)サービスとサービスにアクセスするために使用するURLをリストする、本番サーバーのJSONファイルを偶然見つけました。これは設定の全体像を提供するものではありませんが、それは良い出発点だと思います。
hyde

うーん。ほんとうに私が示唆していたことではありません。しかし、私はコメントを非常に貧弱に言いました...基本的に、各サービス所有者が責任を持って上記のことを行っている場合、各所有者は、サービスがどこに適合し、その依存関係が何であるか(またはそれが中古)。
svidgen 2018

...それを超えて、私が現在勤務している特に大きな会社では、サービスの相互作用が非常に複雑なため、完全に図式化することはできません。そして、それは大丈夫です。各所有者は、サービスの依存関係を知っており、後方互換性の約束(通常は)、例外のメーリングリスト、およびSLAの組み合わせでコンシューマーに約束をします。
svidgen 2018

1

統合の図を作成し、これをリポジトリに含めることをお勧めします。図をXMLまたはJSONファイルにエクスポートして、このファイルをリポジトリにコミットできる無料のツール(draw.ioなど)を選択します。GithubまたはGitlabを使用している場合は、この図からイメージを生成し、WikiまたはREADME.mdファイルに含めれば、開発者がブラウザーからリポジトリーを視覚化するたびにイメージが表示されます。

同じ戦略をデータベースに使用できます。

APIリソースのドキュメントについては、Swaggerが適切なオプションです。

この問題は、相互に依存し合うサービスが多数ある場合に増幅されます。多分その時点であなたは間違ったマイクロサービスをやっていますが、私は余談です。

これは確かに問題です。


2
他の方法もありますが、どのAPIテスト環境(PostManなど)がサポートされているかを監視する価値はあります。RAMLは同じスペースの別のオプションです。同じ記述JSONはHTML APIドキュメントを生成し、サービスを他の人に説明するために使用できます。つまり、これを使用してWebバインディングを生成できます。(SwaggerとRAMLの両方がこれをサポートしています)。
ベリンロリッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.