Nacos нового поколения микросервисов Java

Java

предисловие

С конца 2017 года, когда Dubbo, наиболее широко используемая среда RPC в области разработки Java, начала обновлять и поддерживать, Alibaba продолжает открывать исходный код экосистемы микросервисов Dubbo.Sentinel,Nacos,SeataВ ожидании платформы промежуточного программного обеспечения для микросервисов и запуска Spring Cloud Alibaba, чтобы предоставить универсальное решение для разработки микросервисов, Alibaba продолжает активно участвовать в сообществе Java и привносит новую жизненную силу в разработку микросервисов Java.

В этой статье основное внимание будет уделено изучению функций и использованию микросервисного компонента Nacos в качестве реестра.NacosЭто новый проект Alibaba с открытым исходным кодом в июле 2018 года.

Об имени Nacos: первые четыре буквы - это первые две буквы имени и конфигурации, последниеsдля обслуживания.

Основное содержание этой статьи следующее:

  • Основное введение в Nacos
  • Зачем использовать Nacos
  • Регистрация и интеграция обнаружения последней версии сервисов Nacos и Rest/Dubbo

О Nacos /nɑ:kəʊs/

Динамическое обнаружение сервисов, управление конфигурацией и платформа управления сервисами, упрощающая создание облачных приложений.

Приведенное выше предложение взято с официальной домашней страницы Nacos, которая представляет собой краткое изложение общих функций Nacos.

В двух словах, Nacos представляет собой комбинацию центра регистрации и центра конфигурации, предоставляя простой в использовании набор функций, помогающий нам решать проблемы регистрации и обнаружения служб, настройки служб и управления службами, которые должны быть задействованы в микросервисах. разработка. Nacos также является одним из компонентов Spring Cloud Alibaba, отвечающим заРегистрация и обнаружение службы.

Во-первых, давайте посмотрим на официальный ответ Nacosхарактеристикаописывать:

  • Обнаружение служб и мониторинг работоспособности служб
  • Служба динамической настройки
  • Служба динамического DNS
  • Службы и управление их метаданными
  • Постоянно добавляю...

Можно обнаружить, что все функции неразделимыСлужитьЭто слово «Служба» является первоклассным гражданином в мире Nacos, что указывает на то, что служба является самой важной ролью в Nacos.

Почему Накос

В текущей экосистеме микросервисов уже есть много компонентов с открытым исходным кодом для регистрации и обнаружения сервисов, таких как Eurka, ZooKeeper и Consul. Зачем использовать Nacos? Давайте посмотрим на простое сравнение этих фреймворков:

Платформа регистрации и обнаружения служб CAP модель консольное управление общественная деятельность
Eureka AP служба поддержки Низкий (версия 2.x с закрытым исходным кодом)
Zookeeper CP не поддерживается середина
Consul CP служба поддержки высокий
Nacos AP служба поддержки высокий

Говорят, что Nacos имеет более 100 000 экземпляров, работающих внутри Alibaba, которые прошли тест различного крупномасштабного трафика, такого как Double Eleven.

Напротив, текущий Nacos прост в использовании как при развертывании, так и при использовании.Что еще более важно, документация завершена, а сообщество очень активно.

И Nacos, и нынешние основные экосистемы с открытым исходным кодом обеспечивают хорошую поддержку:

  • Nacos — центр регистрации и настройки Dubbo.
  • Nacos будет полностью совместим с Spring Cloud
  • Nacos поддерживает интеграцию Service Mesh, интеграцию Kubernetes

Кроме того, Alibaba создает платформу для обнаружения сервисов, управления сервисами и трафиком, а также совместного использования сервисов через Dubbo + Nacos и ряд проектов с открытым исходным кодом. Он будет продолжать развиваться и развиваться в будущем. Я верю, что Nacos будет использоваться в большем количестве мест в будущем.

Накос в действии

Автономное развертывание

Подготовьте среду

Nacos полагается на среду Java для запуска, и когда вам нужно создать исполняемую программу для кода Nacos, у вас также должна быть среда Maven, поэтому вам необходимо обеспечить требования к среде перед развертыванием:

  • 64-битная ОС, поддерживает Linux/Unix/Mac/Windows, рекомендуется Linux/Unix/Mac.
  • 64 bit JDK 1.8+
  • Maven 3.2.x+

Загрузить и установить

下载

Последняя версия Nacos — 1.0.1.После упаковки Maven она будет храниться в текущем каталоге.distribution/targetСоздайте два сжатых пакета подnacos-server-1.0.1.tar.gzиnacos-server-1.0.1.zip, вы можете распаковать любой и использовать его.

Распаковать и запустить

解压

Здесь метод автономного развертывания Nacos использует команду-m standalone, если это команда Windows, вы можете дважды щелкнуть напрямуюstartup.cmdфайл.

运行

Когда в консоли появятся буквы Nacos, аNacos started successfully in stand alone modeПри появлении запроса это означает, что сервер Nacos был успешно запущен, и доступный в настоящее время адрес консоли Nacos также указан непосредственно на консоли.http://{ip}:8848/nacos/index.html, нажмите, чтобы войти в интерфейс визуального управления Nacos, для доступа вам потребуется учетная запись и пароль, по умолчаниюnacos.

image-20190616001254325

После входа в систему вы можете увидеть меню основных функций Nacos на боковой панели веб-сайта: управление конфигурацией, управление службами, управление кластером, пространство имен. Для функций регистрации и обнаружения служб нам нужно только взглянуть на управление службами.

image-20190616001603599

В настоящее время существует только одно подменю под названием «Список служб» в разделе «Управление службами», и отображаемое содержимое относительно простое, включая имя службы, группу, количество кластеров, общее количество экземпляров и количество запущенных экземпляров.

image-20190616001806599

Когда новая служба регистрируется в Nacos через клиент Nacos, элемент списка будет добавлен.Мы также можем просматривать и редактировать сведения об услуге с помощью кнопок на панели управления.

Развертывание кластера

По сравнению с простой одномашинной развёрткой Nacos, кластерный метод развёртывания немного более хлопотный, следуя официальной документации, всё же немного изрыт, и требуются дополнительные корректировки. Чтобы использовать его в производственной среде, необходимо обеспечить высокую доступность Nacos, поэтому необходимо отработать операцию развертывания кластера.

Среда подготовки такая же, как и при развертывании на одном компьютере.Дополнительным требованием является то, что Nacos требуется 3 или более узлов Nacos для формирования кластера и используется MySQL в качестве источника данных, который в основном используется для сохранения данных конфигурации службы.

Давайте взглянем на официально рекомендуемую схему архитектуры развертывания кластера. Мы используем обратный прокси-сервер доменного имени, такой как Nginx, для загрузки нескольких IP-адресов узлов Nacos, и внешние клиенты могут получить к ним прямой доступ через доменные имена. Это не только читабельно, но и легко для понимания. изменить IP-адреса. Рекомендуется.

deployDnsVipMode.jpg

Добавить файл конфигурации кластера

на каждом узле NacosconfВ директорию добавляем файл конфигурацииcluster.conf, вы можете обратиться к тому же каталогуcluster.conf.exampleфайл, настройте IP-адрес и порт одного узла на строку, напримерip:port

Примечание: нельзя использовать в файлах конфигурации127.0.0.1илиlocalhost, требуется реальный IP или доменное имя, иначе сервис не может быть зарегистрирован на узле кластера после запуска, подробнее см.NACOS ISSUE #1189.

Настроить базу данных MySQL

Nacos рекомендует использовать как минимум активный/резервный режим для баз данных в производственной среде или использовать базу данных с высокой доступностью.

Здесь для простоты используется только одна база данных. Сначала создайте новый с именемnacos_configбазу данных, используя предоставленнуюисходный файл инструкции sqlИмпорт исходных данных.

image-20190616003609656

Затем в файле конфигурации каждого узла Nacosconf/application.propertiesДобавьте конфигурацию подключения к базе данных в:

application

Наконец, каждый узел запускается отдельно в кластерном режиме, и по умолчанию он запускается в фоновом режиме.Информация о запуске должна быть запущена сlogs/logs/start.outполученный из лог-файла.

start.out

Когда файл журнала появляется в последний разNacos started successfully in cluster mode.Когда есть одна строка, это означает, что Nacos успешно запускается в кластерном режиме. В настоящее время мы также можем просмотреть информацию об узле, войдя в интерфейс управления кластером любой консоли Nacos.

image-20190616015114761

Как видно из вышеизложенного, статус узлов Nacos в составе кластера делится наFOLLOWER,LEADERВо-вторых, похоже на знакомую нам архитектуру ведущий-ведомый.

На этом построение нашего кластерного режима также завершено. Далее давайте рассмотрим, как использовать Nacos для регистрации и обнаружения служб.

Реализовать регистрацию и обнаружение службы

Регистрация и обнаружение сервиса Rest

создание поставщика услуг

Создайте проект подпроекта с именемrest-providerпрограмма поставщика услуг,pom.xmlКонфигурация выглядит следующим образом:

rest-provider

Обратите внимание здесьspring-cloud-starter-alibaba-nacos-discoveryВерсия 0.9.0, в которой используется версия клиента Nacos 1.0.0, а соответствующая версия Spring Boot должна быть версией 2.1.x.RELEASE.Выходные данные вики

image-20190616105233354

Поэтому мы используем последнюю версию Spring Cloud Alibaba.0.9.0.RELEASE, В соответствии с версией Spring Cloud Greenwich в конфигурацию POM родительского проекта Maven необходимо добавить следующее управление зависимостями:

pom

После добавления зависимости реализуйте метод запроса Rest в классе начальной загрузки./echo, и через@EnableDiscoveryClientВ аннотации указано, что это клиент Nacos, а аннотация — это собственная аннотация, предоставляемая Spring Cloud.Даже если вы переключитесь на Eureka в качестве реестра, эта аннотация будет использоваться.

引导类

Изменить файл конфигурации подпроектаapplication.properties

application

  • spring.application.nameОбъявлено имя службы
  • spring.cloud.nacos.discovery.server-addrАдрес реестра Nacos указан

Для получения дополнительной информации об элементах конфигурации Nacos Starter см.Spring Cloud Alibaba Nacos Discovery

затем через класс начальной загрузкиRestProviderApplicationЗапустите проект, войдите в консоль Nacos Server и просмотрите список услуг, чтобы увидеть поставщика услуг.rest-providerРегистрация прошла успешно.

image-20190616110759521

создание потребителя услуг

Таким же образом создаем проект потребителя услугrest-consumer,pom.xmlзависимый иapplication.propertiesнастроить сprovider-consumerАналогично, здесь мы явно используем API LoadBalanceClient в сочетании с RestTemplate для использования службы.

  1. Сначала добавьте в класс начальной загрузки@EnableDiscoveryClientаннотация

    引导类

  2. создать другое имяRestConsumerConfigurationКласс конфигурации Java, внедренныйRestTemplate.

    RestConsumerConfiguration.java

  3. СоздатьRestConsumerControllerКонтроллер для тестирования, предоставляющий метод запросаecho, следующее:

    RestConsumerController.java

  4. запускатьrest-cosumerПосле проекта вы можете увидеть дополнительный сервис с именем в списке сервисов консоли Nacos Server.rest-consumerсервис и доступ к нему прямо в браузереhttp://localhost:8082/echo, ты увидишь:

    image-20190616113423983

Он очень прост в использовании? На самом деле, он не сильно отличается от Eureka. В дополнение к потреблению сервисов Rest таким образом, Nacos также поддерживает метод Feign. Давайте посмотрим, как это используется.

Использование Rest Services в фиктивном режиме

Сначала вам нужно ввести клиентские зависимости Feign:

Feign POM

Затем класс начальной загрузки добавляет аннотацию@EnableFeignClientsЧтобы включить функцию компонента Feign, напишитеEchoServiceИнтерфейс для вызова удаленных сервисов:

EchoService

Нельзя использовать параметры метода интерфейса метода запроса Get.@RequestParamПараметр указывает имя параметра запроса, иначе Feign вызовет его через POST и получит код ошибки 405.

аннотация@FeignClientУказывает имя вызываемого поставщика услуг,echoМетод можно связать с интерфейсом Rest поставщика услуг с помощью аннотаций, предоставляемых Spring MVC, и при выполнении будет вызываться соответствующий метод запроса.

Наконец, нам просто нужно написать инъекциюEchoServiceконтроллерRestConsumerFeignControllerКласс, предоставляющий интерфейс для вызова интерфейса.

RestConsumerFeignController

После того же запуска откройте его напрямуюhttp://localhost:8082/echo/hi, вы получите следующий вывод из браузера:

image-20190616142413540

Регистрация и открытие сервисов Dubbo

Теперь давайте посмотрим, как Dubbo использует Nacos в качестве сервисного реестра для регистрации и обнаружения.На самом деле, пока вы использовали метод ZooKeeper, вы обнаружите, что он очень прост.

Сначала мы создаем подпроектdubbo-serivce, файл POM добавляет следующие зависимости:

POM

  • Здесь мы используем Dubbo версии 2.6.5 для интеграции Nacos в соответствии с официальной рекомендацией.
  • dubbo-registry-nacosКлючевой зависимостью Dubbo является использование Nacos в качестве реестра Текущая версия — 0.0.1.

Затем определите интерфейс службыDemoService:

DemoService

сервис-продюсер

Или производитель услуг на первом месте, добавьте классDemoServiceImplРеализовать сервисный интерфейс

DemoServiceImpl

Затем настройте Dubbo в конфигурации XML, просто нужноdubbo:registryАдрес сервера Nacos можно настроить на элементе.

XML

Наконец, используйте простой классBasicProviderизmainМетод напрямую запускает производителя службы и сохраняет процесс резидентным.

BasicProvider

После обычного запуска мы можем напрямую перейти к списку служб консоли Nacos.Служба производителя Dubbo была успешно зарегистрирована в Nacos, и вы можете увидеть конкретные данные службы через детали, такие как порт службы, метод и скоро.

image-20190616144317355

потребители услуг

Давайте вместе с производителем услуг посмотрим, как вызывать службы Dubbo через Nacos.

Во-первых, внедрите объект службы Dubbo через XML-конфигурацию.DemoService, существуетdubbo:registryНастройте адрес сервера Nacos на элементе.

XML

Затем напишите простой классBasicConsumer,существуетmainЗагрузите контейнер Spring в метод, получитеDemoServiceобъекта, делая вызовы RCP напрямую.

BasicConsumer

После запуска мы видим непрерывный вывод журнала из консоли IDE, указывающий на то, что вызов службы Dubbo через реестр Nacos выполнен успешно.

IDE 控制台

Эпилог

Эта статья в основном учит понимать Nacos, а также тому, как использовать функции регистрации и обнаружения службы Nacos, как интегрироваться со службой Rest и службой Dubbo. В будущем я продолжу углубленное изучение компонентов экосистемы микросервисов Spring Cloud Alibaba.Заинтересованные партнеры могут подписаться на мой публичный аккаунт WeChat, который будет обновляться каждый понедельник.

公众号

пример кода

Все фрагменты кода, задействованные в этой статье, находятся на следующих складах. Заинтересованные друзья могут обратиться к вам и изучить:

nacos-actions:GitHub.com/ Как будто впервые увидел 12138…

Экологическая поддержка:

  • JDK 8
  • Spring Boot 2.1.0
  • Maven 3.6.0

Ссылаться на