Spring Cloud LoadBalancer এবং Ribbon হল Spring Framework এর দুটি উপাদান যা মাইক্রোসার্ভিস আর্কিটেকচারে লোড ব্যালেন্সিং নিশ্চিত করতে ব্যবহার করা হয়। এগুলি সার্ভিসগুলির মধ্যে ভারসাম্যপূর্ণ এবং দক্ষ যোগাযোগ স্থাপন করতে সাহায্য করে।
Spring Cloud LoadBalancer
Spring Cloud LoadBalancer হলো Spring Cloud এর অংশ, যা Ribbon-এর বিকল্প হিসেবে কাজ করে। এটি Spring Boot এর নতুন এবং আধুনিক লোড ব্যালেন্সিং সমাধান।
Spring Cloud LoadBalancer সেটআপ:
১. ডিপেনডেন্সি যোগ:
Spring Boot 2.4 থেকে Spring Cloud LoadBalancer ডিফল্ট ভাবে উপলব্ধ। তবে নিশ্চিত করতে নিচের ডিপেনডেন্সি যোগ করুন:
Maven:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'
২. RestTemplate এর সাথে LoadBalancer সংযুক্ত করা:
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
৩. RestTemplate দিয়ে সার্ভিস কল করা:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class LoadBalancerController {
private final RestTemplate restTemplate;
public LoadBalancerController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@GetMapping("/get-data")
public String getData() {
String url = "http://my-service-name/api/data"; // সার্ভিসের নাম
return restTemplate.getForObject(url, String.class);
}
}
- নোট: সার্ভিসের নাম (যেমন
my-service-name) DNS-এ সমাধান করা হবে Spring Cloud LoadBalancer এর মাধ্যমে।
৪. Custom LoadBalancer Configuration:
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Flux;
@Configuration
@LoadBalancerClients({
@LoadBalancerClient(name = "my-service-name", configuration = CustomLoadBalancerConfig.class)
})
public class CustomLoadBalancerConfig {
@Bean
public ServiceInstanceListSupplier serviceInstanceListSupplier() {
return new ServiceInstanceListSupplier() {
@Override
public Flux<List<ServiceInstance>> get() {
// Custom logic for instance selection
return Flux.just(List.of(
// Define your service instances here
));
}
};
}
}
Spring Cloud Ribbon (ডিপ্রিকেটেড)
Ribbon একসময় Spring Framework এর ডিফল্ট লোড ব্যালেন্সার ছিল। Spring Cloud 2020 (Hoxton) এর পরে এটি ডিপ্রিকেটেড হয়েছে এবং Spring Cloud LoadBalancer এর মাধ্যমে প্রতিস্থাপিত হয়েছে।
Ribbon ব্যবহার (Legacy Projects):
১. ডিপেনডেন্সি যোগ:
Ribbon ব্যবহার করতে Spring Cloud Netflix Starter ডিপেনডেন্সি যোগ করুন।
Maven:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
২. RestTemplate এর সাথে Ribbon সংযুক্ত করা:
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
৩. Ribbon কনফিগারেশন (application.yml):
Ribbon সার্ভিস ডিসকভারি এবং লোড ব্যালেন্সিং কনফিগার করার জন্য প্রয়োজন।
my-service-name:
ribbon:
listOfServers: localhost:8081,localhost:8082
ConnectTimeout: 5000
ReadTimeout: 5000
৪. Ribbon দিয়ে সার্ভিস কল:
@RestController
public class RibbonController {
private final RestTemplate restTemplate;
public RibbonController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@GetMapping("/ribbon-test")
public String ribbonTest() {
String url = "http://my-service-name/api/data";
return restTemplate.getForObject(url, String.class);
}
}
Spring Cloud LoadBalancer বনাম Ribbon:
| বৈশিষ্ট্য | Spring Cloud LoadBalancer | Ribbon (Deprecated) |
|---|---|---|
| স্ট্যাটাস | Active | Deprecated (Spring Cloud 2020 থেকে বন্ধ করা হয়েছে)। |
| Configuration Method | Annotation এবং Programmatic | Mostly YAML/Properties-based |
| Customizability | সহজে কাস্টমাইজ করা যায়। | কম কাস্টমাইজেবল। |
| Reactive Support | সমর্থন করে। | সমর্থন করে না। |
| Dependency | Spring Cloud Starter LoadBalancer | Spring Cloud Netflix Ribbon |
উপসংহার:
- Spring Cloud LoadBalancer হল Ribbon এর উন্নত বিকল্প, যা Spring Boot এর নতুন সংস্করণগুলির জন্য উপযুক্ত।
- যদি আপনার অ্যাপ্লিকেশনে Spring Boot 2.4+ ব্যবহার করা হয়, তাহলে Spring Cloud LoadBalancer ব্যবহার করুন।
- Legacy প্রোজেক্টের জন্য Ribbon প্রয়োজন হলে সেটি ঠিকভাবে কনফিগার করুন।
প্রয়োজন হলে আরও উদাহরণ বা বিস্তারিত জানাতে বলুন! 😊