サービスメッシュゲートウェイAPIを使用した後、私は必要なのでしょうか?
この記事では、喧騒のAPIゲートウェイおよびサービスグリッドに巻き付け壊れないかもしれません。でも、すでに2020年に、そしてこれらのトピックを中心にまだ疑問がたくさんあるでしょう。
第一印象:Solo.ioのI仕事会社、同社のビジネスは、私たちが議論する必要があり、今日のテーマに焦点を当てています。私はあなたが応答を「あなたのビューがバイアスされている」している場合には、事前に説明しています。みんなの意見がバイアスされています。しかし、確かなこと、私はこれらのアイデアではなく、反対よりも、実際に、市場に入れて見たいので、私はSolo.ioで働くということです。
第二の暴露:私は私に多くの時間を要する「アクションでIstio」と呼ばれるサービスのグリッドについての本を、書いています。この記事では、私は紛れも立っていた Istioの 「サービスグリッド」を議論する視点を、私は、グリッドサービスのより一般的な概念を参照している場合、私は特に指摘されます。
**なぜこのトピックに関する別のブログ?**
現在のトピックに関する記事が多数あります。私たちは「何かのための南北交通のためのAPIゲートウェイ、およびトラフィックサービスグリッドを。」を見ました その他には、「サービスへの通信サービスのためのビジネス機能を管理するためのAPIゲートウェイ、およびサービスグリッド」を書きました APIゲートウェイは、もはや適用される場合がありますそれらのいくつかのサービスを、持っていない特定の機能のグリッドを持っています。一方、一部の人に近い思考の私の方法に。
しかし、市場はまだ大きな混乱です。
私はまた、人々は異なるアプローチの間のトレードオフの真剣な議論を感じる方法を確認したいです。例えば、サービス・グリッドの間の責任、およびAPIゲートウェイ/オーバーラップクレーム。人々は混乱し、圧倒]を選択します。
- アンドリュー・クレイシェーファー雷启理(@littleidea)
2019年6月12日
どのような混乱さ**
約一年前、私は違い(定義を含む)(http://www.alauda.cn)入力およびAPIゲートウェイ[Kubernetes]管理APIを評価し、APIゲートウェイのアイデンティティの危機についての記事を書きました。記事の終わりに、私は、サービスグリッドは、これらの機能に対処する方法を説明しようとしたが、彼らがどのように異なるかについて詳しく説明しませんでした、そしてときにそれらを使用します。いくつかの点で、それは本明細書では「第一部」であるので、私は非常に、この記事を読んでお勧めします「第二部。」
私は次のように混乱した理由があると思います:
技術を用いて、オーバーラップ(エージェント)があります
オーバーラップ(フロー制御、ルーティング、メトリック収集、セキュリティ/ポリシー施行、等)機能があります
「サービスグリッド」の代替API管理のコンセプト
誤解グリッド・サービスの能力
一部のサービスでは、独自のグリッド・ゲートウェイを持っています
最後は特に混乱しています。
サービスは、なぜ、このような[Istio]として、いくつかのサービスのグリッドです(境界内)のみ何かグリッドトラフィックに対するものである場合(http://www.alauda.cn)南北交通のIngressのゲートウェイがある、と述べた(とありますグリッドの一部)?Istioイングレスゲートウェイから次のドキュメントは、例えば:
ゲートウェイは、着信または発信HTTP / TCP接続を受信するグリッドのエッジ上で実行されているロード・バランサが記載されています。
私たちのHTTP APIはそうではありませんか?私たちが合格した場合 Istio ゲートウェイHTTPは、クラスタ/グリッド(強力特使エージェントに基づく方法によって、本プロジェクト)の導入を要求し、それは十分ですか?
仮説
我々が「グリッドサービス」を参照するとき、Istio及び[Istio(http://www.alauda.cn)ゲートウェイを意味すると仮定します。それが最良の重複や混乱を記述しているので、このシナリオが選択されています。いくつかは明示的なゲートウェイを持っていない間に、他のサービスのグリッドはまた、ゲートウェイを持っています。もちろん、あなたの状況が異なる場合があります。
どこが重なります
最初のステップは、サービスゲートウェイとサービスAPI関数ルックスグリッド重複を識別することです。どちらのアプリケーショントラフィックを処理するので、重複は驚きべきではありません。以下のリストは、いくつかの機能の重複を列挙します:
テレメトリデータの収集
分散型トラック
サービス検出
ロードバランシング
TLS終了/開始
JWTチェック
要求ルーティング
トラフィックセグメンテーション
カナリアリリース
トラフィックミラーリング
レート制御
まあ、彼らは重複しません。そして、あなたは必要ですか?それとも2?それとも必要はありませんか?
どこ分岐点
サービスの実行にグリッド、および低APIゲートウェイレベルよりも単一のサービス内のすべてのアーキテクチャ上で動作します。サービスグリッド(クライアントロードバランシングを含む、サービス発見、ルーティング要求)アーキテクチャトポロジー顧客サービスの「詳細」を提供するために、実施されるべきである柔軟性メカニズム(タイムアウト、再試行、ヒューズ)は、テレメトリー(メジャー収集することができるべきです追跡)及び参加の安全な流れ(MTLS、RBAC)。これらの実装の詳細の全ては、通常、アプリケーションで使用可能なサイドカー(特使を考えてみましょう)で構成されていますが、彼らはそうする必要はありません。ServiceMeshConプレーンサービスのグリッドデータにおける進化についての私の講演を参照してください。
APIのアイデンティティの危機から次の引用:
問題に透明L7上で動作させることによって例示される任意のサービス/アプリケーションを解決するためのグリッドサービスを目指しています。換言すれば、(代わりにサービスにコードを書くの)所望のサービス・グリッド・サービスへのアクセス。
結論:アーキテクチャ実装/忠実サービス/クライアントの残りの部分についての詳細を提供するためのサービスグリッド。
一方、APIゲートウェイは、異なる役割を果たし:「抽象的な内容を」デカップリングを達成します。特定のAPIのために、エッジ/境界問題の一部を解決するために、全体として - APIゲートウェイは、クロス粘着性アプリケーションアーキテクチャ抽象すべてのサービスを提供しています。
関係なく、グリッドサービスがあるかどうかの、APIゲートウェイは、アプリケーション/サービスに存在し、他の部品のための抽象化を提供します。彼らは、高分子API、APIの抽象化と異なる実装でそれらを公開し、ユーザーに基づくが縁で、より複雑なゼロTrustセキュリティポリシーを追加含まれます。境界内のアプリケーションのアーキテクチャと国境問題に関する問題。
国境問題や異なるサービスへのサービスの課題
ボーダーのマイクロサービス/クラウドネイティブアーキテクチャに、APIゲートウェイが同程度に解決することができない三つの主要なグリッドを提供する能力を提供します。
デカップリングボーダー
厳密にデータへのアクセスを制御
セキュリティの信頼ドメインの橋渡し
見てみましょう:
デカップリングボーダー
ゲートウェイAPIのコア機能は、境界の外側のクライアントのための安定したAPIインタフェースを提供することです。マイクロサービスモデルからクリス・リチャードソン、本は、私たちは「APIゲートウェイモードは」のように書き換えることができます。
明示的に呼び出しAPI /サービスにミクロのグループを簡素化されました
ユーザーの特定のセットのために、クライアントや消費者のアナログ「アプリケーション」凝集API。
这里的关键是 API 网关,当它实现时,它将作为应用程序架构的单一入口点,成为客户端的 API
来自 API 网关身份危机 一文中 API 网关的实现案例:
Solo.io Gloo
Spring Cloud Gateway
Netflix Zuul
IBM-Strongloop Loopback/Microgateway
从功能上看,API 网关需要支持什么?企业在现实的用例中会看到哪些需要 API 网关(服务网格不太适合)的情况:
请求/响应转换
应用协议转换如 REST/SOAP/XSLT
错误/速率定制响应
直接响应
对 API/代理管道的精确控制
API 聚合/分组
让我们挨个来看。
请求/响应传输
作为在 API 网关上暴露 API 的一部分,您可能希望隐藏后端 API 实现的细节。这可能是改变请求内容、删除/添加标头、将标头放入正文的一些组合,反之亦然。当后端服务对 API 进行更改时,或者当客户端不能像提供方那样快速更新时,这提供了一个很好的从客户端解耦的点。
应用协议转换
许多企业在技术上进行了投入,如基于 HTTP、SOAP 的 XML,或基于 HTTP 的 JSON。他们可能希望使用更严格的、特定于客户端的 API 来公开这些 API,并继续保持互操作性。此外,服务提供者可能希望利用新的 RPC 机制(如 gRPC)或流协议(如 rSocket)。
错误/速率定制响应
转换来自上游服务的请求是 API 网关的一项重要功能,定制来自网关本身的响应也是如此。采用 API 网关的虚拟 API 进行请求/响应/错误处理的客户端也希望网关自定义其响应以适应该模型。
直接响应
当客户端(受信任的或恶意的)请求不可用的资源,或由于某种原因被阻止上行时,最好能够终止代理并使用预先屏蔽的响应返回。
对 API/代理管道的精确控制
没有一种方法可以满足所有代理的期望。API 网关应该能够改变应用其功能的顺序(速率限制、authz/n、路由、转换等),并在出现问题时提供一种调试方法。
API 聚合
在多个服务上公开一个抽象常常伴随着将多个 API 混合成一个 API 的期望。类似于 GraphQL 的东西可以满足这个需求。
正如您所看到的,在客户端和提供服务者之间提供一个强大的解耦点涉及的不仅仅是允许 HTTP 通信进入集群这么简单。
严格控制什么可以进入/离开服务
API 网关的另一个重要功能是“控制”哪些数据/请求允许进入应用架构,哪些数据/响应允许流出。这意味着,网关需要对进入或发出的请求有深入的理解。例如,一个常见的场景是 Web 应用程序防火墙防止 SQL 注入攻击。另一种是“数据丢失预防”技术,用于在请求 PCI-DSS/HIPPA/GDPR 时阻止 SSN 或 PII 被返回。边界是帮助实现这些策略的天然位置。
同样,定义和实施这些功能并不像允许 HTTP 通信流进入集群那么简单。
定制安全/桥接信任域
API 网关提供的最后一个主要功能是边缘安全性。这涉及到向存在于应用程序架构之外的用户和服务提供身份和范围策略,从而限制对特定服务和业务功能的访问。这与前面的部分相关。
一个常见的例子是能够绑定到 OAuth/SSO 流,包括 Open ID Connect。这些“标准”的挑战在于,它们可能没有得到充分实施,也可能没有得到正确实施。API 网关需要一种方法来灵活地适应这些环境以及提供定制。
在许多企业中,已经存在身份/信任/认证机制,API 网关的很大一部分是为了向后兼容而进行本地集成。虽然出现了 SPIFEE 这样的新标准,但企业需要一段时间才能落地,与此同时,API 网关(甚至是针对在其下一代架构上运行的应用程序的网关)是一个艰难的要求。同样,你可以检视并说这也和上面提到的变换/解耦点有关。
怎样落地其中一个/另一个/两者/两者都不?
在之前的一篇博客中,我概述了一些采用这种技术的挑战(API 网关和服务网格),并给出了关于如何最好地应用这种技术的提示。
重申一下:从边缘开始。这是架构中熟悉的一部分。也要考虑选择最合适的。自从我们引入了云基础设施和云原生应用架构以来,假设(编者注:文章开始所说的假设)已经发生了变化。例如,如果您打算采用 Kubernetes,我强烈建议您考虑使用从头开始构建的应用程序网络技术(例如,检查 Envoy 代理和已经被提升和转移的应用程序网络技术)。例如,在 Solo.io,我们已经为此建立了一个名为 Gloo 的开源项目。
你需要一个服务网格吗?如果您正在部署到云平台,有多种类型的语言/框架来实现您的工作负载,并构建一个微服务架构,那么您可能需要一个。选择也很多。我做过各种比较和对比的演讲,最近的是 OSCON 演讲。请随意参考并找到最合适你的。
结论
是的,API 网关在功能上与服务网格有重叠。它们在使用的技术方面也可能有重叠(例如,Envoy)。但是,它们的角色有很大的不同,理解这一点可以在部署微服务架构和发现无意的假设时为您省去很多麻烦。
本文转自CNCF
作者 Christian Posta