পাঠ্যক্রম খুলুন
প্রাথমিক পর্যায়

gRPC: typed contract দিয়ে service যোগাযোগ

gRPC: Typed Service Communication

এই পাঠের কুইজ ↓৬ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • Protocol Buffers contract ও generated stubs
  • Unary ও streaming RPC
  • Laravel boundary-তে gateway integration

সমস্যা দিয়ে শুরু

Order service inventory service-কে ঘন ঘন structured request পাঠায়। দুই team-এর field type ও error contract drift করছে। gRPC typed service definition থেকে client/server code generation দেয়। কিন্তু Laravel install করলেই native gRPC server তৈরি হয় না; runtime ও integration support আলাদা requirement।

সহজ করে বুঝি

gRPC remote procedure call framework। Protocol Buffers service contract-এ RPC method, request ও response message লেখা হয়; generated stubs serialization ও method interface তৈরি করে। Unary RPC একটি request/response, streaming RPC-এ এক বা দুই দিকে বহু message যায়, language runtime অনুযায়ী support আলাদা। gRPC status HTTP status-এর সমার্থক নয়। Deadline request-এর সর্বোচ্চ budget জানায়; cancellation downstream-এ propagate করতে হয়। Binary encoding efficient হতে পারে, কিন্তু সব workload-এ faster দাবি benchmark ছাড়া করবেন না।

পরিচিত একটি উপমা

দুই অফিস agreed form number ও typed fields ব্যবহার করে কাজ পাঠায়। Form generator spelling mismatch কমায়। তবে form পৌঁছালেই warehouse কাজ শেষ করেছে এমন নয়; deadline, refusal code ও cancellation procedure দরকার। পুরোনো form version-এর সঙ্গে compatibility-ও রাখতে হয়।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

এই architecture-এ Laravel standard HTTP client ব্যবহার করে gateway ডাকে।
Diagram-এর text flow দেখুন
flowchart LR
 L[Laravel REST application] -->|JSON HTTPS| G[Trusted HTTP to gRPC Gateway]
 G -->|Generated RPC client| I[Inventory gRPC Service]
 I --> D[(Inventory Database)]
 G -->|Mapped errors| L

এই architecture-এ Laravel standard HTTP client ব্যবহার করে gateway ডাকে। Gateway typed gRPC request তৈরি করে deadline ও status mapping সামলায়। এটি native gRPC performance demonstration নয়; integration boundary-এর সহজ পথ। Direct PHP gRPC client ব্যবহার করতে grpc/protobuf runtime এবং generated stubs আলাদা setup দরকার; exact streaming support primary docs দেখে নিন।

PHP ও Laravel-এ প্রয়োগ

Service-method fragment configured internal gateway-এর read-only availability endpoint ডাকে। Fixed base URL config-এ রাখুন, item ID validated। Gateway contract id ও available fields ফেরায় ধরে নেওয়া হয়েছে। Stock read reservation নয়; checkout correctness-এর জন্য authoritative write operation আলাদা লাগবে।

php
use Illuminate\Support\Facades\Http;

$response = Http::baseUrl(config('services.inventory_gateway.url'))
    ->withToken(config('services.inventory_gateway.token'))
    ->connectTimeout(1)
    ->timeout(3)
    ->get('/v1/availability', ['product_id' => $productId]);
$response->throw();
$availability = $response->json();
if (!is_array($availability) || !array_key_exists('available', $availability)) {
    throw new \RuntimeException('Invalid inventory gateway response.');
}

সুবিধা, সীমাবদ্ধতা ও trade-off

Typed code generation internal service contract শক্ত করে, কিন্তু tooling, proxy compatibility ও debugging complexity যোগ করে। Browser access-এ gRPC-Web বা gateway দরকার হতে পারে। JSON gateway human inspection সহজ করে, extra hop ও serialization cost যোগ করে। Small public CRUD API-তে REST simpler হতে পারে। Service-to-service traffic-এ schema, language support ও operational skill decision চালাবে।

সাধারণ ভুল

  • Protobuf field number delete করে অন্য অর্থে reuse করা।
  • Deadline ছাড়া network call করা।
  • UNAVAILABLE দেখেই payment mutation অন্ধভাবে retry করা।

আরও একটু গভীরে

Protobuf evolution-এ removed field numbers/names reserve করুন এবং backward-compatible additions বেছে নিন। Unknown field behavior ও default values application meaning বদলাতে পারে। Unary retry-তেও server operation আগে commit করে response হারাতে পারে; idempotency key দরকার। Gateway status mapping-এ deadline, auth, validation ও domain conflict আলাদা রাখুন। Distributed trace context protocol boundary পেরিয়ে propagate করলে troubleshooting সহজ হয়।

মনে রাখুন

gRPC typed RPC contract; Laravel-এ support architecture অনুযায়ী আনতে হবে। Gateway ও direct client আলাদা option। Deadline, compatibility এবং mutation idempotency protocol choice-এর পরেও অপরিহার্য।

নিজে চেষ্টা করুন

Inventory read ও stock reserve-এর দুটি protobuf method contract কাগজে লিখুন। Timeout-এর পরে reserve সফল হয়েছে কি না জানতে operation ID query path যোগ করুন। Laravel gateway response কীভাবে gRPC status map করবে table বানান।

নিজের বোঝা যাচাই করুন

1. gRPC শুধু binary JSON?

না। Service definition, generated methods, status ও streaming model রয়েছে। Serialization এক অংশ, পুরো contract নয়।

2. Laravel-এ built-in server?

Standard Laravel HTTP app-কে native gRPC server ধরে নেওয়া যাবে না। Runtime/package বা gateway integration বেছে নিতে হয়।

3. Deadline কি timeout?

Related budget boundary। End-to-end deadline downstream-এ propagate করলে প্রতিটি hop অবশিষ্ট সময় বুঝতে পারে; local timeout আলাদা থাকতে পারে।

4. Field number reuse কেন খারাপ?

পুরোনো encoded data বা client নতুন meaning হিসেবে interpret করতে পারে। Removed identifiers reserve করে compatibility রক্ষা করুন।

5. Gateway কেন বেছে নেব?

Existing Laravel HTTP stack সহজ রাখা যায়। তবে extra hop, mapping ও ownership cost আছে; requirement অনুযায়ী trade-off লিখুন।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।