soul - Apache ShenYu は、サービス プロキシ、プロトコル変換、および API ガバナンスのための Java ネイティブ API ゲートウェイです。

(Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.)

Created at: 2018-07-11 16:17:45
Language: Java
License: Apache-2.0

ライト ロゴ ダークロゴ

すべてのマイクロサービス向けのスケーラブルで高性能、応答性の高い API ゲートウェイ ソリューション

https://shenyu.apache.org/

EN ドキュメント 简体中文文档

github フォーク ギットハブスター github の貢献者



建築


Apache ShenYu と名付けられた理由

神禹(しんゆう)は、中国の古代君主である夏禹(後に大禹としても知られる)の尊称であり、人々の利益のために黄河を3回渡って成功したという感動的な物語を残しました。川の氾濫。堯・舜と並んで古代中国の三大王の一人として知られる。

  • 第一に、神雨という名前は中国文明の伝統的な美徳を促進するためのものです。

  • 次に、ゲートウェイで最も重要なことは、トラフィックのガバナンスです。

  • 最後に、コミュニティは公平、公正、オープン、能力主義的な方法で物事を行い、シェンユーに敬意を表しながら、アパッチ ウェイにも準拠します。


特徴

  • プロキシ: Apache® Dubbo™、Spring Cloud、gRPC、Motan、SOFA、TARS、WebSocket、MQTT のサポート
  • セキュリティ: 署名、OAuth 2.0、JSON Web トークン、WAF プラグイン
  • API ガバナンス: リクエスト、レスポンス、パラメータ マッピング、Hystrix、RateLimiter プラグイン
  • 可観測性: トレース、メトリクス、ロギング プラグイン
  • ダッシュボード: 動的トラフィ​​ック制御、ユーザー メニュー権限の視覚的バックエンド
  • 拡張機能: プラグインのホットスワップ、動的読み込み
  • クラスター: NGINX、Docker、Kubernetes
  • 言語: API 登録用の .NET、Python、Go、Java クライアントを提供

クイックスタート (docker)

Apache ShenYu Admin の実行

> docker pull apache/shenyu-admin
> docker network create shenyu
> docker run -d -p 9095:9095 --net shenyu apache/shenyu-admin

Apache ShenYu Bootstrap を実行する

> docker network create shenyu
> docker pull apache/shenyu-bootstrap
> docker run -d -p 9195:9195 --net shenyu apache/shenyu-bootstrap

ルーターの設定

{
  "name" : "Shenyu",
  "data" : "hello world"
}
  • ルーティング ルールの設定 (スタンドアロン)

localKey: 123456
ヘッダーに追加します。localKey をカスタマイズする必要がある場合は、sha512 ツールを使用してプレーンテキストに基づいてキーを生成し、
shenyu.local.sha512Key
プロパティを更新できます。

curl --location --request POST 'http://localhost:9195/shenyu/plugin/selectorAndRules' \
--header 'Content-Type: application/json' \
--header 'localKey: 123456' \
--data-raw '{
    "pluginName": "divide",
    "selectorHandler": "[{\"upstreamUrl\":\"127.0.0.1:8080\"}]",
    "conditionDataList": [{
        "paramType": "uri",
        "operator": "match",
        "paramValue": "/**"
    }],
    "ruleDataList": [{
        "ruleHandler": "{\"loadBalance\":\"random\"}",
        "conditionDataList": [{
            "paramType": "uri",
            "operator": "match",
            "paramValue": "/**"
        }]
    }]
}'
{
  "name" : "Shenyu",
  "data" : "hello world"
}

プラグイン

リクエストが来るたびに、Apache ShenYu は責任の連鎖を通じて有効なすべてのプラグインによってそれを実行します。

Apache ShenYu の心臓部として、プラグインは拡張可能でホットプラグ可能です。

異なるプラグインは異なることを行います。

もちろん、ユーザーは自分のニーズに合わせてプラグインをカスタマイズすることもできます.

カスタマイズしたい場合は、custom-pluginを参照してください。


セレクターとルール

HTTP 要求ヘッダーに従って、セレクターとルールを使用して要求をルーティングします。

セレクターは最初のルートです。たとえば、モジュール レベルでは粗いです。

ルールは 2 番目のルートであり、リクエストが何をすべきだと思いますか。たとえば、モジュールのメソッド レベル。

セレクターとルールは 1 回だけ一致し、一致が返されます。したがって、最も粗い粒度を最後にソートする必要があります。


データキャッシングとデータ同期

すべてのデータは JVM で ConcurrentHashMap を使用してキャッシュされているため、非常に高速です。

Apache ShenYu は、ユーザーがバックグラウンド管理で構成情報を変更すると、ZooKeeper ノード (または WebSocket プッシュ、HTTP ロング ポーリング) をリッスンしてキャッシュを動的に更新します。


前提条件

  • JDK1.8+

時間の経過とともにスターゲイザー

時間の経過とともにスターゲイザー


コントリビューターとサポート


既知のユーザー

登録順に、より多くのアクセス企業がhttps://github.com/apache/shenyu/issues/68 (オープンソース ユーザーのみ) に登録してください。

すべてのユーザー:既知のユーザー