85
Реанимация проектов на Symfony Где стелить соломку Сергей Великанов <[email protected]>, SymfonyConf IV.2016, пользуясь случаем, передаю привет маме!

SymfonyConf IV.2016 - Реанимация проектов на Symfony

Embed Size (px)

Citation preview

Page 1: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Реанимация проектов на Symfony

Где стелить соломку

Сергей Великанов <[email protected]>, SymfonyConf IV.2016, пользуясь случаем, передаю привет маме!

Page 2: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Доклад в основном про поддержку

2

Page 3: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Доклад в основном про поддержку

И он более концептуальный нежели технический

3

Page 4: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Доклад в основном про поддержку

Но и разработке стоит послушать

И он более концептуальный нежели технический

4

Page 5: SymfonyConf IV.2016 - Реанимация проектов на Symfony

В момент релиза поддержка не знает о чём идёт речь

5

Page 6: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Сергей Великанов

6

Page 7: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Сергей ВеликановТехнический директор 8bit group

7

Page 8: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Сергей ВеликановТехнический директор 8bit group

Начинал PHP-верстальщиком в 2003 году

8

Page 9: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Сергей ВеликановТехнический директор 8bit group

Начинал PHP-верстальщиком в 2003 годуС Symfony дружим ≈5 лет

9

Page 10: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Сергей ВеликановТехнический директор 8bit group

Начинал PHP-верстальщиком в 2003 годуС Symfony дружим ≈5 лет

В нерабочее время пишу на C#

10

Page 11: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Сергей ВеликановТехнический директор 8bit group

Начинал PHP-верстальщиком в 2003 годуС Symfony дружим ≈5 лет

В нерабочее время пишу на C#Хобби - бокс и джиу-джитсу

11

Page 12: SymfonyConf IV.2016 - Реанимация проектов на Symfony

8bit 😻 Symfony

12

Page 13: SymfonyConf IV.2016 - Реанимация проектов на Symfony

8bit 😻 SymfonyCPA-сети

Товарные партнёрки

Тизерные сети

Мобильные партнёрки

Интернет-магазины

Букмекерки

Опционы

RTB

13

Page 14: SymfonyConf IV.2016 - Реанимация проектов на Symfony

8bit 😻 SymfonyPHP 5/7

Nginx/OpenResty

Redis MySQL Percona (XtraDB, TokuDB)

HAProxy

Symfony 2/3

RabbitMQClickHouse

MongoDB

YII 1/2

Java

Spring

Hadoop

Sylius

14

Page 15: SymfonyConf IV.2016 - Реанимация проектов на Symfony

8bit 😻 Нагрузон

15

Page 16: SymfonyConf IV.2016 - Реанимация проектов на Symfony

8bit 😻 Uptime

High Availability ≥ High Load

16

Page 17: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?Индивидуальный мониторинг логов

Команды мониторингаСМСки о критических сбоях

Бот в Telegram

17

Page 18: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?Индивидуальный мониторинг логов

Команды мониторингаСМСки о критических сбоях

Бот в TelegramБыстрый чек после релиза

18

Page 19: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?Индивидуальный мониторинг логов

Команды мониторингаСМСки о критических сбоях

Бот в TelegramБыстрый чек после релиза

M/Monit19

Page 20: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?Индивидуальный мониторинг логов

Команды мониторингаСМСки о критических сбоях

Бот в TelegramБыстрый чек после релиза

M/Monit20

Zabbix Nagios Cacti

Page 21: SymfonyConf IV.2016 - Реанимация проектов на Symfony

M/MonitИндивидуальный мониторинг логов

21

check file gearman_worker_execute.log with path !/var/log/gearman_worker_execute.log if match "Error" then alert if match "Exception" then alert

Команды мониторингаcheck program project_whatever with path !“sf app:whatever:check” uid “project” group project if status != 0 for 2 cycles then alert

Page 22: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?

Шестое чувство

22

Page 23: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?

Шестое чувство

23

Page 24: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?

МенеджерыПродукт-овнерыКонтрагенты

Тикеты от юзеров

24

Page 25: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Как узнать?

МенеджерыПродукт-овнерыКонтрагенты

Тикеты от юзеровНе должны стать неожиданностью

25

Page 26: SymfonyConf IV.2016 - Реанимация проектов на Symfony

То самое чувство…

26

Page 27: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Оно, родимое…

27

Page 28: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Для чего?

28

Page 29: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Для чего?Если в Критический Момент

Ты не эффективен

29

Page 30: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Для чего?Если в Критический Момент

Ты не эффективен

30

Page 31: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Flock

Не даёт плодиться лишним процессам

flock -ne lock_file command

31

Page 32: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Flock

Не даёт плодиться лишним процессам

flock -ne lock_file command

* * * * * flock -ne /tmp/5m.lock php 5_minutes_sleep.php

32

Page 33: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Flock

Не даёт плодиться лишним процессам

flock -ne lock_file command

* * * * * flock -ne /tmp/5m.lock php 5_minutes_sleep.php

Или LockHandler - Symfony way

33

Page 34: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Runalarm

Не даёт спать уснувшим процессам

runalarm -t seconds command

34

Page 35: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Runalarm

Не даёт спать уснувшим процессам

runalarm -t seconds command

runalarm -t 3600 php 3_hours_sleep.php

35

Page 36: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Flock + Runalarm

Не дают спать и плодиться

* * * * * flock -ne /tmp/lock runalarm -t 3600 yes

36

Page 37: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи

Всегда пишите логи

37

Page 38: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи

Всегда пишите логиВсегда

38

Page 39: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи.Monologmonolog: channels: [“calculation”] handlers: calculation_handler: type: stream path: “%kernel.logs_dir%/calculation.log” level: debug channels: calculation

39

Page 40: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи.Monologmonolog: channels: [“calculation”] handlers: calculation_handler: type: stream path: “%kernel.logs_dir%/calculation.log” level: debug channels: calculation

“@monolog.logger.calculation”

40

Page 41: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи.Monologmonolog: channels: [“calculation”] handlers: calculation_handler: type: stream path: “%kernel.logs_dir%/calculation.log” level: debug channels: calculation

“@monolog.logger.calculation”

$this->get(“monolog.logger.calculation”)->debug(“hello”);

41

Page 42: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи.ОК

$this->logger->info(“OK”);

42

Page 43: SymfonyConf IV.2016 - Реанимация проектов на Symfony

ЛогиНазывай логи удобно

43

Page 44: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи

/var/log/project/finance_create_holds.log

Называй логи удобно

/var/log/project/finance_update_balance.log

/var/log/project/finance_update_holds.log

44

Page 45: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Логи

/var/log/project/finance_create_holds.log

Называй логи удобно

/var/log/project/finance_update_balance.log

/var/log/project/finance_update_holds.log

/var/log/project/balance_update.log

/var/log/project/holds_create.log

/var/log/project/holds_update.log

45

Page 46: SymfonyConf IV.2016 - Реанимация проектов на Symfony

ЛогиСоздай алиасы для просмотра логов

46

Page 47: SymfonyConf IV.2016 - Реанимация проектов на Symfony

ЛогиСоздай алиасы для просмотра логов

alias ntail=“tail -F /var/log/nginx/error.log”

alias nless=“less /var/log/nginx/error.log”

47

Page 48: SymfonyConf IV.2016 - Реанимация проектов на Symfony

ЛогиСоздай алиасы для просмотра логов

alias ntail=“tail -F /var/log/nginx/error.log”

alias nless=“less /var/log/nginx/error.log”

logtail(){ tail -F /var/log/project/$1; }

~/.bashrc:

logtail prod.log

48

Page 49: SymfonyConf IV.2016 - Реанимация проектов на Symfony

ЛогиСоздай алиасы для просмотра логов

alias ntail=“tail -F /var/log/nginx/error.log”

alias nless=“less /var/log/nginx/error.log”

logtail(){ tail -F /var/log/project/$1; }

~/.bashrc:

logtail prod.log

logless(){ less /var/log/project/$1; }

logrep(){ tail -F /var/log/project/$1 | grep $2; }49

Page 50: SymfonyConf IV.2016 - Реанимация проектов на Symfony

ЛогиСоздай алиасы для просмотра логов

alias ntail=“tail -F /var/log/nginx/error.log”

alias nless=“less /var/log/nginx/error.log”

logtail(){ tail -F /var/log/project/$1; }

~/.bashrc:

logtail prod.log > logtail prod

logless(){ less /var/log/project/$1; }

logrep(){ tail -F /var/log/project/$1 | grep $2; }50

Page 51: SymfonyConf IV.2016 - Реанимация проектов на Symfony

tail -F

51

Page 52: SymfonyConf IV.2016 - Реанимация проектов на Symfony

tail -F

Круче чем tail -f

52

Page 53: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Cron и конфиги

Держите конфиги в репозитории проекта

53

Page 54: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Cron и конфиги

Держите конфиги в репозитории проекта

crontab -e vs crontab -r

54

Page 55: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Cron и конфиги

Держите конфиги в репозитории проекта

crontab -e vs crontab -r

Разгрузите своих админов и DevOps

55

Page 56: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Cron и конфиги

Держите конфиги в репозитории проекта

56

- name: Check for primary host action: shell grep -q 'eth0:frontend' /run/network/ifstate register: is_primary_host ignore_errors: yes - name: Install crontab action: shell cat - {{symfony_current_release_dir}}/app/config/crontab/primary | crontab when: is_primary_host|success

Page 57: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Роллбек, ЙорикТупи ор не тупи

57

Page 58: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Роллбек, ЙорикКаждый релиз индивидуален

58

Page 59: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Роллбек, ЙорикКаждый релиз индивидуален

Каждый должен продумать откат своих фич

59

Page 60: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Роллбек, ЙорикКаждый релиз индивидуален

Каждый должен продумать откат своих фич

Migration Down должен быть проработан заранее

60

Page 61: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Перебрасываем симлинк

61

Шеф, всё пропало

Page 62: SymfonyConf IV.2016 - Реанимация проектов на Symfony
Page 63: SymfonyConf IV.2016 - Реанимация проектов на Symfony
Page 64: SymfonyConf IV.2016 - Реанимация проектов на Symfony
Page 65: SymfonyConf IV.2016 - Реанимация проектов на Symfony
Page 66: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Slow logs

request_slowlog_timeout = 5sslowlog = /var/log/php-slow.log

PHP-FPM:

MySQL:log_slow_queries = /var/log/mysql/slowlong_query_time = 1

66

Page 67: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

67

Page 68: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

68

Page 69: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машине

69

Page 70: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машине

70

⌘K вместо VCS->Commit Changes…⌘+Click, ⇧⇧, ⌘O

Page 71: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машинеУмей обращаться с редактором на сервере

71

Page 72: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машинеУмей обращаться с редактором на сервере

72

$ для перемещения в конец строки^ для перемещения в начало строки

gg для перемещения в начало документаG для перемещения в конец документа

12G для перемещения на 12 строку документаТЫСЯЧИ ИХ!!!11

Page 73: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машине

Понимай, где происходит ошибкаУмей обращаться с редактором на сервере

73

Page 74: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машине

Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься

Умей обращаться с редактором на сервере

74

Page 75: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машине

Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься

Настрой SSH посерверно (ucarp)

Умей обращаться с редактором на сервере

75

Page 76: SymfonyConf IV.2016 - Реанимация проектов на Symfony

ucarp

76

ucarp1 ucarpN

IP IP

Nginx MySQL

Nginx MySQL

carp

Page 77: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машине

Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься

Настрой SSH посерверно (ucarp)СДЕЛАЙ УЖЕ АЛИАС ДЛЯ /app/console, /bin/console

Умей обращаться с редактором на сервере

77

Page 78: SymfonyConf IV.2016 - Реанимация проектов на Symfony

И напоследокПроблема возникает не когда всё ломается…

…а когда всё не может быстро починиться

Умей обращаться с IDE на своей машине

Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься

Настрой SSH посерверно (ucarp)СДЕЛАЙ УЖЕ АЛИАС ДЛЯ /app/console, /bin/console

Умей обращаться с редактором на сервере

И СОХРАНИ ЭТИ ЧАСТО ИСПОЛЬЗУЕМЫЕ ЗАПРОСЫ

78

Page 79: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Гениями не рождаются

79

Page 80: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Не пейте Не курите

Занимайтесь спортом

80

Page 81: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Будьте профессионалами

81

Page 82: SymfonyConf IV.2016 - Реанимация проектов на Symfony

8bit 😻 Hiring

ТимлидыКодеры

ТестерыАдмины

Верстальщики ФронтыСимфонисты

Иишники

Автоматизаторы

Явисты

82

Page 83: SymfonyConf IV.2016 - Реанимация проектов на Symfony

8bit 😻 Hiring

[email protected]

83

Page 84: SymfonyConf IV.2016 - Реанимация проектов на Symfony

Спасибо

Thank youDanke

GraciasMerci

ДякуємоДзякуй

Bedankt

Tänan

Dzięki

Pateicība

Dėkoju

謝謝

感謝

Хвала

Баярлалаа

Tack

Page 85: SymfonyConf IV.2016 - Реанимация проектов на Symfony

/contacts/

! [email protected]

" serge.velikanov# live:velikan55555

$ velikanov

% +7 9⎵⎵ 309 88 37