golang в avito
TRANSCRIPT
![Page 1: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/1.jpg)
Golang в AvitoСергей Орлов
Вячеслав КрюковАндрей Скоморохов
Go 1.8 Release Party, 16 февраля 2017
![Page 2: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/2.jpg)
Микросервисы
![Page 3: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/3.jpg)
Архитектура Avito - февраль 2017
• Монолит
• Мобильное API
• API для frontend
• Backend services
![Page 4: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/4.jpg)
API Gateway
![Page 5: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/5.jpg)
Почему Go•Поддерживаемость кода (это важно)
•Экономия ресурсов
•Асинхронная модель исполнения
•Скорость исполнения
•Go-программисты :)
![Page 6: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/6.jpg)
Сервисы это трудно
![Page 7: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/7.jpg)
Требования к эксплуатации
• Управление приложениями
• Мониторинг
• Развертывание
![Page 8: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/8.jpg)
Шаблон сервиса
• Управление приложениями
• Мониторинг
• Развертывание
![Page 9: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/9.jpg)
RT Indexer
![Page 10: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/10.jpg)
Sphinx RT Indexes• Обновление полнотекстовых данных на лету
• Демон Searchd работает одновременно на чтение и запись
• Indexer не нужен
• Обновления документов прилетают в Ram
• Заполненный Ram сбрасывается на Disk
• Старые версии перекрываются через Kill List
![Page 11: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/11.jpg)
Инфраструктура поиска
![Page 12: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/12.jpg)
RT indexer
![Page 13: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/13.jpg)
RT indexer
![Page 14: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/14.jpg)
RT indexer
![Page 15: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/15.jpg)
Golang pipelines• https://blog.golang.org/pipelines
• Выделяем несколько воркеров • Соединяем воркеры последовательно каналами • Подаем исходные данные в первый воркер • Каждый воркер принимает данные из входящего канала • Создает свой исходящий канал и отправляет в него результат • Последний воркер не создает исходящего канала • При закрытии входящего канала воркер перекращает работу • И закрывает свой исходящий канал
![Page 16: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/16.jpg)
RT indexer
![Page 17: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/17.jpg)
RT indexer
![Page 18: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/18.jpg)
RT indexer
![Page 19: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/19.jpg)
RT indexer
![Page 20: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/20.jpg)
RT indexer
![Page 21: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/21.jpg)
RT indexer
![Page 22: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/22.jpg)
RT indexer
![Page 23: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/23.jpg)
RT indexer
![Page 24: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/24.jpg)
RT indexer
![Page 25: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/25.jpg)
RT indexer
![Page 26: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/26.jpg)
RT indexer
![Page 27: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/27.jpg)
RT indexer
![Page 28: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/28.jpg)
RT Indexer, производительность
• До 500 rps для обновлений, в пике до 1000 rps
• Поисковая нагрузка - 17000 rps
![Page 29: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/29.jpg)
Производительность на запись
![Page 30: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/30.jpg)
Поисковая нагрузка
![Page 31: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/31.jpg)
Отставание от Replica
![Page 32: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/32.jpg)
Go в отделе QA
![Page 33: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/33.jpg)
Bash Bash Bash
Как было раньше
…
Server 1 Server 2 Server N
![Page 34: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/34.jpg)
Что хотелось получить
• Единая входная точка
• Система хранения результатов выполнения
• Честная очередь выполнения
![Page 35: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/35.jpg)
Что получилосьClient (Team City, Bamboo, custom)
Main (parallel, start, restart)
Worker Manager
Worker1 … WorkerN
Worker Manager
Worker1 … WorkerN
Env Manager
Test Report
RabbitMQ
Test Report View
![Page 36: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/36.jpg)
Общие модели запросов и ответов в структурах
• Валидация по типам
• Описания полей структуры к полям json экономят время
![Page 37: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/37.jpg)
Воркеры в goroutines
• Доставка управляющих сообщений по отдельному каналу
• Единая система хранения результатов припроблемах с доставкой
Worker Manager
Worker1 … WorkerN
![Page 38: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/38.jpg)
Радость при реализации Json RPC 2.0
• Реализации batch request через goroutine
• Указатели в структурах дают простой механизм опциональных значений для аргументов
![Page 39: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/39.jpg)
Что получили в итоге от Go
• Простотой язык для изучения
• Скорость разработки
• Ресурсы, используемые сервером c сервисом на Go, в десятки раз меньше чем с сервисом на PHP
![Page 40: Golang в avito](https://reader034.vdocuments.net/reader034/viewer/2022052214/58a809531a28ab3d6e8b54cf/html5/thumbnails/40.jpg)
Вопросы