Привет всем, я Сяо Цай, Сяо Цай, который хочет быть Цай Буцаем в интернет-индустрии. Она может быть мягкой или жесткой, как она мягкая, а белая проституция жесткая!Черт~ Не забудьте поставить мне тройку после прочтения!
Эта статья в основном знакомит
微服务中的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-client
API, предоставленный в пакете, для получения конфигурации:
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 открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!