Всесторонний анализ Nacos
Что такое Накос
Nacos — это динамическое обнаружение сервисов, управление конфигурацией и платформа управления сервисами, упрощающая создание облачных приложений.
Какую проблему решает Nacos
Во-первых, мы объясним его общую функцию «управления конфигурацией». Конфигурация является основной точкой входа в программу оптимизации, а также способом управления работой архитектуры программного обеспечения. Наряду со всем жизненным циклом программного обеспечения, конфигурация вообще имеет следующие формы!
- жесткий код
- конфигурационный файл
- Таблица конфигурации БД
жесткий код
Элементы конфигурации существуют как поля класса, такие как:
public class AppSolomonConfig {
private int connectTimeoutInMills = 1000;
public int getConnectTimeoutInMills() {
return connectTimeoutInMills;
}
public void setConnectTimeoutInMills(int connectTimeoutInMills) {
this.connectTimeoutInMills = connectTimeoutInMills;
}
}
У этой формы есть три основные проблемы:
-
Если конфигурацию необходимо динамически изменять, текущее приложение должно выставить интерфейс для управления элементом конфигурации, что касается интерфейса API контроллера или JMX, это можно сделать.
-
Изменения конфигурации происходят в памяти и не являются постоянными. Таким образом, перезапуск приложения после изменения конфигурации вернет конфигурацию к значению по умолчанию в коде.
-
Когда имеется несколько машин, чтобы изменить конфигурацию, каждую машину нужно снова запустить, и можно себе представить затраты на эксплуатацию и техническое обслуживание.
конфигурационный файл
Общие свойства, файлы yml в Spring или другие пользовательские, такие как суффикс «conf» и т. д.:
application.properties
коннекттимеаутинмиллс = 1000 По сравнению с «жестко закодированной» формой он решает вторую проблему, сохраняя конфигурацию. Однако две другие проблемы не решены, а стоимость эксплуатации и обслуживания по-прежнему очень высока.
Динамические изменения конфигурации можно выполнить, открыв интерфейс управления с помощью «жесткого кодирования».В этом случае код сделает еще один шаг, чтобы сохранить логику новой конфигурации в файле. Или, просто и грубо, войдите прямо в машину, чтобы изменить файл конфигурации, а затем перезапустите приложение, чтобы конфигурация вступила в силу. Конечно, вы также можете добавить в код запланированную задачу, такую как чтение содержимого файла конфигурации каждые 10 секунд, чтобы последняя конфигурация могла вовремя вступить в силу в приложении, чтобы избежать «более тяжелой» операции и техническое обслуживание перезапуска приложения.
Добавляя «логику постоянства» и «временные задачи», форма «файл конфигурации» является небольшим шагом вперед по сравнению с «жестким программированием».
Таблица конфигурации БД
БД здесь может быть реляционной базой данных, такой как MySQL, или нереляционной базой данных, такой как Redis. Таблицы данных, такие как:
CREATE TABLE `solomonConfig` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`key` varchar(50) NOT NULL DEFAULT '' COMMENT '配置项',
`value` varchar(50) NOT NULL DEFAULT '' COMMENT '配置内容',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_key` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='配置信息';
INSERT INTO `config` (`key`, `value`, `updated_time`, `created_time`) VALUES ('connectTimeoutInMills', '1000', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
По сравнению с двумя предыдущими, он идет еще дальше, извлекает конфигурацию из приложения и централизованно управляет ею, что может значительно снизить затраты на эксплуатацию и обслуживание.
Итак, как решается проблема динамического обновления конфигурации? Насколько я знаю, есть два пути.
-
Как и раньше, решается выставлением интерфейса управления.Конечно, нужно добавить и логику персистентности.Правда, раньше она писала файлы, а теперь записывает последнюю конфигурацию в базу данных. Однако программа также должна иметь задачу периодического считывания последней конфигурации из базы данных, чтобы, только вызывая интерфейс конфигурации управления одной из машин, последнюю конфигурацию можно было доставить на все машины во всем кластере приложений. , и действительно достичь цели снижения затрат на эксплуатацию и техническое обслуживание.
-
Измените базу данных напрямую и прочитайте содержимое последней конфигурации из базы данных с помощью запланированных задач в программе.
Форма "Таблица конфигурации БД" решает основную проблему, но она не элегантна и несет некоторую "нагрузку".
Управление конфигурацией Nacos
Nacos действительно отделяет конфигурацию от приложения, управляет ею унифицированным образом и изящно решает проблемы динамического изменения конфигурации, сохраняемости, а также затрат на эксплуатацию и техническое обслуживание.
Самому приложению не нужно добавлять интерфейсы конфигурации управления, ему не нужно реализовывать постоянство самой конфигурации, а также не нужно вводить «временные задачи» для снижения затрат на эксплуатацию и обслуживание. Функция управления конфигурацией, предоставляемая Nacos, собирает всю логику, связанную с конфигурацией, и предоставляет простой в использовании SDK, чтобы Nacos могла легко управлять конфигурацией приложения.
Если вы используете Nacos в Spring, вам нужно всего три шага:
- добавить зависимости
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>${latest.version}</version>
</dependency>
- Добавьте аннотацию @EnableNacosConfig, чтобы включить службы управления конфигурацией Nacos Spring. В следующем примере мы используем @NacosPropertySource для загрузки источника конфигурации с dataId в качестве примера и включения автоматического обновления:
@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "www.solomonall.com:8848"))
@NacosPropertySource(dataId = "solomon", autoRefreshed = true)
public class NacosConfiguration {
}
- Весенний набор значений атрибута @Value Annotation. Примечание. Установка должна иметь метод для автоматического обновления при изменении конфигурации.
public class AppConfig {
@Value("${connectTimeoutInMills:1000}")
private int connectTimeoutInMills;
public int getConnectTimeoutInMills() {
return connectTimeoutInMills;
}
public void setConnectTimeoutInMills(int connectTimeoutInMills) {
this.connectTimeoutInMills = connectTimeoutInMills;
}
}
Вышеупомянутые три шага почти не затрагивают само приложение.Один зависит от двух аннотаций.Это настолько просто, что настройка управляется через Nacos.
Что касается динамического обновления конфигурации, для пользователей Nacos Spring в их собственных приложениях устанавливается только логическое значение «autoRefreshed». Затем, когда вам нужно изменить конфигурацию, вызовите интерфейс Nacos, чтобы изменить конфигурацию, или используйте консоль Nacos, чтобы изменить ее.После изменения конфигурации Nacos отправит последнюю конфигурацию на все машины приложения, которые простой и эффективный.