本番環境へのgRPC Pythonのエントリー

すべてのコードhttps://github.com/xsren/learning_record/tree/master/grpcは、スターを歓迎しました。

まず、いくつかの概念を理解します

RPC

RPC(リモートプロシージャコール) - リモート・プロシージャ・コール、基盤となるネットワークプロトコル技術を理解していなくても、ネットワークを介してリモートコンピュータからのサービス要求をあります。

gRPC

gRPCは、主に開発者が、高性能、汎用オープンソースのRPCフレームワークであるといるProtobufに基づいて、Googleによって設計されたHTTP / 2標準プロトコル(プロトコルバッファ)直列化プロトコルの開発に基づいており、多くの開発言語をサポートしています。

 

(、帯域幅の節約TCPが接続を要求減らす)、強力なパフォーマンスベースのHTTP / 2プロトコルの優れたアプリケーションを提供しているProtobuf定義されたサービスに対するサービス指向のインターフェイスのトップレベルの設計に基づく支援主流のプログラミング言語、C ++、Javaの、パイソン、 、ゴールビー等のNode.js、PHPは、対応いるProtobufベースのサーバとクライアントコードを形成します。繧各アクセスサービスとの間で比較を使用して達成され、GRPCは、より低い待ち時間をより良好な性能を提供し、分散システムを持って生まれ適合されています。インタフェースサーバ側とクライアント側のコードの標準ベースのIDL(いるProtobuf)の間に生成すると同時に、設計、あなたがより良いテスト、チームとチーム開発をサポートすることができますので、いるProtobufサービスは、サービス契約として定義され、コラボレーション、およびように。

いるProtobuf

プロトコルバッファ(いるProtobufをいう)Googleは、言語、プラットフォームに依存しないとは無関係であるデータ交換の形式です。

 

いるProtobufは、同様のJSONの開発Googleのデータ転送フォーマットでいるProtobufバイナリ、構成され、それはJSONデータの量よりも少ない、より多くのオブジェクト化いるProtobuf直接平文JSONのように、これはオブジェクト構造の定義ではない、そして次いでによってprotbuf自動的に時刻と、バイナリに変換され、ライブラリのオブジェクトに移動し、オーバー後、自動的に逆ソリューション。トランスミッションは、私たちに透明です!私達はちょうどそれの上にオブジェクトを転送します

第二に、再学習いるProtobuf

1、インストールいるProtobuf

1)インストールプロトコルコンパイラ

参考:プロトコルコンパイラのインストールhttps://github.com/google/protobuf

2つの方法があり、一つは、ダウンロードした後、protocでは/ usr / binが可能にコンパイルすることです。私は後者を選んだ次のように、ローカルなコマンドは次のとおりです。

https://github.com/google/protobuf/releasesダウンロードprotoc-3.5.1-osx-x86_64.zip#で#解凍ダウンロード解凍protoc-3.5.1-osx-x86_64.zip -d protoc#コピーsudoのcpはprotoc / binに/ protocは/ usr / binに/#実行権限はsudo chmodの+ Xの/ usr / binに/ protoc#は文書のコピーが-rfをGoogleは/ usr / local /含める/含めPCPなどが増加

2)インストールのpythonパッケージ

sudoのPIP3いるProtobufをインストール

2、実行しているProtobufデモ

参考:

 

バッファの基本プロトコル:Pythonのhttps://developers.google.com/protocol-buffers/docs/pythontutorial proto3とproto2差https://superlc320.gitbooks.io/protocol-buffers-3-study-notes/content/proto3he_proto2_de_qu_bie .htmlを

公式のデモは、連絡先をファイルに書き込むことができ、かつ、ファイルから連絡先を読むことができ、簡単なアドレス帳を実装しています。

Pythonのバージョン3.6.0 Protocバージョン3.5.1cd protobuf_demo#コンパイラ生成addressbook_pb2.pyprotoc --python_out =。addressbook.proto#の追加連絡先をのpython3 add_person.pyにAddress.txt#読み取り接触のpython3 list_people.pyにAddress.txt

業績

三、gRPC学習

1、インストール

参考:https://grpc.io/docs/quickstart/python.html

#gRPCツールsudoのPIP3はgrpcio-ツールをインストールインストールgrpcio#をインストールgRPCsudoのPIP3をインストールします。

2、ラン

1)ハローワールド

そして生成helloworld_pb2.py CD grpc_helloworld#helloworld_pb2_grpc.pypython3 -m grpc_tools.protoc --proto_path =。--python_out =。--grpc_python_out =。helloworld.proto#serverpython3 greeter_server.py#実行実行clientpython3 greeter_client.py

2)経路案内

そして、関連ストリーミングデモ、サポート:

 

サーバーからクライアントへのストリーミングRPC。クライアントからサーバーへのストリーミングRPC。RPCをストリーミングA双方向。

データ伝送が主に以上でストリーミングシナリオ。

そしてroute_guide_pb2.py CD grpc_helloworld#route_guide_pb2_grpc.pypython3 -m grpc_tools.protoc --proto_path =。--python_out =。--grpc_python_out =。route_guide.proto#serverpython3 route_guide_server.py#実行実行clientpython3 route_guide_client.pyを生成します

第四に、生産環境

参考:

 

PythonのAPIドキュメントhttps://grpc.io/grpc/python/index.html セキュリティ、メトリクスを探る、とPythonでgRPCでエラー処理https://blog.codeship.com/exploring-security-metrics-and-error -handling-WITH-grpcインパイソン/ gRPC認証https://grpc.io/docs/guides/auth.html#credential-types

環境要件の生産:

 

パフォーマンス同時実行性を向上させるために、複数のスレッドを使用して。拡張のためのロード・バランシングを使用します。セキュリティSSL / TLS Googleとトークンベースの認証その他の認証の使用拡大エラー処理タイムアウトエラーインターセプタを(インターセプターのPythonのバージョンは安定していない)のCD grpc_productの#生産プライベートopensslのgenrsa -out server.keyの2048#opensslの公開鍵を生産REQ -new -x509 -sha256 -key server.keyのアウトをserver.crt -days 3650# helloworld_pb2.py及び生成helloworld_pb2_grpc.pypython3 -m grpc_tools.protoc --proto_path =。--python_out = 。--grpc_python_out = HelloWorldの.proto#の実行serverpython3 greeter_server.py#ランclientpython3 greeter_client.py

第五に、gRPCはRESTfulなをサポートしてみましょう

参考:

 

RESTとgRPCとオープンなAPI https://grpc.io/blog/coreos grpc-ゲートウェイhttps://github.com/grpc-ecosystem/grpc-gateway gRPCのHelloWorldサービス、RESTfulなJSON APIゲートウェイと闊歩UIのhttp:// www.cnblogs.com/lienhua34/p/6285829.html

GrpcゲートウェイはgRPCにRESTfulなJSON APIを受信したリバースプロキシを使用して生成することができます。

grpc_gateway.png

#生成のpythonファイルのuses google.apiは、だから今、私は、クラウドGoogle翻訳インストールすることが実際にGoogleのクラウド・翻訳の内側にsudo PIP3に含ま見つける # 依存パッケージがゴーゴーインストールのget -u github.com/生態系-GRPC / GRPC-ゲートウェイ/ Protoc-GEN-GRPCゲートウェイゴーGET -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger ゴーGET -u github.com/golang/protobuf/protoc- GEN-行く##修正プロトファイルコメントhelloworld.pb.go線19にgRPC golangスタブクラスのSH gen_grpc_stub_go.sh#の必要性を生成します。import _「github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google / API「#生成gRPC PythonのスタブクラスのSH gen_grpc_stub_python.sh#は、ゲートウェイコードを生成SH gen_grpc_gw.sh#shのgen_grpc_gw_swagger.sh#コード闊歩実行serverpython3のserver.pyの#ランを生成clientpython3 client.py#実行されているゲートウェイサービスは行くproxy.goを実行します#コマンドラインテストカール-X POST -kます。http:// localhostを :8080 / V1 / -dこんにちは'{ "名": "世界"}' #のテスト闊歩http:// localhost:8080を開き/闊歩 -ui /

六、TODO:

 

1、高度オプションgrpcゲートウェイの詳細な研究。

答えに七つの質問:

Question1:gRPCクライアントは、プロキシを使用することができますか?

回答:

公式のクライアントAPIは、プロキシ可能ないくつかのオプションを設定するオプションを提供していません。

 

1、設定することにより、システムのプロキシ$ $ HTTP_PROXYエコーHTTP://httpproxy.mydomain:8080 2を、リバースプロキシnginxの経由、haproxyその他の設定を

Question2:いるProtobufデフォルト値はありますか?

回答:だけのために、以下のproto3 参照https://developers.google.com/protocol-buffers/docs/proto3

文字列の場合、デフォルト値は空の文字列です。バイトの場合、デフォルト値は空bytes.For boolsあり、デフォルト値はfalse.For数値型であり、デフォルト値はzero.Forの列挙であり、デフォルト値は0.Forメッセージフィールドでなければならない最初の定義された列挙値であります、フィールドが設定されていません。その正確な値は、言語に依存しています。詳細については、生成されたコードガイドを参照してください。

Question3:gRPCどのように認証と承認の?

 

SSL / TLS Googleとトークンベースの認証(のOAuth2とJWTの方法を含んでいる)自身の拡張、公式のAPIは、独自の認証方法を提供するように拡張することができます(実装を探しに行きます)

Question4:gRPC並行性の問題?

 

(マルチプロセスをサポートしていない)マルチスレッドの非同期、熱心なユーザーが達成あり、ロード・バランシング

おすすめ

転載: www.cnblogs.com/ExMan/p/12112640.html