В GeekSeat мы внедряем микросервисы для разработки наших новых приложений. Таким образом, в настоящее время мы ищем следующую структуру, на которой будут построены наши микросервисы. В идеале это должен быть легкий, простой и высокопроизводительный фреймворк. Есть несколько стеков, которые мы сейчас изучаем. Чтобы помочь принять решение, я провожу тест, чтобы увидеть, как эти фреймворки выполняют нашу стандартную задачу.

Фреймворки

Labstack Echo

Echo позиционирует себя как высокопроизводительный, расширяемый, минималистичный фреймворк Go. У него хорошая коллекция промежуточного программного обеспечения, и сообщество github очень активно.

Ирис Го

Iris - это тоже фреймворк на основе го. Их слоган: Самый быстрый серверный веб-фреймворк для Go. В репозитории github у них есть хорошая коллекция примеров.

Ядро Dotnet

Последняя реализация .NET от Microsoft, работающая на нескольких ОС. У нас уже есть приложение, реализованное с использованием ядра .NET. Я включу его в тест для сравнения.

Окружающая среда

Тест проводился на моем локальном компьютере со следующими характеристиками:

Веб-сервер
- ЦП: Intel Core i5 6500, 4 ядра, 6 МБ кэш-памяти, базовая частота 3,2 ГГц
- ОЗУ: 32 ГБ DDR4 2133
- Хранение: 250 ГБ SSD
- Сеть: 1 Гбит / с
- ОС: Ubuntu 16.04 LTS

Сервер базы данных
- ЦП: Intel Core i5 6200u, 3 МБ кэш-памяти при базовой частоте 2,8 ГГц
- ОЗУ: 8 ГБ DDR4 2133
- Память: 250 ГБ SSD
- Сеть: 1 Гбит / с
- ОС: Ubuntu 16.04 LTS

Тест:

Мы проводим 3 разных теста:

  1. Открытый текстовый ответ. Сервер возвращает этот текст: "Hello, World!"
  2. Ответ Json. Сервер возвращает этот json:

3. Запрос к базе данных. В этом тесте приложение выполнит один запрос к базе данных mongodb и вернет результат в формате json:

Помимо этого теста, я также реализую другую версию для json и запросов к базе данных, которая включает аутентификацию токена JWT. Мы запускаем тест с помощью WRK, используя 16 потоков и 96 соединений. Вот результаты.

Результаты, достижения

В запросах открытого текста Iris немного быстрее, чем Echo, и почти в два раза быстрее, чем ядро ​​.net. Старый добрый простой .NET на порядок медленнее.

Теперь тот же тест, но с включенной аутентификацией JWT:

Таким образом, даже после того, как вы потратили время на декодирование и проверку токена JWT, инфраструктуры go по-прежнему получают более 12 тысяч запросов в секунду, что составляет 43 миллиона запросов в час! Очень быстро!

Ядро .NET получает около 40% результата фреймворка go, что по-прежнему составляет респектабельные запросы 5 КБ в секунду.

И это задержка:

Мы видим, что у фреймворков go очень стабильная задержка, что приятно.

Вывод

После этого теста мы можем видеть между Iris и Echo, производительность не так уж сильно отличается. Решение тогда приходит из всех хороших вещей, которые фреймворки приносят с собой. Iris поставляется с множеством примеров кода и документации, в то время как у Echo есть процветающее сообщество на github.