Я работаю над приложением для iOS, которое широко использует базы данных, где пользователи смогут синхронизировать свои данные с сервером. Однако меня пугает случай, когда слишком много пользователей начнут использовать приложение, серверы больше не смогут его обрабатывать. Я вообще не серверный парень и не слишком знаком с тем, как это работает, но мой вопрос: почему серверы перегружаются и как этого можно избежать? Имеет ли это отношение к тому, кто мой сервер? Или дело в эффективности моего кода? Если мой хост - надежный сервер, такой как Amazon AWS, все еще подвержен ли я риску проблем с сервером? Суть в том, связано ли это с тем, как я реализую свой код, или с тем, кто мой хост?
Это очень расплывчатый вопрос. Они падают, потому что ... ну, вы их перегружаете, и они не в состоянии справиться с тем, что вы им бросаете.
Подумайте об этом таким образом. Если у вас пожар, вы тушите его с помощью садового шланга, пистолета-распылителя или автоцистерны? Любой из них может потушить небольшой пожар. Для больших пожаров нужна большая мощность.
Как это предотвратить? Вы тестируете. Вы планируете предполагаемую нагрузку.
Если вы говорите о базах данных, вы говорите с специалистом по базам данных, если ваша нагрузка, по прогнозам, превысит ту, с которой вы можете справиться. Вам нужно спланировать, как разделить таблицы, чтобы вы могли распределить их по нескольким серверам, вы планируете сегментирование, вы можете настроить серверы только для чтения, чтобы помочь с чтениями, настройками master / slave ... или вы посмотрите на базовые технологии и посмотрите, сможет ли альтернативный сервер "NoSQL" лучше удовлетворить ваши потребности. И вы смотрите, откуда приходят запросы данных, чтобы увидеть, можете ли вы распределить свои серверы, чтобы они были более географически удобными для запросов ваших пользователей.
На этот вопрос нет однозначного ответа, потому что он полностью зависит от того, что делает ваше приложение, от типа данных, которые оно обрабатывает, и от того, что вы извлекаете из базы данных.
РЕДАКТИРОВАТЬ - вы спросили конкретно об Amazon, есть ли там опасность. Amazon похож на Lego. Конечно, вы можете использовать их инструменты для создания надежных реализаций ... и вы заплатите за это дополнительно. Или вы можете запустить все это на одном экземпляре и связать с их собственной системой баз данных. Вы можете заставить свое приложение «работать», но оно все равно может быть не полностью надежным. К тому же Amazon - это не волшебство. Экземпляры деградируют, умирают без предупреждения и т. Д., Поэтому, отвечая на эту часть вашего вопроса, да, ваши данные все еще находятся в опасности при использовании Amazon, если вы не планируете возможные сбои. Вы можете настроить несколько серверов баз данных, охватывающих несколько регионов, в качестве отработки отказа, и это становится довольно сложно. Вот почему есть люди, которым платят больше шести цифр только за работу с базами данных. Они зарабатывают себе на жизнь решением этих проблем, а Amazon не использует единорогов ... у них действительно есть неудачи.
Это довольно широко. Может быть:
Есть несколько других причин, по которым сервер может выйти из строя из-за нагрузки, но они охватывают множество случаев. Они также охватывают производительность вашего сервера, его сетевое соединение, его надежность в целом и серверное программное обеспечение, которое вы используете.
why do servers get overloaded and how can that be prevented?
Потому что ресурсов для удовлетворения спроса не хватает. Наличие единственного сервера на бэкэнде может быть перегружено, например, HTTP-запросами и, в некоторой степени, вызвать отказ в обслуживании.
Вы предотвращаете это, настраивая свои службы с помощью таких инструментов, как Apache, и используя балансировщик нагрузки для распределения запросов на бесплатные серверы или серверы с меньшей нагрузкой. То же самое можно сделать для базы данных, масштабируя по горизонтали или вертикали (сегментирование).
Does it have to do with who my server host is? Or is it about the efficiency of my code?
Больше о ваших серверах, но код тоже может это вызвать.
If my host is a reliable server, such as Amazon AWS, am I still at risk for server problems?
Depends, кто отвечает за настройку вашего контейнера сервлетов и как он настроен для подачи запросов. Однако я не знаком с AWS и поэтому не могу дать здесь адекватного ответа.
Bottom line is, does it have to do with the way I implement my code, or does it have to do with who my host is?
DOS обычно возникает из-за нехватки ресурсов на стороне хоста. Однако, если код плохо написан и спроектирован, это тоже вызовет это.
Например, если вы закодируете слишком много контроллера / бизнес-логики в PSQL, вы можете перегрузить базу данных и предотвратить своевременный возврат запросов, что приведет к DOS.
Вы также можете написать код, который использует чрезмерное количество подключений к базе данных и имеет проблему, когда подключения больше не предоставляются, вызывая DOS.
Эти два примера не обязательно являются проблемой из-за нехватки ресурсов, а в большей степени проблемой, связанной с неэффективным использованием используемых инструментов. Обе стороны важны, и есть много способов столкнуться с DOS.
Однако хорошая изначально спроектированная модель может пройти долгий путь. Если вы не знаете, как разработать свой код, я бы начал с изучения MVC и SOA. Удачи!