Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
HighLoad.
Наследство от дядюшки Ау

tinyurl.com/thinkphp8

Игорь Малиновский
@u_glide
Давайте знакомиться!
Нет
тестов
Никто не любит legacy code
+

+

=

+

=

?
Понять с чем имеем дело
• Документации нет
• Читать код не вариант
• У заказчика только
высокоуровневые
знания функционала
… так с чего начать?!
1. Исследуем инфраструктуру
Backend

NGINX
PHP-FPM

Amazon

ELB
NFS
Share
Stat App

NGINX
PHP-FPM

C...
… так с чего начать?!
2. Мониторим приложение
… так с чего начать?!
2.1Находим «узкие» места
… так с чего начать?!
2.2 Определяем функционал, который
реально используется
1st Bottleneck: Heavy Write to MySQL
Backend

NGINX
PHP-FPM

Amazon

ELB

NFS
Share
Stat App

NGINX
PHP-FPM

Cache
DEAD CODE ?!
1st Application :
~

322 000 lines (88% php)

2nd Application:

~347 000 lines (89% php)
Refactored code
1st Application :
~

146 000 lines (-65%) (85% php)

2nd Application:

~198 000 lines (-43%) (81% php)

+ ...
Проблемы Amazon Elastic Load
Balancing
Backend

NGINX
PHP-FPM

Amazon

ELB
NFS
Share
Stat App

NGINX
PHP-FPM

Cache
Проблемы Amazon Elastic Load
Balancing

При скачкообразном повышении трафика
Amazon ELB начинает масштабироваться
… да здравствует король.
HAProxy
Что хорошего:
1. Гибкая система ACL
2. Не боится резких скачков
3. Равномерно распределяе...
Время рефакторинга?

Сначала проанализируйте ошибки
предыдущей команды
Что мы сделали с Yii

#ДавайДоСвидания
Если серьезно
• Yii был избыточен
• Решаем небольшие проблемы
большими инструментами
• Сложное создание сущностей
• Не реш...
Что получилось

Components
Что получилось
800
700

600
500
400

Old version
New Code

300

200
100
0
Response time

Ускорение x5
01/06/2013
01/11/2013
01/17/2013
01/23/2013
01/29/2013
02/04/2013
02/10/2013
02/16/2013
02/26/2013
03/04/2013
03/10/2013
0...
Что получилось
Backend
HAProxy

NGINX
+redislog

PHP-FPM

Stat App

NGINX
PHP-FPM

Percona

+ twemproxy
Redis за 10 минут

http://redis.io/

=

30

стр.
Для чего используем

• Application data
• Statistics data
• Nginx logs (redislog)
Redislog
Redis

Request

Store logs

Configuration:
connection options
key to store data
operation to store data
can speci...
Redis Gotchas
Memory fragmentation
> redis-cli info
# Memory
used_memory:613992
used_memory_human:599.60K
used_memory_rss:...
Redis Gotchas
Persistence
SAVE is blocking
BGSAVE needs free RAM (or swap)
I'm
SAVE

I'm
BGSAVE

I want to
persist
redis

...
Redis Gotchas
NO Cluster
Сейчас в активной разработке
Client-side sharding:
- Predis
- Twemproxy aka Nutcracker
Redis Gotchas
There is no good old SQLYog for redis
For small datasets
phpredisadmin
redis commander

•
•

Автор слайда: @...
Redis Desktop Manager BETA

http://redisdesktop.com/
To be continued…

В следующей серии:
- Continuous Delivery.
Рецепты внедрения
- A/B Тестирование
- TwemProxy
High load. Наследство от дядюшки Ау
Upcoming SlideShare
Loading in …5
×

High load. Наследство от дядюшки Ау

2,776 views

Published on

Success-story о том, как из нестабильного легаси-проекта получить стабильное и масштабируемое решение. В докладе будут рассмотрены следующие вопросы:

- c чего начать борьбу с узкими местами;
- коротко о New Relic мониторинге;
- проблемы распределения нагрузки с Amazon ELB;
- почему решения на базе стандартных фреймверков могут не работать;
- как и для чего мы используем Redis;

Published in: Technology
  • Be the first to comment

High load. Наследство от дядюшки Ау

  1. 1. HighLoad. Наследство от дядюшки Ау tinyurl.com/thinkphp8 Игорь Малиновский @u_glide
  2. 2. Давайте знакомиться!
  3. 3. Нет тестов
  4. 4. Никто не любит legacy code + + = + = ?
  5. 5. Понять с чем имеем дело • Документации нет • Читать код не вариант • У заказчика только высокоуровневые знания функционала
  6. 6. … так с чего начать?! 1. Исследуем инфраструктуру Backend NGINX PHP-FPM Amazon ELB NFS Share Stat App NGINX PHP-FPM Cache
  7. 7. … так с чего начать?! 2. Мониторим приложение
  8. 8. … так с чего начать?! 2.1Находим «узкие» места
  9. 9. … так с чего начать?! 2.2 Определяем функционал, который реально используется
  10. 10. 1st Bottleneck: Heavy Write to MySQL Backend NGINX PHP-FPM Amazon ELB NFS Share Stat App NGINX PHP-FPM Cache
  11. 11. DEAD CODE ?! 1st Application : ~ 322 000 lines (88% php) 2nd Application: ~347 000 lines (89% php)
  12. 12. Refactored code 1st Application : ~ 146 000 lines (-65%) (85% php) 2nd Application: ~198 000 lines (-43%) (81% php) + NO FEAR :)
  13. 13. Проблемы Amazon Elastic Load Balancing Backend NGINX PHP-FPM Amazon ELB NFS Share Stat App NGINX PHP-FPM Cache
  14. 14. Проблемы Amazon Elastic Load Balancing При скачкообразном повышении трафика Amazon ELB начинает масштабироваться
  15. 15. … да здравствует король. HAProxy Что хорошего: 1. Гибкая система ACL 2. Не боится резких скачков 3. Равномерно распределяет трафик С чем придется смириться: 1. Нет веб-интерфейса для управления «из коробки» 2. Достаточно сложная для рядового пользователя установка и настройка
  16. 16. Время рефакторинга? Сначала проанализируйте ошибки предыдущей команды
  17. 17. Что мы сделали с Yii #ДавайДоСвидания
  18. 18. Если серьезно • Yii был избыточен • Решаем небольшие проблемы большими инструментами • Сложное создание сущностей • Не решена проблема удаления
  19. 19. Что получилось Components
  20. 20. Что получилось 800 700 600 500 400 Old version New Code 300 200 100 0 Response time Ускорение x5
  21. 21. 01/06/2013 01/11/2013 01/17/2013 01/23/2013 01/29/2013 02/04/2013 02/10/2013 02/16/2013 02/26/2013 03/04/2013 03/10/2013 03/16/2013 03/22/2013 03/28/2013 04/03/2013 04/09/2013 04/15/2013 04/21/2013 04/27/2013 05/03/2013 05/09/2013 05/15/2013 05/21/2013 05/27/2013 06/02/2013 06/08/2013 06/14/2013 06/20/2013 06/26/2013 07/02/2013 07/08/2013 07/14/2013 07/20/2013 07/26/2013 08/01/2013 08/07/2013 08/13/2013 08/19/2013 08/25/2013 08/31/2013 09/06/2013 09/12/2013 09/18/2013 09/24/2013 09/30/2013 10/06/2013 10/12/2013 10/18/2013 10/24/2013 Посещаемость PageViews 45 x20 40 35 30 25 Мы взяли проект 20 15 10 5 0 Время Millions Что получилось Сейчас
  22. 22. Что получилось Backend HAProxy NGINX +redislog PHP-FPM Stat App NGINX PHP-FPM Percona + twemproxy
  23. 23. Redis за 10 минут http://redis.io/ = 30 стр.
  24. 24. Для чего используем • Application data • Statistics data • Nginx logs (redislog)
  25. 25. Redislog Redis Request Store logs Configuration: connection options key to store data operation to store data can specify conditions • • • • Автор слайда: @loginwashere
  26. 26. Redis Gotchas Memory fragmentation > redis-cli info # Memory used_memory:613992 used_memory_human:599.60K used_memory_rss:2113536 used_memory_peak:1155944 used_memory_peak_human:1.10M used_memory_lua:31744 mem_fragmentation_ratio:3.44 mem_allocator:jemalloc-3.0.0 Автор слайда: @loginwashere
  27. 27. Redis Gotchas Persistence SAVE is blocking BGSAVE needs free RAM (or swap) I'm SAVE I'm BGSAVE I want to persist redis Ha-Ha -Ha Автор слайда: @loginwashere
  28. 28. Redis Gotchas NO Cluster Сейчас в активной разработке Client-side sharding: - Predis - Twemproxy aka Nutcracker
  29. 29. Redis Gotchas There is no good old SQLYog for redis For small datasets phpredisadmin redis commander • • Автор слайда: @loginwashere
  30. 30. Redis Desktop Manager BETA http://redisdesktop.com/
  31. 31. To be continued… В следующей серии: - Continuous Delivery. Рецепты внедрения - A/B Тестирование - TwemProxy

×