Проект с открытым исходным кодом Ctrip - разработка и реализация Apollo

задняя часть сервер Spring открытый источник
Проект с открытым исходным кодом Ctrip - разработка и реализация Apollo


Источник контента:22 июля 2017 года Сун Шун, технический эксперт отдела исследований и разработок Ctrip Framework, выступил с докладом на тему «Проектирование и внедрение центра конфигурации Ctrip с открытым исходным кодом Apollo» на «Ctrip Technology Salon | Массивная интернет-инфраструктура». IT Dajiashuo (идентификатор WeChat: itdakashuo), как эксклюзивный видео-партнер, имеет право публиковать видео после просмотра организатором и спикерами.

Количество слов для чтения:2580 | 7 минут чтения

Видео с гостевым выступлением и обзор PPT:suo.im/4rpE22

Резюме

С усложнением программных функций с каждым днем ​​увеличивается и конфигурация программы: переключатели различных функций, конфигурация параметров, адрес сервера. Ожидания от конфигурации программы также становятся все выше и выше: конфигурация вступит в силу в режиме реального времени после модификации, конфигурация управляется средой и кластером, а также совершенным механизмом полномочий и аудита. В такой большой среде традиционные методы, такие как файлы конфигурации и базы данных, становятся все более неспособными удовлетворить потребности разработчиков в управлении конфигурацией. Центр конфигурации Apollo появился на свет!

What is Apollo

Apollo — это унифицированный центр конфигурации приложений с открытым исходным кодом отдела конфигурации инфраструктуры Ctrip, который поддерживает управление конфигурацией из четырех измерений, а именно приложения, среды, кластера и пространства имен.

What is Configuration

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

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

Why Apollo

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

Apollo поддерживает выпуск в градациях серого, а некоторые важные функции можно заранее протестировать на нескольких машинах, а затем выпустить, если проблем не возникнет. Он также предоставляет функции управления правами, аудита выпусков, аудита операций и может отслеживать информацию о конфигурации клиента. Кстати, у Apollo есть нативные клиенты для java и .net, а также есть хорошая поддержка Spring.

Apollo at a glance

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

Добавить/изменить элементы конфигурации

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

Клиент получает конфигурацию (пример Java API)

Вы можете видеть, что сначала нам нужно получить объект конфигурации, а затем вызвать метод getIntProperty и передать ключ и значение по умолчанию, Таким образом, мы можем получить последнее значение программы.

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

Пример интеграции Spring

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

Apollo in depth

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

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

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

общий дизайн

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

Верхний уровень Mate Server в основном используется для инкапсуляции интерфейса, созданного службой Eureka. При фактическом вызове клиент сначала получает список адресов соответствующей службы с сервера Mate, а затем напрямую обращается к соответствующему интерфейсу через IP и порт.

Для удобства фактического развертывания Mate Server, Eureka и Config Service развернуты на одном узле.

Почему Эврика?

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

Клиентский дизайн

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

Push-уведомление об обновлении конфигурации

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

Вопросы удобства использования

Contribute to Apollo

Адрес на гитхабе: https://github.com/ctripcorp/apollo

Сервер разработан на базе Spring Cloud и Spring Boot.