Nacos, новичок микросервисов, вы увидите это, я сказал!

Java
Nacos, новичок микросервисов, вы увидите это, я сказал!

Привет всем, я Сяо Цай, Сяо Цай, который хочет быть Цай Буцаем в интернет-индустрии. Она может быть мягкой или жесткой, как она мягкая, а белая проституция жесткая!Черт~ Не забудьте поставить мне тройку после прочтения!

Эта статья в основном знакомит微服务中的Nacos

При необходимости вы можете обратиться к

Если это поможет, не забудьтекак

Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!

говорящийNacosПрежде чем нам нужно понять, что такоеNacos: Nacos — это продукт Alibaba с открытым исходным кодом, ориентированный на микросервисную архитектуру.обнаружение службы,Управление конфигурацией,Служба управлениякомплексное решение.

Ответ на официальном сайте:

Nacos помогает вам обнаруживать, настраивать и управлять микросервисами. Nacos предоставляет набор простых в использовании функций, которые помогут вам обеспечить динамическое обнаружение сервисов, управление конфигурацией сервисов, сервисами и управлением трафиком. Nacos помогает создавать, поставлять и управлять платформами микросервисов более гибко и легко. Nacos — это сервисная инфраструктура для создания современных архитектур приложений, основанных на «сервисах» (таких как парадигма микросервисов, облачная парадигма).

Из вышеизложенного делается вывод, чтоNacosЧетыре характеристики:

  • Обнаружение службы и проверка работоспособности службы
  • Управление динамической конфигурацией
  • Служба динамического DNS
  • Управление услугами и метаданными

Прикрепил:

源网侵删

ВидетьNacosПоддержка стольких популярных экосистем с открытым исходным кодом — это здорово!

1. Вводные базовые упражнения

Как пользоваться

Nacosтакже чрезвычайно прост в использовании, а именно:windowsспособ установки

шаг 1

нажмитессылка для скачиванияЗагрузите последнюю стабильную версию

Шаг 2

двойной щелчокbinв каталогеstartup.cmdзапустить сервер

Шаг 3

Доступ через браузерhttp://127.0.0.1:8848/nacosОткрытымnacosСтраница входа в консоль, имя пользователя и пароль по умолчанию:nacos, вы можете получить доступ к главной странице после успешного входа в систему.

Расширенное использование

опубликовать конфигурацию

мы можем пройтиадресСпособ публикации конфигурации:http://127.0.0.1:8848/nacos/v1/cs/configs,использоватьpostmanпровести тестирование:

получить конфигурацию

мы можем пройтиадресСпособ получения конфигурации:http://127.0.0.1:8848/nacos/v1/cs/configs,использоватьpostmanпровести тестирование:

служба публикации

мы можем пройтиадресЧтобы зарегистрировать сервис:http://127.0.0.1:8848/nacos/v1/ns/instance,использоватьpostmanпровести тестирование:

обнаружение службы

мы можем пройтиадресСлужбы обнаружения:http://127.0.0.1:8848/nacos/v1/ns/instance/list,

использоватьpostmanпровести тестирование:

Поддержка внешней базы данных

nacosПо умолчанию для хранения данных используется встроенная база данных, если мы хотим использовать внешнююmysqlместо храненияnacosданные, выполните следующие действия:

  • шаг 1

УстановитьMysql(версии между 5.6.5 ~ 8)

  • Шаг 2

инициализацияmysqlбаза данных, новая база данныхnacos, затем загрузитьconf/nacos-mysql.sql

  • Шаг 3

Исправлятьconf/application.propertiesфайл, добавитьmysqlКонфигурация источника данных, а затем перезапуск, вступит в силу

2. Управление конфигурацией

Из вышеизложенного мы уже знаемNacosОдна из этих функций предназначена для центра конфигурации. Центр конфигурации находится в микросервисной архитектуре.Когда система разделена с одного приложения на один сервисный узел в распределенной системе, файл конфигурации также должен быть разделен с миграцией, чтобы конфигурация была разбросана, и каждая конфигурация Есть также взаимно избыточные части.

Роль центра конфигурации:

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

Из рисунка мы резюмируем процесс следующим образом:

  • Пользователь обновляет информацию о конфигурации в центре конфигурации.
  • Служба A и служба B своевременно уведомляются об обновлении конфигурации и получают обновление из центра конфигурации.

опубликовать конфигурацию

  • На шаге 1 мы можем создать пространства имен.Пространства имен используются для изоляции нескольких сред (таких как разработка, тестирование и производство), и значение одной и той же конфигурации (например, конфигурации базы данных) для каждого приложения в разных средах различно. такой же.
  • На шаге 2 мы можем переключаться между разными пространствами имен для публикации разных конфигураций.Строка, похожая на UUID под пространством имен, является уникальным идентификатором каждого пространства имен.
  • На шаге 3 мы можем нажать на конфигурацию публикации, гдеDataIdиgroupтребуется

После выполнения вышеуказанных трех шагов мы видим, что генерируется сообщение, которое только что было настроено.

получить конфигурацию

Затем мы можем прочитать содержимое в конфигурации в проекте, шаги следующие:

  • шаг 1

существуетpomимпортируется в файлnacos-clientСумка:

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.1.3</version>
</dependency>
  • Шаг 2

пройти черезnacos-clientAPI, предоставленный в пакете, для получения конфигурации:

public static void main(String[] args) throws NacosException {
    //使用nacos client远程获取nacos服务上的配置信息
    //nacos server地址
    String serverAddr = "127.0.0.1:8848";
    //data id
    String dataId = "application-dev.properties";
    //group
    String group = "DEFAULT_GROUP";

    //namespace
    String namespace = "dfa1c276-69f7-47d6-9903-6850b9c248f7";
    Properties properties =new Properties();
    properties.put("serverAddr",serverAddr);
    properties.put("namespace",namespace);
    
    //获取配置
    ConfigService configService = NacosFactory.createConfigService(properties);
    
    // String dataId, String group, long timeoutMs
    String config = configService.getConfig(dataId, group, 5000);
    System.out.println(config);
}
/* OUTPUT:
spring.datasource.mysql.driverClassName = com.mysql.cj.jdbc.Driver
*/

Модель управления конфигурацией показана на следующем рисунке:

  • Пространство имен (NameSpace)

Пространство имен (NameSpace) используется для изоляции конфигурации различных сред (среда разработки, тестовая среда и производственная среда). Группы конфигурации или наборы конфигурации с одним и тем же именем могут существовать в разных пространствах имен.

  • Настроить группу (Группа)

Группировка конфигураций — это группировка наборов конфигураций.Разные группы конфигураций могут иметь один и тот же набор конфигураций (DateId). Имя группы конфигурации по умолчанию:DEFAULT_GROUP. Используется для различения разных проектов или приложений.

  • Набор конфигурации (DataId)

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

Распределенная конфигурация

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

Традиционная монолитная архитектура

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

Функции:

  • Высокая эффективность разработки
  • легко проверить
  • легко развернуть

недостаток:

  • Сложность будет постепенно увеличиваться, а ремонтопригодность будет постепенно ухудшаться
  • Итерации версий становятся медленнее
  • препятствовать технологическим инновациям
  • Невозможно масштабировать по запросу
Микросервисная архитектура

Микросервисы просто означают разделение проекта на несколько сервисов. Каждый микросервис — это полноценное приложение со своей бизнес-логикой и базой данных. Каждый бизнес-модуль дополняется независимой службой. Эта модель микросервисной архитектуры также влияет на отношения между приложением и базой данных. В отличие от традиционных нескольких бизнес-модулей, совместно использующих базу данных, каждая служба имеет свою собственную базу данных.

преимущество:

  • Разделяй и властвуй, единственная ответственность
  • регулируемый
  • Части легко модифицировать, заменять и развертывать, что способствует непрерывной интеграции и быстрой итерации.
  • Не ограничен каким-либо стеком технологий
Nacos

Без лишних слов давайте воспользуемся кодом, чтобы продемонстрировать использование центра конфигурации:

  • Шаг 1. Опубликуйте конфигурацию

мы вNacosСоздайте два файла конфигурации на домашней странице:

service_a.properties:

service_b.properties:

  • Шаг 2 — Создайте родительский проект

pom.xmlследующее:

  • Шаг 3 - Создайте подмодульservice-a

pom.xmlследующее:

bootstrap.ymlследующее:

  • Шаг 4 - Создайте подмодульservice-b

pom.xmlследующее:

bootstrap.ymlследующее:

Структура каталогов проекта выглядит следующим образом:

ConfigControllerследующее:

service-aТекущий результат:

service-bТекущий результат:

Можно видеть, что вышеуказанные шаги успешно получили нашуnacosСоздайте содержимое файла конфигурации в формате . Ключевые шаги, на которые мы должны обратить внимание:1.вводитьspring-cloud-alibaba-dependenciesиspring-cloud-starter-alibaba-nacos-configизбаночка пакет.2.мы вresourcesФайл конфигурации, созданный под, должен бытьbootstrapскорее, чемapplication 3. bootstrap.ymlконфигурация в

Еще одна загадка в bootstrap.yml?

Мы видели выше, что основной момент конфигурации:

spring:
  application:
    name: service_a
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848                     # 配置中心地址
        # spring.application.name + file-extension = service_a.properties
        file-extension: properties                      # dataid名称的后缀
        namespace: dfa1c276-69f7-47d6-9903-6850b9c248f7 # 指定具体的namespace
        group: TEST_GROUP

Это нужно, чтобы прочитать указанную конфигурацию в указанной группе конфигурации. Мы все знаем, что разработка связана с высокой связностью и низкой связанностью. Если есть одинаковые элементы конфигурации, мы можем извлечь их в один файл независимо, поэтому нам нужно ввести несколько конфигураций. файлы, конечноnacosОн тоже поддерживается, конфигурация следующая:

spring:
  application:
    name: service_a
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848                     # 配置中心地址
        # spring.application.name + file-extension = service_a.properties
        file-extension: properties                      # dataid名称的后缀
        namespace: dfa1c276-69f7-47d6-9903-6850b9c248f7 # 指定具体的namespace
        group: TEST_GROUP
        # 通过 ext-config 来配合使用
        ext-config[0]:
          data-id: service-common_1.properties
        ext-config[1]:
          data-id: service-common_2.properties
          group: GLOBALE_GROUP
        ext-config[2]:
          data-id: service-common_3.properties
          group: REFRESH_GROUP
          refresh: true  #动态刷新配置

Уведомлениеext-configдолжен начинаться с 0, гдеrefreshТег используется для достижения динамического обновления, то есть после изменения файла конфигурации проект может считывать последний файл конфигурации в режиме реального времени без перезапуска.

Вы можете почувствовать это черезext-configЭто немного громоздко, так много нужно написать, для упрощения мы также можем использоватьshared-dataidsиrefreshable-dataidsДля достижения той же функции, что и выше, следующим образом:

spring:
  application:
    name: service_a
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848                     # 配置中心地址
        # spring.application.name + file-extension = service_a.properties
        file-extension: properties                      # dataid名称的后缀
        namespace: dfa1c276-69f7-47d6-9903-6850b9c248f7 # 指定具体的namespace
        group: TEST_GROUP
        
        shared-dataids: service-common_1.properties,service-common_2.properties,service-common_3.properties
        refreshable-dataids: service-common_3.properties

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

Приоритет элемента конфигурации

#方式1
file-extension: properties                      # dataid名称的后缀
namespace: dfa1c276-69f7-47d6-9903-6850b9c248f7 # 指定具体的namespace
group: TEST_GROUP

#方式2
ext-config[0]:
data-id: service-common_1.properties
ext-config[1]:
data-id: service-common_2.properties
group: GLOBALE_GROUP
ext-config[2]:
data-id: service-common_3.properties
group: REFRESH_GROUP
refresh: true  #动态刷新配置

#方式3
shared-dataids: service-common_1.properties,service-common_2.properties,service-common_3.properties
refreshable-dataids: service-common_3.properties

Мы узнали вышеnacosСуществует три метода настройки, среди которых приоритетны:

Режим 1 > Режим 2 (внутреннее сравнение: чем больше n, тем выше приоритет) > Режим 3

Мы уже поняли вышесказанноеNacosКак центр конфигурации, давайте посмотримNacosВ чем загадка реестра как услуги!

3. Обнаружение службы

Что такое сервисное обнаружение

В микросервисной архитектуре вся система разделена на несколько сервисов в соответствии с их обязанностями, а бизнес-цели достигаются за счет взаимодействия между сервисами. Таким образом, в нашем коде неизбежно совершать удаленные вызовы между службами.Потребитель службы должен позвонить производителю службы.Чтобы выполнить этот запрос, потребителю необходимо знать сетевое расположение производителя. службы (IP-адрес и номер порта)

Сравнение центров обнаружения услуг
Сравните товары Nacos Eureka Consul ZooKeeper
Протокол соответствия Поддерживает модели AP и CP Модель точки доступа СР модель СР модель
медицинское обследование TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
балансировщик нагрузки Вес/метаданные/селектор Ribbon Fabio -
Лавинная защита имеют имеют никто никто
Автоматический выход из экземпляра служба поддержки служба поддержки не поддерживается служба поддержки
соглашение о доступе HTTP/DNS HTTP HTTP/DNS TCP
Поддержка мониторинга служба поддержки служба поддержки служба поддержки служба поддержки
Несколько центров обработки данных служба поддержки служба поддержки служба поддержки не поддерживается
Синхронизация между реестрами служба поддержки не поддерживается служба поддержки не поддерживается
Интеграция с SpringCloud служба поддержки служба поддержки служба поддержки не поддерживается
Интеграция с даббо служба поддержки не поддерживается не поддерживается служба поддержки
Интеграция K8s служба поддержки не поддерживается служба поддержки не поддерживается

Начало работы с сервисным обнаружением

Сто слов хуже одной практики, не будем много говорить, перейдем непосредственно к коду:

  • Шаг 1 — Новый родительский проект

pom.xmlследующее:

  • Шаг 2. Создайте нового поставщика услуг.

pom.xmlследующее:

application.ymlследующее:

启动类следующее:

ProviderController.javaследующее:

Выше приведен код генератора, а ключевыми моментами являются:1.вводитьspring-cloud-starter-alibaba-nacos-discoveryбаночка пакет2.Аннотация в классе запуска@EnableDiscoveryClientаннотация3.существуетapplication.ymlСредняя конфигурацияnacosАдрес сервисного центра4.существуетcontrollerоткрытые сервисы

  • Шаг 3. Создайте нового потребителя услуги.

pom.xmlследующее:

application.ymlследующее:

启动类следующее:

ConsumerController.javaследующее:

Выше приведен код потребителя, а ключевыми моментами являются:1.вводитьspring-cloud-starter-alibaba-nacos-discoveryбаночка пакет2.Аннотация в классе запуска@EnableDiscoveryClientаннотация3.существуетapplication.ymlСредняя конфигурацияnacosАдрес сервисного центра4.существуетcontrollerиспользуется вRestTemplateпозвонить в сервис.

Выше мы видим, что вNacosВ системе зарегистрированы две службы.service-providerиservice-consumer, мы также можемNacosКонсоль видит:

Точно так же регистрация службы также поддерживает изоляцию пространства имен, нам нужно толькоapplication.ymlДобавьте конфигурацию в:

server:
  port: 8083

spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        # 命名空间
        namespace: dfa1c276-69f7-47d6-9903-6850b9c248f7
        cluster-name: DEFAULT
Использование притворства

FeignдаNetflixразработали декларативные, шаблонные HTTP-клиенты,FeignЭто может помочь нам звонить быстрее и элегантнееHTTP API.

FeignОн также очень прост в использовании, несколько шагов выглядят следующим образом:

  • шаг 1

утверждениеFeignКлиент:

@FeignClient(value = "service-provider") //生产者名称
public interface ConsumerService {

    @GetMapping("/getData")
    String getDate();
}
  • Шаг 2

существуетстартовый классДобавить к@EnableFeignClientsаннотация

  • Шаг 3

существуетcontrollerСлой для вызова:

@RestController
public class ConsumerController {

    @Autowired
    private ConsumerService consumerService;

    @GetMapping("/getData")
    public String getData() {
        String date = consumerService.getDate();
        return "consumer consumer ---" + date;
    }
}

результат:

Простое использование сокращает кодирование HTTP-запросов, не связанных с бизнесом, и делает бизнес-логику понятной.

END

Вышеупомянутое находится в микросервисеNacosОбщее представление об этом, я надеюсь, что вы также получите что-то, увидев это здесь! Дорога длинная, Сяокай будет искать ее вместе с тобой~

看完不赞,都是坏蛋

Если вы будете усердно работать сегодня, завтра вы сможете сказать на одну вещь меньше, чтобы попросить о помощи!

Я Сяо Цай, человек, который учится у вас. 💋

Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!