55
Олег Лексунин Системный администратор и архитектор Я.Субботник в Киеве, 27 апреля 2013 Эксплуатация и разработка быстрорастущих облаков Михаил Белов Руководитель группы разработки облачных технологий

Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

  • Upload
    yandex

  • View
    783

  • Download
    5

Embed Size (px)

DESCRIPTION

Яндекс.Диск — это новый, стремительно развивающийся сервис Яндекса. При этом он уже хранит в себе более миллиарда файлов и обслуживает миллионы пользователей. В таких условиях особенно остро встает вопрос об организации эксплуатации, разработки, их взаимодействия, а также взаимопонимания между командами. Группа докладчиков из эксплуатации и разработки рассказала о том, какие задачи мы решаем и почему, в какой архитектуре живем, какие технологии используем и как взаимодействуем и еще много интересного!

Citation preview

Page 1: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

Олег Лексунин — Системный администратор и архитектор

Я.Субботник в Киеве, 27 апреля 2013

Эксплуатация и разработка быстрорастущих облаков Михаил Белов — Руководитель группы разработки облачных технологий

Page 2: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

Олег Лексунин Системный администратор и архитектор проекта Яндекс.Диск

Архитектура и эксплуатация

Page 3: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

3

Технические требования к Яндекс.Диску

1.  Десятки миллионов пользователей 2.  Миллиарды файлов и папок 3.  Высокая доступность 4.  Отказоустойчивость

Page 4: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

4

Решение

•  Резервирование на уровне дата-центра •  Горизонтальное масштабирование

Page 5: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

5

Как это сделать?

Page 6: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

6

Сервис-ориентированная архитектура (1)

(англ. service-oriented architecture) — модульный подход к разработке программного обеспечения, основанный на использовании распределённых, слабо связанных (англ. loose coupling) заменяемых компонентов, оснащённых стандартизированными интерфейсами для взаимодействия по стандартизированным протоколам. Подробнее: http://ru.wikipedia.org/wiki/Сервис-ориентированная_архитектура

Длинное  определение  

Page 7: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

7

Сервис-ориентированная архитектура (2)

•  Модули •  Компоненты

•  Распределённые •  Слабо связанные •  Заменяемые

•  Стандартизация •  Интерфейсов •  Протоколов

Page 8: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

8

“Сделай настолько просто, насколько это возможно, но не проще”

Альберт Эйнштейн

Page 9: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

9

Архитектура Яндекс.Диска

WebDAV   Паспорт   Disk  web-­‐interface  XMPP  

MPFS   Кладун   Заберун  

MongoDB   Mulca  Gate   Mulca  

Народ   Фотки   Видео   Музыка   Поиск  Почта  

интернет  

интранет  

Десктопные  и  мобильные  клиенты  

браузер  

Xiva  

Page 10: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

10

Где и как хранить данные?

Page 11: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

11

2 базы данных

Mongo DB — для мета-информации Mulca — для самих файлов

Page 12: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

12

MongoDB (плюсы)

•  OpenSource •  Документо-ориентированная •  Компромис между простым KeyValue и сложным SQL

•  Хорошая производительность •  Автоматическая обработка отказа ноды •  Горизонтальное масштабирование (sharding) •  Вторичные индексы

Page 13: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

13

MongoDB (минусы)

•  Нет транзакций •  Write lock

Page 14: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

14

Кластер Mongo DB

Page 15: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

15

Готовим Mongo (1)

•  Индексы и половина рабочего набора данных – в оперативной памяти

•  Данные хранятся на RAID 0 из SSD

•  Используется Replica-Set, а не Master-Slave •  В каждом Replia-Set есть нода с задержкой репликации для резервного копирования

Page 16: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

16

Готовим Mongo (2)

•  Следите за схемой и объемом базы, сжимайте данные

•  Избегайте фрагментации данных •  Выбирайте требуемую политику записи данных

•  Попробуйте ручную балансировку •  Используйте только простые операции

Page 17: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

17

Всё, что вы хотели знать о Mulca

•  Огромныи key-value сторадж •  Отвечает техническим требованиям •  Основнои потребитель – Почта •  Десятки петабайт данных •  Синхронная запись

Page 18: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

18

Бонус — Контроль внешней нагрузки

•  Отсутствие фиксированных значений •  Специальные ответы сервера •  Настройки ПО на стороне бэкэнда

Page 19: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

19

Релиз новой версии ПО

Page 20: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

20

Самое важное

•  Всегда начинайте с ТЗ •  Помните о масштабировании •  Не забывайте о внешней нагрузке •  Делайте просто!

Page 21: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

21

Вопросы?

После второй части, пожалуйста.

Page 22: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

Михаил Белов Руководитель группы разработки облачных технологий

Ядро Диска и принципы разработки

Page 23: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

23

Функциональность и технология

MPFS – ядро Диска

Page 24: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

24

MPFS: базовое описание

MPFS  

HTTP  

JSON  

HTTP  и  т.д.  

Page 25: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

25

MPFS: технологии

•  Python •  uWSGI •  Flask •  Jinja2 •  DemJSON •  MongoDB •  Nginx

Page 26: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

26

Задачи разработчика

Главная задача – реализовывать функциональность. Для этого есть ТЗ.

Page 27: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

27

Задачи разработчика

Какую архитектуру выбрать? Как декомпозировать предметную область? Как сделать логирование? Как забирать внешние данные? Как организовать запуск приложения? + еще 100500 «маленьких» вопросов

Page 28: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

28

Общение – это технология

Page 29: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

29

Общение помогает выбрать решение

Великое    Множество    Решений  

     

То,  что  нужно  

Page 30: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

30

Пример первый

Эксплуатация хочет: 1.  Кластеризацию 2.  Масштабируемость 3.  Простоту 4.  Надежность 5.  Отказоустойчивость

Page 31: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

31

Решение — простые процессы

•  Один тип процессов •  Самодостаточность •  Независимость •  Отсутствие общения между процессами

Page 32: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

32

Пример второй

Эксплуатация продолжает хотеть: 1.  Прозрачность 2.  Контролируемость

Page 33: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

33

Решение — грамотное логирование

•  Уникальный ID запроса •  Сквозной проброс ID запроса •  Быстрое подключение логирования

Page 34: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

34

Листинг Народа в логах ядра (1)

fcgi-access.log!!2013-04-10 11:21:56,545 [1866] 1866_4008 __init__!GET /json/list/?path=999:/narod/&uid=999 !HTTP/1.0 200 0.066! ! !!

Page 35: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

35

Листинг Народа в логах ядра (2)

requests.log!!2013-04-10 11:21:56,481 [1866] 1866_4008 mongo !mpfs.user_index.find_one(SON([('$query', {'_id': '999', 'shard_key': 999})]), read=SLAVE) !0.002!!2013-04-10 11:21:56,517 [1866] 1866_4008 client !"http://narod2.yandex.ru/***/getfiles/?uid=999" !200 0 111 0.011!

Page 36: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

36

Листинг Народа в логах ядра (3)

!service-mongo.log!!2013-04-10 11:21:56,481 [1866] 1866_4008 mongo! mpfs.user_index.find_one(SON([('$query', {'_id': '999', 'shard_key': 999})]), read=SLAVE) !0.002!!2013-04-10 11:21:56,483 [1866] 1866_4008 mongo !{'number_returned': 1, 'data': [***], 'starting_from': 0, 'cursor_id': 0}!!

Page 37: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

37

Листинг Народа в логах ядра (4)

service-narod.log !!2013-04-10 11:21:56,517 [1866] 1866_4008 client !"http://narod2.yandex.ru/***/getfiles/?uid=999" !200 0 111 0.011!!2013-04-10 11:21:56,517 [1866] 1866_4008 narod_service !<?xml version="1.0" encoding="utf-8"?>!<files>!...!</files>! !!

Page 38: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

38

Пример третий

Никакой разработки без совместного обсуждения дизайна. В обсуждении участвуют: -  Дизайнеры -  Фронтенд-разработчики -  Бекенд-разработчики -  Эксплуатация -  Менеджеры

Page 39: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

39 Дизайнер добавил цифры, например

Page 40: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

40

Общаться очень важно!

Page 41: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

Технология разработки

Page 42: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

42

Требования менеджеров

1. Точные  запуски  2. Независимость  3. Скорость  

Page 43: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

43

Требования админов

1. Скорость 2. Откатываемость 3. Консистентность

Page 44: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

44

Наши постулаты Каждому разработчику - свою машину!

Каждому релизу - свою ветку!

Каждому пакету - ручная сборка!

Каждой задаче – ответственный разработчик!

Page 45: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

45

Каждой задаче – ответственный разработчик!

Page 46: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

46

Ответственный разработчик

• Ответственен за свой код • Думает о задаче как «снизу», так и «сверху» • Советуется с командой

Page 47: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

47

Каждому пакету – ручная сборка!

Page 48: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

48

Сборка пакетов руками

• Точные цели • Меньше мусора • Скорость в критических ситуациях

Page 49: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

49

Каждому релизу – свою ветку!

Page 50: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

50

Релизные ветки

• Строгий набор функциональности • Точечный мердж • Стабильность

Page 51: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

51

Каждому разработчику – отдельную машину!

Page 52: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

52

Отдельная машина разработчика

• Независимость • Личная копия настоящего окружения • Приятная дружественная обстановка

Page 53: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

53

Итого

-  Общение -  Ответственность -  Делать только то, что нужно

Page 54: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

54

Вопросы

Page 55: Олег Лексунин, Михаил Белов "Яндекс.Диск. Эксплуатация и разработка быстрорастущих облаков"

55

Лексунин Олег

Системный администратор сервиса Яндекс.Диск

Белов Михаил

Руководитель группы разработки облачных технологий сервиса Яндекс.Диск

[email protected]

[email protected]