Service Registration এবং Service Discovery হল Spring Cloud-এর অত্যন্ত গুরুত্বপূর্ণ দুটি বৈশিষ্ট্য, বিশেষ করে যখন আপনি মাইক্রোসার্ভিস আর্কিটেকচার তৈরি করছেন। মাইক্রোসার্ভিস আর্কিটেকচারে, বিভিন্ন সার্ভিসের মধ্যে যোগাযোগ ও সহযোগিতা করার জন্য সার্ভিসগুলোকে একে অপরকে খুঁজে বের করার সক্ষমতা থাকতে হবে। Service Registration এবং Service Discovery এই কাজটি পরিচালনা করে।
১. Service Registration
Service Registration হল প্রক্রিয়া যেখানে প্রতিটি মাইক্রোসার্ভিসের উপস্থিতি একটি Service Registry-তে নিবন্ধিত হয়। এই নিবন্ধন প্রক্রিয়াটি সার্ভিসগুলোর জন্য সেন্ট্রাল রেজিস্ট্রেশন পয়েন্ট হিসেবে কাজ করে। সাধারণত, Eureka বা Consul ব্যবহার করা হয় Service Registry হিসেবে।
যখন একটি মাইক্রোসার্ভিস চালু হয়, তখন সেটি Service Registry-তে তার নিজস্ব মেটাডেটা (যেমন: সার্ভিসের নাম, অবস্থান, পোর্ট নম্বর, স্ট্যাটাস) নিবন্ধন করে। অন্য সার্ভিসগুলি এই রেজিস্ট্রিতে থাকা তথ্যের মাধ্যমে অন্য সার্ভিসগুলোর অবস্থান এবং তাদের সাথে যোগাযোগ করতে পারে।
২. Service Discovery
Service Discovery হল প্রক্রিয়া যেখানে একটি মাইক্রোসার্ভিস চালু হওয়ার পর তা Service Registry-তে নিবন্ধিত সার্ভিসগুলোকে ডাইনামিকভাবে খুঁজে বের করে। যখন একটি সার্ভিস অন্য কোনো সার্ভিসের সাথে যোগাযোগ করতে চায়, তখন সে সার্ভিসের অবস্থান বা অন্যান্য তথ্য জানার জন্য Service Registry-তে অনুসন্ধান করে। একে client-side discovery বা server-side discovery বলা হতে পারে, নির্ভর করে আপনার আর্কিটেকচারের উপরে।
Spring Cloud-এ, সার্ভিস ডিসকভারি সাধারণত Eureka সার্ভিস ডিসকভারি সার্ভিস ব্যবহৃত হয়, তবে Consul বা Zookeeperও ব্যবহার করা যেতে পারে।
Service Registration এবং Discovery-এর কাজের প্রক্রিয়া:
১. Eureka সার্ভিস রেজিস্ট্রেশন এবং ডিসকভারি
Spring Cloud Eureka মাইক্রোসার্ভিসগুলোর জন্য একটি সার্ভিস রেজিস্ট্রি ও ডিসকভারি প্ল্যাটফর্ম সরবরাহ করে। এটি ক্লাউড অ্যাপ্লিকেশনের জন্য সার্ভিস রেজিস্ট্রেশন এবং ডিসকভারি সমাধান প্রদান করে।
১.১ Service Registration (Eureka Client):
প্রথমে সার্ভিসকে Eureka Server-এ নিবন্ধিত করার জন্য Eureka Client কনফিগারেশন করতে হবে। এখানে আমরা দেখব কীভাবে একটি Spring Boot অ্যাপ্লিকেশনকে Eureka সার্ভারে রেজিস্টার করা হয়।
Eureka Server Setup:
application.propertiesফাইলে Eureka সার্ভারের কনফিগারেশন:
server.port=8761
spring.application.name=eureka-server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
- EurekaServerApplication.java ক্লাস:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Service Registration (Eureka Client)
application.properties(Client Service):
spring.application.name=my-service
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
@EnableDiscoveryClientএনোটেশনটি ক্লায়েন্ট সার্ভিসে যোগ করতে হবে:
@SpringBootApplication
@EnableDiscoveryClient
public class MyServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MyServiceApplication.class, args);
}
}
এখন, যখন MyServiceApplication চালু হবে, এটি Eureka সার্ভারে নিবন্ধিত হবে।
১.২ Service Discovery (Eureka Client):
একটি মাইক্রোসার্ভিস যখন অন্য কোনো সার্ভিসের সাথে যোগাযোগ করতে চায়, তখন সে Eureka Server থেকে সার্ভিসের অবস্থান খুঁজে বের করবে। এই প্রক্রিয়াটি Service Discovery বলে।
যেমন, ধরুন একটি সার্ভিস "MyService" অন্য একটি সার্ভিস "AnotherService" এর সাথে যোগাযোগ করতে চায়। তাহলে MyService তার application.properties ফাইলে নিম্নরূপ কনফিগারেশন করবে:
myServiceUrl=http://another-service:8080
এটি Eureka সার্ভার থেকে "another-service" সার্ভিসের অবস্থান খুঁজে পাবে এবং সেই সার্ভিসে রিকোয়েস্ট পাঠাবে।
২. Eureka সার্ভার এবং ক্লায়েন্টের মধ্যে কাজের প্রক্রিয়া:
- Eureka সার্ভার চালু হলে, এটি একটি রেজিস্ট্রি হিসেবে কাজ করে। সার্ভিসগুলোর অবস্থান এবং স্ট্যাটাস তথ্য সংগ্রহ করে রাখে।
- যখন একটি Eureka ক্লায়েন্ট সার্ভিস চালু হয়, এটি নিজের মেটাডেটা (যেমন সার্ভিসের নাম, পোর্ট নম্বর, অবস্থা) Eureka সার্ভারে নিবন্ধন করে।
- Eureka সার্ভার রেজিস্ট্রিতে সার্ভিসগুলোর তথ্য রাখে এবং সার্ভিসগুলো যখন অন্য সার্ভিসের সাথে যোগাযোগ করতে চায়, তখন তারা Eureka সার্ভার-এর মাধ্যমে সেই সার্ভিসের অবস্থান খুঁজে পায়।
- ক্লায়েন্ট সার্ভিসগুলি Eureka সার্ভারে নিবন্ধিত সার্ভিসগুলোকে ডাইনামিকভাবে খুঁজে বের করে এবং তাদের সাথে যোগাযোগ করে।
৩. Client-Side Discovery vs Server-Side Discovery:
- Client-Side Discovery:
- Spring Cloud Eureka সাধারণত client-side discovery ব্যবহৃত হয়।
- এখানে ক্লায়েন্ট সার্ভিসটি Eureka সার্ভার থেকে সার্ভিসের অবস্থান খুঁজে বের করে এবং সরাসরি সার্ভিসে রিকোয়েস্ট পাঠায়।
- এটি সাধারণত Ribbon এর সাথে ব্যবহৃত হয়, যেখানে লোড ব্যালান্সিং ক্লায়েন্ট সাইডে পরিচালিত হয়।
- Server-Side Discovery:
- এতে সার্ভিস রেজিস্ট্রির সাথে যোগাযোগ সার্ভার সাইডে হয় এবং ক্লায়েন্ট সার্ভিসটি রাউটিং সার্ভিসের মাধ্যমে সার্ভিসে রিকোয়েস্ট পাঠায়।
- এখানে Zuul বা Spring Cloud Gateway গেটওয়ে হিসেবে ব্যবহৃত হয় এবং সার্ভিস রাউটিং ও লোড ব্যালান্সিং সার্ভার সাইডে পরিচালিত হয়।
উপসংহার:
Service Registration এবং Service Discovery মাইক্রোসার্ভিস আর্কিটেকচারে যোগাযোগ সহজ করে তোলে। Eureka, Consul বা Zookeeper এর মতো টুলস ব্যবহার করে সার্ভিসগুলো একে অপরকে খুঁজে বের করতে পারে এবং এই সার্ভিসগুলো রেজিস্ট্রিতে নিজেদের অবস্থান জানান দেয়, যাতে অন্য সার্ভিসগুলো তাদের সাথে যোগাযোগ করতে পারে। Spring Cloud এর সাহায্যে এই প্রক্রিয়া সহজ ও দ্রুত হয়।
Read more