Архитектура бэкенда карт Sputnik.ru, Максим Дементьев...

Preview:

DESCRIPTION

Доклад Максима Дементьева на HighLoad++ 2014.

Citation preview

Архитектура бэкенда карт sputnik.ruМаксим Дементьевmax@orofarne.ru

Структура доклада• Как устроен кластер генерации карт?

• Почему мы используем язык Go?

• Как мы тестируем нашу систему?

• Какие у нас планы на будущее?

Как устроен кластер генерации карт

OpenStreetMap• Открытая база геоданных

• Более миллиона участников по всему миру

• Участвовать может каждый

OpenStreetMap

http://wiki.openstreetmap.org/wiki/Component_overview

OpenStreetMap

Тайлы

© Спутник © OpenStreetMap contributors

Откуда берутся тайлы

© Спутник © OpenStreetMap contributors

Основные технологии

Challenge

Challenge accepted• Сложный стиль (~7500 правил)

• Большое время генерации тайлов (~5 дней)

• Большой объем тайлового кэша (~2 Тб)

• Модель периодического обновления (1 месяц)

Challenge acceptedOpenStreetMap.org Sputnik.ru

74 слоя 187 слоев

~3000 правил ~7500 правил

~19000 строк в Mapnik XML ~48000 строк в Mapnik XML

Классический подход

Проблемы классического подхода

• Ориентированность на файловую систему

• Плохая масштабируемость

Go + Mapnik = Gopnik

© Renee French © Diamond00744

Gopnik• Ориентированность на файловую систему

• Плохая масштабируемость

• Гибкая модульная архитектура

• Пользователь получает результат генерации сразу

• Простая конфигурация

• Набор дополнительных утилит

Gopnik

Gopnik

Gopnik

Метатайлы

© Mapbox

Gopnik

Заполнение кэша• Гибкий конфигуратор заданий

• Кластерная генерация

• Распределенная очередь

• CLI и web интерфейсы

Заполнение кэша

Заполнение кэша

Заполнение кэша

Заполнение кэша

Почему мы выбрали язык Go

Что было до Go• С++

• Perl

• Python

• Scala

Плюсы Go• Очень простой

• Компилируемый

• Строгая типизация

• Сборка мусора

• Простая и понятная модель многопоточности

• Быстрая компиляция

• Хорошая стандартная библиотека

• Большой набор полезных утилит

Как мы тестируем нашу систему

Unit-тесты• go test

• gtest для C++

© Renee French

Интеграционные и системные тесты• Docker

• Netem

• Yandex.Tank

Планы на будущее

Что уже сделано• Гибкая модульная платформа

• Поддержка тайловых кэшей с eventual consistency

• Дополнительные утилиты

• Удобный кластерный рендеринг

• Простая конфигурация

Что еще хотим сделать• Gossip

• SPDY

• QUIC

• Data-tiles

Open source

Вопросы?

Recommended