サービスリソースモデルによるシステムアーキテクチャの開発

サービスリソースモデルのトピックに関する少しの議論を提案し、システムの設計、開発、およびさらなる運用でサービスリソースモデルを使用するためのツールを開発する必要性について尋ねたいと思います。



開始位置:数百人の顧客にサービスを提供する同僚とオンラインシステムを開発および運用しています。 このシステムは複数のサーバーで動作し、複数のデータベースを使用し、メッセージキュー、外部サービスを使用してSMSとメールを送信します。 典型的な状況? かなり。



何を手に入れたいですか?



スポンサーエコノミーの全体像をカバーし、ボトルネックを確認し、システムの他の部分の依存関係を確認し、あるサーバーのsshが別のサーバーで夜間に動作する「小さなハンドラー」にとって非常に重要であることを知るために、より透明なシステムを取得したいと思います。



なんで? 場合によっては、明確な全体像を把握し、スケーリングの方向とボトルネックを把握するために、すべての下位経済を調べる必要があります。 一般に、システム全体のアーキテクチャについて考えてください。 一部のサービス(データベース、メッセージキュー)は他のサービス(アプリケーション)によって使用され、これらのサービスは3番目のサービスによって使用されることを理解しています。 これは、システムの開発と開発において建築家-開発者にとって便利であり、システムの操作においてオペレーターにとって便利です。



なぜITSM / ITILではありませんか? ITSM / ITILを見ると、サービスリソースモデルに関するトピックが表示されます。 ITSM / ITILの難しさや企業での実装について話すことは、私には十分ではありません。 だから、どこかで間違えたら、私を正してください。



ITSM / ITIL
ITSM(ITサービス管理)は、ビジネスニーズを満たすことを目的としたITサービスの管理と編成へのアプローチです。 ITサービスは、人、プロセス、情報技術の適切な組み合わせを活用することにより、ITサービスプロバイダーによって管理されます。 ( ウィキペディアのITSM



ITIL(ITインフラストラクチャライブラリ)は、実際に情報技術サービスの提供に関与する部門または企業の作業を整理するための最良の方法を記述するライブラリです。 ( ウィキペディアのITIL





ITSM / ITILには、サービスリソースモデルがあります。 しかし、このキッチン全体を読み始めて、たとえば「 InfraManager 」や「 OmniTracker 」などの「エンタープライズ」製品の導入を検討すると、「私の頭はワイワイ 」になります。 (さらに、これらの製品は私にはまったく役に立たないので、現在使用されている製品の購入、実装、交換のコストは高く、ほとんどのコストはソフトウェアにはかかりません)。 すべてのITSMのうち、少し必要です-リソースの依存関係の図だけで、さらにITSMは組織全体をカバーする必要があるようですが、狭い領域の割り当てられた小さな領域で使用したいだけです。



次に、サービスリソースモデルの非常に単純化されたバージョンを紹介します。 なぜそんなに単純化するのですか? システム全体の作業を理解するために、より多くのエンティティを導入する必要性を感じるまで。



基本と用語。



このシステムは、サーバーにインストールされているITエコノミー全体の組み合わせです。



サービス-Webサーバーまたはデータベースのいずれかのアプリケーション(以降、アプリケーション=サービス)



リソース-サービスの外部から使用するためにサービスによって提供される機会。



依存関係-サービスと別のサービスのリソースとの関係。



つまり システムはサービスの組み合わせとして表すことができ、その一部はリソースを提供し、他のサービスはそれらを使用します。



リソースの依存関係はデータフローと等しくないことを理解する必要があります。 つまり たとえば、アプリケーションがメッセージサーバーに依存している場合、メッセージサーバーを介してメッセージを送受信します。



簡単な概念図を描いてみましょう。







たとえば、2つのホストがあり、一方にはnode.jsアプリケーションとデータベースサーバーが、もう一方にはPowerDNSサーバーとデータベースサーバーが動作しています。 新しいアカウントを作成すると、node.jsアプリケーションは対応する第3レベルドメインを追加し、PowerDNSデータベースにエントリを記録します。



さらに、サービスの数とその依存関係を補完し、増やすことができます。 原理は明確です。



ツール



Gliffy.comでよく似たスキームを描いていました 。 しかし、今では、このスキームを最新の状態に保つ必要性にますます直面しています。 しかし、気楽に言えば、ダイアグラム内の接続は、線と長方形の接続にすぎません。 そのため、関係の構造を保存し、ダイアグラムにこれらの関係を表示するツールの検索が進行中です。



Gliffyのスキーマの例を次に示します



申し訳ありませんが、品質のためにお願いします。



ディードゥー



検索が進行中(そして、読者の皆さん、コメントでツールを教えてほしいと思います。おそらく似たようなものが既にHabréにありましたが、見つけられませんでした)、同僚として、私は小さなアプリケーションdeedooをスケッチしました。 その中に、ホスト、サービス、リソース、依存関係に関する情報を保存し、依存関係図も作成します。 このスキームは、 Joint.jsライブラリを使用して構築されます。



Githubプロジェクト: github.com/antirek/deedooインストール手順はリポジトリにあります。 deedooを使用すると、上記のPowerDNSで図が描かれます。



ここで、たとえば、node.jsアプリケーションの依存関係がdeedoo Webインターフェースでどのように見えるか





これまでのところ、Deedooアプリケーションは依存関係を描画することしかできません。 ただし、設定サーバーとして使用することはまだ考えられています。 結局のところ、私たちの任意のアプリケーションがいくつかのリソースに依存していることがわかっている場合、そのリソースをその作業に必要とします。



config = serverConf( 'http://config.server.ru').appID( 'super_key').get(); 開始時に必要なアプリケーション設定をすべて取得できます。 ロードされた構成に必要なパラメーターがない場合、単にアプリケーションを起動しません。 たとえば、データベースを別のホストに転送する場合、アプリケーションで設定を取得するために再起動する必要がありますか?



次は?



まだわかりません。 一方で、私はより普遍的に、他方で実用的です。 結局のところ、目標はシステムの開発をより明確で透明にすることです。 一方では、監視がサポートされ、他方では、構成管理がサポートされます。 つまり このサービスのリストに-仕事、ステータス、パフォーマンスのメトリックを確認したいです。 また、ボタンを押してデータベース、アプリケーションなどを更新したいと思います。



それで、このノートの最も重要なポイントに来ます:次に何をすべきか? オプション:



a)すべてを真剣に行うこと-ITSM / ITILを導入し、完成品を選択しますか? (おそらく、優れた無料およびオープンソースのソリューションがありますか?インターネットでの実装の説明?)



b)自転車を開発しますか? つまり すべての依存関係を記述するサービスを使用します。 また、開発中の新しいアプリケーションは、このサービスからの設定のロードを使用します。 (一般的に、私はすべてのユーザーが設定サーバーからアプリケーションから設定を取得し、グループ、タイプを追加するというアイデアが好きです-そして一般的にはそれはサウンドシステム、IMHOであることが判明します。さらに、設定を取得すると、deedooでこれらの宣言された依存関係がサーバーで実行される実際のアプリケーションに接続されます多分それは別の方法でやる価値がありますか?すでに同様のシステムがあるのでしょうか?)



c)その他?



一般的に、すべてが少し面倒で混ざり合っています。 オンラインシステムの開発とその運用についてもあります。 さらに、用語の混乱。 私は自分の考えとベストプラクティスを共有しました。メモに関するコミュニティからの建設的なフィードバックを期待しています。



更新しました。



インフラストラクチャの問題は私だけに関係するものではありません。 興味深いプロジェクトのうち、terraform.io(consul.ioと組み合わせて)およびweave.worksに言及できます。



All Articles