Лента - это компонент, ответственный за балансировку нагрузки в Cloud Cloud Netflix Family Bugets. Это коллекция классовых библиотек. Через ленту программисты могут использовать балансировку нагрузки «прозрачно», не включая конкретные детали реализации, без необходимости писать слишком много кода для реализации балансировки нагрузки в проектах.
Например, в кластере, содержащем Eureka и ленту, сервис (который можно понять как пакет JAR) развертывается на нескольких серверах. Когда несколько пользователей службы вызывают сервис одновременно, эти параллельные запросы могут быть пересылаются на каждый сервер, используя разумную стратегию.
Фактически, при использовании различных других компонентов пружинного облака мы можем видеть следы ленты, такие как Eureka, могут быть интегрированы с лентой, а компонент Zuul, который обеспечивает функцию шлюза, также может быть интегрирован с лентой при пересылке запросов.
На уровне кода лента имеет следующие еще три важных интерфейса.
Во -первых, Iloadbalancer, который также называется балансировщиком нагрузки. Через это мы можем разумно направить запросы в проекте в соответствии с конкретными правилами. Общий класс внедрения - базелоадбалранц.
Во -вторых, Irule, этот интерфейс имеет несколько классов реализации, такие как случайный и Roundrobinrule. Эти классы реализации специально определяют стратегии балансировки нагрузки, такие как «случайный» и «опрос» и т. Д. Мы также можем переписать методы на этом интерфейсе, чтобы настроить стратегии балансировки нагрузки.
В классе BaseLoadBalancer мы можем установить политики балансировки нагрузки через класс реализации IRULE, чтобы балансировщик нагрузки мог разумно направлять запросы на основе этого.
В -третьих, интерфейс IPP, через этот интерфейс, мы можем получить, какие серверы в настоящее время доступны, и мы также можем настроить правила, чтобы определить, доступен ли сервер, переписывая методы в этом интерфейсе. В классе BaseLoadBalancer мы также можем установить политики, чтобы определить, доступен ли сервер через класс реализации IPS.
1 iloadbalancer: интерфейс Loadbalancer
В ленте мы также можем выбрать серверы на основе конкретных политик балансировки нагрузки через интерфейс iloadbalancer.
Через iloadbalancerdemo.java ниже, давайте посмотрим на основное использование этого интерфейса. Этот класс помещается в проект Rabbionbasicdemo, созданный в части 4.2, и код выглядит следующим образом.
// Опустите необходимый пакет и код импорта открытого класса iloadbalancerdemo {public static void main (string [] args) {// Создать объект iloadbalancer iloadbalancer loadbalancer = new Baseloadbalancer (); // Определить список списков серверов <Server> myservers = new ArrayList <server> (); // Создание двух объектов сервера Server S1 = новый сервер ("ekserver1", 8080); Сервер S2 = новый сервер ("ekserver2", 8080); // Поместите два объекта сервера в список типа MyServers Object MyServers.Add (s1); myservers.add (S2); // Поместите myservers в балансировку нагрузки LoadBalancer.Addservers (myservers); // Инициировать 10 вызовов в цикле для (int i = 0; i <10; i ++) {// Использовать правила балансировки нагрузки по умолчанию для получения объекта сервера сервер S = LoadBalancer.chooseServer ("default"); // Вывод IP -адреса и номера порта System.out.println (s.gethost () + ":" + s.getport ()); }}}В строке 5 мы создаем объект Loadbalancer типа Baseloadbalancer, а Baseloadbalancer - это класс реализации интерфейса балансировщика нагрузки Iloadbalancer.
В строках с 6 по 13 мы создаем два объекта серверного типа и помещаем их в Myservers. В строке 15 мы помещаем объект Myservers типа списка в балансировщик нагрузки.
В цикле FOR на строках 17–22 мы смоделировали выбор сервера 10 раз через балансировщик нагрузки. В частности, в строке 19, мы выбираем сервер с правилами балансировки нагрузки по умолчанию с помощью метода выбора нагрузки. В строке 21 мы используем действие «Печать» для моделирования фактического «с использованием объекта сервера для обработки запросов».
Результаты работы приведенного выше кода следующие. Мы видим, что балансировщик нагрузки LoadBalancer распределяет 10 запросов на 2 сервера, и мы действительно можем увидеть эффект «балансировки нагрузки».
Во -вторых, Irule, этот интерфейс имеет несколько классов реализации, такие как случайный и Roundrobinrule. Эти классы реализации специально определяют стратегии балансировки нагрузки, такие как «случайный» и «опрос» и т. Д. Мы также можем переписать методы на этом интерфейсе, чтобы настроить стратегии балансировки нагрузки.
В классе BaseLoadBalancer мы можем установить политики балансировки нагрузки через класс реализации IRULE, чтобы балансировщик нагрузки мог разумно направлять запросы на основе этого.
В -третьих, интерфейс IPP, через этот интерфейс, мы можем получить, какие серверы в настоящее время доступны, и мы также можем настроить правила, чтобы определить, доступен ли сервер, переписывая методы в этом интерфейсе. В классе BaseLoadBalancer мы также можем установить политики, чтобы определить, доступен ли сервер через класс реализации IPS.
ekserver2: 8080 ekserver1: 8080 ekserver2: 8080 ekserver1: 8080 ekserver2: 8080 ekserver1: 8080 ekserver2: 8080 ekserver1: 8080 ekserver2: 8080 ekserver1: 8080 ekserver1: 8080
2 Irule: интерфейс, который определяет правила балансировки нагрузки
В ленте мы можем установить соответствующие правила для балансировщика нагрузки, определив класс реализации интерфейса Irule. В следующей таблице мы можем увидеть некоторые обычно используемые классы реализации интерфейса IRULE.
Название класса реализации | Правила балансировки нагрузки |
Случайный | Принять случайно выбранную стратегию |
Roundrobinrule | Принять стратегию опроса |
Повторение | При использовании этой стратегии включено повторное действие |
Доступность FilterRule | Он будет фильтровать серверы с несколькими сбоями соединения и чрезмерным параллелизмом запроса |
WeeshedResponsetimeRule | Установите вес для каждого сервера в соответствии со средним временем ответа и выберите серверы с меньшим средним временем ответа на основе этого значения веса. |
Zoneavoidancerule | Приоритет уделяется распределению запроса на серверы с той же зоной, что и запрос |
В следующей программе IruLedemo.java давайте посмотрим на основное использование Irule.
// Опустите необходимый пакет и код импорта открытый класс iruledemo {public static void main (string [] args) {// Обратите внимание, что это используется для базодбалбанка, а не iloadbalancer интерфейс Baseloadlancer loadbalancer = new Baseloadbalancer (); // объявить политику балансировки нагрузки на основе опроса Irule Rule = New RoundRobinRule (); // Установить политику LoadBalancer.SetRule (Правило); // определить 3 сервера следующим образом и поместите их в сборник списка типа списка <Server> myservers = new ArrayList <server> (); Сервер S1 = новый сервер ("ekserver1", 8080); Сервер S2 = новый сервер ("ekserver2", 8080); Сервер S3 = новый сервер ("ekserver3", 8080); myservers.add (s1); myservers.add (S2); myservers.add (s3); // Установить список сервера loadbalancer.addservers (myservers); // выводит результат балансировки нагрузки для (int i = 0; i <10; i ++) {server s = loadbalancer.chooseServer (null); System.out.println (s.gethost () + ":" + s.getport ()); }}}Этот код очень похож на iloadbalancerdemo.java в приведенной выше статье, но есть следующие различия.
1 В строке 5 мы определяем балансировщик нагрузки через класс Baseloadlancer вместо интерфейса, потому что класс содержит метод Setrule.
2 Определите объект правила на основе правила опроса в строке 7 и установите его в балансировщик нагрузки в строке 9.
3 В строке 19 мы поместили объект списка, содержащий 3 сервера в балансировщик нагрузки, а не в два предыдущих. Поскольку он хранится здесь для демонстрационных целей, мы поместим сервер «ekserver3», которого вообще не существует.
После запуска программы мы видим, что есть 10 выходов, и она действительно выводит имена 3 серверов в последовательности в соответствии с правилом «опроса». Если мы изменим код в строке 7 на следующее, мы увидим имя сервера «случайным образом».
Irule rule = new randomrule ();
3 IPS: интерфейс, чтобы определить, доступен ли сервер
В проекте мы обычно позволяем интерфейсу iloadbalancer автоматически определять, доступен ли сервер (эти службы инкапсулируются в базовом коде ленты). Кроме того, мы также можем использовать интерфейс IPP в компоненте ленты для реализации этой функции.
В следующем коде Iruledemo.java мы продемонстрируем общее использование интерфейса IPP.
// Опустите необходимый пакет и код импорта класса Myping реализует iping {public boolean isealive (сервер Server) {// Если имя сервера ekserver2, вернуть false if (server.gethost (). Equals ("ekserver2")) {return false; } вернуть true; }}Класс Myping, определенный в строке 2, реализует интерфейс IPP и переопределяет метод ISALIVE в строке 3.
В этом методе мы судим на основе имени сервера. В частности, если имя является ekserver2, оно возвращает false, что означает, что сервер недоступен, в противном случае он возвращает True, что означает, что текущий сервер доступен.
открытый класс iruledemo {public static void main (string [] args) {baseloadbalancer loadbalancer = new baseloadbalancer (); // Определите объект Myping IPP IPP IPS IPP = NEW MYPING (); // Использование объекта Myping LoadBalancer.Setping (myping); // Создать три объекта сервера и поместить их в список балансировщиков нагрузки <Server> myServers = new ArrayList <server> (); Сервер S1 = новый сервер ("ekserver1", 8080); Сервер S2 = новый сервер ("ekserver2", 8080); Сервер S3 = новый сервер ("ekserver3", 8080); myservers.add (s1); myservers.add (S2); myservers.add (s3); LoadBalancer.Addservers (MISERVERS); // Запросить сервер несколько раз через a для цикла для (int i = 0; i <10; i ++) {server s = loadbalancer.chooseServer (null); System.out.println (s.gethost () + ":" + s.getport ()); }}}В основной функции в строке 12 мы создаем объект Myping типа IPP в строке 15 и помещаем этот объект в балансировщик нагрузки в строке 17. Через код в строках с 18 по 26 мы создаем три сервера и также помещаем их в балансировщик нагрузки.
В цикле FOR в строке 28 мы все еще запрашиваем и выводим имя сервера. Поскольку балансировщик нагрузки здесь содержит объект типа IPP, после получения сервера в соответствии с политикой, он определит, доступен ли сервер на основе Isactive Method в Myping.
Поскольку в этом методе мы определяем, что сервер ekserver2 недоступен, объект LoadBalancer Balancer Load Balancer никогда не отправит запрос на сервер, то есть в результате вывода мы не увидим выход «ekserver2: 8080».
Из этого мы можем увидеть общее использование интерфейса IPP. Мы можем определить логику «судить о том, доступен ли сервер», переписывая метод Isalive. В фактических проектах основа для суждения - это не что иное, как «отвечать на сервер слишком долго» или «слишком много, если количество запросов, отправляемых на сервер». Эти методы суждения инкапсулируются в интерфейсе IRULE и его классе реализации, поэтому в общих сценариях мы используем интерфейс IPP.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.