Тщательно оценив проблему, задав уточняющие вопросы, задайте вопросы высокого уровня по дизайну, например:
- Каковы варианты использования?
- Какая цель?
- Как выглядит успех в этой системе?
- Какие есть ограничения?
- Важно иметь быстрое чтение, быструю запись или и то, и другое?
- Надежность
- Избыточный
- Стабильный
- Безопасность
- Доступность 100 безотказной работы?
- Простота против сложности
- Ремонтопригодность
- Последовательность или конечная последовательность
Помните теорему о шапке.
Как только нужный нам компонент появился из предыдущих ответов,
- Выбирая компонент, такой как WebServer, Load balancer, будьте мудры в данный момент, так как они могут создать единую точку отказа в вашем приложении.
При проектировании мобильных систем важно учитывать:
- Автономный доступ
- Кеширование
- Обновление страницы происходит, если, например, страницу необходимо обновить после того, как другая страница обновит информацию.
- Важно оптимизировать круговые обходы.
Как масштабировать веб-серверы? - ›Балансировщики нагрузки
- Вы можете использовать один или несколько балансировщиков нагрузки параллельно.
- Вы можете настроить способ балансировки нагрузки с помощью пользовательских сценариев или использовать хорошо известные алгоритмы, такие как циклический перебор или наименьшая нагрузка.
- Другой способ балансировки нагрузки вручную - на уровне приложения, например app. myapp.com / email .myapp.com, web .myapp.com или сундук .myapp.com, db .myapp.com. Просто разделите приложение по функциям. Таким образом, вы можете вручную сбалансировать каждую функцию для группы серверов.
Это своего рода стратегия, которую вы можете использовать для распределения нагрузки на веб-сервер.
Как масштабировать базу данных? - ›Кеширование
Итак, теперь, когда у нас есть некоторые идеи о том, как масштабировать веб-серверы, вам нужно подумать о следующем узком месте, которым является…. База данных!
Одна из первых вещей, которые мы могли бы использовать, - это Кэшировать результаты БД, добавляя дополнительный уровень кэширования между серверами и базой данных:
Вы можете использовать кеш в памяти или просто сохранить его на диске. Например, Redis позволяет сохранять значения кеша из памяти на диск (диск намного медленнее, чем в памяти). Существует два основных подхода: Кэширование с обратной записью или кэширование со сквозной записью?.
Другой способ масштабирования базы данных - по вертикали и горизонтали, подробнее см. Здесь.
Как подготовить наши активы к более быстрой доставке по всему миру? - ›CDN
CDN очень хорошо подходит для очень быстрой доставки активов (js, png, mpeg4 и т. Д.), Потому что обычно они доставляются ближе к пользователю.
Существуют две основные стратегии CDN: PULL или PUSH.
Стратегия PULL:
В этом методе пользователь нажимает URL-адрес CDN, сервер CDN проверяет, есть ли у ближайшего сервера к серверу актив; в противном случае ближайший сервер ударит по вашему серверу, чтобы загрузить актив, а затем сохранит его в своем кеше. Поэтому в следующий раз ваш сервер не будет запрашиваться, и он будет использовать актив, кэшированный на ближайшем сервере.
Стратегия PUSH:
В этом методе файлы загружаются на сервер CDN, поэтому самый первый запрос будет быстрее, но это будет стоить дороже, потому что вам нужно будет заплатить за загруженное хранилище.
Распространенным методом является использование пользовательских доменов, таких как cdn.myapp/
или image.myapp
, когда вы имеете дело с CDN. Что вам нужно сделать, так это указать, что вы CDN.myapp
, чтобы подключиться к вашему провайдеру CDN. В настоящий момент, чтобы заплатить за сертификат SSL, вы можете заплатить *.myapp
, чтобы он был готов работать с различными поддоменами, чтобы избежать проблем CORS, а также действовать как ручной балансировщик ваших запросов.
Обновите контент в своей CDN
Распространенным методом обновления вашего контента в CDN является добавление параметра запроса к вашему активу для его версии, например:
cnd.myapp.com/scripts/app.js?version=1
в этом случае, как только вам нужно обновить файлы, вы можете увеличить версию своего ресурса.
Кроме того, вы можете захотеть использовать автоматизированный подход автоматического управления версиями, какой подход использовать - зависит от вас.
Советы по дизайну API
Каковы модели взаимодействия между клиентом и серверной частью?
Существуют разные стратегии и подходы, клиентом может быть веб-браузер, IOS или Andriod. И эти клиенты могут быть переданы на сервер вашего веб-сервера.
Цель API - сделать как можно более понятным и простым для понимания всеми. Простой распространенный способ - создание CRUD.
Здесь у вас есть набор лучших практик по Rest API.
Кроме того, вам нужно подумать о вводе-выводе, например о том, как вы передаете свой параметр в свои API. Не забудьте всегда использовать ключ для безопасной аутентификации, очень распространенный механизм - использование токенов JWT.
Еще одно соображение - решить, будет ли наше приложение клиентским драйвером или серверным драйвером. Например, если наше приложение очень важно для пользовательского взаимодействия или обслуживания, приложения становятся более отзывчивыми. Но ограничение в том, что вам нужно будет дублировать код логики для каждого будущего нативного приложения, которое вам понадобится. Например, если вам необходимо выполнить перенос на Android или устройства ввода-вывода и т. Д. Кроме того, существует еще одно ограничение для мобильного приложения, как правило, вам может потребоваться приложение драйвера сервера, потому что в мобильных устройствах наша память и ресурсы ЦП действительно ограничены.
Еще одно соображение, как мы хотим разделить наши запросы, например, мы могли бы выполнить один большой запрос, который запрашивает сервер и занимает несколько миллисекунд / секунд, или мы хотим разделить этот гигантский запрос на несколько небольших, чтобы выполнить прогрессивную загрузку.
Пожалуйста, поделитесь своими мыслями об этой короткой статье, я люблю делиться идеями, учиться у других, и я надеюсь, что эта статья может быть полезна для кого-то там!
Также вы можете подписаться на меня в Twitter или связаться со мной через Linkedin.