#networking #server #architecture #software-design
Вопрос:
У меня есть данные, которые нужно загружать на локальный сервер каждые 24 часа. Для обеспечения высокой доступности мы предоставили 2 сервера, чтобы избежать сбоев и потери данных.
Мой вопрос: каков наилучший подход к использованию 2 серверов?
Мои идеи таковы:
-Загрузка на сервере, и если загрузка по какой-либо причине не удалась, загрузка будет продолжена на другом сервере.
-Загрузка будет происходить на 2 серверах одновременно каждый день.
Есть какие-нибудь советы?
Комментарии:
1. Является ли программное обеспечение, ответственное за выполнение загрузки, расположенным на этих серверах? Если нет, то где? Насколько важно время загрузки? Расположены ли два сервера в разных местах? Является ли это существующим решением?
2. Когда вы говорите «для обеспечения высокой доступности», вы имеете в виду гарантированную загрузку данных или высокую доступность загруженных данных? Или и то и другое?
3. @AdrianK Программное обеспечение, ответственное за выполнение загрузки, будет размещено на этих серверах. Загрузка будет происходить ежедневно в 02:00 утра. Два сервера расположены в разных местах. Решение уже существует, и это еще одно необходимое условие для загрузки данных из облака и сохранения их в локальной среде. Когда вы говорите «для обеспечения высокой доступности», вы имеете в виду гарантированную загрузку данных или высокую доступность загруженных данных? Или и то и другое? Высокая доступность здесь означает как гарантированную загрузку данных, так и высокую доступность загруженных данных.
4. Как будут использоваться данные после их загрузки? например, будут ли пользователи получать доступ к нему через веб-сайт, прямую загрузку или он будет использоваться автоматизированной системой/интеграцией?
Ответ №1:
С точки зрения вашего подхода высокого уровня, разбейте его на управляемые блоки, т. е. надежный сбор данных и распространение данных с высокой доступностью. Я бы начал сначала со второй части, потому что это то состояние, в которое вы хотите попасть.
Распространение высокодоступных данных
Работая в обратном направлении (т. е. Это вторая часть вашей проблемы), предлагая потребителям высокодоступные данные, у вас есть два варианта:
- Активно-Пассивный
- Активный-Активный
Активный-Активный означает, что у вас есть по крайней мере два узла, обслуживающих запросы на данные, с каким-то балансировщиком нагрузки (LB) впереди, который распределяет запросы. В зависимости от используемой вами технологии в этом технологическом стеке могут быть существующие компоненты/решения или эталонные модели, описывающие потенциальные решения.
Активный-пассивный означает, что у вас есть один узел, принимающий весь трафик, и когда он становится недоступным, запросы направляются на резервный / пассивный узел.
Пассивный узел может быть «горячим», готовым к работе, или «холодным» — это означает, что он не полностью работоспособен, но относительно быстро и легко встает и начинает принимать трафик.
В обоих случаях, и если у вас всего 2 узла, в идеале вы хотите, чтобы оба узла были способны обрабатывать всю нагрузку. Это очевидно для Активно-пассивного, но это также относится и к активно-активному, так что, если один из них выйдет из строя, другой успешно обработает все запросы.
В обоих случаях вам нужен какой-то сетевой компонент, который направляет трафик. В идеале он сможет работать автономно (это необходимо, если вы хотите разделить нагрузку между активными и активными), но у вас может быть процесс на основе ручного / оповещения для переключения с активного на пассивный. Во-первых, это будет зависеть от того, каковы ваши нефункциональные требования.
Надежный сбор данных
Выяснив, как вы будете распространять данные, вы знаете, куда их нужно доставить.
Например, если активный-активный, вам нужно получить его одновременно для обоих (я не знаю, какие допуски у вас могут быть), так как вы хотите, чтобы они обслуживали одни и те же согласованные данные. Один из вариантов решения этой проблемы заключается в следующем:
- Пусть LB направит весь трафик на узел A.
- Узел B выполняет загрузку.
- LB информируется о том, что узел B успешно получил новые данные и готов их обслуживать. LB затем переключает поток трафика только на узел B.
- Узел A получает обновленные данные (возможно, от узла B, поэтому данные гарантированно будут одинаковыми).
- LB информируется о том, что узел A успешно получил новые данные и готов их обслуживать. Затем LB разрешает поток трафика на узлы A и B.
Этот шаблон также будет работать для активно-пассивного:
- Узел A-активный узел, B-пассивный узел.
- Узел B загружает новые данные и готов их обслуживать.
- Узел A обновляется новыми данными (вероятно, с узла B), чтобы обеспечить согласованность.
- Узел А обслуживает новые данные.
Сначала вы получаете данные на пассивном узле, чтобы, если узел A вышел из строя, у узла B уже были бы новые данные. По общему признанию, временной интервал для этого должен быть довольно небольшим.