Переписывание сервиса Node.js на Go: производительность проекта выросла в 5 раз, а объем памяти уменьшился на 40%
Переписывание сервиса Node.js на Go: производительность проекта выросла в 5 раз, а объем памяти уменьшился на 40%

1 Введение

Hasura Storage — это служба с открытым исходным кодом, которая добавляет службу хранения поверх Hasura и любой службы хранения, совместимой с s3. Цель состоит в том, чтобы иметь возможность использовать службы облачного хранения, а также использовать функции Hasura, такие как API-интерфейс Graphql, разрешения, действия, настройки и т. д.

2 требования

В связи с потребностями развития бизнеса команда Hasura Storage недавно переписала свои сервисы, изначально написанные на Node.js, на Golang. «Этот сервис, написанный на Node.js, хорошо служил нам в течение некоторого времени, но по мере того, как компания росла и число пользователей значительно увеличивалось, производительность начала становиться проблемой. Хотя Node.js может иметь множество атрибутов, но отличная производительность и масштабируемость не входят в их число».

В Hasura Storage рассказали, что после переписывания на Golang количество сервисных запросов, которые она может обработать, увеличилось в 5 раз, а потребление памяти сократилось вдвое. Согласно введению, причины, по которым они выбрали Go:

Система управления зависимостями и система сборки языка делают его хорошо подходящим для облака.

Команда имеет большой опыт работы с Golang.

Хотя Go — очень многословный язык (особенно по сравнению с Node.js), его очень легко выучить и быстро писать.

Отличная производительность

После завершения перезаписи команда Hasura Storage провела несколько тестов с версиями сервиса Node.js и Golang. Использовал k6 и разработал следующие тесты:

  • Когда тест запускается, он увеличивает количество рабочих с 1 до TARGET в течение первых 10 секунд.
  • Затем он продолжается еще 60 секунд, прежде чем закончится.
  • Работники запрашивают услугу как можно быстрее
  • Запустите следующие тесты:
Язык кода:javascript
копировать
download_small_file
download_medium_file
download_large_file
download_image
download_image_manipulated
  • ЦП ограничен 10% от общей мощности системы.
  • ОЗУ не ограничено

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).

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.