Skip to content

Latest commit

 

History

History
88 lines (51 loc) · 8.55 KB

system-design.md

File metadata and controls

88 lines (51 loc) · 8.55 KB

Проектирование систем

Оригинал

Ссылки / Ресурсы

Введение

Что такое системное проектирование?

Системное проектирование — это процесс определения элементов системы, а также их взаимодействий и связей с целью удовлетворения набора заданных требований.

Он включает в себя формулировку проблемы, разбиение её на более мелкие компоненты и проектирование каждого компонента для эффективной совместной работы, позволяющей достичь общей цели системы. Этот процесс обычно включает в себя анализ текущей системы (если таковая имеется) и определение любых недостатков, создание подробного плана новой системы и тестирование проекта, чтобы убедиться, что он соответствует требованиям. Это итеративный процесс, который может включать несколько этапов проектирования, тестирования и доработки.

Что касается разработки программного обеспечения, системное проектирование — это этап процесса разработки программного обеспечения, который фокусируется на высокоуровневом проектировании программной системы, включая архитектуру и компоненты.

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

Как правильно осуществлять проектирование системы?

При проектировании системы можно придерживаться следующей последовательности шагов:

  • Понять проблему: соберите информацию о проблеме, которую вы пытаетесь решить, и требованиях к системе. Определите пользователей и их потребности, а также любые ограничения системы.
  • Определить область применения системы: Определите границы системы, включая то, что система будет делать, а что нет.
  • Исследовать и проанализировать существующие системы: Рассмотрите аналогичные системы, созданные в прошлом, и определите, что работало хорошо, а что нет. Используйте эту информацию для обоснования своих проектных решений.
  • Создать эскиз проекта: Наметьте в общих частах основные компоненты системы и то, как они будут взаимодействовать друг с другом. Сюда можно отнести приблизительную схему архитектуры системы или блок-схему, описывающую процесс работы системы.
  • Постепенно дорабатьвать проект: Работая над элементами проекта, постепенно совершенствуйте его, пока не получите полный и детально проработанный проект, отвечающий всем требованиям.
  • Создать документацию для проекта: создайте подробную документацию вашего проекта для дальнейшего использования и поддержки.
  • Постоянно контролировать и совершенствовать систему: Проектирование системы — это не одноразовый процесс, его необходимо постоянно контролировать и совершенствовать, чтобы оно соответствовало меняющимся требованиям.

Обратите внимание, что это общий подход к проектированию системы. Ответы на специфические вопросы, которые могут задать на собеседовании, можно найти по следующим ссылкам:

Для кого предназначено это руководство?

Производительность/Масштабируемость

Задержка/Пропускная способность

Доступность/Согласованность данных

Теорема CAP

Доступность + Устойчивость к разделению
Согласованность данных + Устойчивость к разделению

Варианты согласованности данных

Под вариантами согласованности данных подразумевают способы хранения и управления данными в распределенной системе, а также как эти данные становятся доступными для пользователей и приложений. Существует три основных типа согласованности:

  • Строгая согласованность
  • Слабая согласованность
  • Согласованность в конечном счёте

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

Полезные ссылки:

Слабая согласованность

Согласованность в конечном счёте

Строгая согласованность

Способы обеспечения доступности

Аварийное переключение

Active-passive

Active-active

Создание реплик (дублирование)

Ведущий-ведущий

Ведущий-ведомый