🔑 リアルタイム性を高めるコツ

AIの推論結果をできるだけ早くフロントに返したいときは、普通の Unary RPC(一気にまとめて返す方式)ではなく、Server-Streaming RPC(少しずつ返す方式)を使うのがポイントです。
結果を「チャンク単位」で返すことで、ユーザーが体感する待ち時間を大幅に減らせます。


🔌 Djangoとのつなぎ込みイメージ

Djangoは「APIゲートウェイ」のような役割を担います。
フロントからはREST/WSでリクエストを受け取り、内部でgRPCクライアントを呼び出して橋渡しをします。

例えばこんな感じ:

# views.py (Django REST → gRPC)
import grpc, my_pb2, my_pb2_grpc
from django.http import StreamingHttpResponse

def infer(request):
    channel = grpc.insecure_channel("ml-service:50051")
    stub = my_pb2_grpc.InferStub(channel)
    resp_stream = stub.StreamPredict(my_pb2.Request(data="..."))
    return StreamingHttpResponse((r.result for r in resp_stream))

→ こうすることで、Djangoから呼び出したgRPCのストリーミングレスポンスを、そのままフロントに流せます。


⚠️ よくあるつまずきポイント

  • タイムアウト問題:gRPCのデフォルトtimeoutは短め。長時間ストリーミングすると途中で切れるので要調整。
  • ヘルスチェック不足:Podが落ちても気付けないことがある。Liveness/Readiness Probeを必ず設定しよう。
  • 変換コスト無視:JSON ↔ Protobufの変換は地味に重い。レスポンスサイズや処理回数を意識しよう。

💡 まとめ: 「小分けで返す」+「Djangoをゲートウェイにする」だけで、ユーザー体験がグッと良くなります。

投稿者 kojiro777

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です