В 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 разных теста:
- Открытый текстовый ответ. Сервер возвращает этот текст:
"Hello, World!"
- Ответ 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.