Приступая к проектированию системы
Проектирование системы - это процесс проектирования архитектуры, компонентов и интерфейсов системы таким образом, чтобы она удовлетворяла требованиям конечного пользователя.
Это обширная область инженерии, включающая в себя различные концепции и принципы, которые помогут вам в разработке масштабируемых систем. Эти концепции широко задаются в раундах собеседований на должности SDE 2 и SDE 3 в различных технологических компаниях. Эти руководящие должности требуют лучшего понимания того, как вы решаете конкретную проблему проектирования, как вы реагируете, когда в вашей системе больше, чем ожидалось, как вы проектируете базу данных своей системы и многое другое. Все эти решения необходимо принимать с осторожностью, учитывая масштабируемость, надежность, доступность и ремонтопригодность. Мы рассмотрим все эти термины в этой статье.
Прежде чем мы начнем обсуждать терминологию, нам нужно прояснить несколько вещей. Когда вам задают проблему проектирования системы, вы должны подходить к ней планомерно. Изначально Проблема может выглядеть огромной, и можно легко запутаться, как начать ее решать. Более того, при проектировании системы не существует фиксированного решения. Есть несколько способов достичь Решения.
Итак, давайте обсудим, как следует начинать с решения проблемы дизайна, данной в интервью.
Подходя к проблеме дизайна
- Разбивка проблемы : когда вам дается проблема дизайна, начинайте разбивать ее на мелкие компоненты. Эти компоненты могут быть службами или функциями, которые вам необходимо реализовать в Системе. Первоначально система, которую необходимо разработать, может иметь большое количество функций, и от вас не ожидается, что вы будете проектировать все, если это собеседование. Спросите своего интервьюера о функциях, которые вы планируете добавить в свою систему. Есть ли что-нибудь еще, что вы должны туда положить? Любая особенность? Любая услуга ? … Просить!
- Передача ваших идей : хорошо общайтесь с интервьюером. При разработке системы держите его в курсе. Обсудите свой процесс вслух. Постарайтесь ясно продемонстрировать свой дизайн на доске с блок-схемами и диаграммами. Опишите свои идеи интервьюеру, как вы планировали решить проблему масштабируемости, как вы будете проектировать свою базу данных и многое другое.
- Допущения, которые имеют смысл : сделайте несколько разумных предположений при проектировании Системы. Предположим, вы должны предположить количество запросов, которые система будет обрабатывать в день, количество обращений к базе данных, сделанных в месяц, или уровень эффективности вашей системы кэширования. Это некоторые из цифр, которые вам нужно учитывать при проектировании. Постарайтесь, чтобы эти цифры были как можно более разумными. Подтвердите свое предположение некоторыми достоверными фактами и цифрами.
Теперь мы знаем, как подойти к дизайнерской проблеме. Но для того, чтобы успешно пройти собеседование или успешно построить масштабируемую систему, нам необходимо убедиться, что наша система является надежной, доступной, масштабируемой и обслуживаемой. Поэтому мы должны знать, что это за термины и как они влияют на нашу систему в долгосрочной перспективе.
Надежность в проектировании системы -
Система считается надежной, если она соответствует требованиям конечного пользователя. При разработке системы вы должны были запланировать внедрение в нее набора функций и услуг. Если ваша система может обслуживать все эти функции без износа, то ее можно считать надежной .
Отказоустойчивая система может продолжать надежно работать даже при наличии неисправностей. Неисправности - это ошибки, возникающие в определенном компоненте системы. Возникновение неисправности не гарантирует отказ системы.
Отказ - это состояние, когда система не может работать должным образом. Он больше не может предоставлять определенные услуги конечным пользователям.
Доступность в дизайне системы -
Доступность - это характеристика системы, которая направлена на обеспечение согласованного уровня эксплуатационных характеристик, также известного как время безотказной работы . Для системы важно обеспечить высокую доступность для обслуживания запросов пользователя.
Степень доступности варьируется от системы к системе. Предположим, вы разрабатываете приложение для социальных сетей, тогда высокая доступность не является большой необходимостью. Допускается задержка в несколько секунд. Просмотр публикации любимой знаменитости в Instagram с задержкой от 5 до 10 секунд не составит большого труда. Но если вы разрабатываете систему для больниц, центров обработки данных или банковского дела, вам следует убедиться, что ваша система высокодоступна. Потому что задержка в обслуживании может привести к огромным убыткам.
Существуют различные принципы, которым вы должны следовать, чтобы обеспечить доступность вашей системы:
- В вашей системе не должно быть единой точки отказа. По сути, ваша система не должна зависеть от одной службы, чтобы обрабатывать все ее запросы. Потому что, когда эта служба выходит из строя, вся ваша система может оказаться под угрозой и стать недоступной.
- Обнаружение сбоя и устранение его на этом этапе.
Масштабируемость в дизайне системы -
Масштабируемость означает способность системы справляться с возрастающей нагрузкой. При проектировании системы следует учитывать нагрузку, которую она испытывает. Говорят, что если вам нужно спроектировать систему для нагрузки X, вы должны спланировать ее для 10X и протестировать для 100X . Может возникнуть ситуация, когда ваша система может испытывать возрастающую нагрузку. Предположим, вы разрабатываете приложение для электронной коммерции, тогда вы можете ожидать скачка нагрузки во время Flash-продажи или при запуске нового продукта в продажу. В этом случае ваша система должна быть достаточно умной, чтобы эффективно справляться с возрастающей нагрузкой, что делает ее масштабируемой .
Чтобы обеспечить масштабируемость, вы должны иметь возможность вычислить нагрузку, которую будет испытывать ваша система. Нагрузку на систему описывают различные факторы:
- Количество запросов, поступающих в вашу систему для обработки в день
- Количество вызовов базы данных, сделанных из вашей системы
- Количество запросов на попадание или пропадание кеша в вашу систему
- Пользователи, которые в настоящее время активны в вашей системе
Вниманию читателя! Не переставай учиться сейчас. Получите все важные концепции системного дизайна с отраслевыми экспертами. Присоединяйтесь к курсу системного дизайна, чтобы посещать живые занятия.