Источник:блог woo woo woo.cn на.com/clear/fear/8…
Добавить Автора
Когда я впервые увидел слово Эврика, я действительно не знал, как его произносить. Проверив его, я обнаружил, что у него красивое имя. Давай, давайте произнесем его вместе [ jʊ'rikə ]
Введение
Eureka сама по себе является продуктом Netflix с открытым исходным кодом, который обеспечивает регистрацию и обнаружение сервисов, а также предоставляет соответствующий пакет Java. В его реализации узлы равны друг другу, и выход из строя некоторых узлов реестра не повлияет на работу кластера.Даже если выживет только один узел в кластере, служба обнаружения может быть предоставлена в штатном режиме. Даже если все узлы регистрации службы отключены, Eureka Информация о вызовах службы также кэшируется на клиентах. Это гарантирует, что взаимные вызовы между нашими микросервисами будут достаточно надежными. Zookeeper в основном предоставляет услуги распределенной конфигурации с открытым исходным кодом, услуги синхронизации и именованную регистрацию для крупномасштабных распределенных вычислений. Когда-то подпроект проекта Hadoop для управления данными в кластере теперь был повышен до независимого проекта верхнего уровня. Он также используется в качестве решения службы обнаружения служб во многих сценариях.
В сравнении
В распределенных системах существует хорошо известная теорема CAP (непротиворечивость C-данных, доступность A-сервиса, отказоустойчивость P-сервиса к сбоям сетевых разделов). Эти три характеристики не могут быть удовлетворены одновременно ни в одной распределенной системе, самое большее одновременно удовлетворяют оба);
Zookeeper
Zookeeper разработан на основе CP, то есть запросы на доступ к Zookeeper в любое время могут получить непротиворечивые результаты данных, а система отказоустойчива к сегментации сети, но не может гарантировать доступность каждого запроса на обслуживание. Из реальной ситуации, при использовании Zookeeper для получения списка сервисов, если Zookeeper выбирает мастер или более половины машин в кластере Zookeeper недоступны, данные не будут получены. Поэтому Zookeeper не может гарантировать доступность службы. Это правда, что в большинстве распределенных сред, особенно в сценариях, связанных с хранением данных, в первую очередь должна быть гарантирована согласованность данных, поэтому zookeeper разработан как CP. А вот для сценария обнаружения службы ситуация иная: для одной и той же службы, даже если информация о поставщике услуг, хранящаяся в разных узлах реестра, разная, это не вызовет катастрофических последствий.
Поскольку для потребителей службы возможность потребления является наиболее важной вещью — попробуйте использовать после получения информации об экземпляре службы, которая может быть неверной, а не не потреблять, потому что информация об экземпляре не может быть получена.
(попробуйте быстро выйти из строя, затем обновите конфигурацию и повторите попытку) Таким образом, для обнаружения службы доступность важнее, чем согласованность данных - AP превосходит CP.
Eureka
И Spring Cloud Netflix следует принципу AP при разработке Eureka. EurekaServer также может запускать несколько экземпляров для создания кластеров и решения одноточечных проблем, но в отличие от процесса выбора лидера ZooKeeper, Eureka Server используетPeer to Peer
одноранговое общение. Это децентрализованная архитектура без различий между главным и подчиненным, и все одноранговые узлы равны. В этой архитектуре узлы повышают доступность, регистрируясь друг у друга, и каждый узел должен добавить один или несколько допустимых serviceUrls, указывающих на другие узлы. Каждый узел можно рассматривать как копию других узлов.
Если сервер Eureka выйдет из строя, запрос клиента Eureka автоматически переключится на новый узел EurekaServer.Когда отключенный сервер будет восстановлен, Eureka снова включит его в управление кластером серверов. Когда узел начинает принимать клиентские запросы, все операции будут выполнять операцию replicateToPeer (межузловая репликация), реплицируя запрос на все узлы, которые в настоящее время известны другим EurekaServers.
После запуска нового узла Eureka Server он сначала попытается получить всю информацию о реестре экземпляров от соседних узлов, чтобы завершить инициализацию. EurekaServer получает все узлы с помощью метода getEurekaServiceUrls() и будет регулярно обновлять их посредством обновления пульса. В конфигурации по умолчанию, если Eureka Если сервер не получает пульс экземпляра службы в течение определенного периода времени, EurekaServer отключит экземпляр (по умолчанию 90 секунд, настроено через eureka.instance.lease-expiration-duration-in-seconds). Когда узел Eureka Server теряет слишком много тактов за короткий промежуток времени (например, из-за сбоя сетевого раздела), узел переходит в режим самозащиты.
Что такое режим самозащиты?
В конфигурации по умолчанию, если количество обновлений пульса, получаемых сервером Eureka в минуту, ниже порогового значения (количество экземпляров(60 секунд интервала сердцебиения на экземпляр)Фактор самозащиты), и если он продлится 15 минут, сработает самозащита. В режиме самозащиты EurekaServer будет защищать информацию в реестре службы и больше не будет выходить из каких-либо экземпляров службы. Когда количество получаемых импульсов снова превышает пороговое значение, узел EurekaServer автоматически выходит из режима самозащиты. Философия его разработки, как упоминалось ранее, заключается в том, что лучше сохранить ошибочную информацию о регистрации службы, чем слепо отменять регистрацию любых потенциально работоспособных экземпляров службы. Этот режим может бытьeureka.server.enable-self-preservation = false
отключить, покаeureka.instance.lease-renewal-interval-in-seconds
можно использовать для изменения интервала сердцебиения,eureka.server.renewal-percent-threshold
Может использоваться для изменения коэффициента самозащиты (по умолчанию 0,85).
Суммировать
ZooKeeper основан на CP и не гарантирует высокой доступности.Если Zookeeper выбирает мастер или более половины машин в кластере Zookeeper недоступны, данные не будут доступны. Eureka основана на AP и может обеспечить высокую доступность.Даже если все машины не работают, вы все равно можете получить локально кэшированные данные. Что касается реестра, конфигурация меняется не очень часто, только когда версия выходит и машина выходит из строя. Для конфигураций, которые изменяются нечасто, CP не подходит, и точки доступа могут пожертвовать согласованностью, чтобы обеспечить доступность при возникновении проблем, как с возвратом старых данных, так и с кэшированием данных.
Так что теоретически Eureka больше подходит в качестве реестра. В реальной среде большинство проектов могут использовать ZooKeeper, поскольку кластер недостаточно велик, а более половины машин, используемых в качестве реестра, практически не встречаются. Так что это не очень большая проблема.
рекомендовать
- Анализ проектирования микросервисной архитектуры Netflix
- Почему Ali требует указания rollbackFor в аннотации транзакции @Transactional?
- Инструмент сборки следующего поколения Gradle, чем он лучше Maven!
- Как повысить производительность Nginx в 10 раз?
- Собеседник должен понимать принцип реализации распределенной блокировки Redis!
Обмен учебными материалами
12 комплектовОсновные технические материалы Microservices, Spring Boot, Spring Cloud, это часть каталога данных:
-
Аутентификация и авторизация Spring Security
-
Борьба с проектом Spring Boot (фоновая сервисная архитектура и архитектура эксплуатации и обслуживания малых и средних интернет-компаний)
-
Борьба с проектом Spring Boot (проект управления корпоративными правами))
-
Борьба с проектом микросервисной архитектуры Spring Cloud (решение для распределенных транзакций)
-
...
Фоновый ответ публичного аккаунтаarch028
Получить информацию::