首頁 >後端開發 >Python教學 >用於建立強大微服務的強大 Python 庫

用於建立強大微服務的強大 Python 庫

DDD
DDD原創
2025-01-05 10:07:39702瀏覽

owerful Python Libraries for Building Robust Microservices

身為暢銷書作家,我邀請您在亞馬遜上探索我的書。不要忘記在 Medium 上關注我並表示您的支持。謝謝你!您的支持意味著全世界!

Python 因其簡單性、靈活性和強大的生態系統而成為構建微服務的首選語言。在本文中,我將探索五個強大的 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 中建立微服務的強大函式庫。它提供了一個簡單、靈活的框架來創建、測試和運行服務。 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}

此命令將嘗試取得使用者數據,但如果失敗(例如由於網路問題),它將返回回退回應而不是拋出錯誤。

設計微服務時,考慮資料一致性很重要,尤其是在處理分散式事務時。一種方法是使用 Saga 模式,其中一系列本地事務更新每個服務並發布一個事件以觸發下一個本地事務。

以下是如何在 Python 中實作 Saga 的簡化範例:

from nameko.rpc import rpc

class GreetingService:
    name = "greeting_service"

    @rpc
    def hello(self, name):
        return f"Hello, {name}!"

這個 Saga 執行一系列步驟來處理訂單。如果任何步驟失敗,都會觸發補償過程以撤銷先前的步驟。

身份驗證是微服務架構的另一個重要面向。 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共同創立。透過利用先進的人工智慧技術,我們將出版成本保持在極低的水平——一些書籍的價格低至 4 美元——讓每個人都能獲得高品質的知識。

查看我們的書Golang Clean Code,亞馬​​遜上有售。

請繼續關注更新和令人興奮的消息。購買書籍時,搜尋 Aarav Joshi 以尋找更多我們的書籍。使用提供的連結即可享受特別折扣

我們的創作

一定要看看我們的創作:

投資者中心 | 投資者中央西班牙語 | 投資者中德意志 | 智能生活 | 時代與迴響 | 令人費解的謎團 | 印度教 | 菁英發展 | JS學校


我們在媒體上

科技無尾熊洞察 | 時代與迴響世界 | 投資人中央媒體 | 令人費解的謎團 | | 令人費解的謎團 | >科學與時代媒介 |

現代印度教

以上是用於建立強大微服務的強大 Python 庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn