0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Предлагаем вашему вниманию несколько полезных советов. Они могут пригодиться тем, кто разрабатывает и поддерживает высоконагруженные системы.</p>
1
<p>Предлагаем вашему вниманию несколько полезных советов. Они могут пригодиться тем, кто разрабатывает и поддерживает высоконагруженные системы.</p>
2
<h2>Совет № 1: помните, что сломаться может любой компонент</h2>
2
<h2>Совет № 1: помните, что сломаться может любой компонент</h2>
3
<p>Рано или поздно что-нибудь откажет, причём сломаться может всё - не забывайте об этом, когда проектируете высоконагруженную систему. А цитата из закона Мерфи должна висеть у вас на стене напротив рабочего места. Ведь<strong>если есть вероятность, что какая-нибудь неприятность может случиться, она обязательно произойдёт</strong>.</p>
3
<p>Рано или поздно что-нибудь откажет, причём сломаться может всё - не забывайте об этом, когда проектируете высоконагруженную систему. А цитата из закона Мерфи должна висеть у вас на стене напротив рабочего места. Ведь<strong>если есть вероятность, что какая-нибудь неприятность может случиться, она обязательно произойдёт</strong>.</p>
4
<p>Ваша задача - подстелить соломку везде, где это возможно. Что имеется в виду: 1. Зеркалирование 100 % серверов баз данных. 2. Ежедневное резервное копирование. 3. Механизм round robin DNS для балансировки нагрузки. 4. Несколько серверов приложений обеспечит масштабирование и позволит обновлять их поочерёдно, не прерывая обслуживание. 5. Серверы доменных имён располагайте в разных корневых зонах сети. Например, .com, .net, .org, .ru. В результате вы получите дополнительный уровень надежности, ведь если вся доменная зона .ru будет по каким-либо причинам недоступна в DNS, клиенты всё равно смогут работать с вашим сервисом.</p>
4
<p>Ваша задача - подстелить соломку везде, где это возможно. Что имеется в виду: 1. Зеркалирование 100 % серверов баз данных. 2. Ежедневное резервное копирование. 3. Механизм round robin DNS для балансировки нагрузки. 4. Несколько серверов приложений обеспечит масштабирование и позволит обновлять их поочерёдно, не прерывая обслуживание. 5. Серверы доменных имён располагайте в разных корневых зонах сети. Например, .com, .net, .org, .ru. В результате вы получите дополнительный уровень надежности, ведь если вся доменная зона .ru будет по каким-либо причинам недоступна в DNS, клиенты всё равно смогут работать с вашим сервисом.</p>
5
<p>Также обратите внимание, что зеркала должны быть расположены не просто в разных дата-центрах, а в разных странах. Дело в том, что в дата-центрах систематически проводятся регламентные работы, а ваш сервис прерывать свою работу не должен. Вдобавок к этому, следует регулярно устанавливать обновления безопасности, что иногда требует перезагрузки. И горячее переключение на резервный сервер будет как нельзя кстати.</p>
5
<p>Также обратите внимание, что зеркала должны быть расположены не просто в разных дата-центрах, а в разных странах. Дело в том, что в дата-центрах систематически проводятся регламентные работы, а ваш сервис прерывать свою работу не должен. Вдобавок к этому, следует регулярно устанавливать обновления безопасности, что иногда требует перезагрузки. И горячее переключение на резервный сервер будет как нельзя кстати.</p>
6
<h2>Совет № 2: преждевременная оптимизация вредна</h2>
6
<h2>Совет № 2: преждевременная оптимизация вредна</h2>
7
<p>Как правило, в процессе роста нагрузки приходится покупать память (RAM) и оптимизировать приложение. Но если у вас есть предположения, что нужно что-то ускорить, не спешите это делать, предварительно не выполнив точных замеров. Очень велика вероятность, что ваши предположения ошибочны. То есть вы не можете точно знать, где находится "узкое место" вашего приложения.</p>
7
<p>Как правило, в процессе роста нагрузки приходится покупать память (RAM) и оптимизировать приложение. Но если у вас есть предположения, что нужно что-то ускорить, не спешите это делать, предварительно не выполнив точных замеров. Очень велика вероятность, что ваши предположения ошибочны. То есть вы не можете точно знать, где находится "узкое место" вашего приложения.</p>
8
<p>Как же понять, какая конкретно функция работает недостаточно быстро? Профайлер на боевом сервере? Можно, но слишком много накладных расходов, плюс сервис начинает тормозить. Сложно судить о проблемных местах и по синтетическим замерам в тестах на машине разработчика…</p>
8
<p>Как же понять, какая конкретно функция работает недостаточно быстро? Профайлер на боевом сервере? Можно, но слишком много накладных расходов, плюс сервис начинает тормозить. Сложно судить о проблемных местах и по синтетическим замерам в тестах на машине разработчика…</p>
9
<p>Как вариант -<strong>добавление в код контрольных точек</strong>и оценка скорости приложения по времени исполнения программы между этими точками. В результате вы сможете выяснить то, о чём и не предполагали. И создать решение, которое будет быстрее, чем у конкурентов на рынке.</p>
9
<p>Как вариант -<strong>добавление в код контрольных точек</strong>и оценка скорости приложения по времени исполнения программы между этими точками. В результате вы сможете выяснить то, о чём и не предполагали. И создать решение, которое будет быстрее, чем у конкурентов на рынке.</p>
10
<h2>Совет № 3: тестируйте всё</h2>
10
<h2>Совет № 3: тестируйте всё</h2>
11
<p>Необходимо тестировать все изменения, причём делать это следует на объёмах данных, которые максимально приближены к боевым. А запуск сотен автоматических тестов при каждой сборке приложения обеспечит отсутствие фатальных ошибок.</p>
11
<p>Необходимо тестировать все изменения, причём делать это следует на объёмах данных, которые максимально приближены к боевым. А запуск сотен автоматических тестов при каждой сборке приложения обеспечит отсутствие фатальных ошибок.</p>
12
<p>Представьте, что вам надо изменить структуру таблицы в БД. Такая процедура потребует остановки сервиса, поэтому выполнять её придётся в наименее нагруженное время - в выходные ночью. И скорость выполнения технических работ будет чрезвычайна важна. Естественно, вы сделали предварительные тесты на маленькой таблице, которые показали, что на процедуру уйдёт не более минуты. Однако остановив сервис и запустив процедуру на боевом сервере, вы обнаруживаете, что процедура не закончила свою работу ни через минуту, ни через десять, ни через час. А всё потому, что стал перестраиваться кластерный индекс в таблице большого объёма, чего не происходило в маленькой таблице.</p>
12
<p>Представьте, что вам надо изменить структуру таблицы в БД. Такая процедура потребует остановки сервиса, поэтому выполнять её придётся в наименее нагруженное время - в выходные ночью. И скорость выполнения технических работ будет чрезвычайна важна. Естественно, вы сделали предварительные тесты на маленькой таблице, которые показали, что на процедуру уйдёт не более минуты. Однако остановив сервис и запустив процедуру на боевом сервере, вы обнаруживаете, что процедура не закончила свою работу ни через минуту, ни через десять, ни через час. А всё потому, что стал перестраиваться кластерный индекс в таблице большого объёма, чего не происходило в маленькой таблице.</p>
13
<h2>Совет № 4: обеспечьте высокую скорость тестирования</h2>
13
<h2>Совет № 4: обеспечьте высокую скорость тестирования</h2>
14
<p>Не жалейте денег на ресурсы для команды и приобретайте высокопроизводительные сервера для автоматизированных тестов, ведь их число постоянно растёт.</p>
14
<p>Не жалейте денег на ресурсы для команды и приобретайте высокопроизводительные сервера для автоматизированных тестов, ведь их число постоянно растёт.</p>
15
<p>Несмотря на тестирование, иногда в релиз попадает ошибка. Да, никто не любит откатывать релизы, но в некоторых случаях без этого не обойтись. А исправления надо вносить очень быстро, чего можно достичь за счёт автосборки, автоматизированных тестов и распараллеливания. При медленном тестировании ошибки исправляются дольше со всеми вытекающими отсюда репутационными и финансовыми потерями.</p>
15
<p>Несмотря на тестирование, иногда в релиз попадает ошибка. Да, никто не любит откатывать релизы, но в некоторых случаях без этого не обойтись. А исправления надо вносить очень быстро, чего можно достичь за счёт автосборки, автоматизированных тестов и распараллеливания. При медленном тестировании ошибки исправляются дольше со всеми вытекающими отсюда репутационными и финансовыми потерями.</p>
16
<h2>Совет № 5: должна использоваться каждая функция продукта</h2>
16
<h2>Совет № 5: должна использоваться каждая функция продукта</h2>
17
<p>Развитие требует жертв, а хороший продукт - многих итераций. Причём речь идёт не только о добавлении новых функций, но и об удалении старых и ненужных, т. к. они: - занимают лишнее место на экране; - потребляют ресурсы на поддержку; - не несут никакой ценности, ведь их не используют.</p>
17
<p>Развитие требует жертв, а хороший продукт - многих итераций. Причём речь идёт не только о добавлении новых функций, но и об удалении старых и ненужных, т. к. они: - занимают лишнее место на экране; - потребляют ресурсы на поддержку; - не несут никакой ценности, ведь их не используют.</p>
18
<p>Как хороший садовник обрезает молодые побеги каждую весну, так и вы должны "обрезать" ненужную функциональность, формируя правильную, здоровую и красивую "крону дерева".</p>
18
<p>Как хороший садовник обрезает молодые побеги каждую весну, так и вы должны "обрезать" ненужную функциональность, формируя правильную, здоровую и красивую "крону дерева".</p>
19
<p>Да, кому-то это не понравится, ведь даже непопулярные фичи использует не менее 2 % пользователей. Но, как уже было сказано выше,<strong>развитие требует жертв</strong>. К тому же, всегда предоставляйте возможность сделать то же самое (быстрее и удобнее), но несколько по-другому. Правда, всё равно не все останутся довольны, ведь, к сожалению, привычки оказываются сильнее…</p>
19
<p>Да, кому-то это не понравится, ведь даже непопулярные фичи использует не менее 2 % пользователей. Но, как уже было сказано выше,<strong>развитие требует жертв</strong>. К тому же, всегда предоставляйте возможность сделать то же самое (быстрее и удобнее), но несколько по-другому. Правда, всё равно не все останутся довольны, ведь, к сожалению, привычки оказываются сильнее…</p>
20
<p><em>Статья подготовлена по материалам блога компании<a>Pyrus</a>.</em></p>
20
<p><em>Статья подготовлена по материалам блога компании<a>Pyrus</a>.</em></p>
21
21