Κοινή χρήση τεχνολογίας

SpringCloud--Σμήνος Eureka

2024-07-12

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

Σύμπλεγμα κέντρου εγγραφής Eureka

Γιατί συστάδα

Εάν υπάρχει μόνο ένας διακομιστής κέντρου εγγραφής, θα υπάρχει ένα μόνο σημείο αποτυχίας και δεν είναι δυνατή η επεξεργασία του με υψηλή ταυτόχρονη, επομένως απαιτείται σύμπλεγμα.

Πώς να ομαδοποιήσετε

Προετοιμάστε τρεις EurekaServer για εγγραφή μεταξύ τους, πράγμα που σημαίνει ότι κάθε 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 είναι ένα έργο ανοιχτού κώδικα υπηρεσίας μεσαίου επιπέδου cloud που κυκλοφόρησε από το Netflix. Η κύρια λειτουργία του είναι να παρέχει αλγόριθμο εξισορρόπησης φορτίου πελάτη. Το στοιχείο πελάτη Ribbon παρέχει μια σειρά από πλήρη στοιχεία διαμόρφωσης, όπως λήξη χρόνου σύνδεσης, επανάληψη, κ.λπ. Με απλά λόγια, το Ribbon είναι ένα πρόγραμμα εξισορρόπησης φορτίου πελάτη Μπορούμε να αναφέρουμε όλα τα μηχανήματα πίσω από τον εξισορροπητή φορτίου στο αρχείο διαμόρφωσης και το Ribbon θα σας βοηθήσει αυτόματα να συνδεθείτε βάσει ορισμένων κανόνων (όπως απλή δημοσκόπηση, τυχαίες συνδέσεις, κ.λπ.). μηχανών, μπορούμε εύκολα να χρησιμοποιήσουμε το Ribbon για να εφαρμόσουμε προσαρμοσμένους αλγόριθμους εξισορρόπησης φορτίου. Το Ribbon είναι ένα πρόγραμμα εξισορρόπησης φόρτου πελάτη που μπορεί να ολοκληρώσει κλήσεις εξισορρόπησης φορτίου για πολλαπλές παρουσίες υπηρεσίας μιας υπηρεσίας σύμφωνα με ορισμένους κανόνες Αυτοί οι κανόνες υποστηρίζουν επίσης την προσαρμογή.

Σχηματικός:

Εξισορρόπηση φορτίου OpenFeign

Το OpenFeign είναι ένα δηλωτικό πρόγραμμα-πελάτη της υπηρεσίας Web, σκοπός του οποίου είναι να διευκολύνει τις κλήσεις της Υπηρεσίας Ιστού. Το Feign παρέχει ένα πρότυπο διεπαφής για αιτήματα HTTP (η διεύθυνση πρόσβασης επισημαίνεται σε αυτό γράφοντας μια απλή διεπαφή και εισάγοντας σχολιασμούς, μπορείτε να ορίσετε τις παραμέτρους, τη μορφή, τη διεύθυνση και άλλες πληροφορίες του αιτήματος HTTP). Το OpenFeign θα εκτελεί πλήρως τα αιτήματα HTTP μεσολάβησης (δυναμικό διακομιστή μεσολάβησης). Χρειάζεται μόνο να το καλέσουμε ως μέθοδο για την ολοκλήρωση του αιτήματος υπηρεσίας και της σχετικής επεξεργασίας. Το Feign ενσωματώνει το Ribbon και το Hystrix (θα μιλήσουμε για το Hystrix αργότερα), έτσι ώστε να μην χρειάζεται πλέον να χρησιμοποιούμε ρητά αυτά τα δύο συστατικά.

Στρατηγική εξισορρόπησης φορτίου

Κυβερνώ

Διαμορφώνοντας διαφορετικές υποκατηγορίες IRule, μπορείτε να επιλέξετε διαφορετικές στρατηγικές εξισορρόπησης φορτίου, δηλαδή να επιλέξετε μια υπηρεσία από τη λίστα υπηρεσιών με μια συγκεκριμένη στρατηγική για να ολοκληρώσετε την κλήση. Φυσικά μπορεί και να προσαρμοστεί. Επομένως, οι στρατηγικές εξισορρόπησης φορτίου μπορούν να χωριστούν σε ενσωματωμένες και προσαρμοσμένες.

Ενσωματωμένη στρατηγική εξισορρόπησης φορτίου