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

Post on 11-Nov-2014

1.450 Views

Category:

Technology

8 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

Игорь Малиновский@u_glidetinyurl.com/thinkphp8

Давайте знакомиться!

Было:

Стало:

Мертвы

й код Постоянные падения

Множество

дефектов

Нет тестов

Потеря прибыли

Тяжело

поддерживат

ь

Увеличени

е

прибыли

Continuous Delivery

A/B

Тестировани

е

Стабильное и масштабируемое решение

Никто не любит legacy code

+ =

+ + =

?

Понять с чем имеем дело

• Документации нет

• Читать код не

вариант

• У заказчика только

высокоуровневые

знания

функционала

… так с чего начать?!1. Исследуем инфраструктуру

Amazon ELB

Backend

NGINXPHP-FPM

Stat App

NFS Shar

e

Cache

NGINXPHP-FPM

… так с чего начать?!2. Мониторим приложение

http://newrelic.com/

… так с чего начать?!2.1Находим «узкие» места

… так с чего начать?!2.2 Определяем функционал, который реально используется

1st Bottleneck: Heavy Write to MySQL

Amazon ELB

Backend

NGINXPHP-FPM

Stat App

NFS Shar

e

Cache

NGINXPHP-FPM

DEAD CODE ?!

1st Application :

~322 000 lines (88% php)

2nd Application:

~347 000 lines (89% php)

Refactored code1st Application :

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

2nd Application:

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

+ NO FEAR :)

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

Amazon ELB

Backend

NGINXPHP-FPM

Stat App

NFS Shar

e

Cache

NGINXPHP-FPM

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

При скачкообразном повышении трафика Amazon ELB начинает масштабироваться

… да здравствует король.

HAProxyЧто хорошего:

1. Гибкая система ACL2. Не боится резких скачков3. Равномерно распределяет трафик

С чем придется смириться:

4. Нет веб-интерфейса для управления «из коробки»5. Достаточно сложная для рядового пользователя

установка и настройка

Время рефакторинга?

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

Что мы сделали с Yii

#ДавайДоСвидания

Если серьезно

• Yii был избыточен• Решаем небольшие проблемы большими инструментами• Сложное создание

сущностей• Не решена проблема

удаления

Что получилось

Components

Что получилось

Response time0

100

200

300

400

500

600

700

800

Old versionNew Code

Ускорение x5

Что получилось

Время

10/24/2013 09/24/2013 08/25/2013 07/26/2013 06/26/2013 05/27/2013 04/27/2013 03/28/2013 02/26/2013 01/23/2013 0

5,000,000

10,000,000

15,000,000

20,000,000

25,000,000

30,000,000

35,000,000

40,000,000

45,000,000

PageViews

Мы взяли

проект

СейчасПосещаемость

x20

Что получилось

HAProxy

Backend

NGINX+redislog

PHP-FPM

Stat App

PerconaNGINX

PHP-FPM

Component

s

+ twemproxy

Redis за 10 минут

= 30стр.

http://redis.io/

String Hash List Set ZSet

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

• Application data

• Statistics data

• Nginx logs (redislog)

Redislog

Request Store logs

Configuration:

• connection options

• key to store data

• operation to store data

• can specify conditions

Redis

Автор слайда: @loginwashere

Redis Gotchas

Memory fragmentation> redis-cli info# Memory

used_memory:613992used_memory_human:599.60Kused_memory_rss:2113536used_memory_peak:1155944used_memory_peak_human:1.10Mused_memory_lua:31744

mem_fragmentation_ratio:3.44mem_allocator:jemalloc-3.0.0

Автор слайда: @loginwashere

Redis Gotchas

PersistenceSAVE is blockingBGSAVE needs free RAM (or swap)

I'm SAVE

I'm BGSAVE

I want to persist redis

Ha-Ha -Ha

Автор слайда: @loginwashere

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

Автор слайда: @loginwashere

Redis Desktop Manager BETA

http://redisdesktop.com/

To be continued…

В следующей серии:- Continuous Delivery.

Рецепты внедрения- A/B Тестирование- TwemProxy

top related