🔑 リアルタイム性を高めるコツ
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をゲートウェイにする」だけで、ユーザー体験がグッと良くなります。