1

Есть куча информации (книги, блоги ...) по любому аспекту веб-разработки (html/css, разработка базы данных, логика на стороне сервера и т. Д. на). Даже книги, которые охватывают все эти темы, чтобы начать работу с вашим личным сайтом как можно скорее. Во время высокоскоростного доступа в Интернет и содержание легко идти вирусное в эти дни я пропускаю хороший ресурс, дающий представление, передового опыта и рекомендации по проектированию того, как разрабатывать крупномасштабные веб-приложения, которые легко масштабировать, отличая:Ресурсы и рекомендации по разработке крупномасштабных веб-приложений

  • эффективное моделирование данных для баз данных
  • распространения данных по нескольким серверам
  • указания по эффективным базам данных запросов
  • как автоматизировать на сторону сервера процессов (хроны дизайна работы: как сделать, и которые используют случаи являются обоснованными) (база данных или приложения)
  • кэширование: когда и как?
  • Как хранить/получать доступ к миллионам (пользовательским) изображениям? база данных против жесткого диска? соглашения об именах?
  • [...]

Может показаться очень широка, но отношение к любому зданию интернет-компании, таким образом, сталкиваются именно эти вопросы рано или поздно. Опять же, я сосредоточен на проблемах технологической архитектуры, а не на том, как внутренне управлять рабочими процессами, как описано здесь (Larger Scale Web Project Planning). Кто-нибудь знает хорошие ресурсы?

ответ

4

Я выйду на конечность здесь и догадаюсь, что вы не найдете ресурс, который покрывает весь ваш вопрос из-за огромного размера вопроса, это тысячи страниц.

Так вот некоторые быстрые рекомендации, которые помогут вам начать работу:

Моделирование данных:

  • Модель Resource Book Data, Vol. 1
  • Книга ресурсов модели данных, том. 3
  • данных и реальность

Первые две книги проводят большую часть их содержания описания некоторых общих требований моделирования и строить все более продвинутые версии модели. Конечным результатом является не падение моделей для быстрого развития, а скорее понимание того, какие технические компромиссы сделаны, когда сложность возрастает. Хорошее правило - универсальные и гибкие модели данных, которые поддерживают широкий спектр сценариев, как правило, сложнее и труднее запросить. Их следует добиваться только в том случае, если они приносят ощутимую ценность бизнесу. В противном случае они становятся искусственной сложностью. Последняя книга старше и более философская. Он описывает общие проблемы моделирования в приложениях и помогает вам думать о них по-разному.

Распространение данных на нескольких серверах:

  • Есть некоторые очень новые решения этих проблем, такие вещи, как «Datomic» приходят на ум, но если вы хотите остаться с чем-то обычно используется как MySQL/PostgresSQL , Я бы сфокусировал меньше на «расщеплении» хранилищ данных и больше на нормализации данных, чтобы уменьшить ненужное избыточность. В конечном итоге разбиение таблиц может быть использовано для архивирования и облегчения проблемных запросов в отношении больших таблиц.Кроме того, если вы не храните активы в базе данных (изображения и т. Д.), Насколько вероятно, что база данных будет такой большой? Многие современные базы данных имеют сжатые данные на диске, поэтому база данных объемом 500 ГБ обычно может хранить 1-2 ТБ информации о клиентах.

  • SQL И реляционная теория - C.J Date, отличная книга по общей теории отношений.

Cron Jobs: Я бы обратиться к документации по базе данных/операционных системах, которые вы выбрали, PostgreSQL, MySQL, SQL Server, Oracle, и т.д. все имеют лет истории выполнения заданий против них в пакетном режиме или на спрос. Скорее всего, вам понадобятся 3 широкие категории подпрограмм:

  • процедуры резервного копирования, которые регулярно выполняются.
  • процедуры индексирования, которые работают ежечасно/в ночное время/в неделю (в зависимости от активности).
  • проверки целостности, чтобы убедиться, что у вас нет искажения данных.

Возможно, вам также понадобится что-то вроде инструмента ETL или скриптового решения. Я бы рекомендовал сначала использовать общий язык (Python, Ruby, что угодно), а затем принять конкретные порции и специализировать их по мере необходимости. Хорошим примером является процедура ETL, при которой первые прямые команды против вашего API могут работать нормально, но в конечном итоге масштаб может диктовать прямое SQL-решение.

Что касается шаблонов использования, я бы сказал, что вы хотите иметь рабочие места, которые являются идемпотентными, таким образом вы всегда можете запускать их, не опасаясь последствий. Это сложнее, чем кажется, но часто приводит к гораздо лучшему дизайну по дороге. На самом деле, я бы сказал, что даже ваша модель данных должна стараться быть максимально неразрушающей. Положитесь на вставки и представления, чтобы произвести изменения, а не удалять/обновлять. Как только ваша архитектура опирается на обновления (или удаляет), это обычно хороший знак того, что вы делаете что-то, что может вызвать у вас серьезные проблемы, если что-то пойдет не так.

Кэширование: это во многом зависит от того, что требуется вашему приложению. Я бы рекомендовал изучить такие технологии, как «Memcached», «индексированные представления», «смена данных» или проекты типа «apache samza». Часто запрашиваемая, но редко изменяемая информация, как правило, проще всего кэшировать. Иногда вы можете моделировать данные таким образом, чтобы иметь более старую информацию в кеше, а затем добавлять самую новую информацию из хранилища данных в реальном времени. Таким образом, вы не сосредоточены на выводе тонны информации из рабочей базы данных постоянно, а скорее на самую последнюю информацию, отсутствующую в кеше.

  • Проектирование приложений, интенсивно использующих данные Мартина Клепманна, похоже, достаточно хорошо освещает некоторые из этих тем. Хотя полная книга пока недоступна.

Хранение/доступ к миллионам изображений: я бы отказался от хранения данных в базе данных и вместо этого поместил их в файловую систему. Именование, вероятно, должно быть уникальным ключом, который можно безопасно комбинировать с другими файлами в папке, не опасаясь столкновения. Гиды/Уникальные идентификаторы, вероятно, могут быть исследованы. Ограничения операционной системы, вероятно, также важны здесь, некоторые системы имеют очень определенные ограничения на файлы, которые могут храниться в одном каталоге. Обратите внимание, что поскольку база данных теперь эффективно хранит указатели на файлы, вы должны обрабатывать операции с этими файлами как транзакции, которые происходят в тандеме с базой данных. сохранение их непосредственно в базе данных возможно, но сделает ваше управление базой данных более сложным. Это компромисс, вам удобнее управлять операционной системой или сложной базой данных.Если вы решите поместить их в базу данных, я бы рассмотрел разделение файлов базы данных так, чтобы основная информация (пользователи, безопасность, основные данные) была отделена от фактических данных изображения, так что восстановление может быстро привести сайт в сеть, а затем вернуться заполняйте изображения после восстановления основных функций.

Другие практические советы: сосредоточьтесь на том, чтобы сделать вашу архитектуру и модель данных максимально простой для начала. Было бы очень легко увязать себя с чрезвычайно сложной моделью данных и архитектурой, чтобы обнаружить, что элементы, которые работают медленнее, имеют мало общего с дизайном, в котором вы оказались. Другим преимуществом более простой архитектуры является то, что ее легче вписаться в голову сразу. Масштабирование архитектуры вверх/вниз никогда не будет легким, но масштабирование прямого дизайна (даже если это означает радикальные изменения) определенно будет проще, чем масштабирование действительно сложного.

+0

Спасибо за ваши усилия =) Это было довольно информативно. Ну, я думаю, я просто продолжаю сканировать паутину тогда ... –

Смежные вопросы