карта разума
Статья была выбрана Github, добро пожаловать в Star:GitHub.com/Yehongqin/Лай…
I. Обзор
Apollo - это центр управления конфигурацией с открытым исходным кодом, разработанный отделом инфраструктуры Ctrip, который может централизованно управлять приложениями.Разные среды, разные кластерыконфигурация, конфигурация может быть изменена послеПриложения, работающие в режиме реального времени, отодвинуты в сторону и имеют спецификации полномочий, управление процессамиХарактеристики.
В настоящее время на github насчитывается 22,6 тыс. звезд Apollo, на официальном сайте компании зарегистрировано использование 451, считающегося очень популярным технологическим центром конфигурации фреймворка. Так что следуйте за мной учиться с распределительным центром Аполлона.
2. Зачем использовать центр конфигурации
Во-первых, до того, как не будет конфигурационного центра, традиционные конфигурации прописываются в конфигурационных файлах, таких как различные yml, properties и xml файлы.
Самая большая проблема с записью в различные файлы заключается в том, чтоЕсли вам нужно изменить информацию о конфигурации, вам нужно повторно развернуть и опубликовать приложение, чтобы оно вступило в силу., Это первый вопрос.
Позже, чтобы динамически прочитать информацию о конфигурации, кто-то улучшит таблицу, которая сохраняет информацию о конфигурации в базе данных, и программа считывает информацию о конфигурации в таблице. Этот метод все еще используется многими компаниями, потому что это просто и Гибкий (изменение только конфигурации требуется только для выполнения оператора SQL и не нужно для развертывания выпуска). Но это тоже не идеально, потому чтоОтсутствие контроля разрешений, отсутствие интерфейса управления для унифицированной конфигурации, отсутствие информации о конфигурации исторических версий, отсутствие отката (для предотвращения неправильной работы).
На самом деле на рынке существует множество центров конфигурации, таких как Nacos, Consul, spring-cloud-config, Apollo и так далее.
По сравнению с другими, я думаю, причина выбора Apollo в том, что интерфейс красивее, операция проста, развертывание простое, зависимостей мало, и его можно использовать из коробки.
3. Установка и развертывание
Сначала поговорим о развертывании трех сервисов Apollo: apollo-configservice, apollo-adminservice, apollo-portal, и вернемся к разговору, когда я буду говорить об архитектуре этих трех сервисов, к которым они привыкли.
Здесь развертывание не рекомендуется. Официальный сайт Quick Start, я начал использовать способ QuickStart, чтобы заставить его работать часами, всегда еще одна служба UNKONWN в Eureka, затем 8070 не может получить доступ к интерфейсу управления, прямой крах ума. На гитхабе ищу немного, вот так:
Ответ автора ниже таков.
Было обнаружено, что эта проблема отражена более чем в одной проблеме (# 2931), но не решена, автор рекомендует использовать стандартное развертывание.
Итак, давайте поговорим о стандартном развертывании, то есть распределенном развертывании.Студенты, которые терпеливы, также могут перейти непосредственно на github, чтобы увидеть, что написал автор.Руководство по распределенному развертыванию.
Давайте сначала введем зависимости окружающей среды, сервер Linux (CentOS7 рекомендуется), MySQL (требование версии: 5.6.5+), а развернутый сервер должен установить среду JDK (Java 1.8+).
Существует два метода установки: один — загрузить установочный пакет, а другой — собрать из исходного кода. Как правило, если вам не нужно настраивать разработку Apollo, вы можете развернуть ее непосредственно с установочным пакетом. Здесь я демонстрирую, как развертывается пакет установки.
3.1 Получить установочный пакет
первый пришелОфициальный сайтЗагрузите установочный пакет.
После загрузки разархивируйте его следующим образом:
3.2 Создать базу данных
Используйте базу данных MySQL (требования к версии: 5,6,5+).
3.2.1 Создание базы данных ApolloPortalDB
использоватьsql-скрипт на гитхабеСоздайте базу данных ApolloPortalDB, импортируйте связанные таблицы и данные.
3.2.2 Создание базы данных ApolloConfigDB
использоватьsql-скрипт на гитхабеСоздайте базу данных ApolloconfigDB, импортируйте связанные таблицы и данные.
3.3 Изменить конфигурацию
Необходимо изменить информацию о подключении к базе данных, путь находится в /config.
3.3.1 конфигурация аполло-configservice
Измените информацию о соединении с базой данных application-github.properties для apollo-configservice следующим образом:
# DataSource
spring.datasource.url = jdbc:mysql://192.168.0.107:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = 账号
spring.datasource.password = 密码
3.3.2 конфигурация аполлона-adminservice
APOLLO-ADMINSERVICE Изменение информации о подключении к базе данных Application-Github.properties, следующим образом:
# DataSource
spring.datasource.url = jdbc:mysql://192.168.0.107:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = 账号
spring.datasource.password = 密码
3.3.3 конфигурация аполло-портала
Измените информацию о соединении с базой данных application-github.properties для apollo-portal следующим образом:
# DataSource
spring.datasource.url = jdbc:mysql://192.168.0.107:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = 账号
spring.datasource.password = 密码
Затем измените конфигурацию apollo-env.properties, относящуюся к конфигурации среды, следующим образом:
local.meta=http://localhost:8080
## 开发环境
dev.meta=http://192.168.0.107:8080
## 不需要配置的环境参考${lpt_meta}配置
fat.meta=${fat_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}
3.4 Развертывание
Затем загрузите все три папки на сервер Linux.
3.4.1 Развернуть и опубликовать сервис apollo-configservice
Служба публикации последовательного развертывания, первый релиз apollo-configservice, прямое выполнение скриптов / startup.sh.
Может быть такая ошибка (у меня так было), не переживайте, на самом деле процесс не закончился, он еще только начинается, можем перейти в папку записи лога (рисунок ниже из скрипта startup.sh) для просмотра журнала.
Время запуска относительно велико, потому что эта услуга включает в себя запуск реестра Eureka, что требует терпения. Наблюдайте за файлом apollo-configservice.log.Когда вы видите следующую информацию, запуск выполнен успешно.
Реестр Eureka успешно запущен и может быть открытhttp://192.168.0.107:8080/ Вид:
3.4.2 Развернуть и опубликовать apollo-adminservice
Затем опубликуйте apollo-adminservice и запустите scripts/startup.sh напрямую. Просмотрите журналы так же, как описано выше. После успешного запуска вы можете увидеть, что в списке сервисов Eureka есть еще один сервис.
3.4.3 Развертывание публикации apollo-portal
Затем опубликуйте apollo-portal и запустите scripts/startup.sh напрямую. Портал — это сервис, предоставляющий веб-интерфейс, поэтому после успешного запуска его можно открытьhttp://192.168.0.107:8070/ Войдите в веб-интерфейс, пароль учетной записи по умолчанию — apollo/admin.
На этом установка завершена!
В-четвертых, SpringBoot интегрирует Apollo
Затем вся демонстрация (эквивалент java-клиента) использует SpringBoot для интеграции Apollo для динамического считывания конфигурации.
4.1 Зависимости Maven
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.0</version>
</dependency>
4.2 AppId
在classpath路径下,创建/META-INF/app.properties文件。 следующее:
# 应用的唯一标识,后面创建工程需要用到
app.id=apollo-demo
4.3 Apollo Meta Server
По сути, это настройка адреса сервера Apollo. На официальном сайте представлено множество способов, здесь я выбираю один из более простых способов. Создайте файл apollo-env.properties в пути к классам со следующей конфигурацией:
dev.meta=http://192.168.0.107:8080
# fat.meta=http://apollo.fat.xxx.com
# uat.meta=http://apollo.uat.xxx.com
# pro.meta=http://apollo.xxx.com
4.4 Environment
По сути, это среда конфигурации, потому что выше можно настроить четыре среды, и здесь выбирается какая среда для конфигурации. Вот два способа:
Первый — через системное свойство Java.
Второй — через конфигурационный файл.
Создайте server.properties по соответствующему пути и настройте следующим образом:
env=DEV
4.5 @EnableApolloConfig
Добавьте аннотацию @enableapolloconfig в класс запуска.
@SpringBootApplication
//开启apollo配置
@EnableApolloConfig
public class ApolloDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ApolloDemoApplication.class, args);
}
}
4.6 Тестовый класс
Это делается, а затем создайте контроллер для тестирования.
@RestController
public class ApolloController {
//冒号后面的是默认值
@Value("${configValue:default}")
private String configValue;
@RequestMapping("/apollo/getConfig")
public String getConfig() {
return configValue;
}
}
4.7 Создайте соответствующую конфигурацию в интерфейсе управления
Первым шагом является создание проекта.
Второй шаг — создание конфигурации.
Третий шаг — публикация.
4.8 Тестирование
Запустите проект apollo-demo, затем запросите путьhttp://localhost:8888/apollo/getConfig, вы можете увидеть:
Консоль может видеть журнал информации о конфигурации push:
5. Архитектурный дизайн
После разговора о демонстрации установки и интеграции SpringBoot пришло время изучить принцип, почему существует три службы и как заставить клиент получать последнюю конфигурацию в режиме реального времени после выпуска информации о конфигурации. Продолжайте смотреть вниз.
Во-первых, посмотрите на архитектурную схему официального сайта.
5.1 Базовая модель
У автора есть схема архитектуры базовой модели на официальном сайте, которая на самом деле очень проста после игнорирования многих деталей:
- Пользователь изменяет и публикует конфигурацию в центре конфигурации.
- Центр конфигурации уведомляет клиент Apollo об обновлениях конфигурации.
- Клиент Apollo извлекает последнюю конфигурацию из центра конфигурации, обновляет локальную конфигурацию и уведомляет приложение.
5.2 Архитектурные модули
Если мы расширим сервер Center Configuration Apollo, диаграмма архитектуры выглядит следующим образом:
Увидев это, вся архитектура выглядит яснее. Ниже приводится краткое введение сверху вниз:
Сервис портала: Предоставляет пользователям веб-интерфейс для управления и настройки, получения списка служб AdminService (IP+порт) через MetaServer и доступа к службе AdminService через IP+порт.
Client: На самом деле, это созданный нами проект SpringBoot, который вводит maven-зависимость ApolloClient для предоставления приложению таких функций, как получение конфигурации и обновление в реальном времени.
Meta Server: получить служебную информацию о службе конфигурации и службе администрирования от Eureka, что эквивалентно клиенту Eureka. Основная цель состоит в том, чтобы инкапсулировать детали обнаружения службы.Для портала и клиента информация о службе службы администрирования и службы конфигурации всегда получается через интерфейс Http, и нет необходимости заботиться о фактической регистрации службы и компонентах обнаружения, лежащих в основе Это. Метасервер — это только логическая роль, он находится в том же процессе JVM, что и служба конфигурации при развертывании, поэтому IP-адрес и порт такие же, как у службы конфигурации.
Eureka: Регистрационный центр. Служба конфигурации и служба администратора зарегистрируют службы в Eureka. Для простоты Eureka и Config Service в настоящее время находятся в одном процессе JVM при развертывании.
Config Service: Предоставляет интерфейс получения конфигурации. Предоставляет принудительный интерфейс обновления конфигурации (на основе длительного опроса HTTP). Объектом службы является клиент Apollo (Клиент).
Admin Service: Предоставляет интерфейс управления конфигурацией. Предоставляет интерфейсы для публикации и модификации конфигурации. Сервисный объект — портал.
5.3 Настройка дизайна push-уведомлений в реальном времени после публикации
После разговора о назначении каждой роли, как эти роли работают вместе? Давайте посмотрим на картинку:
На схеме выше кратко описан общий процесс настройки публикации:
- Пользователь настраивает и публикует работу на портале.
- Портал вызывает работу интерфейса службы администратора.
- После публикации конфигурации служба администрирования отправляет сообщение ReleaseMessage каждой службе конфигурации.
- После того как служба конфигурации получает ReleaseMessage, она уведомляет соответствующий клиент (Client).
Ключевым моментом является то, что AdminService отправляет ReleaseMessage в ConfigService.Как этот шаг отправляется асинхронно?В общем, мы можем легко думать об очередях сообщений для асинхронной отправки, но на самом деле мы не использовали очереди сообщений при установке и развертывании.
Ответ заключается в:
- После публикации конфигурации служба администрирования вставит запись сообщения в таблицу ReleaseMessage, а содержимым сообщения будет AppId+Cluster+Namespace конфигурации и публикации.
- Затем поток в службе конфигурации будет сканировать таблицу ReleaseMessage каждую секунду, чтобы увидеть, есть ли новые записи сообщений.
- Служба конфигурации Если есть новая запись сообщения, все слушатели сообщений будут уведомлены, что слушатель получает соответствующий клиент.
С точки зрения реализации, учитывая реальные сценарии использования Apollo и чтобы максимально уменьшить внешние зависимости, мы не использовали промежуточное ПО для внешних сообщений, а реализовали простую очередь сообщений через базу данных. ---- с официального сайта
5.4 Высокая доступность
Для достижения высокой доступности Apollo использует Eureka в качестве реестра на стороне сервера, что также упоминается на официальном сайте.
Кроме того, клиент также разработал некоторые архитектурные проекты для обеспечения высокой доступности, такие как локальное кэширование файлов.
Этот файл кеша по умолчанию помещается в папку C:\opt\data\apollo-demo\config-cache:
Цель этого файла - восстановление конфигурации локально, когда служба недоступна, или сеть заблокирована.
Шестой, долговечный
Вот и все для этой статьи. По сути, Apollo Configuration Center — это проект с открытым исходным кодом, который относительно прост в использовании и имеет относительно четкую структуру. В настоящее время многие интернет-компании внедряют микросервисную архитектуру.При использовании микросервисной архитектуры информация о конфигурации будет умножаться, поскольку конфигурация фактически представляет собой «управление».Во многих случаях работа программы зависит от конфигурации, чтобы определить поведение. , и иметь возможность вступить в силу в режиме реального времени, должен быть центр конфигурации.
Некоторые компании с большим объемом разработают конфигурационный центр своей компанией.На самом деле это не особо сложно реализовать.Я реализовал его сам в своей прошлой компании,используя очередь сообщений MQ + базу данных,а потом просто настроил доп, удалить, изменить, проверить, обновить настроенную веб-страницу, чтобы заполнить центр конфигурации.
Но думаю будет комфортнее, если будут готовые с открытым кодом, вместо того, чтобы тратить время и силы на создание колес, и выбирать какие-то популярные мейнстримовые техфреймворки типа Apollo, стоимость обучения тоже относительно невысокая, а их много информации в Интернете.
Тогда центр конфигурации Apollo находится здесь Коды всех приведенных выше примеров выложены на Github:
Ставьте лайки, если считаете это полезным, ваши лайки — самая большая мотивация для моего творчества.~
Не хочу быть соленой рыбой, я программист, стремящийся запомниться всем. Увидимся в следующий раз! ! !
Возможности ограничены, если есть какие-то ошибки или неуместности, пожалуйста, критикуйте и исправьте их, учитесь и общайтесь вместе!