Upload
serge-velikanov
View
86
Download
2
Embed Size (px)
Citation preview
Реанимация проектов на Symfony
Где стелить соломку
Сергей Великанов <[email protected]>, SymfonyConf IV.2016, пользуясь случаем, передаю привет маме!
Доклад в основном про поддержку
2
Доклад в основном про поддержку
И он более концептуальный нежели технический
3
Доклад в основном про поддержку
Но и разработке стоит послушать
И он более концептуальный нежели технический
4
В момент релиза поддержка не знает о чём идёт речь
5
Сергей Великанов
6
Сергей ВеликановТехнический директор 8bit group
7
Сергей ВеликановТехнический директор 8bit group
Начинал PHP-верстальщиком в 2003 году
8
Сергей ВеликановТехнический директор 8bit group
Начинал PHP-верстальщиком в 2003 годуС Symfony дружим ≈5 лет
9
Сергей ВеликановТехнический директор 8bit group
Начинал PHP-верстальщиком в 2003 годуС Symfony дружим ≈5 лет
В нерабочее время пишу на C#
10
Сергей ВеликановТехнический директор 8bit group
Начинал PHP-верстальщиком в 2003 годуС Symfony дружим ≈5 лет
В нерабочее время пишу на C#Хобби - бокс и джиу-джитсу
11
8bit 😻 Symfony
12
8bit 😻 SymfonyCPA-сети
Товарные партнёрки
Тизерные сети
Мобильные партнёрки
Интернет-магазины
Букмекерки
Опционы
RTB
13
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
8bit 😻 Нагрузон
15
8bit 😻 Uptime
High Availability ≥ High Load
16
Как узнать?Индивидуальный мониторинг логов
Команды мониторингаСМСки о критических сбоях
Бот в Telegram
17
Как узнать?Индивидуальный мониторинг логов
Команды мониторингаСМСки о критических сбоях
Бот в TelegramБыстрый чек после релиза
18
Как узнать?Индивидуальный мониторинг логов
Команды мониторингаСМСки о критических сбоях
Бот в TelegramБыстрый чек после релиза
M/Monit19
Как узнать?Индивидуальный мониторинг логов
Команды мониторингаСМСки о критических сбоях
Бот в TelegramБыстрый чек после релиза
M/Monit20
Zabbix Nagios Cacti
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
Как узнать?
Шестое чувство
22
Как узнать?
Шестое чувство
23
Как узнать?
МенеджерыПродукт-овнерыКонтрагенты
Тикеты от юзеров
24
Как узнать?
МенеджерыПродукт-овнерыКонтрагенты
Тикеты от юзеровНе должны стать неожиданностью
25
То самое чувство…
26
Оно, родимое…
27
Для чего?
28
Для чего?Если в Критический Момент
Ты не эффективен
29
Для чего?Если в Критический Момент
Ты не эффективен
30
Flock
Не даёт плодиться лишним процессам
flock -ne lock_file command
31
Flock
Не даёт плодиться лишним процессам
flock -ne lock_file command
* * * * * flock -ne /tmp/5m.lock php 5_minutes_sleep.php
32
Flock
Не даёт плодиться лишним процессам
flock -ne lock_file command
* * * * * flock -ne /tmp/5m.lock php 5_minutes_sleep.php
Или LockHandler - Symfony way
33
Runalarm
Не даёт спать уснувшим процессам
runalarm -t seconds command
34
Runalarm
Не даёт спать уснувшим процессам
runalarm -t seconds command
runalarm -t 3600 php 3_hours_sleep.php
35
Flock + Runalarm
Не дают спать и плодиться
* * * * * flock -ne /tmp/lock runalarm -t 3600 yes
36
Логи
Всегда пишите логи
37
Логи
Всегда пишите логиВсегда
38
Логи.Monologmonolog: channels: [“calculation”] handlers: calculation_handler: type: stream path: “%kernel.logs_dir%/calculation.log” level: debug channels: calculation
39
Логи.Monologmonolog: channels: [“calculation”] handlers: calculation_handler: type: stream path: “%kernel.logs_dir%/calculation.log” level: debug channels: calculation
“@monolog.logger.calculation”
40
Логи.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
Логи.ОК
$this->logger->info(“OK”);
42
ЛогиНазывай логи удобно
43
Логи
/var/log/project/finance_create_holds.log
Называй логи удобно
/var/log/project/finance_update_balance.log
/var/log/project/finance_update_holds.log
44
Логи
/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
ЛогиСоздай алиасы для просмотра логов
46
ЛогиСоздай алиасы для просмотра логов
alias ntail=“tail -F /var/log/nginx/error.log”
alias nless=“less /var/log/nginx/error.log”
47
ЛогиСоздай алиасы для просмотра логов
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
ЛогиСоздай алиасы для просмотра логов
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
ЛогиСоздай алиасы для просмотра логов
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
tail -F
51
tail -F
Круче чем tail -f
52
Cron и конфиги
Держите конфиги в репозитории проекта
53
Cron и конфиги
Держите конфиги в репозитории проекта
crontab -e vs crontab -r
54
Cron и конфиги
Держите конфиги в репозитории проекта
crontab -e vs crontab -r
Разгрузите своих админов и DevOps
55
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
Роллбек, ЙорикТупи ор не тупи
☝
57
Роллбек, ЙорикКаждый релиз индивидуален
58
Роллбек, ЙорикКаждый релиз индивидуален
Каждый должен продумать откат своих фич
59
Роллбек, ЙорикКаждый релиз индивидуален
Каждый должен продумать откат своих фич
Migration Down должен быть проработан заранее
60
Перебрасываем симлинк
61
Шеф, всё пропало
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
И напоследокПроблема возникает не когда всё ломается…
67
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
68
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машине
69
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машине
70
⌘K вместо VCS->Commit Changes…⌘+Click, ⇧⇧, ⌘O
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машинеУмей обращаться с редактором на сервере
71
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машинеУмей обращаться с редактором на сервере
72
$ для перемещения в конец строки^ для перемещения в начало строки
gg для перемещения в начало документаG для перемещения в конец документа
12G для перемещения на 12 строку документаТЫСЯЧИ ИХ!!!11
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машине
Понимай, где происходит ошибкаУмей обращаться с редактором на сервере
73
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машине
Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься
Умей обращаться с редактором на сервере
74
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машине
Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься
Настрой SSH посерверно (ucarp)
Умей обращаться с редактором на сервере
75
ucarp
76
ucarp1 ucarpN
IP IP
Nginx MySQL
Nginx MySQL
carp
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машине
Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься
Настрой SSH посерверно (ucarp)СДЕЛАЙ УЖЕ АЛИАС ДЛЯ /app/console, /bin/console
Умей обращаться с редактором на сервере
77
И напоследокПроблема возникает не когда всё ломается…
…а когда всё не может быстро починиться
Умей обращаться с IDE на своей машине
Понимай, где происходит ошибкаВыучи шорткаты ко всему, чем пользуешься
Настрой SSH посерверно (ucarp)СДЕЛАЙ УЖЕ АЛИАС ДЛЯ /app/console, /bin/console
Умей обращаться с редактором на сервере
И СОХРАНИ ЭТИ ЧАСТО ИСПОЛЬЗУЕМЫЕ ЗАПРОСЫ
78
Гениями не рождаются
79
Не пейте Не курите
Занимайтесь спортом
80
Будьте профессионалами
81
8bit 😻 Hiring
ТимлидыКодеры
ТестерыАдмины
Верстальщики ФронтыСимфонисты
Иишники
Автоматизаторы
Явисты
82
Спасибо
Thank youDanke
GraciasMerci
ДякуємоДзякуй
Bedankt
Tänan
Dzięki
Pateicība
Dėkoju
謝謝
感謝
Хвала
Баярлалаа
Tack
/contacts/
" serge.velikanov# live:velikan55555
$ velikanov
% +7 9⎵⎵ 309 88 37