- Оригинальный адрес:GitHub.com/Дон Мартин…
- Перевод с:Программа перевода самородков
- Переводчик:XatMassacrE,L9m,Airmacho,xiaoyusilen,jifaxu
- этоСсылка на сайтЧтобы увидеть, имеет ли это значение и английский перевод (если вы не видите изменений README.md, это означает, что этот переведенный документ является последним).
- Подробнее см.:GitHub.com/редкая земля/система…
Приступаем к проектированию системы
перевести
заинтересованы в участииперевестиВыполняется следующий перевод:
Цель
Научитесь проектировать большие системы.
Подготовьтесь к интервью по проектированию системы.
Научитесь проектировать большие системы
Изучение того, как проектировать масштабируемые системы, поможет вам стать лучшим инженером.
Проектирование систем — это обширная тема. в Интернете,Ресурсы по принципам системного проектирования также огромны.
Этот репозиторий для этих ресурсовколлекция тканей, который поможет вам научиться создавать масштабируемые системы.
Учитесь у сообщества открытого исходного кода
Это начальный выпуск постоянно обновляемого проекта с открытым исходным кодом.
Добро пожаловатьспособствовать!
Подготовьтесь к собеседованию по проектированию системы
Во многих технологических компаниях, помимо собеседований по коду, проектирование системы такжетехническое собеседованиеодин изнеобходимая ссылка.
Отработайте общие вопросы на собеседовании по проектированию системи поместите свой ответ ирешение на примерепровестиКонтроль: Обсуждение, код и диаграммы.
Дополнительные темы для подготовки к собеседованию:
- методическое пособие
- Как ответить на вопрос на собеседовании по системному проектированию
- Вопросы для собеседования по системному дизайну,с ответами
- вопросы на собеседовании по объектно-ориентированному дизайну,с ответами
- Другие вопросы на собеседовании по системному проектированию
Карточки
Здесьстопка карточекИспользуйте интервальные повторения, чтобы помочь вам запомнить ключевые концепции проектирования системы.
- Системный дизайн стопки карт
- Стопка карт практики системного проектирования
- Стопка карт практики объектно-ориентированного проектирования
Доступно в любое время и в любом месте.
Ресурсы по коду: интерактивные задачи по программированию
Вы ищете ресурсы для подготовкиинтервью по программированию?
Проверьте наш родственный складИнтерактивное задание по программированиюСодержит дополнительную стопку карточек:
способствовать
Учитесь у сообщества.
Отправить PR, чтобы помочь:
- исправлять ошибки
- идеальная глава
- Добавить главу
Некоторый контент, который все еще нуждается в улучшениисовершенствуется.
пожалуйста, проверьтеРуководство по взносам.
Указатель тем системного проектирования
Краткое изложение различных тему дизайна системы, включая преимущества и недостатки.Каждая тема сталкивается с компромиссами и компромиссами.
Каждая глава содержит ссылки на дополнительные ресурсы.
- Темы системного проектирования: начните здесь
- Производительность и масштабируемость
- Задержка и пропускная способность
- Доступность и согласованность
- Последовательный режим
- доступный режим
- система доменных имен
- CDN
- балансировщик нагрузки
- Обратный прокси (веб-сервер)
- прикладной уровень
- база данных
- тайник
- асинхронный
- коммуникация
- Безопасность
- приложение
- совершенствуется
- Спасибо
- Контакты
- лицензия
методическое пособие
Основываясь на временной шкале вашего интервью (короткое, среднее, длинное), просмотрите рекомендуемые темы.
В: Для интервью мне нужно знать все знания здесь?
A: Нет, вам не нужно знать все, если это просто подготовка к интервью.
То, о чем вас спросят на собеседовании, зависит от следующих факторов:
- ваш опыт
- ваше техническое образование
- должность, на которую вы проходите собеседование
- компания, с которой вы проходите собеседование
- удача
Кандидаты, которые имеют опыт, обычно ожидаете узнать больше дизайна системы. Ожидается, что архитектор или руководитель команды узнают больше знаний в дополнение к отдельным вкладам. Топ-технологические компании обычно имеют одно или несколько системных дизайнерских интервью.
Интервью будут широкими и глубокими в нескольких областях. Это время поможет вам понять некоторые темы, связанные с проектированием системы. Внесите соответствующие коррективы в приведенное ниже руководство в зависимости от вашего графика, опыта, должности, на которую вы проходите собеседование, и компании, в которую вы проходите собеседование.
- короткий срок- Тематически оформленный системойширотакак цель. путем решенияНемногоИнтервью Вопросы для практики.
- Средняя степень- Тематически оформленный системойширотаиначальная глубинакак цель. путем решенияполноПрактика вопросов интервью.
- длинная- Тематически оформленный системойширотаиРасширенная глубинакак цель. путем решениясамыйОбращайтесь по вопросам интервью.
короткий срок | Средняя степень | длинная | |
---|---|---|---|
читатьТемы проектирования системыполучить общее представление о том, как работает система | :+1: | :+1: | :+1: |
Вы должны прочитать некоторые из интервьюИнженерный блог компаниистатья | :+1: | :+1: | :+1: |
читатьреальная архитектура | :+1: | :+1: | :+1: |
обзорКак ответить на вопрос на собеседовании по проектированию системы | :+1: | :+1: | :+1: |
ЗаканчиватьВопросы собеседования и ответы на дизайн системы | Немного | полно | самый |
ЗаканчиватьВопросы и ответы на собеседовании по объектно-ориентированному дизайну | Немного | полно | самый |
обзорДругие вопросы на собеседовании по системному проектированию | Немного | полно | самый |
Как ответить на вопрос на собеседовании по системному проектированию
Интервью по проектированию системы являетсяоткрытый диалог. Они ожидают, что вы будете вести разговор.
Вы можете использовать приведенные ниже шаги, чтобы вести обсуждение. Чтобы консолидировать процесс, выполните указанные ниже действия.Вопросы и ответы на собеседовании по системному дизайнуэта глава.
Шаг 1. Опишите сценарии использования, ограничения и допущения
Соберите все необходимое и исследуйте проблему. Продолжайте задавать вопросы, чтобы мы могли определить сценарии использования и ограничения. Обсудите предположения.
- Кто это будет использовать?
- Как они будут его использовать?
- Сколько пользователей?
- Какова роль системы?
- Что является входом и выходом системы?
- Сколько данных мы хотим обработать?
- Надеемся, что количество обрабатываемых запросов в секунду?
- Какое соотношение чтения и записи мы хотим?
Шаг 2: Создайте расширенный дизайн
Используйте все важные компоненты, чтобы нарисовать дизайн высокого уровня.
- Нарисуйте основные узлы и соединения
- Докажи свои мысли
Шаг 3: Проектирование основных компонентов
Детальный углубленный анализ каждого из основных компонентов. Например, если вы спросилиРазработка сервиса сокращения URL, чтобы начать обсуждение:
- Создайте и сохраните хэш полного URL-адреса
- Преобразование хешированного URL-адреса в полный URL-адрес
- поиск в базе данных
- API и объектно-ориентированный дизайн
Шаг 4: Дизайн метрик
Подтвердите и обработайте узкие места и некоторые ограничения. Например, вам нужно следующее?
- балансировки нагрузки
- Горизонтальное расширение
- тайник
- Шардинг базы данных
Обсудите возможные решения и стоимость. Все требует компромиссов. можно использоватьПринципы проектирования масштабируемых системразобраться с узкими местами.
Расчеты на обратной стороне конверта
你或许会被要求通过手算进行一些估算。 ВовлеченныйприложениеЗадействованы следующие ресурсы:
- Используйте обратную сторону конверта для расчетов
- 2 силовой стол
- Цифры задержки, которые должен знать каждый программист
Связанные ресурсы и дополнительная литература
Перейдите по ссылке ниже, чтобы получить лучшие идеи, которые мы ожидаем:
- Как использовать интервью с дизайном системы
- собеседование по проектированию системы
- Интервью Введение в системную архитектуру и дизайн
Вопросы и ответы на собеседовании по системному дизайну
Общие напротив системы Интервью Вопросы и связанные с ними тематические исследования, код и диаграммы.
Ответы по содержанию
solutions/
папка.
проблема | |
---|---|
Дизайн Pastebin.com (или Bit.ly) | отвечать |
Создайте временную шкалу и поиск в Twitter (или ленту и поиск в Facebook) | отвечать |
Разработка веб-краулера | отвечать |
Дизайн mint.com. | отвечать |
Проектирование структур данных для социальной сети | отвечать |
Дизайн клавишного магазина для поисковых систем | отвечать |
Характеристики дизайна рейтинга продаж Amazon по категориям | отвечать |
Разработайте систему для миллиона пользователей на AWS | отвечать |
Добавить вопрос по дизайну системы | способствовать |
Дизайн Pastebin.com (или Bit.ly)
Создайте временную шкалу и поиск в Twitter (или ленту и поиск в Facebook)
Разработка веб-краулера
Дизайн Mint.com
Проектирование структур данных для социальной сети
Проектирование хранилища ключей для поисковых систем
Разработка рейтинга продаж Amazon по категориям
Разработайте систему для миллиона пользователей на AWS
Вопросы и ответы на собеседовании по объектно-ориентированному дизайну
Общие лица для обсуждения вопросов и примеров интервью, кода и графических демонстраций.
Решение, связанное с контентом
solutions/
папка.Примечание. Этот раздел все еще находится в разработке.
проблема | |
---|---|
Хэш-карта дизайна | решение |
Проектирование кэша LRU | решение |
Дизайн колл-центра | решение |
Спроектировать колоду карт | решение |
спроектировать парковку | решение |
Разработать чат-сервис | решение |
Создайте круговой массив | быть решенным |
Добавить вопрос об объектно-ориентированном дизайне | быть решенным |
Темы системного проектирования: начните здесь
Новое в системном проектировании?
Во-первых, вам нужно иметь общее представление об общих принципах, что они из себя представляют, как их использовать, плюсы и минусы.
Шаг 1. Просмотрите видеолекции по масштабируемости
Гарвардская лекция по масштабируемости
- Темы охватывали
- Вертикальное масштабирование
- Горизонтальное масштабирование
- тайник
- балансировки нагрузки
- репликация базы данных
- раздел базы данных
Шаг 2. Ознакомьтесь со статьей о масштабируемости
- Темы охватывают:
следующие шаги
Далее мы рассмотрим компромиссы и компромиссы более высокого порядка:
- представлениеиМасштабируемость
- Задерживатьипропускная способность
- Доступностьипоследовательность
ПомнитеКаждый аспект вбрасывания и компромиссов.
Затем мы углубимся в более конкретные темы, такие как DNS, CDN и балансировщики нагрузки.
Производительность и масштабируемость
если сервиспредставлениеРост сервиса пропорционален увеличению ресурсов, сервис масштабируется. Обычно повышение производительности означает выполнение большего количества единиц работы, с другой стороны, когда набор данных растет, он также может обрабатывать более крупные единицы работы.1
Другой взгляд на производительность и масштабируемость:
- Если ваша система имеетпредставлениеПроблема, медленно для одного пользователя.
- если в вашей системе естьМасштабируемостьПроблема в том, что это быстрее для одного пользователя, но медленнее при высокой нагрузке.
Источник и дальнейшее чтение
Задержка и пропускная способность
Задерживатьвремя, необходимое для выполнения операции или результат операции.
пропускная способность- количество таких операций или операций в единицу времени (выполняемых).
Обычно следует начинать сприемлемая задержкаВнизМаксимальная пропускная способностькак цель.
Источник и дальнейшее чтение
Доступность и согласованность
Теория CAP
Источник: Пересматривая теорию CAP.
В распределенной вычислительной системе одновременно могут выполняться только следующие два пункта:
- последовательность─ Получайте последние данные при каждом посещении, но можете получить ответ об ошибке
- Доступность─ Получайте ответ без ошибок при каждом посещении, но не гарантируете получение последних данных
- Допуск перегородки─ В случае сбоя сети любого раздела система может продолжать работать
Сети ненадежны, поэтому вам следует поддерживать устойчивость к разделам и искать компромисс между доступностью программного обеспечения и согласованностью.
CP — непротиворечивость и устойчивость к разделам
Ожидание ответа от разделенного узла может привести к ошибке задержки. Если вашему бизнесу требуются атомарные операции чтения и записи, CP — хороший выбор.
AP — доступность и допустимость разделов
Самая последняя версия данных, доступных на отвечающем узле, может быть устаревшей. Записи (операции) могут занять некоторое время для распространения после разрешения раздела.
Если бизнесу необходимо разрешитьокончательная согласованность, или когда есть внешняя ошибка, которая требует продолжения работы системы, AP является хорошим выбором.
Источник и дальнейшее чтение
Режим согласованности
Есть много копий одних и тех же данных, мы сталкиваемся с тем, как синхронизировать их выбор, чтобы у клиента были согласованные отображаемые данные. отзыватьТеория CAPОпределение согласованности в --- получить последние данные при каждом доступе, но может получить ответ об ошибке
слабая консистенция
После записи доступ может видеть или не видеть (данные записываются). Сделайте все возможное, чтобы оптимизировать его, чтобы он имел доступ к последним данным.
Такой подход можно увидеть в таких системах, как memcached. Слабая согласованность хорошо работает в реальных случаях использования, таких как VoIP, видеочат и многопользовательские игры в реальном времени. Например, если вы потеряете сигнал на несколько секунд во время разговора, при повторном подключении вы не сможете услышать, что говорили в течение этих нескольких секунд.
окончательная согласованность
После записи доступ, наконец, видит записанные данные (обычно в течение миллисекунд). Данные реплицируются асинхронно.
Такой подход используется в таких системах, как DNS и электронная почта. Согласованность в конечном счете хорошо работает в системах высокой доступности.
сильная консистенция
Доступ виден сразу после написания. Данные реплицируются синхронно.
Этот подход используется в файловых системах и реляционных базах данных (RDBMS). Строгая согласованность хорошо работает в системах, требующих ведения журнала.
Источник и дальнейшее чтение
Режим доступности
Существует два режима, поддерживающих высокую доступность:отказоустойчивостьирепликация.
отказоустойчивость
Активный пассивный
Что касается процесса аварийного переключения с рабочего на резервный, то рабочий сервер посылает периодические сигналы резервному серверу, находящемуся в резерве. Если периодический сигнал прерывается, резервный сервер переключается на IP-адрес рабочего сервера и возобновляет обслуживание.
Время простоя зависит от того, находится ли резервный сервер в состоянии «горячего» резерва или его необходимо запустить из состояния «холодного» резерва. Только рабочие серверы обрабатывают трафик.
Переход с рабочего режима на резервный также известен как переключение ведущий-ведомый.
Двойное рабочее переключение (активный-активный)
При переключении с двойной работой обе стороны управляют трафиком, распределяя нагрузку между собой.
Если это внешний сетевой сервер, DNS должен знать обе стороны. В случае с сервером интрасети логика приложения должна знать об обеих сторонах.
Двойное рабочее переключение также может упоминаться как основное основное переключение.
Дефект: отказоустойчивость
- Отказоустойчивость требует добавления дополнительного оборудования и увеличения сложности.
- Если новая копия перед записью данных в систему резервного копирования может работать, система дает сбой, то возможна потеря данных.
копировать
Репликация Master-Slave и репликация Master-Master
Эта тема изучается дополнительнобаза данныхчасть:
система доменных имен
Источник: Введение в безопасность DNS.
Система доменных имен преобразует доменные имена, такие как www.example.com, в IP-адреса.
Система доменных имен является иерархической, с некоторыми DNS-серверами на верхнем уровне. Когда запрашивается IP (доменное имя), маршрутизатор или интернет-провайдер предоставляет информацию для подключения к DNS-серверу. Сопоставления кэша DNS-серверов более низкого уровня, которые могут завершиться ошибкой из-за задержек распространения DNS. Результаты DNS могут кэшироваться в браузере или операционной системе на время, зависящее отВремя жить TTL.
- NS Record (служба доменного имени)─ Укажите сервер DNS, который разрешает доменное имя или имя поддомена.
- Записи MX (обмен почтой)─ Укажите почтовый сервер для получения сообщений.
- Запись (адрес)─ Укажите запись IP-адреса, соответствующую доменному имени.
-
CNAME (канонический)─ одно доменное имя сопоставляется с другим доменным именем или
CNAME
запись ( example.com указывает на www.example.com ) или сопоставление сA
записывать.
CloudFlareиRoute 53Подобные платформы предоставляют возможность управлять DNS. Некоторые службы DNS направляют трафик централизованно:
-
Взвешенное круговое планирование
- Предотвратить попадание трафика на серверы, находящиеся на обслуживании
- Балансировка нагрузки между кластерами разного размера
- A/B-тестирование
- Маршрутизация на основе задержки
- Маршрутизация на основе географического положения
Дефект: DNS
- Хотя кэширование может уменьшить задержку DNS, при подключении к DNS-серверам возникает небольшая задержка.
- Хотя они обычноПравительства, интернет-провайдеры и крупные корпорацииУправление, но управление службой DNS может быть сложным.
- Служба DNS недавно пострадалаDDoS-атака, блокирует доступ к Twitter пользователям, не знающим IP-адрес Twitter.
Источник и дальнейшее чтение
Сеть доставки контента (CDN)
Источник: Зачем использовать CDN
Сеть доставки контента (CDN) — это глобальная распределенная сеть прокси-серверов, которые обслуживают контент из расположений, близких к пользователям. Как правило, статический контент, такой как HTML/CSS/JS, изображения и видео, обслуживается CDN, хотя динамический контент также поддерживается Amazon CloudFront и т. д. Разрешение DNS CDN сообщает клиентам, к какому серверу подключаться.
Хранение контента в CDN может обеспечить производительность двумя способами:
- Обслуживание ресурсов из центров обработки данных, близких к пользователям
- Не обязательно иметь запрос на ваш сервер через cdn вашего сервера
Пуш CDN (PUSH)
Когда контент на вашем сервере изменится, нажмите CDN, чтобы принять новый контент. Нажмите прямо на CDN и перепишите URL-адрес, чтобы он указывал на адрес CDN вашего контента. Вы можете настроить время истечения срока действия содержимого и время его обновления. Контент передается только тогда, когда вносятся изменения или добавления, минимизируя трафик, но максимально увеличивая объем хранилища.
Вытягивание CDN (вытягивание)
CDN pull извлекает ресурс с сервера, когда первый пользователь запрашивает ресурс. Вы сохраняете контент на своем собственном сервере и переписываете URL-адрес, чтобы он указывал на адрес CDN. Пока контент не будет кэширован в CDN, запрос будет только медленнее,
Время жить (TTL)Определяет, как долго кэшировать. Подход CDN pull минимизирует пространство для хранения в CDN, но может вызвать избыточный трафик, если срок действия файлов истекает и они извлекаются до фактического изменения.
Сайты с высоким трафиком хорошо справляются с вытягиванием CDN, потому что трафик распределяется более равномерно, если последний запрошенный контент хранится в CDN.
Дефект: CDN
- Стоимость CDN может варьироваться в зависимости от трафика, и вполне возможно, что вы не будете использовать CDN после компромисса.
- Если содержимое обновляется до истечения TTL, кэшированное содержимое CDN может устареть.
- CDN необходимо изменить URL-адрес статического контента, чтобы он указывал на CDN.
Источник и дальнейшее чтение
балансировщик нагрузки
Источник: Шаблоны проектирования масштабируемых систем.
Балансировщик нагрузки распределяет входящие запросы по вычислительным ресурсам, таким как серверы приложений и базы данных. В любом случае балансировщик нагрузки возвращает ответ от вычислительного ресурса соответствующему клиенту. Полезность балансировщика нагрузки заключается в следующем:
- Предотвратить отправку запросов на плохие серверы
- Предотвратить перегрузку ресурсов
- Помогите устранить единые точки отказа
Балансировщики нагрузки могут быть реализованы аппаратно (дорого) или программно, например HAProxy.
Дополнительные преимущества включают в себя:
-
SSL-терминация─ Расшифровывать входящие запросы и шифровать ответы сервера, чтобы внутренним серверам не приходилось выполнять эти потенциально дорогостоящие операции.
- Нет необходимости устанавливать на каждый серверсертификат Х.509.
- Ссылка сохраняется─ Если веб-приложение не отслеживает сеансы, выпустите файлы cookie и маршрута для конкретного клиента к тому же экземпляру.
Обычно устанавливается наработа-ожиданиеилидвойная работарежим нескольких балансировщиков нагрузки, чтобы избежать сбоев.
Балансировщик нагрузки может направлять трафик несколькими способами:
- случайный
- минимальная нагрузка
- Session/cookie
- Алгоритм циклического планирования или взвешенного циклического планирования
- Балансировка нагрузки уровня 4
- Балансировка нагрузки уровня 7
Балансировка нагрузки уровня 4
Четыре мониторинга балансировки нагрузкитранспортный уровеньинформация для принятия решения о том, как распределить запрос. Как правило, это включает в себя источник, IP-адрес назначения и порт в заголовке запроса, но не содержимое пакета (пакета). Выполнение балансировки нагрузки уровня 4Преобразование сетевых адресов (NAT)для пересылки сетевых пакетов вышестоящему серверу.
Балансировщик нагрузки уровня 7
Балансировщик нагрузки уровня 7 на основе мониторингаприкладной уровеньЧтобы решить, как распределять запросы. Это будет включать содержимое, сообщение и файлы cookie запрошенного заголовка. Семиуровневый балансировщик нагрузки завершает сетевой трафик, читает сообщения и определяет балансировку нагрузки, а затем передает данные на определенные серверы. Например, семиуровневый балансировщик нагрузки может напрямую подключать видеотрафик к управляемому видео, загружая при этом более конфиденциальный трафик пользовательских счетов на более защищенный сервер.
За счет гибкости балансировка нагрузки уровня 4 требует меньше времени и вычислительных ресурсов, чем балансировка нагрузки уровня 7, хотя это оказывает незначительное влияние на производительность современного массового оборудования.
Горизонтальное расширение
Балансировщики нагрузки также помогают с горизонтальным масштабированием, повышая производительность и доступность. Экономически выгоднее использовать товарное оборудование, а не единичное оборудование.Вертикальное расширениеБолее дорогое оборудование имеет более высокую доступность. Легче нанимать таланты для коммерческого оборудования, чем для конкретных корпоративных систем.
Дефект: Горизонтальное масштабирование
- Горизонтальное масштабирование усложняет работу и требует дублирования серверов.
- Серверы не должны иметь состояния: они также не должны содержать данные, связанные с пользователем, такие как сеансы или изображения профиля.
- Сеансы могут храниться централизованно в базе данных или сохранятьсятайник(Redis, Memcached) в хранилище данных.
- Нижестоящие серверы, такие как кэши и базы данных, должны масштабироваться вместе с вышестоящими серверами, чтобы обрабатывать больше одновременных подключений.
Минусы: Балансировщик нагрузки
- Если вам не хватает ресурсов или возникают ошибки конфигурации, балансировщик нагрузки станет узким местом в производительности.
- Балансировщики нагрузки были введены, чтобы помочь устранить единые точки отказа, но добавили дополнительную сложность.
- Один балансировщик нагрузки создает единую точку отказа, но настройка нескольких балансировщиков нагрузки усложняет работу.
Источник и дальнейшее чтение
- Архитектура Nginx
- Руководство по архитектуре HAProxy
- Масштабируемость
- Wikipedia)
- Балансировка нагрузки уровня 4
- Балансировка нагрузки уровня 7
- Конфигурация прослушивателя ELB
Обратный прокси (веб-сервер)
Обратный прокси — это веб-сервер, который может централизованно вызывать внутренние службы и предоставлять унифицированный интерфейс общедоступным клиентам. Запрос от клиента сначала перенаправляется обратным прокси-сервером на сервер, который может ответить на запрос, а затем прокси-сервер возвращает ответ сервера клиенту.
Преимущества включают в себя:
- Увеличение безопасности- Скрыть информацию о внутреннем сервере, заблокировать IP-адреса в черном списке и ограничить количество подключений на одного клиента.
- Повышение масштабируемости и гибкости- Клиенты видят только IP обратного прокси-сервера, что позволяет добавлять или удалять серверы или изменять их конфигурацию.
-
Завершать сеансы SSL локально- Расшифровывать входящие запросы и шифровать ответы сервера, чтобы внутренним серверам не приходилось выполнять эти потенциально дорогостоящие операции.
- Устраняет установку на каждом сервереX.509Требуется сертификат
- компрессия- Сжать ответ сервера
- тайник- Напрямую возвращает кешированный результат попадания
-
статический контент- Подавать статический контент напрямую
- HTML/CSS/JS
- рисунок
- видео
- и т.д
Балансировщик нагрузки и обратный прокси
- Развертывание балансировщика нагрузки полезно при наличии нескольких серверов. Как правило, балансировщик нагрузки направляет трафик на группу серверов, которые работают одинаково.
- Обратные прокси полезны даже при наличии только одного веб-сервера или сервера приложений, и вы можете воспользоваться преимуществами, описанными в предыдущем разделе.
- Такие решения, как NGINX и HAProxy, могут поддерживать как обратный прокси-сервер уровня 7, так и балансировку нагрузки.
Минус: обратный прокси
- Введение обратного прокси увеличивает сложность системы.
- Один обратный прокси-сервер может по-прежнему иметь единую точку отказа, настраивая несколько обратных прокси-серверов (например,отказоустойчивость) еще больше увеличит сложность.
Источник и дальнейшее чтение
- Обратный прокси и балансировка нагрузки
- Архитектура Nginx
- Руководство по архитектуре HAProxy
- Wikipedia
прикладной уровень
Источник: Введение в масштабируемую системную архитектуру.
Отделение уровня веб-служб от уровня приложений (также известного как уровень платформы) позволяет независимо масштабировать и настраивать оба уровня. Для добавления нового API требуется только добавить сервер приложений, а не дополнительный веб-сервер.
Принцип единой ответственностиПродвигайте небольшие автономные сервисы, которые работают вместе. Небольшие команды могут более агрессивно планировать рост, предлагая небольшие услуги.
Рабочие процессы на прикладном уровне также могут быть реализованыАсинхронный.
Микросервисы
Темы, связанные с этим обсуждением,Микросервисы, можно описать как серию небольших модульных сервисов, которые можно развернуть независимо. Каждая служба работает в независимом потоке и взаимодействует с помощью четко определенных упрощенных механизмов для совместного достижения бизнес-целей.1
Например, в Pinterest могут быть следующие микросервисы: профиль пользователя, подписчики, потоковая передача, поиск, загрузка фотографий и т. д.
обнаружение службы
рисунокConsul,EtcdиZookeeperТакая система может помочь службам обнаруживать друг друга, отслеживая регистрационные имена, адреса, порты и т. д.Health checksможет помочь подтвердить целостность службы иHTTPдорожка. И Consul, и Etcd имеют встроенныйхранилище ключей-значенийИспользуется для хранения информации о конфигурации и другой общей информации.
Недостаток: прикладной уровень
- Добавление прикладного уровня, состоящего из нескольких слабо связанных сервисов, будет сильно отличаться с точки зрения архитектуры, операций, процессов и т. д. (по сравнению с монолитной системой).
- Микросервисы усложняют развертывание и эксплуатацию.
Источник и дальнейшее чтение
- Введение в масштабируемую системную архитектуру
- Интервью по системному дизайну
- Сервис-Ориентированная Архитектура
- Введение в зоофирку
- Все, что вам нужно знать о создании микросервисов
база данных
Источник: Масштабирование количества пользователей до первых десяти миллионов.
Система управления реляционными базами данных (RDBMS)
Реляционная база данных, такая как SQL, представляет собой набор элементов данных, организованных в виде таблицы.
Примечание для проверки: здесь автор SQL может иметь в виду MySQL.
ACIDИспользуется для описания реляционной базы данных.делахарактеристики.
- атомарность- Все операции внутри каждой транзакции либо завершены, либо не завершены.
- последовательность- Любая транзакция переводит базу данных из одного допустимого состояния в другое.
- изоляция- Результат одновременного выполнения транзакций такой же, как при последовательном выполнении транзакций.
- Упорство- После совершения транзакции воздействие на систему является постоянным.
Расширения реляционных баз данных включают множество методов:репликация master-slave,мастер-мастер-репликация,соединение,Фрагментация,денормализацияиНастройка SQL.
Источник: масштабируемость, доступность, стабильность, шаблоны
репликация master-slave
Основная библиотека отвечает за операции чтения и записи, а также за копирование и запись в одну или несколько подчиненных библиотек, а подчиненная библиотека отвечает только за операции чтения. Дерево ведомых устройств копирует записи на большее количество ведомых устройств. Если ведущий находится в автономном режиме, система может работать в режиме только для чтения, пока ведомый не будет повышен до ведущего или пока не появится новый ведущий.
Недостаток: репликация master-slave
- Переход от библиотеки к мастеру требует дополнительной логики.
- Ссылаться наНедостаток: копирование, репликация master-slave и репликация master-masterобщийПроблема.
Источник: масштабируемость, доступность, стабильность, шаблоны.
мастер-мастер-репликация
Обе основные библиотеки отвечают за операции чтения и записи и координируют друг с другом операции записи. Если одна из основных библиотек выйдет из строя, система сможет продолжить чтение и запись.
Недостаток: репликация master-master
- Вам нужно добавить балансировщик нагрузки или внести изменения в логику приложения, чтобы определить, в какую базу данных производить запись.
- Most Lord - Основная система либо гарантирует консистентность (нарушая ACID), либо потому что задержка записи генерируется синхронно.
- По мере того, как присоединяется больше узлов записи и увеличивается задержка, способы разрешения конфликтов становятся все более и более важными.
- Ссылаться наНедостаток: копирование, репликация master-slave и репликация master-masterобщийПроблема.
Недостаток: копирование
- Если прежняя основная библиотека реплицируется на другие узлы, то во вновь записанных данных данные будут зависать, происходит потеря данных.
- Записи воспроизводятся на реплике, отвечающей за операции чтения. Реплика может быть заблокирована из-за чрезмерных операций записи, что приводит к ненормальной функции чтения.
- Чем больше ведомых устройств считывается, тем больше данных для записи необходимо реплицировать, что приводит к более серьезным задержкам репликации.
- В некоторых системах баз данных запись в мастер может выполняться параллельно с несколькими потоками, но реплики чтения поддерживают только однопотоковую последовательную запись.
- Дублирование означает больше оборудования и дополнительную сложность.
Источник и дальнейшее чтение
соединение
Источник: Масштабирование количества пользователей до первых десяти миллионов.
Объединение (или разделение по функциям) делит базу данных на соответствующие функции. Например, у вас может быть три базы данных:Форум,Пользовательипродукт, а не только одну монолитную базу данных, тем самым уменьшая трафик чтения и записи на базу данных и уменьшая задержку репликации. Меньшая база данных означает, что больше данных помещается в память, что, в свою очередь, означает более высокую вероятность попадания в кэш. Нет централизованной мастер-библиотеки, которая может писать только последовательно, можно писать параллельно, увеличивая грузоподъемность.
Минусы: Объединенный
- Если ваша схема базы данных требует большого количества функций и таблиц данных, объединения не очень эффективны.
- Вам необходимо обновить логику вашего приложения, чтобы определить, в какую базу данных выполнять чтение и запись.
- использоватьserver linkОбъединение данных из двух библиотек более сложно.
- Для федерации требуется больше оборудования и дополнительная сложность.
Источник и расширение: United
Фрагментация
Источник: масштабируемость, доступность, стабильность, шаблоны.
Разделение распределяет данные по разным базам данных таким образом, что каждая база данных управляет только подмножеством всего набора данных. Взяв в качестве примера базу данных пользователей, по мере увеличения числа пользователей в кластер добавляется все больше и больше сегментов.
похожийсоединениеПреимущества: фрагментация может уменьшить трафик чтения и записи, уменьшить репликацию и повысить частоту попаданий в кэш. Также уменьшает индекс, обычно означает, что запрос быстрее и лучше производительность. Если проблема фрагментации, другие все еще могут работать, вы можете использовать некоторую форму избыточности для предотвращения потери данных. Подобный сустав, не только центр основной серийной записи библиотеки, вы можете писать параллельно, чтобы улучшить грузоподъемность.
Общепринятой практикой является разделение пользовательской таблицы инициалами фамилии пользователя или географическим местоположением пользователя.
Недостаток: Шардинг
- Вам необходимо изменить логику приложения для реализации сегментирования, что может привести к сложным SQL-запросам.
- Необоснованное сегментирование может привести к несбалансированной загрузке данных. Например, часто используемые пользовательские данные приведут к тому, что нагрузка на сегмент будет выше, чем на другие сегменты.
- Ребалансировка вносит дополнительную сложность. на основеСогласованное хешированиеАлгоритм фрагментации уменьшая его.
- Операции с данными, которые объединяют несколько сегментов, более сложны.
- Разделение требует большего количества оборудования и дополнительной сложности.
Источник и расширенное чтение: Sharding
денормализация
Денормализация пытается обменять производительность записи на производительность чтения. Резервные копии данных между несколькими таблицами, чтобы избежать дорогостоящих операций соединения. Некоторые реляционные базы данных, такие какPostgreSQlи поддержка Ораклматериализованное представление, который может справиться с избыточным хранением информации и обеспечить согласованность избыточных копий.
Когда используются данные, такие каксоединениеиФрагментацияи другие технологии сегментированы, что еще больше усложняет обработку операций объединения в центрах обработки данных. Денормализация может обойти эту сложную операцию соединения.
В большинстве систем чтение выполняется с гораздо большей частотой, чем запись, в соотношении 100:1 или даже 1000:1. Операции чтения, требующие сложных соединений с базой данных, очень дороги и требуют много времени на дисковые операции.
Недостаток: Денормализация
- Данные будут избыточны.
- Ограничения могут помочь сохранить избыточные копии информации в синхронизации, но они добавляют сложность в дизайн базы данных.
- Ненормализованные базы данных могут иметь большую нагрузку на запись, чем стандартизированная база данных.
Источник и дальнейшее чтение: Денормализация
Настройка SQL
Настройка SQL — это широкая тема со многими связаннымиКнигаможно использовать как ссылку.
использоватьОриентирыианализ производительностиВажно моделировать и обнаруживать узкие места в системе.
- Ориентиры- использоватьabи другие инструменты для моделирования ситуаций с высокой нагрузкой.
- анализ производительности- Включеножурнал медленных запросови другие инструменты, помогающие отслеживать проблемы с производительностью.
Сравнительный анализ и анализ производительности могут привести вас к следующим сценариям оптимизации.
Улучшенный режим
- Для быстрого доступа MySQL хранит данные на диске в непрерывных блоках.
- использовать
CHAR
Типы хранят поля фиксированной длины, не используютVARCHAR
.-
CHAR
Эффективен для быстрого произвольного доступа. При использованииVARCHAR
, если вы хотите прочитать следующую строку, вы должны сначала прочитать до конца текущей строки.
-
- использовать
TEXT
Типы хранят большие фрагменты текста, например основную часть блога.TEXT
Булев поиск также разрешен. использоватьTEXT
Поля должны хранить указатель на диске, чтобы найти блок текста. - использовать
INT
Типы хранят большие числа до 2 ^ 32 или 4 миллиарда. - использовать
DECIMAL
Тип хранит валюту, чтобы избежать ошибок представления с плавающей запятой. - избегать использования
BLOBS
Сохраните объект, сохраните место, где хранится объект. -
VARCHAR(255)
это максимальное количество символов, хранимых в виде 8-значного числа, и в некоторых реляционных базах данных максимальное использование байтов. - Установить в применимых сценариях
NOT NULL
ОграничениеУлучшить эффективность поиска.
используйте правильный индекс
- вы спрашиваете(
SELECT
,GROUP BY
,ORDER BY
,JOIN
) будет быстрее, если используется индекс. - Индексы обычно представляются как самобалансирующиесяB-дерево, который упорядочивает данные и позволяет выполнять операции поиска, последовательного доступа, вставки и удаления за логарифмическое время.
- Установка индекса сохранит данные в памяти и займет больше места в памяти.
- Операции записи будут выполняться медленнее, поскольку индекс необходимо обновить.
- При загрузке большого количества данных отключите индекс перед загрузкой данных, затем восстановите индекс, это может быть быстрее.
Избегайте дорогостоящих операций соединения
- Есть желаемая производительность, он может быть нестандартизирован.
Разделить таблицу данных
- Разделение данных горячих точек на отдельные таблицы может помочь с кэшированием.
Настройка кэша запросов
- При определенных обстоятельствах,кэш запросовМожет привести кпроблемы с производительностью.
Источник и дальнейшее чтение
- Советы по оптимизации запросов MySQL
- Почему VARCHAR(255) распространен?
- Как значения Null влияют на производительность базы данных?
- журнал медленных запросов
NoSQL
NoSQL естьбаза данных "ключ-значение",база данных документов,столбчатая база данныхилиграф базы данныхсобирательное имя. Базы данных денормализованы, а соединения таблиц в основном выполняются в коде приложения. Большинство NoSQL не могут реализовать действительно ACID-совместимые транзакции, поддержкув конечном итоге последовательный.
BASEЧасто используется для описания характеристик баз данных NoSQL. по сравнению сТеория CAP, BASE делает упор на доступность, а не на согласованность.
- в основном доступны- Система гарантирует доступность.
- мягкое состояние- Состояние системы может меняться со временем даже без ввода данных.
- окончательная согласованность- Через некоторое время система в конечном итоге становится согласованной, поскольку в течение этого времени система не получает никаких входных данных.
кроме как вSQL или NoSQLТакже очень полезно знать, какой тип базы данных NoSQL лучше всего подходит для вашего случая использования. Мы кратко рассмотрим в следующем разделехранилище ключей-значений,хранилище документов,столбчатое хранилищеихранилище графовбаза данных.
хранилище ключей-значений
Абстрактная модель: хеш-таблица
Хранилища «ключ-значение» обычно могут выполнять чтение и запись за время O(1) при использовании памяти или твердотельного накопителя для хранения данных. Хранение данных может бытьлексикографический порядокКлючи сохраняются, что позволяет эффективно извлекать ключи. Хранилища ключей и значений можно использовать для хранения метаданных.
Хранилища ключей и значений отличаются высокой производительностью и обычно используются для хранения простых моделей данных или часто изменяемых данных, таких как кэши в памяти. Хранилища «ключ-значение» обеспечивают ограниченные операции, и если требуется больше операций, сложность переносится на уровень приложения.
Хранилища ключей и значений являются основой для более сложных систем хранения, таких как хранилища документов и, в некоторых случаях, даже хранилища графов.
Источник и дальнейшее чтение
- база данных "ключ-значение"
- Недостатки хранилищ «ключ-значение»
- Редис Архитектура
- Memcached-архитектура
хранилище типов документов
Абстрактная модель: хранилище ключей и значений с документами в качестве значений
Хранилище типа документа сосредоточено вокруг документа (XML, JSON, двоичный файл и т. д.), в котором хранится вся информация об указанном объекте. Хранилище документов предоставляет API или операторы запросов для реализации запросов на основе внутренней структуры самого документа. Обратите внимание, что многие базы данных хранилища ключей и значений имеют функцию хранения метаданных для полезных значений, что также стирает границы между этими двумя типами хранения.
В зависимости от базовой реализации документы могут быть организованы в соответствии с коллекциями, тегами, метаданными или папками. Хотя разные документы могут быть сгруппированы вместе или сгруппированы вместе, они могут иметь совершенно отличные друг от друга поля.
Некоторые хранилища типов документов, такие как MongoDB и CouchDB, также предоставляют SQL-подобные операторы запросов для реализации сложных запросов. DynamoDB поддерживает как хранилища ключей-значений, так и хранилища типов документов.
Хранилища типов документов обладают высокой гибкостью и часто используются для обработки периодически изменяющихся данных.
Источник и дополнительная литература: хранилище типов документов
столбчатое хранилище
Источник: SQL и NoSQL, краткая история.
Абстрактная модель: вложенная
ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>>
карта
Основной единицей данных хранилища типа является столбец (пара имя/значение). Столбцы могут быть объединены в группы (аналогично таблице данных SQL). Суперстолбец снова группирует общие расы. Вы можете использовать ключ строки для независимого доступа к каждому столбцу, и столбцы с одинаковым значением ключа строки составляют. Каждое значение содержит версию метки времени для разрешения конфликта версий.
Google выпускает первую базу данных хранилища столбцовBigtable, который влияет на базы данных с открытым исходным кодом, активные в экосистеме Hadoop.HBaseи FacebookCassandra. Системы хранения, такие как BigTable, HBase и Cassandra, хранят ключи в алфавитном порядке, что позволяет эффективно читать ключевые столбцы.
Столбчатое хранилище отличается высокой доступностью и масштабируемостью. Обычно используется для хранения больших данных.
Исходное и расширенное чтение: Хранилище столбцов
граф базы данных
Абстрактная модель: граф
В графовой базе данных узел соответствует записи, а дуга соответствует связи между двумя узлами. Базы данных графов оптимизированы для представления сложных отношений или отношений «многие ко многим» с многочисленными внешними ключами.
Сложные отношения модели хранения данных базы данных FIG, такие как социальные сети, обеспечивают высокую производительность. Это относительно новые, еще не получившие широкого распространения средства разработки или ресурсы, которые найти относительно сложно. Многие цифры только черезREST APIдоступ.
Связанные ресурсы и дополнительная литература: Рисунок
Источник и дальнейшее чтение: NoSQL
- Объяснение терминологии базы данных
- Базы данных NoSQL — руководство по исследованию и принятию решений
- Масштабируемость
- Введение в NoSQL
- NoSQL-режим
SQL или NoSQL
Источник: Преобразование из СУБД в NoSQL
ВыбратьSQLпричина:
- структурированные данные
- Строгий режим
- реляционные данные
- Требуются сложные операции соединения
- дела
- Очистить режим расширения
- Существующие ресурсы богаче: разработчики, сообщества, кодовые базы, инструменты и т. д.
- Запрос по индексу очень быстрый
ВыбратьNoSQLпричина:
- полуструктурированные данные
- Динамический или гибкий режим
- нереляционные данные
- Не требуются сложные операции соединения
- Храните терабайты (или даже петабайты) данных
- Рабочие нагрузки с большим объемом данных
- IOPS высокая пропускная способность
Пример данных, подходящих для NoSQL:
- Данные захороненных точек и данные журнала
- Таблица лидеров или данные о счете
- Временные данные, такие как корзины покупок
- Часто используемые («горячие») таблицы
- Метаданные/справочная таблица
Источник и дополнительная литература: SQL или NoSQL
Источник: Шаблоны проектирования масштабируемых систем.
Кэширование может повысить скорость загрузки страниц и снизить нагрузку на сервер и базу данных. В этой модели диспетчер сначала проверяет, был ли ответ на запрос ранее, и, если да, возвращает предыдущий результат напрямую, чтобы сохранить реальную обработку.
Лучше всего использовать осколки базы данных с равномерно распределенным чтением. Однако горячие данные будут вызывать неравномерное распределение операций чтения, что приведет к узким местам.Если перед базой данных будет добавлен кеш, он сгладит влияние неравномерной нагрузки и всплесков трафика на базу данных.
Кэш клиента
Кэш может быть расположен на клиенте (операционная система или браузер),СерверИли другой уровень кэша.
Кэш CDN
CDNТакже считается разновидностью тайника.
Кэш веб-сервера
обратный проксиИ кеш (например,Varnish) может служить статическим и динамическим контентом напрямую. Веб-серверы также могут кэшировать запросы и возвращать соответствующие результаты без необходимости подключения к серверу приложений.
кеш базы данных
Уровень кэша обычно включен в конфигурацию базы данных по умолчанию, оптимизированную для общих случаев использования. Настройка конфигурации для использования разных режимов в разных ситуациях может еще больше повысить производительность.
кеш приложения
Кэши в памяти, такие как Memcached и Redis, представляют собой тип хранилища «ключ-значение» между приложением и хранилищем данных. Поскольку данные хранятся в оперативной памяти, это намного быстрее, чем обычная база данных, хранящаяся на диске. ОЗУ более ограничено, чем диск, поэтому, напримерleast recently used (LRU)изалгоритм инвалидации кешаВы можете поместить «популярные данные» в оперативную память и не обрабатывать некоторые «непопулярные» данные.
Redis имеет следующие дополнительные функции:
- Параметры сохранения
- Встроенные структуры данных, такие как отсортированные наборы и списки
Существует несколько уровней кэша, которые можно разделить на две большие категории:запрос к базе данныхиобъект:
- уровень строки
- уровень запроса
- полный сериализуемый объект
- Полностью визуализированный HTML
В общем, вы должны стараться избегать файлового кэширования, так как это затрудняет копирование и автоматическое масштабирование.
Кэширование на уровне запросов к базе данных
Когда вы делаете запрос к базе данных, хеш-значение оператора запроса и результат запроса сохраняются в кэше. Этот подход страдает от следующих проблем:
- Трудно удалить кешированные результаты со сложными запросами.
- Если элемент данных, например элемент данных в таблице, изменяется, все кэшированные результаты, которые могут содержать измененный элемент, необходимо удалить.
Кэширование на уровне объекта
Относитесь к своим данным как к объектам, точно так же, как к коду вашего приложения. Пусть приложение компонует данные из базы данных в экземпляр класса или структуру данных:
- Если базовые данные объекта изменились, объект удаляется из кэша.
- Разрешает асинхронную обработку: рабочие процессы собирают объекты, используя последние кэшированные объекты.
Предлагаемый кешированный контент:
- сеанс пользователя
- Полностью визуализированная веб-страница
- поток активности
- Данные пользовательского графика
Когда обновлять кеш
Поскольку вы можете хранить в кеше только ограниченные данные, вам нужно выбрать стратегию обновления кеша, которая подходит для вашего варианта использования.
режим кэширования
Источник: из кеша в сетку данных в памяти.
Приложение читает и пишет из памяти. Кэш не взаимодействует напрямую с памятью, а приложение делает следующее:
- Найти запись в кеше, если нужных данных нет в кеше
- Загрузите нужный контент из базы данных
- Сохранить найденные результаты в кэше
- Вернуть желаемый контент
def get_user(self, user_id):
user = cache.get("user.{0}", user_id)
if user is None:
user = db.query("SELECT * FROM users WHERE user_id = {0}", user_id)
if user is not None:
key = "user.{0}".format(user_id)
cache.set(key, json.dumps(user))
return user
MemcachedОбычно используется таким образом.
Данные, добавленные в кэш, считываются быстро. Режим кэширования также известен как ленивая загрузка. Кэшируются только запрошенные данные, что позволяет избежать заполнения кеша данными, которые не были запрошены.
Недостатки кэширования:
- Если запрошенные данные отсутствуют в кэше, для извлечения данных требуется три шага, что может привести к значительным задержкам.
- Если данные в базе данных обновляются, данные в кеше будут устаревшими. Эту проблему необходимо смягчить, установив TTL для принудительного обновления кэша или режима сквозной записи.
- Когда узел выходит из строя, он будет заменен новым узлом, что увеличивает время задержки.
режим сквозной записи
Источник: масштабируемость, доступность, стабильность, шаблоны.
Приложения используют кеш в качестве основного хранилища данных, читая и записывая данные в кеш и из него, который отвечает за чтение и запись данных из базы данных.
- Приложение добавляет/обновляет данные в кеш
- Кэш синхронно записывает в хранилище данных
- Вернуть желаемый контент
Код приложения:
set_user(12345, {"foo":"bar"})
Код кэша:
def set_user(user_id, values):
user = db.query("UPDATE Users WHERE id = {0}", user_id, values)
cache.set(user_id, user)
Режим сквозной записи в целом является очень медленной операцией из-за операции сохранения и записи, но чтение только что записанных данных происходит очень быстро. По сравнению с чтением данных пользователям обычно удобнее обновлять данные с меньшей скоростью. Данные в кеше не будут устаревшими.
Недостатки режима сквозной записи:
- Новые узлы, созданные из-за сбоя или масштабирования, новые узлы не кэшируются до тех пор, пока база данных не будет обновлена. Режим сквозной записи приложения кэша может решить эту проблему.
- Большинство записанных данных могут никогда не быть прочитаны, а TTL сводит к минимуму такие случаи.
режим обратной записи
Источник: масштабируемость, доступность, стабильность, шаблоны.
В режиме записи приложение делает следующее:
- Добавить или обновить запись в кэш
- Записывайте данные асинхронно, чтобы повысить производительность записи.
Недостатки режима обратной записи:
- Кэш может потерять данные до того, как его содержимое будет успешно сохранено.
- Реализация режима сквозной записи более сложна, чем режим кэширования или обратной записи.
обновить
Источник: из кеша в сетку данных в памяти.
Вы можете настроить кеш для автоматического обновления недавно использованного контента до истечения срока его действия.
Если кеш может точно предсказать, какие данные могут быть запрошены в будущем, очистка может привести к снижению задержки и времени чтения.
Недостатки обновления:
- Невозможность точно предсказать, какие данные потребуются в будущем, может привести к снижению производительности по сравнению с отсутствием обновления.
Недостатки кэширования:
- Необходимо поддерживать согласованность между кешем и реальным источником данных, таким как база данных в соответствии сКэш недействителен.
- Необходимо изменить приложение, например добавить Redis или memcached.
- Аннулирование кеша — сложная проблема, а когда обновлять кеш — сложный вопрос, связанный с ним.
Связанные ресурсы и дополнительная литература
- Из кеша в данные памяти
- Расширяемые шаблоны системного проектирования
- Введение в масштабируемую системную архитектуру
- Масштабируемость, доступность, стабильность и режим
- Масштабируемость
- Политики AWS ElastiCache
- Википедия)
асинхронный
Источник: Введение в масштабируемую системную архитектуру.
Асинхронные рабочие процессы помогают сократить время запросов, которые в противном случае выполнялись бы последовательно. Они могут помочь сократить время обработки запросов, заранее выполняя трудоемкую работу, например, периодически собирая данные.
очередь сообщений
Очередь сообщений получает, сохраняет и доставляет сообщение. Если медленная операция выполняется в порядке, то вы можете использовать следующий рабочий процесс очереди сообщений:
- Приложение отправляет задание в очередь, а затем уведомляет пользователя о статусе задания.
- Рабочий берет задание из очереди, обрабатывает его и отображает задание как завершенное.
Пользовательские операции не блокируются, а задания обрабатываются в фоновом режиме. В течение этого времени клиент может выполнить некоторую обработку, чтобы создать видимость завершения задачи. Например, если вы отправляете твит, он может сразу же появиться на вашей временной шкале, но может пройти некоторое время, прежде чем ваш твит дойдет до всех ваших подписчиков.
Redisявляется достаточно простым брокером сообщений, но сообщения могут быть потеряны.
RabbitMQОчень популярен, но требует адаптации к протоколу AMQP и управления собственными узлами.
Amazon SQSразмещен, но может иметь большую задержку, и сообщения могут быть доставлены дважды.
очередь задач
Очередь задачи получает задачи и связанные с ними данные, запустите их, а затем доставить его результаты. Они могут поддерживать планирование и могут использоваться для запуска вычислительных интенсивных рабочих мест на заднем плане.
CeleryПланирование поддерживается и в основном разработано на Python.
обратное давление
Если очередь начинает значительно увеличиваться, размер очереди может превысить размер памяти, что приведет к промахам кэша, чтению с диска и даже снижению производительности.обратное давлениеЭто может помочь нам, ограничивая размер очереди, чтобы поддерживать высокую пропускную способность и хорошее время отклика для заданий в очереди. Как только очередь заполнится, клиент получит код состояния Server Busy HTTP 503, чтобы повторить попытку позже. Клиент может повторить запрос позже, возможно,Экспоненциальная отсрочка.
Недостатки асинхронности:
- Случаи использования, такие как простые вычисления и рабочие процессы в реальном времени, могут больше подходить для синхронных операций, поскольку введение очередей может увеличить задержку и сложность.
Связанные ресурсы и дополнительная литература
- это игра чисел
- Применение обратного давления при перегрузке
- Маленькие законы
- В чем разница между очередью сообщений и очередью задач?
коммуникация
Источник: 7-уровневая модель OSI.
Протокол передачи гипертекста (HTTP)
HTTP — это метод кодирования и передачи данных между клиентом и сервером. Это протокол запроса/ответа: клиентские и серверные запросы и ответы на соответствующий контент и информацию о статусе выполнения. HTTP является автономным, позволяя запросам и ответам проходить через множество промежуточных маршрутизаторов и серверов, которые выполняют балансировку нагрузки, кэширование, шифрование и сжатие.
Базовый HTTP-запрос состоит из глагола (метода) и ресурса (конечной точки). Ниже приведены распространенные HTTP-глаголы:
глагол | описывать | *Идемпотент | безопасность | кэшируемый |
---|---|---|---|---|
GET | читать ресурс | Yes | Yes | Yes |
POST | Создайте ресурс или запустите процесс для обработки данных | No | No | Да, если ответ содержит информацию об обновлении |
PUT | Создать или заменить ресурсы | Yes | No | No |
PATCH | Частично обновленные ресурсы | No | No | Да, если ответ содержит информацию об обновлении |
DELETE | удалить ресурс | Yes | No | No |
Многократное выполнение не дает разных результатов.
HTTP зависит от протоколов более низкого уровня, таких какTCPиUDP) протокол прикладного уровня.
Источник и расширенное чтение: HTTP
Протокол управления передачей (TCP)
Источник: Как сделать многопользовательскую игру
TCP проходитIP-сетьпротокол, ориентированный на соединение. использоватьПожать рукиПодключаться и отключаться. Все пакеты передаются в исходной последовательности для обеспечения прибытия, эти меры гарантируют, что пакеты данных не будут повреждены:
- Серийный номер каждого пакета ипроверить код.
- пакет подтверждения) и автоматическая ретрансляция
Если отправитель не получит надлежащего ответа, он повторно отправит пакет. Если есть несколько тайм-аутов, соединение будет разорвано. Реализация TCPуправление потоком)иконтроль перегрузки. Эти гарантии вызывают задержки и обычно приводят к менее эффективной передаче, чем UDP.
Чтобы обеспечить высокую пропускную способность, веб-серверы могут поддерживать большое количество соединений TCP, что приводит к высокому использованию памяти. Наличие большого количества открытых соединений между потоками веб-сервера может быть дорогостоящим и ресурсоемким, т.memcachedсервер.пул соединенийМожет помочь, кроме переключения на UDP, где это применимо.
TCP полезен для критичных ко времени приложений, требующих высокой надежности. Примеры включают веб-серверы, информацию базы данных, SMTP, FTP и SSH.
Используйте TCP вместо UDP в следующих случаях:
- Вам нужно, чтобы данные были неповрежденными.
- Вам нужна автоматическая оптимальная оценка пропускной способности сети.
Протокол пользовательских дейтаграмм (UDP)
Источник: Как сделать многопользовательскую игру
UDP не требует подключения. Дейтаграммы (аналогичные пакетам) гарантируются только на уровне дейтаграмм. Дейтаграммы могут прибыть к месту назначения не по порядку или могут быть потеряны. UDP не поддерживает управление перегрузкой. Хотя это не так гарантированно, как TCP, UDP, как правило, более эффективен.
UDP может передавать дейтаграммы всем устройствам в подсети. Эта параDHCPПолезно, потому что устройству в подсети не назначен IP-адрес для TCP, а IP является обязательным.
UDP менее надежен, но подходит для VoIP, видеочата, потоковой передачи и многопользовательских игр в реальном времени.
Используйте UDP вместо TCP в следующих ситуациях:
- вам нужна низкая задержка
- Задержка данных хуже, чем потеря данных
- Вы хотите реализовать свой собственный метод исправления ошибок
Источник и дальнейшее чтение: TCP и UDP
- сеть программирования игр
- Ключевые различия между TCP и UDP
- Разница между TCP и UDP
- Протокол управления передачей
- Протокол пользовательских датаграмм
- Расширение Memcache в Facebook
Протокол удаленного вызова процедур (RPC)
Source: Crack the system design interview
В RPC клиент перейдет к вызову другого адресного пространства (обычно это удаленный сервер) в методе. Вызывающий код выглядит так, будто вызов является локальным методом, конкретный процесс взаимодействия клиента и сервера является абстрактным. Для местных звонков междугородние звонки обычно медленные и менее надежные, поэтому полезно различать их. Популярная среда RPC включает в себяProtobuf,ThriftиAvro.
RPC — это протокол «запрос-ответ»:
- клиентская программа── вызвать клиентскую программу-заглушку. Как и при вызове нативного метода, аргументы помещаются в стек.
- Программа-заглушка клиента── идентификатор запроса и параметры процесса, упакованные в информацию запроса.
- Модуль связи с клиентом── Отправлять информацию от клиента на сервер.
- Модуль связи с сервером── Передайте принятый пакет программе-заглушке на стороне сервера.
- Программа-заглушка сервера── Распаковать результат, вызвать метод сервера по id процедуры и передать параметры.
Пример вызова RPC:
GET /someoperation?data=anId
POST /anotheroperation
{
"data":"anId";
"anotherdata": "another value"
}
RPC фокусируется на раскрытии методов. RPC часто используется для решения проблем производительности с внутренней связью, чтобы вы могли вручную обрабатывать локальные вызовы, чтобы лучше соответствовать вашей ситуации.
Выбирайте нативную библиотеку (также известную как SDK), когда:
- Вы знаете свою целевую платформу.
- Вы хотите контролировать, как осуществляется доступ к вашей «логике».
- Вы хотите контролировать ошибки, возникающие в вашей библиотеке.
- Опыт работы и конечного пользователя - ваши основные проблемы.
следитьRESTAPI-интерфейсы HTTP, как правило, больше подходят для общедоступных API.
Минусы: ПКП
- Клиент RPC тесно связан с реализацией службы.
- Новый API должен определяться для каждой операции или варианта использования.
- RPC трудно отлаживать.
- Вы не сможете легко модифицировать существующую технологию. Например, если вы хотитеSquidТакой кеш-сервер гарантирует, чтоRPC правильно кэшируютсяЭто может потребовать дополнительных усилий.
Передача репрезентативного состояния (REST)
REST — это обязательная модель проектирования архитектуры клиент/сервер, в которой клиент основан на серии операций с ресурсами, управляемых сервером. Сервер предоставляет интерфейс для изменения или получения ресурсов. Все коммуникации должны быть без сохранения состояния и кэшируемыми.
Интерфейсы RESTful имеют четыре правила:
- Знаки ресурсов (URI на http)-- Используйте один и тот же URI для любой операции.
- Изменение представления (HTTP-действие)── использовать действия, заголовки и тело.
- Сообщение об ошибке с самоописанием (код состояния в HTTP)── Используйте коды состояния, не изобретайте велосипед.
- HATEOAS(HTML-интерфейс в http)── ваш веб-сервер должен иметь доступ через браузер.
Пример REST-запроса:
GET /someresources/anId
PUT /someresources/anId
{"anotherdata": "another value"}
REST фокусируется на раскрытии данных. Он уменьшает степень связи между клиентом и сервером и часто используется при разработке общедоступных интерфейсов HTTP API. REST использует более общий и канонический подход к предоставлению ресурсов через URI.Выражается заголовкомА через GET, POST, PUT, DELETE и PATCH эти действия действовать. Из-за своей природы без сохранения состояния REST легко масштабировать и изолировать.
Минусы: ОТДЫХ
- Из-за того, что REST сосредоточен на раскрытии данных, он может плохо адаптироваться, когда ресурсы не организованы или структурированы естественным образом. Например, возврат обновленных записей, соответствующих определенному набору событий за последний час, сложно представить в виде пути. В REST это можно сделать с помощью пути URI, параметров запроса и, возможно, тела запроса.
- REST обычно полагается на несколько действий (GET, POST, PUT, DELETE и PATCH), но иногда они сами по себе не отвечают вашим потребностям. Например, перемещение просроченных документов в архивную папку может быть нелегко выразить с помощью приведенных выше глаголов.
- Чтобы отобразить одну страницу, выборка сложных ресурсов, вложенных в иерархию, требует нескольких циклов обмена данными между клиентом и сервером. Например, получить содержимое блога и связанные с ним комментарии. Эти множественные обходы очень обременительны для мобильных приложений, использующих неопределенное сетевое окружение.
- Со временем в ответ API может быть добавлено больше полей, и старые клиенты будут получать все новые поля данных, даже те, которые им не нужны, в результате это увеличит размер полезной нагрузки и вызовет большую задержку.
RPC против REST
действовать | RPC | REST |
---|---|---|
регистр | POST /signup | POST /persons |
выйти |
POST /resign { "personid": "1234" } |
DELETE /persons/1234 |
Чтение информации о пользователе | GET /readPerson?personid=1234 | GET /persons/1234 |
Чтение списка элементов пользователя | GET /readUsersItemsList?personid=1234 | GET /persons/1234/items |
Добавить элемент в список элементов пользователя |
POST /addItemToUsersItemsList { "personid": "1234"; "itemid": "456" } |
POST /persons/1234/items { "itemid": "456" } |
обновить элемент |
POST /modifyItem { "itemid": "456"; "key": "value" } |
PUT /items/456 { "key": "value" } |
удалить элемент |
POST /removeItem { "itemid": "456" } |
DELETE /items/456 |
Источник: Вы действительно знаете, почему предпочитаете REST RPC?
Источник и дополнительная литература: REST и RPC
- Вы действительно знаете, почему вы предпочитаете отдых вместо RPC?
- Когда RPC лучше, чем REST?
- REST vs JSON-RPC
- Демистификация RPC и REST
- Каковы недостатки использования REST
- Интервью по системному дизайну
- Thrift
- Зачем использовать REST вместо RPC внутри
Безопасность
Эта часть нуждается в большем количестве контента.собраться вместе!
Безопасность — обширная тема. Если у вас нет значительного опыта, знаний в области безопасности или должность, на которую вы претендуете, не требует знаний в области безопасности, вам не нужно знать ничего, кроме основ безопасности:
- Шифруется во время доставки и ожидания
- Обрабатывать все вводимые пользователем данные и параметры, отправленные пользователем, чтобы предотвратитьXSSиSQL-инъекция.
- Используйте параметризованные запросы, чтобы предотвратить инъекцию SQL.
- использоватьпринцип наименьших привилегий.
Источник и дальнейшее чтение
приложение
В какой-то момент вас попросят сделать консервативные оценки. Например, вам может потребоваться оценить, сколько времени потребуется для создания эскизов 100 изображений с диска или сколько памяти потребуется для структуры данных.2 силовой столиНекоторые временные данные, которые должен знать каждый разработчик(Аннотация: на OSChina есть эта статьяперевод) несколько полезных ссылок.
2 силовой стол
Power Exact Value Approx Value Bytes
---------------------------------------------------------------
7 128
8 256
10 1024 1 thousand 1 KB
16 65,536 64 KB
20 1,048,576 1 million 1 MB
30 1,073,741,824 1 billion 1 GB
32 4,294,967,296 4 GB
40 1,099,511,627,776 1 trillion 1 TB
Источник и дальнейшее чтение
Цифры задержки, которые должен знать каждый программист
Latency Comparison Numbers
--------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 100 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 10,000 ns 10 us
Send 1 KB bytes over 1 Gbps network 10,000 ns 10 us
Read 4 KB randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
Read 1 MB sequentially from memory 250,000 ns 250 us
Round trip within same datacenter 500,000 ns 500 us
Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory
Disk seek 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip
Read 1 MB sequentially from 1 Gbps 10,000,000 ns 10,000 us 10 ms 40x memory, 10X SSD
Read 1 MB sequentially from disk 30,000,000 ns 30,000 us 30 ms 120x memory, 30X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms
Notes
-----
1 ns = 10^-9 seconds
1 us = 10^-6 seconds = 1,000 ns
1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns
Метрики, основанные на приведенных выше цифрах:
- Последовательное чтение с диска со скоростью 30 МБ/с
- Последовательное чтение из Ethernet 1 Гбит/с со скоростью 100 МБ/с
- Чтение с SSD со скоростью 1 ГБ/с
- Чтение из основной памяти со скоростью 4 ГБ/с
- Может облететь землю 6-7 раз в секунду
- 2000 круглых поездок в секунду в центре обработки данных
Визуализация числа задержек
Источник и дальнейшее чтение
- Цифры задержки, которые должен знать каждый программист — 1
- Цифры задержки, которые должен знать каждый программист — 2
- Предложения по дизайну, курсы и советы по построению больших распределенных систем
- Консультации по программной инженерии по созданию крупномасштабных масштабируемых распределенных систем
Другие вопросы на собеседовании по системному проектированию
Общие вопросы для собеседования по проектированию систем со ссылками на решения по их решению
проблема | Цитировать |
---|---|
Создайте службу синхронизации файлов, похожую на Dropbox | youtube.com |
Разработать поисковую систему, похожую на Google |
queue.acm.org stackexchange.com ardendertat.com stanford.edu |
Разработан аналогично расширяемым сетевым рептилиям Google. | quora.com |
Дизайн Документов Google |
code.google.com neil.fraser.name |
Проектирование Redis-подобного хранилища ценностей | slideshare.net |
Проектирование системы кэширования наподобие Memcached | slideshare.net |
Разработка рекомендательной системы наподобие Amazon. |
hulu.com ijcai13.org |
Создайте систему коротких ссылок, такую как Bitly | n00tc0d3r.blogspot.com |
Создайте приложение для чата, такое как WhatsApp | highscalability.com |
Разработка системы обмена фотографиями в стиле Instagram |
highscalability.com highscalability.com |
Разработка подхода Facebook к рекомендациям по новостям |
quora.com quora.com slideshare.net |
Разработка системы временной шкалы Facebook |
facebook.com highscalability.com |
Проектирование чат-системы Facebook |
erlang-factory.com facebook.com |
Разработка графической поисковой системы наподобие Facebook |
facebook.com facebook.com facebook.com |
Проектирование сети доставки контента наподобие CloudFlare | cmu.edu |
Создайте систему популярных тем в стиле Twitter. |
michael-noll.com snikolov .wordpress.com |
Разработайте систему генерации случайных идентификаторов |
blog.twitter.com github.com |
Возвращает топ k наибольшего количества запросов за определенный период времени |
ucsb.edu wpi.edu |
Разработайте сервисную систему с данными, поступающими из нескольких центров обработки данных. | highscalability.com |
Создайте многопользовательскую карточную онлайн-игру |
indieflashblog.com buildnewgames.com |
Разработайте систему сбора мусора |
stuffwithstuff.com washington.edu |
Добавьте больше вопросов по дизайну системы | способствовать |
реальная архитектура
Статьи о том, как настоящие системы устроены в реальности.
Source: Twitter timelines at scale
Вместо того, чтобы сосредотачиваться на деталях следующих статей, сосредоточьтесь на следующем:
- Откройте для себя общие принципы, методы и шаблоны в этих статьях.
- Узнайте, какие проблемы решает каждый компонент, когда его использовать, а когда не использовать.
- Обзор изученных статей
тип | система | Цитировать |
---|---|---|
Data processing | MapReduce- Распределенная обработка данных Google | research.google.com |
Data processing | Spark- Распределенная обработка данных Databricks | slideshare.net |
Data processing | Storm- Распределенная обработка данных для Twitter | slideshare.net |
Data store | Bigtable- столбчатая база данных Google | harvard.edu |
Data store | HBase- Реализация Bigtable с открытым исходным кодом | slideshare.net |
Data store | Cassandra- База данных листинга Facebook | slideshare.net |
Data store | DynamoDB- база данных документов Amazon | harvard.edu |
Data store | MongoDB- База документов | slideshare.net |
Data store | Spanner- Глобальная распределенная база данных Google | research.google.com |
Data store | Memcached- Система кэширования с распределенной памятью | slideshare.net |
Data store | Redis- Распределенная система кэширования памяти с сохранением и типами значений | slideshare.net |
File system | Google File System (GFS)- Распределенная файловая система | research.google.com |
File system | Hadoop File System (HDFS)- Реализация GFS с открытым исходным кодом | apache.org |
Misc | Chubby- Служба блокировки Google с низким уровнем связи для распределенных систем. | research.google.com |
Misc | Dapper- Инфраструктура отслеживания распределенной системы | research.google.com |
Misc | Kafka- Система обмена сообщениями «публикация-подписка» LinkedIn. | slideshare.net |
Misc | Zookeeper- Централизованная инфраструктура и службы координации | slideshare.net |
Добавить больше | способствовать |
Системная архитектура компании
Инженерный блог компании
Структура компании, в которую вы проходите собеседование
Проблема, с которой вы столкнулись, может исходить из той же области
- Airbnb Engineering
- Atlassian Developers
- Autodesk Engineering
- AWS Blog
- Bitly Engineering Blog
- Box Blogs
- Cloudera Developer Blog
- Dropbox Tech Blog
- Engineering at Quora
- Ebay Tech Blog
- Evernote Tech Blog
- Etsy Code as Craft
- Facebook Engineering
- Flickr Code
- Foursquare Engineering Blog
- GitHub Engineering Blog
- Google Research Blog
- Groupon Engineering Blog
- Heroku Engineering Blog
- Hubspot Engineering Blog
- High Scalability
- Instagram Engineering
- Intel Software Blog
- Jane Street Tech Blog
- LinkedIn Engineering
- Microsoft Engineering
- Microsoft Python Engineering
- Netflix Tech Blog
- Paypal Developer Blog
- Pinterest Engineering Blog
- Quora Engineering
- Reddit Blog
- Salesforce Engineering Blog
- Slack Engineering Blog
- Spotify Labs
- Twilio Engineering Blog
- Twitter Engineering
- Uber Engineering Blog
- Yahoo Engineering Blog
- Yelp Engineering Blog
- Zynga Engineering Blog
Источник и дальнейшее чтение
совершенствуется
Заинтересованы в добавлении некоторых частей или помощи в улучшении некоторых частей?Присоединяйся!
- Распределенные вычисления с MapReduce
- Согласованное хеширование
- Контроллер прямого доступа к памяти (DMA)
- способствовать
Спасибо
Сертификаты и источники предоставляются по всему репозиторию
Специальная благодарность:
- Hired in tech
- Cracking the coding interview
- High scalability
- checkcheckzz/system-design-interview
- shashank88/system_design
- mmcgrana/services-engineering
- System design cheat sheet
- A distributed systems reading list
- Cracking the system design interview
Контакты
Не стесняйтесь обращаться ко мне, чтобы обсудить недостатки, вопросы или комментарии в этой статье.
может быть в моемGithub home.Найдите мои контактные данные на
лицензия
Creative Commons Attribution 4.0 International License (CC BY 4.0)
http://creativecommons.org/licenses/by/4.0/
разное
Подробнее см.:GitHub.com/редкая земля/система…