Netty-сервер сердцебиения
Springboot 2.0.8 интегрирован с Netty 4, используя Protobuf в качестве формата обмена данными для ping. Protobuf более компактный по сравнению с JSON и требует меньше ресурсов. Это делает его подходящим для использования в сторонних приложениях для мониторинга сердцебиения.
Сценарии применения
Один из возможных сценариев использования — мониторинг сердцебиения серверов в корпоративной среде. В такой среде может быть несколько серверов, каждый из которых выполняет свою функцию: a, b, c, d и т. д. Иногда количество пользователей или другие факторы могут привести к сбоям в работе серверов. Большинство таких сбоев обнаруживаются через систему управления сетью, но поскольку проекты обычно развертываются на нескольких машинах, система управления не всегда может быстро определить проблему. Время обнаружения может занять до получаса, а иногда пользователи даже вынуждены сообщать о проблемах по телефону. Для компании такие сбои могут иметь серьёзные последствия.
После внедрения системы мониторинга сердцебиения можно в реальном времени отслеживать состояние более 100 машин и их пинг. Также можно использовать периодические запросы к HTTP-интерфейсу для проверки работоспособности приложения. Однако использование HTTP-запросов требует ресурсов, поэтому предпочтительнее использовать ping или авторизацию на основе protobuff.
Среда разработки
Описание проекта
Реализованные функции:
Описание:
Netty — это клиент-серверный фреймворк NIO, который позволяет быстро и легко разрабатывать сетевые приложения, такие как протоколы серверов и клиентов. Он значительно упрощает разработку TCP и UDP сокетов и других сетевых приложений. «Быстро» и «легко» не означает, что конечное приложение будет страдать от проблем с поддержкой или производительностью. Netty тщательно спроектирован и предлагает широкий спектр протоколов, таких как FTP, SMTP, HTTP и различные двоичные и текстовые протоколы. Таким образом, Netty успешно нашёл способ разработки приложений, которые являются одновременно лёгкими в разработке, производительными, стабильными и гибкими.
Несколько распространённых классов:
Описанных выше классов достаточно для выполнения 80% повседневных задач. Остальное — написание собственной бизнес-логики.
Процесс реализации сервера сердцебиения
Проверка сердцебиения:
Значение пинга рассчитывается на основе данных, полученных от клиента. Клиент отправляет сообщение ping, затем сервер записывает текущее время. Когда сервер отвечает на сообщение клиента, снова записывается текущее время. Разница между двумя значениями времени делится пополам, чтобы получить значение пинга. Затем это значение сохраняется в Redis. Первоначально планировалось реализовать механизм на основе времени сервера, но это могло привести к ошибкам из-за разницы во времени между серверами. Поэтому было решено использовать данные, полученные от клиента.
Для визуализации данных о сердцебиении используется Echarts. Данные сохраняются в Redis для доступа к последним значениям пинга.
Обратите внимание, что клиентская часть проекта основана на Springboot и использует NettyClient в качестве конструктора. Класс не управляется Spring, так как это необходимо для корректной работы при повторном подключении. Вместо этого используется метод implements ApplicationContextAware. Важно установить для класса значение lazy-init=false, иначе при запуске проекта ApplicationContext будет нулевым. Использование метода
Проект представляет собой агрегатный проект, разделённый на модули: server, client и common.
Поскольку Netty 4 не поддерживает генерацию clientId, необходимо вручную указать его. Это позволяет привязать канал при каждом установлении соединения. В проекте уже интегрирован класс инструментов по умолчанию. Позже будет разработан метод распределённой генерации идентификатора, а пока что идентификатор задаётся вручную. Это облегчает отслеживание вашего хоста.
После загрузки проекта выполните следующие шаги:
Включение в другие системы
Включите в другую систему с помощью кода: NettyClient client = new NettyClient(); client.run();
Добавьте в проект Spring с помощью кода: @Component public class ClientStart implements ApplicationListener { public Logger log = LoggerFactory.getLogger(this.getClass());
@Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { NettyClient client = new NettyClient(); try { client.run(); } catch (Exception e) { e.printStackTrace(); } } }
Добавьте в Spring Boot с помощью кода: @SpringBootApplication public class ClientApplication { public static void main(String[] args) throws Exception { SpringApplication.run(ClientApplication.class, args); NettyClient client = new NettyClient();//加入启动 client.run(); } }
Мониторинг переднего плана осуществляется с использованием функции JavaScript для периодического запроса данных с сервера каждые 5 секунд и динамического обновления значений Echarts. Если вы не знакомы с используемой структурой шаблонов, не беспокойтесь, проект уже поддерживает междоменные операции. Вы можете напрямую открыть страницу monitor.html в папке netty-server/resources, чтобы увидеть страницу мониторинга.
Также можно получить доступ к странице мониторинга через бэкэнд: http://localhost:10003/monitor.do
После запуска сервера, когда клиент подключается, страница мониторинга отображает сердцебиение одной машины. Аналогично, если несколько клиентов подключаются, страница мониторинга может отображать состояние всех подключённых клиентов.
На полноэкранном режиме по умолчанию отображается максимум два графика мониторинга, которые адаптированы к различным разрешениям экрана.
График одного экземпляра подключения клиента:
График нескольких экземпляров подключения клиентов:
Изображение в этом разделе не переведено.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )