Как проектировать масштабируемые приложения? [закрытый]


Как вы проектируете / проектируете масштабируемое приложение? Любые предложения книг или веб-сайтов, которые могли бы помочь понять, как масштабировать приложения?

спасибо

9 54

9 ответов:

за последний год мне пришлось ускорить этот вопрос для проекта, над которым работает моя компания, и я нашел эти ресурсы чрезвычайно полезными: Todd Hoff'S highscalability.com;Масштабируемые Интернет-Архитектуры, Тео Schlossnagle; и Создание Масштабируемых Веб-Сайтов, Кэл Хендерсон. Highscalability.com в частности, укажет вам на многие хорошие предисловия, учебники, книги и документы, и это отличное место для начала. Все этот совет практичен и основан на опыте работы на таких сайтах, как Flickr, Twitter и Google.

кстати, масштабируемость-это не производительность. Идеально масштабируемая система-это система с фиксированными предельными затратами для добавления дополнительных пользователей или мощностей.

Это приятно читать в Живом Журнале и как они масштабировали свое приложение с течением времени.

danga.com/words/2004_mysqlcon/mysql-slides.pdf[PDF]

Это может быть не то, что вы ищете, но это один из лучших обзоров "это то, что мы сделали и почему" при масштабировании.

здесь уже есть отличные ответы. В некоторых книгах и ссылках вы найдете несколько общих шаблонов мышления.

  • напишите как можно меньше кода

  • повторное использование кода как можно больше

  • не над, или под абстрактным вашим дизайном

  • разбейте вещи на модульные области, которые могут работать на отдельных или нескольких системах. Тяжелой обработки нужно оставить отдельная система.

  • Я склонен думать, что масштабируемость тесно связано с ремонтопригодностью. И, кажется, часто упускается из виду, что люди проводят только короткое время разработки приложения и остальное время сохранение его.

  • кроме того, масштабирование почти наверняка связано с данными (которые более гибки, чем код, поэтому вам нравится иметь все больше и больше), поэтому стоимость доступа к хранилищу должна оставаться между O(1) и O(n).

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

прежде чем начать с техникой, вы должны знать область применения dead cold. Что ожидает клиент / подразделение с точки зрения производительности, и каковы критические области отказа? Скотт Хансельман отлично подкаст по этой теме.

некоторые из предлагаемых лакомых кусочков: не используйте кэширование, если вам не нужно; подача файлов быстрее, чем сборка фрагментов из базы данных; знать, как обрабатывать время peek server; знать, что ваши пики будет.

опять же, знать объем использования сначала для того, чтобы знать, если вы должны масштаб.

Что бы вы ни делали, вы не можете спроектировать систему с самого начала, чтобы она была масштабируемой для всех ваших потребностей. Часто, когда у вас есть ваша система работает вы найдете узкие места, где вы меньше всего ожидаете их (т. е.: пропускная способность локальной сети). В любом случае, мой совет определенно highscalability.com а также :)

Я бы предложил эту книгу для этого:

http://www.amazon.com/Scalable-Internet-Architectures-Developers-Library/dp/067232699X/ref=sr_1_1?ie=UTF8&s=books&qid=1243267630&sr=8-1

несмотря на то, что это в первую очередь книга PHP, идеи одинаковы для любого веб-стека.

этой - это именно то, что вам нужно! Руководство по архитектуре приложений было создано командой Microsoft Patterns and Practices для помощи архитекторам...

Это хорошее введение в тему: У IBM developerWorks было несколько интересных руководств по использованию шаблонов архитектуры для приложений, которые масштабируются:здесь и здесь.