प्रौद्योगिकी साझेदारी

SpringCloud--यूरेका समूहः

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

यूरेका पञ्जीकरण केन्द्र समूह

किमर्थं समूहः

यदि केवलम् एकः पञ्जीकरणकेन्द्रसर्वरः अस्ति तर्हि एकः अपि विफलताबिन्दुः भविष्यति तथा च उच्चसमकालीनतायाः सह संसाधितुं न शक्यते, अतः समूहः आवश्यकः

कथं समूहः भवति

परस्परं पञ्जीकरणार्थं त्रीणि EurekaServers सज्जीकरोतु, यस्य अर्थः अस्ति यत् प्रत्येकं EurekaServer इत्यनेन सह सर्वेषु EureakServers इत्यनेन सह पञ्जीकरणं करणीयम्, प्रत्येकं EurekaServer इत्येतत् सर्वरं क्लायन्ट् च रूपेण कार्यं करोति । अस्माकं अन्येषां सूक्ष्मसेवानां (आदेशः, उपयोक्ता) केवलं पञ्जीकरणपतेः सर्वेभ्यः EurekaServers इत्यस्मै सूचयितुं आवश्यकम् अस्ति ।

संहिता : १.

अत्र यत् प्रयुक्तं तत् Eureka मॉड्यूल् अस्ति, यत् क्लस्टरिंग् इत्यस्य प्रभावं प्राप्तुं बहुविध yml सञ्चिकाः विन्यस्यति ।

स्टार्टअप क्लास

  1. package org.example;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. /**
  6. * @ClassName EurekaStart
  7. * @Author 23
  8. * @Date 2024/7/10 19:12
  9. * @Version 1.0
  10. * @Description TODO
  11. **/
  12. @SpringBootApplication
  13. @EnableEurekaServer
  14. public class EurekaStart {
  15. public static void main(String[] args) {
  16. SpringApplication.run(EurekaStart.class,args);
  17. }
  18. }

yml

  1. spring:
  2. profiles:
  3. active: peer3
  4. ---
  5. spring:
  6. profiles: peer1
  7. application:
  8. name: Eureka1
  9. eureka:
  10. instance:
  11. hostname: localhost
  12. client:
  13. serviceUrl:
  14. defaultZone: http://localhost:10070/eureka/
  15. server:
  16. port: 10070
  17. ---
  18. spring:
  19. profiles: peer2
  20. application:
  21. name: Eureka2
  22. eureka:
  23. instance:
  24. hostname: localhost
  25. client:
  26. serviceUrl:
  27. defaultZone: http://localhost:10071/eureka/
  28. server:
  29. port: 10071
  30. ---
  31. spring:
  32. profiles: peer3
  33. application:
  34. name: Eureka3
  35. eureka:
  36. instance:
  37. hostname: localhost
  38. client:
  39. serviceUrl:
  40. defaultZone: http://localhost:10072/eureka/
  41. server:
  42. port: 10072

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>org.example</groupId>
  6. <artifactId>Springcloud-Netflix</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. </parent>
  9. <artifactId>Eureka-Service</artifactId>
  10. <packaging>jar</packaging>
  11. <name>Eureka-Service</name>
  12. <url>http://maven.apache.org</url>
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>junit</groupId>
  19. <artifactId>junit</artifactId>
  20. <version>3.8.1</version>
  21. <scope>test</scope>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-web</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. </dependency>
  31. <!-- Eureka服务端支持 -->
  32. <dependency>
  33. <groupId>org.springframework.cloud</groupId>
  34. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  35. </dependency>
  36. </dependencies>
  37. </project>

सेवा भार संतुलन

भारसन्तुलनस्य आवश्यकता किमर्थम्

समवर्तीतां प्रदातुं कदाचित् एकः एव सेवाप्रदाता बहुविधं (वस्तुसेवाः) परिनियोक्तुं शक्नोति । अयं क्लायन्ट् आह्वानं कुर्वन् कस्यापि उत्तरदायी संतुलनरणनीत्यानुसारं लोड-आह्वानं पूर्णं कर्तुं अर्हति ।

सेवाप्रदाता विन्यासः

  1. spring:
  2. profiles:
  3. active: order2
  4. ---
  5. server:
  6. port: 10010
  7. spring:
  8. profiles: order1
  9. application:
  10. name: order-service
  11. eureka:
  12. client:
  13. service-url:
  14. defaultZone: http://localhost:10072/eureka
  15. instance:
  16. prefer-ip-address: true
  17. ---
  18. server:
  19. port: 10012
  20. spring:
  21. profiles: order2
  22. application:
  23. name: order-service
  24. eureka:
  25. client:
  26. service-url:
  27. defaultZone: http://localhost:10072/eureka
  28. instance:
  29. prefer-ip-address: true

सामान्यभारसंतुलनकार्यन्वयनप्रौद्योगिकीः

रिबन्

RestTmplate इत्यस्य माध्यमेन url इत्यनेन सेवा-कॉलं सम्पूर्णं कुर्वन्तु

संहिता कार्यान्वयनम् (सेवा उपभोक्तृपक्षः): १.

  1. package org.example.Controller;
  2. import org.example.domain.Order;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.cloud.client.ServiceInstance;
  5. import org.springframework.cloud.client.discovery.DiscoveryClient;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PathVariable;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import org.springframework.web.client.RestTemplate;
  11. import java.util.Arrays;
  12. import java.util.List;
  13. /**
  14. * @ClassName UserController
  15. * @Author 23
  16. * @Date 2024/7/10 18:52
  17. * @Version 1.0
  18. * @Description TODO
  19. **/
  20. @RestController
  21. @RequestMapping("/User")
  22. public class UserControllerrlb {
  23. @Autowired
  24. private RestTemplate restTemplate;
  25. // @Autowired
  26. // private DiscoveryClient discoveryClient;
  27. @GetMapping("/getOrder/{id}")
  28. public List<Order> getOrderById(@PathVariable("id") Integer id) {
  29. // Order[] order = restTemplate.getForObject("http://localhost:10010/OrderService/user/" + id, Order[].class);
  30. // return Arrays.asList(order);
  31. // List<ServiceInstance> instances=discoveryClient.getInstances("order-service");//通过服务的名字去获取服务实例
  32. // ServiceInstance serviceInstance=instances.get(0);//定死只获取第一个服务实例对象
  33. // String ip=serviceInstance.getHost();//获取服务对象ip
  34. // int port=serviceInstance.getPort();//获取获取的实例对象的服务端口号
  35. Order[] orders=restTemplate.getForObject("http://Order-Service/OrderService/user/"+id,Order[].class);
  36. return Arrays.asList(orders);
  37. }
  38. }

रिबन लोड बैलेन्सिंग कॉल

रिबन् नेटफ्लिक्स् द्वारा विमोचितस्य मेघमध्यस्तरसेवायाः मुक्तस्रोतपरियोजना अस्ति अस्य मुख्यं कार्यं क्लायन्ट् लोड् बैलेन्सिंग् एल्गोरिदम् प्रदातुं भवति । Ribbon client घटकः सम्पूर्णविन्यासवस्तूनाम् एकां श्रृङ्खलां प्रदाति, यथा संयोजनसमयसमाप्तिः, पुनः प्रयासः इत्यादयः । सरलतया वक्तुं शक्यते यत्, Ribbon इति क्लायन्ट् लोड् बैलेन्सर् अस्ति वयं विन्याससञ्चिकायां लोड् बैलेन्सर् इत्यस्य पृष्ठतः सर्वाणि यन्त्राणि सूचीबद्धं कर्तुं शक्नुमः, एतेषां कृते च रिबन् स्वयमेव कतिपयानां नियमानाम् आधारेण (यथा सरलं पोलिंग्, यादृच्छिकसंयोजनम् इत्यादयः) संयोजयितुं साहाय्यं करिष्यति मशीनेषु, वयं कस्टम् लोड् बैलेन्सिङ्ग् एल्गोरिदम्स् कार्यान्वितुं Ribbon इत्यस्य उपयोगं सहजतया कर्तुं शक्नुमः । रिबन् एकः ग्राहकभारसंतुलकः अस्ति यः कतिपयनियमानुसारं सेवायाः बहुविधसेवादृष्टान्तानां कृते भारसंतुलन-आह्वानं सम्पूर्णं कर्तुं शक्नोति ।

योजनाबद्धः : १.

OpenFeign भारसंतुलनम्

OpenFeign एकः घोषणात्मकः जालसेवाग्राहकः अस्ति यस्य उद्देश्यं जालसेवाकॉलं सुलभं कर्तुं भवति । Feign HTTP अनुरोधानाम् कृते एकं अन्तरफलकं टेम्पलेट् प्रदाति (अस्मिन् अभिगमपता चिह्नितं भवति) सरलं अन्तरफलकं लिखित्वा टिप्पणीं सम्मिलितं कृत्वा, भवान् HTTP अनुरोधस्य पैरामीटर्स्, प्रारूपं, पतां अन्यसूचनाः च परिभाषितुं शक्नोति OpenFeign पूर्णतया प्रॉक्सी (डायनामिक प्रॉक्सी) HTTP अनुरोधं करिष्यति अस्माकं केवलं सेवानुरोधं सम्बद्धं प्रक्रियां च पूर्णं कर्तुं विधिवत् आह्वयितुं आवश्यकम्। Feign Ribbon तथा Hystrix इत्येतयोः एकीकरणं करोति (Hystrix इत्यस्य विषये पश्चात् वदामः), येन अस्माकं एतयोः घटकयोः स्पष्टतया उपयोगस्य आवश्यकता नास्ति ।

भार संतुलन रणनीति

इरुले

भिन्न-भिन्न IRule उपवर्गान् विन्यस्य, भवान् भिन्न-भिन्न-भार-सन्तुलन-रणनीतयः चिन्वितुं शक्नोति, अर्थात्, आह्वानं पूर्णं कर्तुं विशिष्ट-रणनीत्या सह सेवा-सूचिकातः सेवां चिनोतु अवश्यं तस्य अनुकूलनं अपि कर्तुं शक्यते। अतः भारसन्तुलनरणनीतयः अन्तः निर्मिताः, अनुकूलिताः च इति विभक्तुं शक्यन्ते ।

अन्तर्निर्मितं भारसंतुलनरणनीतिः