SlideShare une entreprise Scribd logo
1  sur  58
Télécharger pour lire hors ligne
Хорошо	
поддерживаемое	в	
produc4on	приложение	
Николай	Сивко
Откуда инфа?
•  Очень	долго	руководил	эксплуатацией	
•  Сейчас	okmeter.io	– много	общаемся	с	
клиентами	про	мониторинг/обнаружение	
проблем	
•  У	всех	похожие	болячки
Проблема
•  Разработчик	и	админ	– разные	люди	
•  По-разному	думают	
•  Разный	кругозор	и	набор	проф.	интересов	
•  Разные	цели	в	работе
Мир глазами разработчика
1.  Есть	задача	с	требованиями	
2.  Пишу	код	+	тесты	
3.  Показал	demo	заказчику	
4.  Передал	в	produc[on	
	
Если	баг	или	проблема	в	produc[on:	
GOTO#1
Мир глазами админа
•  В	3:00	утра	SMS:	“HTTP-50x	>	20rps”	
•  Приложение	жрет	4	ядра,	в	логе	пусто	
•  Фронтенд	не	дожидается	ответа	от	сервиса	за	10s	
и	отдает	пользователям	HTTP-504	
•  Разработчик	просит	проверить	сеть/БД/… и	
вообще	перезапустить
DevOps: РазрабАдмин?
С чего обычно начинается DevOps?
•  Con[nuous	delivery	и	деплой	10	раз	в	час!	
•  Спрячем	от	разработчика	железки	за	Docker	c	
оркестрацией!	
•  Чтобы	все	масштабировалось	на	лету	будем	ходить	
за	конфигами	по	сети,	целостность	нам	обеспечит	
Paxos/Rax!	
•  Так	мы	без	проблем	будем	расти	до	планетарного	
масштаба,	ничего	не	меняя	коде!
С чего обычно начинается DevOps?
Чего хочет бизнес?
•  Produc[on	должен	работать	
•  Если	что-то	ломается,	нужно	быстро	определить	
причину	и	починить	
•  Сделать	так,	чтобы	не	повторялось
DevOps: РазрабАдмин 
Разработчик	думает	о	том,	как	поддерживать	
приложение	в	produc[on	или	сам	это	делает	
	
ИЛИ	
	
Когда	админ	начинает	писать	код	(это	горе	в	
семье,	но	случается:)
Будем говорить про
диагностику
•  Посмотрим,	как	сделано	у	популярного	софта:	
nginx,	mongo,	postgresql	
•  Какие	вообще	есть	подходы?	
•  Как	делать	у	себя?
•  Входящие	запросы	
•  Бэкенды	
•  Статика,	кэш	
•  Lua,	perl,	…
Nginx: error_log
2016/10/10	12:27:57	[error]	6219#0:	*130819912	
upstream	[med	out	(110:	Connec[on	[med	out)	while	
connec[ng	to	upstream,	client:	1.2.3.4,	server:	
okmeter.io,	request:	"POST	/metric/write	HTTP/1.1",	
upstream:	"hOp://192.168.100.9:8088/metric/write",	
host:	"okmeter.io"	
	
•  У	какого	именно	клиента	ошибка	
•  Какой	бэкенд	не	ответил
Nginx: access_log
1.2.3.4 - - [10/Oct/2016:14:04:38 +0300] "POST /
metric/write HTTP/1.1" 200 2 "-" "Go-http-
client/1.1" 0.103 - [0.039, 0.064]
{192.168.100.5:8088, 192.168.100.4:8088} 	
{504,	200}	
•  Какой	статус	вернули	клиенту	
•  Что	вернул	каждый	бэкенд,	сколько	было	попыток	
•  Сколько	ждали	каждого	бэкенда	
•  Сколько	ждал	пользователь
Nginx: debug log
•  Показывает	все	этапы	обработки	запроса	
•  Можно	только	для	конкретных	IP/сетей	
(debug_connec[on)	
•  Можно	в	циклический	буфер	в	памяти
Nginx: stub_status
Ac[ve	connec[ons:	291		
server	accepts	handled	requests	
	16630948	16630948	31070465		
Reading:	6	Wri[ng:	179	Wai[ng:	106
Nginx: тёмные пятна
•  Сколько	ждали	диск:	читали	данные,	писали	лог	
•  Другие	блокировки	IO	loop:	логика	nginx,	
пользовательская	логика	(lua)	
•  Нельзя	отличить	медленный	канал	от	limit_req.burst	
в	$request_[me	
	
•  Если	будет	много	CPU-bound	вычислений,	нужно	
будет	понимать,	какой	именно	запрос	прямо	сейчас	
держит	управление
•  Данные	
•  Запросы	+	CPU	bound	логика	(aggrega[on)	
•  Ресурсы:	диск,	сеть,	процессор
Mongo
•  serverStatus	—	server-wide	метрики	
•  dbStats	—	db-wide	метрики	
•  collStats	—	collec[on-wide	метрики
Mongo: query profiler
•  Capped	collec[on	с	профайлингом	запросов	
•  Включается	для	всех	или	только	для	
“медленных”	
•  Может	негативно	повлиять	на	
производительность
Mongo: практика
Метрик	много,	но	большинство	из	них	для	
разработчика	mongo	
	
Пользователь	может	только:	
	-	прибить	плохой	запрос	
	-	исправить	запросы/схему	данных/индексы	
	-	поменять	конфиг		
	-	добавить	ресурсов
Mongo: тёмные пятна
•  Какой	запрос	прямо	сейчас	всё	убивает?	
•  На	какие	запросы	уходят	ресурсы?	
•  Какие	запросы	удерживают	локи?
•  Данные	
•  Запросы	
•  Ресурсы:	диск,	сеть,	процессор
PostgreSQL: данные
•  pg_stat_all_(tables|indexes)	
•  pg_sta[o_all_(tables|indexes)
PostgreSQL: запроcы
•  pg_stat_ac[vity	– что	происходит	прямо	сейчас	
•  pg_stat_statements	–	накопленные	счетчики	по	
группам	запросов
PostgreSQL: локи
•  pg_stat_ac[vity.wait_event	– 9.6+	
•  pg_locks	– можно	JOIN	на	pg_stat_ac[vity	по	pid
PostgreSQL: тёмные пятна
В	постгресе	почти	идеальная	диагностика.	
Постгрес	умный.	
Будь	как	постгрес.
Зачем мы все это смотрели?
•  Web-приложения	похожи	на	nginx,	только	
больше	вычислений	после	получения	данных,	у	
nginx	хорошие	логи	
•  Mongo	– пример	того,	как	всё	покрыли	
счетчиками,	но	забыли	про	сценарии	
использования	диагностики	
•  PG	– пример	того,	как	должно	быть
Диагностика: вопросы 
•  Чем	приложение	занято	прямо	сейчас?	
•  Чем	приложение	занималось	в	вчера	в	18:43?	
•  На	какие	задачи/запросы	были	потрачены	ресурсы?	
•  Сколько	и	каких	ошибок	было?	
•  Сколько	ждали	ответа	базы	вчера/сегодня?	
•  Почему	отдали	HTTP-400?
Подходы
•  Thread/stack	dump	и	аналоги	
	
•  Лог	
•  Счетчики/таймеры/мгновенные	значения
Thread/stack dump и аналоги
•  Мгновенный	снимок:	в	каком	месте	кода	
находится	управление	каждого	“потока”	
•  Больше	про	run[me,	а	не	ваш	код	
•  Высокоуровневые	аналоги:	какие	запросы	
сейчас	обрабатываем,	и	на	какой	они	стадии
Thread/stack dump и аналоги
•  Java:		jstack	<pid>	
•  Golang:		
•  enable	pprof		
•  curl	hŸp://IP:PORT/debug/pprof/gorou[ne?debug=2
Высокоуровневые аналоги
•  PG:	pg_stat_ac[vity	
•  Mysql:	SHOW	PROCESSLIST	
•  Apache:	mod_status
Лог
•  Правильно	писать	логи	очень	сложно	
•  Правильно:	пишем	нужное	и	НЕ	пишем	лишнего	
•  Общего	рецепта	нет	– все	системы	разные	
•  Предлагаю	исходить	из	сценариев	
использования
Лог: сценарий
Вы	видите	в	логе	nginx:	
…..	”GET /url HTTP/1.1" 504		
request_[me=0.101 	
upstream_response_[me=[0.101] 	
upstream_addr={192.168.1.1:8000} 		
upstream_status={504}	
	
Что	вы	будете	делать	дальше?
Лог: сценарий
	
Вы	захотите	узнать,	что	в	логе	у	192.168.1.1	по	
этому	запросу!
Лог: что такое ЭТОТ запрос?
Лог: request_id
•  На	входе	генерим	id	запроса	(nginx	$request_id,	
например)	
•  Ставим	заголовком	во	все	запросы	дальше:	
						X-Request-Id:	123456	
•  Во	всех	сервисах	пишем	в	лог	
•  Можно	даже	комментарий	в	SQL	запрос
Лог: request_id
Nginx	
…..	”GET /url HTTP/1.1" 504		
0.101 [0.101] {192.168.1.1:8000} 	{504}	req_id=123456		
	
Backend:	
<[mestamp>	id:123456	querying	session	from	session_db1	<[mestamp>	
id:123456	client	closes	connec[on	
<[mestamp>	id:123456	GET	/api/blabla	499	0.101s	
	
PG:	
<[mestamp>	<pid>	<user>@<db>	from	192.168.1.1	[vxid:x/y	txid:0]	
[SELECT]	LOG:		dura[on:	147.020	ms		execute	<unnamed>:				
/*	123456	*/	select	*	from	session	where	session.id=$1		AND	…
Лог: итого
•  Нужно	отличать	запросы	друг	от	друга	(request	id)	
•  Пишем	не	только	законченные	действия	(бывает	
нужно	ловить	залипшие)	
•  Если	куда-то	идем,	пишем	конкретный	адрес	
•  Пишем	все	ошибки	и	как	их	обработали	
•  Замеряем	время	значимых	операций
Лог: нагрузка
•  Подробное	логирование	создает	нагрузку	
•  Если	вводим	разные	уровни	логирования,	то	
нужна	ручка	переключения	без	перезапуска	
•  К	логам	можно	цеплять	парсеры	для	получения	
метрик,	но	это	тоже	нагрузка
Метрики приложения
•  Счетчики	событий	(ошибки,	запросы,	…)	
•  Таймеры	(замеряем	продолжительность	каких-
то	действий)	
•  Мгновенные	значения	(текущее	количество	
соединений,	размер	кэша,…)
Метрики приложения
•  Теряем	часть	информации	по	сравнению	с	логом	
•  Но	сильно	дешевле	логов	
•  Экспортируем	в	мониторинг	то,	что	насчитали	
•  Рисуем	графики	
•  Настраиваем	алерты,	если	нужно
Метрики приложения: инструменты
•  <your_lang>-metrics	
•  <your_lang>-statsd-client
Инструменты: <your_lang>-metrics
•  Либа	для	вашего	приложения,	есть	для	всех	ЯП	
•  Аккумулирует	замеры	в	памяти	
•  Экспортирует	в	различные	системы	(graphite,	
influx,	лог,	…)
Инструменты: statsd
•  UDP	сервер	принимает	отстрелы	замеров	из	
приложения,	агрегирует	и	экспортирует	в	
мониторинг	
•  Клиенты	для	всех	ЯП	
•  Семантика	примерно	такая	же	как	в	*-metrics	
•  Есть	библиотеки	с	предварительной	агрегацией	
на	клиенте
UDP для метрик??
•  Если	слать	синхронно,	то	пользователи	будут	
страдать	при	проблемах	коллектора	метрик	
•  Если	делать	очередь	в	памяти,	она	должна	быть	
ограничена	по	размеру	
•  Если	ограничена	по	размеру,	при	переполнении	—	
DROP	
•  Если	в	худшем	случае	будет	DROP,	это	ничем	не	
лучше	UDP	:)
Счетчики
Golang
Таймеры
Golang
Кейс с HTTP-504
Metrics 1.0
	
app.db.[me.total_sum
Metrics 1.0 -> 2.0
	
app.db.[me.total_sum.	
handler_is_index.	
dbhost_is_db10.	
query_is_session
Metrics 2.0
app.db.[me.total_sum{	
	handler:		“index”,	
	query:	“session”,	
	dbhost:	“db10”,	
}
Metrics 2.0
	
top(5,		
		sum_by(	
	“handler”,																			
	metric(name=“app.db.[me.total_sum”)	
		)	
)
Цена метрик (golang)
•  GetOrRegister 															122 ns/op
•  CounterInc 	10 ns/op
•  Timer_Time 	879 ns/op
•  2xNow 			38 ns/op	
	
10.000	rps	*	(10	таймеров	в	каждом)	=	
диагностика	займет	~9%	одного	ядра
Итого
•  DevOps	нужно	начинать	с	диагностики	
•  Диагностика	–	это	просто	
•  Делайте	диагностику,	исходя	из	сценариев	
использования	
•  Есть	много	готовых	инструментов	
	
•  После	этого	можно	docker,	CI/CD	и	100500	
микросервисов	:)
Спасибо за внимание!
Вопросы?	
	
Николай	Сивко																													 	 	 		
nsv@okmeter.io

Contenu connexe

Tendances

Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015Zabbix
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
 
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Ontico
 
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ontico
 
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...Ontico
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Ontico
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...
на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...
на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...Игорь Мызгин
 
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...Ontico
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаAleksandr Boichenko
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)Ontico
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Ontico
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014Alex Chistyakov
 

Tendances (20)

Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
 
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
 
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...
на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...
на пути к 100% аптайму - доклад с HighLoad 2015 совместно с Станиславом Осип...
 
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014
 
Uawebchallenge.yandex.tank
Uawebchallenge.yandex.tankUawebchallenge.yandex.tank
Uawebchallenge.yandex.tank
 

Similaire à Хорошо поддерживаемое приложение

Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"Tanya Denisyuk
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаPython Meetup
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ruRoman Ivliev
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and AngularSQALab
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Provectus
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Lesson1
Lesson1Lesson1
Lesson1jinol
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testingbeched
 
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьGoIT
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаUP2IT
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QAFest
 

Similaire à Хорошо поддерживаемое приложение (20)

Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
 
Sivko
SivkoSivko
Sivko
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ru
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Lesson1
Lesson1Lesson1
Lesson1
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Критерии выбора системы электронного документооборота
Критерии выбора системы электронного документооборотаКритерии выбора системы электронного документооборота
Критерии выбора системы электронного документооборота
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
 
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спростить
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчика
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 

Хорошо поддерживаемое приложение