Как проектировать масштабируемые приложения? [закрытый]
Как вы проектируете / проектируете масштабируемое приложение? Любые предложения книг или веб-сайтов, которые могли бы помочь понять, как масштабировать приложения?
спасибо
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 а также :)
Я бы предложил эту книгу для этого:
несмотря на то, что это в первую очередь книга PHP, идеи одинаковы для любого веб-стека.
этой - это именно то, что вам нужно! Руководство по архитектуре приложений было создано командой Microsoft Patterns and Practices для помощи архитекторам...