web-dev-qa-db-ja.com

ミドルウェアとは正確には何ですか?

最近、多くの人がミドルウェアについて話しているのを聞いたことがありますが、ミドルウェアの正確な定義は何ですか?ミドルウェアを調べると、多くの情報といくつかの定義が見つかりますが、これらの情報と定義を読んでいると、ほとんどすべての「ウェア」が何かの中間にあるようです。だから、すべてのものはミドルウェアですか?

または、ミドルウェアではない製品の例はありますか?

180
Michel

会社が4つの異なる製品を製造しており、クライアントが別の3つの異なる会社からの別の3つの異なる製品を持っているとします。

いつかクライアントは、すべてのシステムを1つの巨大なシステムに統合してみませんかと考えました。 10分後、IT部門は2年かかると述べました。

あなた(賢明な開発者)は、なぜ私たちはすべての異なるシステムを統合し、それらを同種の環境で一緒に動作させないのですか?クライアントマネージャーがあなたを見つめています...続けて、ミドルウェアを使用し、すべての異なるシステムの入力/出力、それらが使用するリソースを調査し、適切なミドルウェアフレームワークを選択します。

それでも技術管理者以外に説明
ミドルウェアフレームワークが中央にある場合、最初のシステムはXのものを生成し、システムYとZはこれらの出力を消費します。

190
medopal

ミドルウェアは非常に曖昧な用語です。ある場合の「ミドルウェア」は、別の場合にはありません。一般に、ミドルウェアとして分類されるものには、次の特性があることが期待できます。

  • 主に(通常は排他的に)ソフトウェア。通常、特別なハードウェアは必要ありません。

  • そこにwere n'tがある場合、それに依存するアプリケーションはアプリケーションの一部としてそれを組み込む必要があり、多くの重複が発生します。

  • ほぼ確実に2つのアプリケーションを接続し、それらの間でデータを受け渡します。

これは、オペレーティングシステムとほぼ同じ定義であることがわかります。したがって、たとえば、TCP/IPスタックまたはキャッシングはミドルウェアと見なすことができます。しかし、OSも同じ機能を提供できます。実際、ミドルウェアは、それに依存する一連のアプリケーションに固有の、オペレーティングシステムの特別な拡張機能と考えることができます。高レベルのサービスを提供するだけです。

ミドルウェアの例:

  • 分散キャッシュ
  • メッセージキュー
  • トランザクションモニター
  • パケットリライタ
  • 自動バックアップシステム
83
John Feminella

ウィキペディアには非常に良い説明があります: http://en.wikipedia.org/wiki/Middleware

それでは始まります

ミドルウェアは、ソフトウェアコンポーネントまたはアプリケーションを接続するコンピューターソフトウェアです。このソフトウェアは、1つまたは複数のマシンで実行されている複数のプロセスが対話できるようにする一連のサービスで構成されています。

ミドルウェアとは にいくつかの例を示します。

18
aioobe

私が知っている(少なくとも)3つの異なる定義があります

  • ビジネスコンピューティングでは、ミドルウェアはアプリケーションとサービス間のメッセージングおよび統合ソフトウェアです

  • ゲームでは、ミドルウェアはサードパーティが提供するものなら何でも

  • (一部の)組み込みソフトウェアシステムでは、ミドルウェアはアプリケーションが使用するサービスを提供します。これは、ハードウェアアブストラクションレイヤーによって提供される機能で構成されます。アプリケーションレイヤーとハードウェアアブストラクションレイヤーの間にあります。

15
Pete Kirkham

簡単に言えば、ミドルウェアは、異種システムを統合するサービスを提供するソフトウェアコンポーネントです。

複雑なエンタープライズ環境では、2つ以上のエンタープライズシステムを統合して相互に通信する必要がある場合、多くの課題があります。通常、これらのシステムは異なる言語(C++、Java、Cobolなど)を使用して異なるプラットフォームで開発されるため、互いの言語を理解しません。

したがって、次のようなサービスを提供するミドルウェアソフトウェアが登場します。

  • あるアプリから別のアプリへのメッセージ形式の変換、
  • セキュリティの面倒を見るだけでなく、メッセージのルーティングと強化
  • 暗号化、
  • 検証と
  • これらのメッセージに異なるビジネスルールを適用します。

ミドルウェアの典型的な例は、IBMメッセージブローカー(WMB/IIB)、WESB、Datapower XI50、Oracle Fusion、Muleなどの製品ESBです。

したがって、ミドルウェアは、主にサービスを消費するアプリとサービスプロバイダーのアプリの間に位置し、これらのアプリが相互に通信できるようにします。

13
SAK123

ミドルウェアは、着信リクエストに対するアプリケーションの応答方法に関するものです。ミドルウェアは着信リクエストを調べ、このリクエストに基づいて決定を下します。ミドルウェアを使用してのみアプリケーション全体を構築できます。例えばASP.NETは、次の主要HTTPミドルウェアコンポーネントで構成されるWebフレームワークです。

  1. 例外/エラー処理
  2. 静的ファイルサーバー
  3. 認証
  4. MVC Middlewares

上記の図に示すように、ASP.NETにはさまざまなミドルウェアコンポーネントがあり、着信要求を受信して​​C#クラス(この場合はコントローラークラス)にリダイレクトします。

11

ミドルウェアは、個別の、しばしば複雑で既存のプログラムを「結合」するのに役立つソフトウェアの一般的な用語です。ミドルウェアと頻繁に接続されるソフトウェアコンポーネントには、エンタープライズアプリケーションやWebサービスが含まれます。

9
Alex Falcucci

Webアプリケーション開発には、次のような共通の定義があります(私はこの言い回しを作成していますが、適切なようです):変更するように設計されたコンポーネントHTTPリクエストおよび/またはレスポンスですが、(通常)レスポンス全体を提供せず、リクエスト処理中の動作変更のパイプラインを形成するために一緒に連鎖するように設計されています。

ミドルウェアによって一般的に実装されるタスクの例:

  • Gzip応答圧縮
  • HTTP認証
  • ロギングをリクエストする

ここで重要なのは、これらのいずれもクライアントへの応答に完全に責任を負わないということです。代わりに、それぞれがパイプラインの一部として何らかの方法で動作を変更し、実際の応答はシーケンスの後半(パイプライン)からのものになります。

通常、ミドルウェアは、ある種の「ルーター」の前に実行されます。これは、要求(多くの場合、パス)を調べ、適切なコードを呼び出して応答を生成します。

個人的には、その汎用性から「ミドルウェア」という用語は嫌いですが、一般的に使用されています。

これはRuby on Railsに特に適用される追加の説明です

5
Brad Peabody

Middlewareは、ネイティブでは通信できず、多くの場合異なる言語/フレームワークで記述されているWebアプリケーションとWebサービスの間に位置します。

そのような例の1つは、OWIN middleware for .NET環境です。これは、owinの人々がIISと呼ばれるマイクロソフトのホスティングソフトウェアでWebアプリをホストすることを余儀なくされる前のことです。 owinが開発された後、IISとセルフホストの両方のホストに容量が追加されました。IISでは、インターフェイスとして機能するOwinのサポートが追加されました。また、Host .NET web apps on Linux via Monoが可能になり、Owinのサポートが再び追加されました。

また、Single Page Applications、Owin処理Http要求/応答コンテキストを作成するための容量が追加されたため、owinの上にOAuth2を介してauthentication/authorizationロジックを追加できます。たとえば、ミドルウェアを構成して、ユーザー認証のロジックを含むクラス(例:OAuth2実装)またはhttp要求/応答メッセージを管理する方法のロジックを含むクラス。1つのアプリケーションが異なるデータ形式(jsonなど)で他のアプリケーション/サービスと通信できるようにしますxmlなど、ウェブをターゲットにしている場合)。

5
Daniel

ミドルウェアの例:CORBA、Remote Method Invocation(RMI)、...

上記の例はすべて、異なるプロセス(同じマシン上で実行されているか、インターネットなどで配布されている)間の通信を処理できるソフトウェアです。

2
fstuijt

これは、オペレーティングシステムとネットワーク内の分散コンピューティングシステムの両側のアプリケーションとの間のソフトウェア層です。実際、異種ネットワークとソフトウェアシステムを接続します。

1
Maryam Sheikh

私自身のウェブワークの経験から、ミドルウェアはユーザー(Webブラウザー)とバックエンドデータベースの間のものでした。ユーザーが入れたもの(例:iPadの注文、魔法のようなビジネスロジックの実行、つまり注文を満たすのに十分なiPadがあるかどうかの確認)を受け取り、それらの変更を反映するようにバックエンドデータベースを更新したソフトウェアです。

1
eviljack

これは、アプリケーションのレベルコードの変更を気にすることなく、アプリケーションが実行されるソフトウェアまたはツールであり、高可用性、スケーラビリティ、他のソフトウェアまたはシステムとの統合に関するrapplication機能です。

たとえば、アプリケーションを実行するオペレーティングシステムはI.Pの変更を必要とします。コードを変更する必要はありません。構成を簡単に更新できるミドルウェアスタックです。

例2:ランタイムメモリの割り当てで問題が発生し、アプリケーションの使用量が増加したと感じます。コードにバグやボトルネックがない限り、それについてあまり気にする必要はありません。アプリケーションが実行します。

例3:複数の異なるソフトウェアがあり、それらが相互に通信するか、すべてのシステムが理解できる共通の形式でデータを送信する必要がある場合、ミドルウェアシステムが便利です。

提供された情報がお役に立てば幸いです。

1
Afzal Haque

私はいつも、私がインストールしなければならない最も古いソフトウェアだと考えていました。合計アプリは、Webサーバー、データベースサーバー、およびアプリケーションサーバーを使用しました。 Webサーバーは、データとアプリの間のミドルウェアです。

0
Rick