45
Применение Go в SRE Slava Bakhmutov Site reliability engineer at Dropbox 1

Вячеслав Бахмутов

Embed Size (px)

Citation preview

Page 1: Вячеслав Бахмутов

Применение Go в SRESlava Bakhmutov

Site reliability engineer at Dropbox

1

Page 2: Вячеслав Бахмутов

Go в SRE в Dropbox

2

Page 3: Вячеслав Бахмутов

Go в SRE в Dropbox

3

Page 4: Вячеслав Бахмутов

Dropbox

0.5 млрд регистраций

1.2 млрд новых файлов каждый день

4

Page 5: Вячеслав Бахмутов

Dropbox infrastructure

MetaData ServersMetaData

ServersMetaData Servers

DataBaseDataBase

DataBaseDataBase

MetadataServers

MetaData ServersMetaData

ServersMetaData ServersBlock

StorageServers

Amazon S3

2011

5

Page 6: Вячеслав Бахмутов

Dropbox infrastructure

2012

MetaData ServersMetaData

ServersMetaData Servers

DataBaseDataBase

DataBaseDataBase

MetadataServers

Distributed Database Library (Edgestore)

6

Page 7: Вячеслав Бахмутов

Dropbox infrastructure

2013

MetaData ServersMetaData

ServersMetaData Servers

DataBaseDataBase

DataBaseDataBase

MetadataServers

Edgestore Library Edgestore ServiceEdgestore ServiceEdgestore ServiceEdgestore Service

7

Go

Edgestore youtube

Page 8: Вячеслав Бахмутов

Dropbox infrastructure

2015

MetaData ServersMetaData

ServersMetaData ServersBlock StorageServers

Amazon S3

DataBDataBDataBMP

Эпичная история, как Dropbox ушёл от Amazon в своё облако - Wired

Go + Rust

8

Page 9: Вячеслав Бахмутов

Dropbox infrastructureЛоги/исключения

Система push нотификаций

Метрики

Маршрутизация/балансировка

Alerts/remediation

Системы деплоя

Hadoop/аналитика

Batch Jobs

DRTs (как Chaos Monkey)

wheelhouse (автоматизация долгих задач)

Naoru - ремедиэйшены

и множество других

9

Page 10: Вячеслав Бахмутов

Go в SRE в Dropbox

10

Page 11: Вячеслав Бахмутов

История

11

1. Большие компьютеры. Ручное управление.

2. Дешёвые компьютеры. Автоматизация.

3. Облака. DevOps.

Page 12: Вячеслав Бахмутов

SRE

+ разработчикиСисадмины

Что такое Site Reliability Engineering (Ben Treynor)12

Page 13: Вячеслав Бахмутов

SRE в Dropbox

1. Распределеённые San Francisco/Dublin

2. Fullstack (от железа до приложений)

3. Все системы (database, search, traffic, phit)

13

Page 14: Вячеслав Бахмутов

SRE операционная

14

Мониторинг!

1. Причины и Симптомы

2. День и ночь

3. Влияние в playbooks

Page 15: Вячеслав Бахмутов

SRE

15

1. Наблюдение

2. Разбирательство

3. Решение

4. Действие

Page 16: Вячеслав Бахмутов

DRTs

16

1. Зачем

1. Ловим проблемы

2. Доказываем суждения

3. Спокойствие для дежурных

2. Регулярно и в продакшене

Hope is not a strategy- Ben Treynor (Google)

Как параноя помогает нам в dropbox

Page 17: Вячеслав Бахмутов

SRE автоматизацияAhumanoperatormustauthorizeexecutionhere,unlessthePrescriptionwasinstantiated

withrun_automatically=True+++

IssuesIssuePrescription+IssuePullPluginIssuePullPlugin--------*--------->DiagnosePlugin-------------+>RemediatePlugin---->verifiesthatthe------|^^^^+^^issueisnolonger^||||||aproblem|

HooksHooksHooksHooksHooksHooksHooks

Hookshavetheabilitytopostponeexecutionoreventocompletelydenyit

Naoru - auto-remediation framework17

Page 18: Вячеслав Бахмутов

Naoru

18

Alerting

Page 19: Вячеслав Бахмутов

Алерт.

19

Alerting

Page 20: Вячеслав Бахмутов

Naoru

20

AlertingDiagnose

Plugin

Page 21: Вячеслав Бахмутов

Диагностика

21

1. Проверить что ssh работает

2. Подключиться по IPMI

A. Нет ответа - Перезагрузка

B. Зависло в initramfs - Деаллокация машины

C. CPU soft lockup - Перезагрузка

Page 22: Вячеслав Бахмутов

Naoru

22

Alerting Diagnose Plugin

Remediate Plugin

Авторизация оператором

Page 23: Вячеслав Бахмутов

Naoru

23

Page 24: Вячеслав Бахмутов

Naoru

24

Alerting Diagnose Plugin

Remediate Plugin

Авторизация оператором

Hooks

Page 25: Вячеслав Бахмутов

Хуки

25

Page 26: Вячеслав Бахмутов

Naoru

26

Alerting Diagnose Plugin

Remediate Plugin

Авторизация оператором

Hooks

Page 27: Вячеслав Бахмутов

Naoru

27

Page 28: Вячеслав Бахмутов

Naoru

28

Alerting Diagnose Plugin

Remediate Plugin

Авторизация оператором

HooksHooks

Page 29: Вячеслав Бахмутов

Go в SRE в Dropbox

29

Page 30: Вячеслав Бахмутов

Go vs Python

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

Корректность

Параллелизм

Потребление ресурсов

Рефакторинг

30

Page 31: Вячеслав Бахмутов

Go vs Java(JVM) vs C++ vs Rust

31

Page 32: Вячеслав Бахмутов

Go. Плюсы

32

•Тесты•Горутины•Простота языка (легко переходят с Python)

•Инструментарий. Исследование проблем, отлов утечек

•Малое потребление ресурсов, производительность

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

•Нет зависимостей•Богатая stdlib. HTTP2!

Page 33: Вячеслав Бахмутов

Go. Тесты

33

go test -bench

go test -bench -cpu=1,2,4

go test -benchmem

go test -cpuprofile

go test -memprofile

go test -blockprofile

Page 34: Вячеслав Бахмутов

Go. Отладка

34

Профайлер горутин

Трейсер GC

Трейсер планировщика

Трейсер аллокатора памяти

Статистика аллокатора памяти

Дамп кучи

Page 35: Вячеслав Бахмутов

Go. Отладка

35

Page 36: Вячеслав Бахмутов

Go. Гонки

36

Page 37: Вячеслав Бахмутов

Go. Плюсы

37

•Тесты•Инструментарий. Отладка

•Горутины•Простота языка

•Малое потребление ресурсов

•Производительность•Быстрая компиляция

•Нет зависимостей•Богатая stdlib. HTTP2!

Page 38: Вячеслав Бахмутов

Go in Dropbox

~400k строк кода

~130 разработчиков

Почти вся инфраструктура пишется на GO

Экспериментируем с GO для продуктов

Используем Go 1.3, переходим на 1.5

38

Page 39: Вячеслав Бахмутов

Go. Выводы

39

Начинать с переписывания одной из основных систем

Свои библиотеки легче поддерживать и менять

Осторожная работа со сборщиком мусора

Page 40: Вячеслав Бахмутов

Go. Экосистема

Картинка из статьи Go в 2015 году 40

Page 41: Вячеслав Бахмутов

Go. Экосистема

41

Page 42: Вячеслав Бахмутов

Go

Митапы

Русскоязычный чат (1000+ человек)

Подкаст

Статьи и книги (Керниган!)

Редакторы (idea, vim, sublime)

42

С чего начать новичку (ссылки)

Page 43: Вячеслав Бахмутов

Вопросы?

twitter.com/m0sth8

[email protected]

[email protected]

43

Slava BakhmutovSite reliability engineer at Dropbox

Page 44: Вячеслав Бахмутов

44

Page 45: Вячеслав Бахмутов

SRE

SWESA

45