Service discovery: service-রা কীভাবে একে অপরকে খোঁজে

Server সারাক্ষণ চালু, বন্ধ আর জায়গা বদলালে hard-coded ঠিকানা ভেঙে যায়। Service discovery কে কোথায় আছে তার একটি জীবন্ত মানচিত্র রাখে।

কয়েকটি service দেখানো একটি নির্দেশিকা

ছোট সিস্টেমে service A নির্দিষ্ট ঠিকানায় service B-কে ডাকে। Cloud বা container পরিবেশে instance সারাক্ষণ চালু হয়, বন্ধ হয়, scale করে ও জায়গা বদলায়, আর IP ঠিকানা পাল্টে যায়। Service discovery এমন ব্যবস্থা, যা caller-কে দরকারি service-এর একটি সুস্থ instance খুঁজে দেয়।

Service registry

Registry হলো service-এর নাম ও তাদের সুস্থ instance-এর ঠিকানার জীবন্ত তালিকা। উদাহরণ: Consul, etcd, ZooKeeper, Eureka এবং Kubernetes-এর বিল্ট-ইন registry।

  1. Registration: instance নিজে বা platform agent দিয়ে জানায় "আমি orders, ঠিকানা 10.0.3.7:8080"।
  2. Health check: registry instance-দের ping করে (বা heartbeat আশা করে) এবং মৃতগুলো সরায়।
  3. Lookup: caller registry-কে বর্তমান ঠিকানা জিজ্ঞেস করে।

দুটি pattern

Client-side discovery। Caller registry থেকে তালিকা এনে নিজেই একটি instance বাছে (প্রায়ই নিজের load balancing দিয়ে)। hop কম, কিন্তু প্রতিটি client-এ logic লাগে।

Server-side discovery। Caller স্থির ঠিকানায় (load balancer বা proxy) request পাঠায়, সে registry দেখে এগিয়ে দেয়। Client সহজ থাকে। Kubernetes Service এভাবে কাজ করে।

DNS-ভিত্তিক discovery

সবচেয়ে সহজ রূপ: service-এর নাম DNS দিয়ে বর্তমান instance-এর IP-তে resolve হয়। সহজ ও সর্বজনীন। ঝামেলা হলো DNS caching (client কিছুক্ষণ মৃত ঠিকানা ধরে রাখতে পারে) এবং সমৃদ্ধ health তথ্যের অভাব, তাই TTL ছোট রাখুন।

যা ঠিকমতো করতে হবে

  • মৃত instance দ্রুত ধরুন: ছোট health-check বিরতি এবং client-side timeout ও retry।
  • Registry-র availability: registry গুরুত্বপূর্ণ। এটি cluster হিসেবে চালান, আর client যেন শেষ জানা তালিকা cache রাখে, যাতে registry বন্ধ থাকলেও traffic থামে না।
  • নিরাপদ বন্ধ করা: বন্ধ করার আগে deregister করুন যাতে কোনো request বন্ধ হতে থাকা instance-এ না যায়।
  • নিরাপত্তা: শুধু বিশ্বস্ত service register করতে পারবে, নয়তো আক্রমণকারী traffic ঘুরিয়ে দিতে পারে।

মূল কথা: instance-এর ঠিকানা hard-code করবেন না। Registry বা platform-এর বিল্ট-ইন discovery ব্যবহার করুন, সাথে health check ও cached ফলাফল।


System Design সিরিজ, পর্ব ২ (building block): 11 নম্বর (মোট 14)। আগের লেখা: Distributed lock: কীভাবে বানাবেন ও কেন কঠিন.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া