37
Архитектура бэкенда карт sputnik.ru Максим Дементьев [email protected]

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

  • Upload
    ontico

  • View
    645

  • Download
    4

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Архитектура бэкенда карт sputnik.ruМаксим Дементьев[email protected]

Page 2: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

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

Page 3: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 4: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

Page 5: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

OpenStreetMap

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

Page 6: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

OpenStreetMap

Page 7: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Тайлы

© Спутник © OpenStreetMap contributors

Page 8: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

© Спутник © OpenStreetMap contributors

Page 9: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 10: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Challenge

Page 11: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

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

Page 12: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Challenge acceptedOpenStreetMap.org Sputnik.ru

74 слоя 187 слоев

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

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

Page 13: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 14: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

Page 15: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Go + Mapnik = Gopnik

© Renee French © Diamond00744

Page 16: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

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

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

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

Page 17: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Gopnik

Page 18: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Gopnik

Page 19: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Gopnik

Page 20: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Метатайлы

© Mapbox

Page 21: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Gopnik

Page 22: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

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

Page 23: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 24: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 25: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 26: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 27: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 28: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

• Perl

• Python

• Scala

Page 29: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

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

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

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

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

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

Page 30: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 31: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Unit-тесты• go test

• gtest для C++

© Renee French

Page 32: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

• Netem

• Yandex.Tank

Page 33: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

Page 34: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

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

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

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

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

Page 35: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

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

• SPDY

• QUIC

• Data-tiles

Page 36: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Open source

Page 37: Архитектура бэкенда карт Sputnik.ru, Максим Дементьев (Спутник)

Вопросы?