Hasura Storage — это служба с открытым исходным кодом, которая добавляет службу хранения поверх Hasura и любой службы хранения, совместимой с s3. Цель состоит в том, чтобы иметь возможность использовать службы облачного хранения, а также использовать функции Hasura, такие как API-интерфейс Graphql, разрешения, действия, настройки и т. д.
В связи с потребностями развития бизнеса команда Hasura Storage недавно переписала свои сервисы, изначально написанные на Node.js, на Golang. «Этот сервис, написанный на Node.js, хорошо служил нам в течение некоторого времени, но по мере того, как компания росла и число пользователей значительно увеличивалось, производительность начала становиться проблемой. Хотя Node.js может иметь множество атрибутов, но отличная производительность и масштабируемость не входят в их число».
В Hasura Storage рассказали, что после переписывания на Golang количество сервисных запросов, которые она может обработать, увеличилось в 5 раз, а потребление памяти сократилось вдвое. Согласно введению, причины, по которым они выбрали Go:
Система управления зависимостями и система сборки языка делают его хорошо подходящим для облака.
Команда имеет большой опыт работы с Golang.
Хотя Go — очень многословный язык (особенно по сравнению с Node.js), его очень легко выучить и быстро писать.
Отличная производительность
После завершения перезаписи команда Hasura Storage провела несколько тестов с версиями сервиса Node.js и Golang. Использовал k6 и разработал следующие тесты:
download_small_file
download_medium_file
download_large_file
download_image
download_image_manipulated
Hasura Storage заранее заявила, что окончательные результаты не следует принимать за чистую монету: «Системы, использованные для тестов, имели очень ограниченную мощность ЦП, поскольку мы хотели подвергнуть обе службы нагрузке и посмотреть, как они работают в условиях нагрузки, что нас и интересует». дело не в цифрах, а в различиях между двумя версиями».
Результаты тестирования показали, что Hasura Storage добилась значительного увеличения количества запросов, которые она могла обработать в каждом случае, причем эффект был более значительным для файлов меньшего размера (в 5 раз).
При этом удалось существенно улучшить потребление оперативной памяти во всех случаях, особенно при загрузке больших файлов. Стоит отметить, что при этом количество запросов обслуживается в 5 раз больше.
Еще одним важным показателем является время отклика, и Hasura Storage предоставляет две цифры: минимальное время отклика, которое в открытом исходном коде сообщает нам время отклика, когда система не находится в состоянии стресса, и P95, который в открытом исходном коде сообщает нам, какое максимальное время ответа; большинство пользователей (в том числе, когда система находится в состоянии стресса).
Во-первых, минимальное время ответа. Результаты тестового примера download_small_file нелегко проверить визуально по рисунку, но Hasura Storage утверждает, что улучшила время отклика сценария с 29 мс для варианта использования Node.js до 7 мс для варианта использования Golang. За исключением примерно двукратного улучшения в download_image_manipulated, во всех остальных сценариях достигается четырехкратное улучшение.
Еще есть P95. В большинстве случаев достигается четырехкратное улучшение, за исключением download_image_manipulated и download_large_file. Hasura Storage объясняет, что в обоих случаях наблюдаются существенные улучшения, хотя и не такие существенные, как в других случаях. «Это имеет смысл, поскольку загрузка больших файлов связана с сетью ввода-вывода, а обработка изображений — с процессором. Но даже в этом случае мы рады видеть это существенное улучшение».
Кроме того, произошли улучшения в обработке изображений.
После того как сервис был переписан и протестирован, Hasura Storage развернула его в рабочей среде, и начали проявляться некоторые преимущества переписывания. Как показано на изображении ниже (использование оперативной памяти в одном узле кластера), объем памяти сократился почти на 40%. «Это значительное улучшение, которое позволит нам обслуживать больше пользователей и трафика без увеличения общих расходов на инфраструктуру».
Hasura Storage заявила, что решила переписать сервис, чтобы улучшить показатели производительности, и после проведения параллельных тестов двух сервисов они могут с уверенностью утверждать, что им удалось значительно улучшить все показатели; «Мы надеемся, что сможем обслуживать больше запросов, используя меньше ресурсов, а также сокращая время ответа для наших пользователей, что, я уверен, им понравится».
Источник: Сообщество открытого исходного кода OSC (ID: oschina2013).