Производительность и отказоустойчивость – ключевые атрибуты для таких сервисов как Oprosso, работающих с большим объемом данных. О том, почему для решения этих и других задач в стек разработки вошла платформа Hazelcast и как использование плагинов помогает решить вопросы клиентов, рассказал технический директор компании Максим Наконечный.
Говоря об основных назначениях использования Hazelcast, стоит начать с кэширования. Кэш – это инструмент, который позволяет хранить данные для частых запросов внутри оперативной памяти и быстро их оттуда извлекать, за счет чего повышается производительность системы в целом. Разница очевидна: чтобы что-то взять с жесткого диска, может понадобиться несколько секунд, а из кэша – миллисекунды. Кэш можно сравнить с библиотекой: книги, что стоят на полках, это жесткий диск, а популярные книги, которые находятся на отдельном стенде или, еще лучше, в столе библиотекаря, это кэш. При запросе популярной книги библиотекарю не надо никуда идти, он отдаст эту книгу сразу же. Так вот, Hazelcast – это такой же библиотекарь с нужными данными, которые оказываются у вас через миллисекунду, потому что всегда находятся под рукой.
Какое-то время назад мы использовали для кэширования другое хранилище, но оно перестало нас устраивать. Нужно было решение, способное обрабатывать большое количество запросов в единицу времени, да еще и единовременно, а не в порядке очереди. Это бизнес-критическое (business critical) требование, ведь Oprosso – продукт, который должен уметь принимать много одновременных запросов без падения показателей производительности.
Другим важным моментом для нас была масштабируемость. Проще говоря, распределение нагрузки между разными физическими или виртуальными серверами. Приведу пример: есть сервис, который способен принять до 1000 запросов в секунду. Если нагрузка больше, он начинает замедляться. Логично в этот момент добавить еще один сервер, который примет на себя половину запросов. Hazelcast в случае большой нагрузки позволяет повысить доступность кэша через горизонтальное масштабирование. У него, как и у многих современных инструментов, есть возможность кластеризации — объединения нескольких физических или виртуальных серверов (нод) в группу, внутри которой они «делятся» данными и работой друг с другом, чтобы обрабатывать запросы быстрее. Одно из преимуществ Hazelcast – простота создания кластера: у нод Hazelcast есть механизм автоматического поиска «своего» кластера.
Используя в работе Hazelcast, мы не считаем его единственно верным выбором. В зависимости от задач, которые нужно решить, оптимальными могут стать и другие системы. И в случае, если мы и другие компании в своей работе используем разные решения, есть возможность «навести мосты» для плавной интеграции Oprosso с сервисами клиента. Наша команда уже сталкивалась с задачами подобного рода, когда один из клиентов, крупный представитель банковского сектора, просил перейти на другое решение, чтобы наше приложение, развернутое в банковской среде, соответствовало внутренним требованиям политики информационной безопасности банка. В частности, необходима была поддержка шифрованной передачи данных между модулями приложения и используемыми службами, к которым относится и кэш – то, чего базовая версия Hazelcast не поддерживает. Встал вопрос: как быть? Изучив немалое количество информации, мы пришли к выводу, что наилучшим решением станет самостоятельное написание плагина, который сможет объединить платформы и выполнить требование клиента. Обе стороны остались в выигрыше – клиент продолжил работать так, как того требовали его стандарты, а мы не стали переводить приложение на другой стек, воспользовавшись возможностью подключения плагина, которую предоставляет Hazelcast. Создавая его, мы придерживались уже существующих стандартов шифрования и не нарушали лицензионного соглашения. Чтобы и другие люди могли пользоваться этим решением при возникновении похожих ситуаций, мы выложили его в открытый доступ.
Эксплуатация Hazelcast абсолютно безопасна, мы не используем облачную версию, а полностью разворачиваем продукт на своих серверах. С помощью этой платформы сервис Oprosso может выдерживать большие нагрузки, продолжая работать в штатном режиме, даже если им одновременно пользуется значительное количество респондентов. Он позволяет эффективно и без задержек обрабатывать запросы и легко масштабироваться, когда это необходимо.