ホームページ > バックエンド開発 > Python チュートリアル > 堅牢なマイクロサービスを構築するための強力な Python ライブラリ

堅牢なマイクロサービスを構築するための強力な Python ライブラリ

DDD
リリース: 2025-01-05 10:07:39
オリジナル
697 人が閲覧しました

owerful Python Libraries for Building Robust Microservices

ベストセラー作家として、アマゾンで私の本を探索することをお勧めします。 Medium で私をフォローしてサポートを示すことを忘れないでください。ありがとう!あなたのサポートは世界を意味します!

Python は、そのシンプルさ、柔軟性、堅牢なエコシステムにより、マイクロサービスを構築するための頼りになる言語となっています。この記事では、堅牢でスケーラブルなマイクロサービス アーキテクチャの作成に役立つ 5 つの強力な Python ライブラリについて説明します。

Flask は、軽量のマイクロサービスの構築に最適な人気のあるマイクロ フレームワークです。そのシンプルさと拡張性により、小規模で焦点を絞ったサービスを迅速に作成したい開発者にとって優れた選択肢となります。 Flask のコアは意図的にシンプルですが、必要に応じてさまざまなプラグインで拡張して機能を追加できます。

Flask マイクロサービスの基本的な例を次に示します。

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({"message": "Hello, World!"})

if __name__ == '__main__':
    app.run(debug=True)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この単純なサービスは、JSON 応答を返す単一のエンドポイントを公開します。 Flask のシンプルさにより、開発者は定型コードではなくビジネス ロジックに集中できます。

より複雑なマイクロサービスの場合、FastAPI は優れた選択肢です。これは、非同期プログラミングと自動 API ドキュメントのサポートが組み込まれており、高パフォーマンスで簡単な API 開発を実現できるように設計されています。

FastAPI マイクロサービスの例を次に示します:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items")
async def create_item(item: Item):
    return {"item": item.dict()}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

FastAPI ではタイプ ヒントを使用することで、リクエストの自動検証と API ドキュメントの生成が可能になります。これにより、開発を大幅にスピードアップし、バグの可能性を減らすことができます。

Nameko は、Python でマイクロサービスを構築するためのもう 1 つの強力なライブラリです。サービスを作成、テスト、実行するためのシンプルで柔軟なフレームワークを提供します。 Nameko は複数のトランスポートおよびシリアル化メソッドをサポートしているため、さまざまなユースケースに多用途に使用できます。

基本的ななめこサービスは次のとおりです:

from nameko.rpc import rpc

class GreetingService:
    name = "greeting_service"

    @rpc
    def hello(self, name):
        return f"Hello, {name}!"
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Nameko の依存関係注入システムを使用すると、既存のコードを変更せずにサービスに新しい機能を簡単に追加できます。これにより疎結合が促進され、サービスの保守と拡張が容易になります。

サービス間通信を効率的に行うには、gRPC が最適です。シリアル化にプロトコル バッファーを使用するため、従来の REST API と比較してペイロードが小さくなり、通信が高速になります。

gRPC サービス定義の例を次に示します。

syntax = "proto3";

package greeting;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

このサービスを Python で実装する方法は次のとおりです。

import grpc
from concurrent import futures
import greeting_pb2
import greeting_pb2_grpc

class Greeter(greeting_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        return greeting_pb2.HelloReply(message=f"Hello, {request.name}!")

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    greeting_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()
ログイン後にコピー
ログイン後にコピー

gRPC の強力な型指定機能とコード生成機能は、エラーを早期に検出し、システム全体の信頼性を向上させるのに役立ちます。

マイクロサービス アーキテクチャが成長するにつれて、サービスの検出と構成管理が重要になります。 Consul は、システムのこれらの側面の管理に役立つ強力なツールです。それ自体は Python ライブラリではありませんが、Python サービスとうまく統合されます。

Python を使用して Consul にサービスを登録する例を次に示します。

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({"message": "Hello, World!"})

if __name__ == '__main__':
    app.run(debug=True)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Consul のキー/値ストアは一元的な構成管理にも使用できるため、複数のサービスにわたる設定の管理が容易になります。

分散システムでは障害は避けられません。 Hystrix は、マイクロサービス アーキテクチャでフォールト トレランスとレイテンシ トレランスを実装するのに役立つライブラリです。元々は Java 用に開発されましたが、Python ポートも利用可能です。

Hystrix の Python ポートの使用例を次に示します:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items")
async def create_item(item: Item):
    return {"item": item.dict()}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

このコマンドはユーザー データの取得を試みますが、(ネットワークの問題などにより) 失敗した場合は、エラーをスローする代わりにフォールバック応答を返します。

マイクロサービスを設計するとき、特に分散トランザクションを扱うときは、データの一貫性を考慮することが重要です。 1 つのアプローチは、Saga パターンを使用することです。このパターンでは、一連のローカル トランザクションが各サービスを更新し、次のローカル トランザクションをトリガーするイベントを発行します。

Python で Saga を実装する方法の簡単な例を次に示します。

from nameko.rpc import rpc

class GreetingService:
    name = "greeting_service"

    @rpc
    def hello(self, name):
        return f"Hello, {name}!"
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

このサーガは、注文を処理するための一連のステップを実行します。いずれかのステップが失敗すると、補償プロセスがトリガーされ、前のステップが取り消されます。

認証は、マイクロサービス アーキテクチャのもう 1 つの重要な側面です。 JSON Web トークン (JWT) は、サービス間のステートレス認証を実装するための一般的な選択肢です。以下は、Flask マイクロサービスで JWT 認証を実装する方法の例です:

syntax = "proto3";

package greeting;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では、サービス間のリクエストを認証するための JWT を作成および検証する方法を示します。

モニタリングは、マイクロサービス アーキテクチャの健全性とパフォーマンスを維持するために不可欠です。 Prometheus は、Python サービスとうまく統合できる、人気のあるオープンソース監視システムです。 Prometheus モニタリングを Flask アプリケーションに追加する方法の例を次に示します:

import grpc
from concurrent import futures
import greeting_pb2
import greeting_pb2_grpc

class Greeter(greeting_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        return greeting_pb2.HelloReply(message=f"Hello, {request.name}!")

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    greeting_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()
ログイン後にコピー
ログイン後にコピー

このコードは、Flask アプリケーションの基本的なメトリクスを設定し、Prometheus が取得して分析できるようにします。

実際のアプリケーションでは、マイクロサービス アーキテクチャは非常に複雑になる可能性があります。例として電子商取引プラットフォームを考えてみましょう。ユーザー管理、製品カタログ、注文処理、在庫管理、支払い処理のための個別のサービスがある場合があります。

ユーザー管理サービスは、認証に Flask と JWT を使用して実装される場合があります:

import consul

c = consul.Consul()

c.agent.service.register(
    "web",
    service_id="web-1",
    address="10.0.0.1",
    port=8080,
    tags=["rails"],
    check=consul.Check.http('http://10.0.0.1:8080', '10s')
)
ログイン後にコピー

製品カタログ サービスは、高パフォーマンスを実現するために FastAPI を使用する場合があります:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/hello', methods=['GET'])
def hello():
    return jsonify({"message": "Hello, World!"})

if __name__ == '__main__':
    app.run(debug=True)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

注文処理サービスは、Nameko を使用し、分散トランザクションを管理するための Saga パターンを実装する場合があります。

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items")
async def create_item(item: Item):
    return {"item": item.dict()}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

在庫管理サービスは、他のサービスと効率的に通信するために gRPC を使用する場合があります。

from nameko.rpc import rpc

class GreetingService:
    name = "greeting_service"

    @rpc
    def hello(self, name):
        return f"Hello, {name}!"
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

最後に、支払い処理サービスは耐障害性のために Hystrix を使用する可能性があります:

syntax = "proto3";

package greeting;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これらのサービスは連携して、電子商取引プラットフォームのさまざまな側面を処理します。これらは、各対話の特定の要件に応じて、REST API、gRPC 呼び出し、メッセージ キューの組み合わせを使用して相互に通信します。

結論として、Python は堅牢なマイクロサービスを構築するためのライブラリとツールの豊富なエコシステムを提供します。これらのライブラリを活用し、マイクロサービス設計のベスト プラクティスに従うことで、開発者はスケーラブルで回復力があり、保守可能なシステムを作成できます。重要なのは、特定のユースケースごとに適切なツールを選択し、疎結合でありながら高度に結合したサービスを設計することです。慎重に計画して実装すれば、Python マイクロサービスはさまざまな業界にわたる複雑で高性能なシステムのバックボーンを形成できます。


101冊

101 Books は、著者 Aarav Joshi が共同設立した AI 主導の出版社です。高度な AI テクノロジーを活用することで、出版コストを信じられないほど低く抑えており、書籍によっては $4 という低価格で販売されており、誰もが質の高い知識にアクセスできるようにしています。

Amazon で入手できる私たちの書籍 Golang Clean Code をチェックしてください。

最新情報とエキサイティングなニュースにご期待ください。本を購入する際は、Aarav Joshi を検索して、さらに多くのタイトルを見つけてください。提供されたリンクを使用して特別割引をお楽しみください!

私たちの作品

私たちの作品をぜひチェックしてください:

インベスターセントラル | 投資家中央スペイン人 | 中央ドイツの投資家 | スマートな暮らし | エポックとエコー | 不可解な謎 | ヒンドゥーヴァ | エリート開発者 | JS スクール


私たちは中程度です

Tech Koala Insights | エポックズ&エコーズワールド | インベスター・セントラル・メディア | 不可解な謎 中 | 科学とエポックミディアム | 現代ヒンドゥーヴァ

以上が堅牢なマイクロサービスを構築するための強力な Python ライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート