В процессе разработки нужно выбрать архитектуру для веб-сервиса или приложения. Она отвечает за связь между элементами продукта: как будут взаимодействовать между собой пользовательский интерфейс, база данных, система платежей, модули обмена и передачи данных.
Архитектуру сравнивают с фундаментом дома, на котором все держится. По важности этих элементов такая аналогия верна. Представим, что строитель закладывает фундамент с расчетом на то, что в доме будет жить несколько человек. Даже если число жильцов увеличится, фундамент выдержит около 20 человек. Значит, даже в случае неожиданной ситуации все будет в порядке, дом выстоит.
Строитель не видит необходимости выбирать другой фундамент. Возможно, он думает, что в доме не поселится больше 20 жильцов; или что сможет справиться с возникшей проблемой в моменте; или что будет переделывать фундамент в будущем, когда его дом наверняка будет пользоваться спросом. Причины могут быть и другие — в любом случае, легче следовать такой простой логике, чем много думать о выборе фундамента без веской на то причины.
Но подумать об архитектуре все-таки нужно и причины для этого есть. Во-первых, разобраться с высокой нагрузкой будет сложнее и дороже, если заранее не подготовить для этого архитектуру приложения. В какой-то момент дом придется делать больше, так как он перестанет вмещать в себя новых жильцов, а уже обжившимся людям станет некомфортно.
Приложение будет сбоить, выдавать ошибки и долго обрабатывать запросы пользователей. В такой ситуации разработчики используют различные костыли, которые не решают проблему, а только откладывает ее в долгий ящик. Нужно будет переделывать архитектуру — а это время, деньги и зачастую репутационные риски.
Во-вторых, как только нагрузка окажется неподъемной для приложения, вы начнете терять лояльность аудитории. Пользователь не будет терпеливо ждать, пока сервис наконец ответит на его запрос. Более того, архитектуру приложения не получится перестроить за пару дней, поэтому потеря доверия большого числа пользователей — гарантированный результат.
Любой бизнес, который запускает свой сервис или приложение, в конечном счете хочет получить прибыль. Другими словами, продукт должен быть полезным и привлекательным для потенциальной аудитории. Если эти условия выполнены, то пользователей с каждым днем будет становиться больше и больше.
Значит, в какой-то момент приложение перестанет справляться с нагрузкой и начнет нестабильно работать. И теперь та самая логика дает сбой: бизнес рассчитывает на успех сервиса и большую аудиторию, но в то же время не видит необходимости в разработке высоконагруженного приложения.
С растущим количеством пользователей приложение столкнется не только с высокой нагрузкой, но и с проблемой масштабируемости. С первой сложностью можно бороться оптимизацией отдельных элементов системы и самой архитектуры. Но когда оптимизировать уже нечего и никаких костылей в запасе не осталось, разработчикам остается только масштабировать приложение. Highload архитектура позволяет без сложностей это делать, не приостанавливая работу сервиса. Также приложение можно будет быстрее развивать: добавлять функциональность в адекватные сроки, легко тестировать и вносить изменения.