Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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. Наследство от дядюшки Ау
Prochain SlideShare
Chargement dans…5
×

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

2 867 vues

Publié le

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

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

Publié dans : Technologie
  • Soyez le premier à commenter

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

×