Golang в avito

Preview:

Citation preview

Golang в AvitoСергей Орлов

Вячеслав КрюковАндрей Скоморохов

Go 1.8 Release Party, 16 февраля 2017

Микросервисы

Архитектура Avito - февраль 2017

• Монолит

• Мобильное API

• API для frontend

• Backend services

API Gateway

Почему Go•Поддерживаемость кода (это важно)

•Экономия ресурсов

•Асинхронная модель исполнения

•Скорость исполнения

•Go-программисты :)

Сервисы это трудно

Требования к эксплуатации

• Управление приложениями

• Мониторинг

• Развертывание

Шаблон сервиса

• Управление приложениями

• Мониторинг

• Развертывание

RT Indexer

Sphinx RT Indexes• Обновление полнотекстовых данных на лету

• Демон Searchd работает одновременно на чтение и запись

• Indexer не нужен

• Обновления документов прилетают в Ram

• Заполненный Ram сбрасывается на Disk

• Старые версии перекрываются через Kill List

Инфраструктура поиска

RT indexer

RT indexer

RT indexer

Golang pipelines• https://blog.golang.org/pipelines

• Выделяем несколько воркеров • Соединяем воркеры последовательно каналами • Подаем исходные данные в первый воркер • Каждый воркер принимает данные из входящего канала • Создает свой исходящий канал и отправляет в него результат • Последний воркер не создает исходящего канала • При закрытии входящего канала воркер перекращает работу • И закрывает свой исходящий канал

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT indexer

RT Indexer, производительность

• До 500 rps для обновлений, в пике до 1000 rps

• Поисковая нагрузка - 17000 rps

Производительность на запись

Поисковая нагрузка

Отставание от Replica

Go в отделе QA

Bash Bash Bash

Как было раньше

Server 1 Server 2 Server N

Что хотелось получить

• Единая входная точка

• Система хранения результатов выполнения

• Честная очередь выполнения

Что получилось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

Общие модели запросов и ответов в структурах

• Валидация по типам

• Описания полей структуры к полям json экономят время

Воркеры в goroutines

• Доставка управляющих сообщений по отдельному каналу

• Единая система хранения результатов припроблемах с доставкой

Worker Manager

Worker1 … WorkerN

Радость при реализации Json RPC 2.0

• Реализации batch request через goroutine

• Указатели в структурах дают простой механизм опциональных значений для аргументов

Что получили в итоге от Go

• Простотой язык для изучения

• Скорость разработки

• Ресурсы, используемые сервером c сервисом на Go, в десятки раз меньше чем с сервисом на PHP

Вопросы

Recommended