Оптимизация микросервиса на Go на живом примереСитуация: мы создали новый сервис на Go, в памяти которого решили сохранять статусы подключенных анонимных или реальных номеров. На входе задачи было 12 000 статусов, а в перспективе их может быть примерно в десять раз больше.
Что сделали: было два варианта реализации: массив (AKA slice) или map. Посчитали оба и выяснили, что для 12 000 элементов map имеет преимущество на чтение перед массивом примерно в 100 раз. К тому же Map занимает в Heap менее двух мегабайт памяти для хранения нужных нам данных. А благодаря инструментам профилирования и небольшому изменению кода нам удалось выиграть ещё 60% производительности, и всё продолжает работать, как требуется.
И что в итоге: после того, как выбрали кэш, дописали код и задеплоили всё в сервис, добилились уменьшения response time сервиса в 1,8 раз, снизили Throttling CPU в 8 раз и количества ошибок в два раза.
Если подобный опыт вам интересен, наш бэкенд инженер Ваня Нещадин подробно объясняет, как мы это сделали, в статье на Хабре:
http://bit.ly/3cgfJYr