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

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

спасибо

9 ответов


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

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


Это хорошее чтение в livejournal и как они масштабировали свое приложение с течением времени.

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 было несколько интересных руководств по использованию шаблонов архитектуры для масштабируемых приложений:здесь и здесь.