Бэкенд-инжиниринг — это искусство. В течение моей 18-летней карьеры, связанной с созданием серверных приложений, я обнаружил, что определенные шаблоны проектирования коммуникаций продолжают появляться. Существует всего несколько способов взаимодействия клиентов с серверными приложениями, хотя их может быть и больше, я считаю, что шаблоны, которые я обсуждаю в этом курсе, являются наиболее распространенными.
Примерами этих шаблонов являются request-response, publish-subscribe, short и long и push.
Основываясь на этих шаблонах проектирования связи, инженеры могут использовать ряд протоколов для конкретной связи. В то время как основные транспортные средства ограничены либо TCP, либо UDP, поверх этих двух построено множество отраслевых протоколов для решения определенных проблем и вариантов использования. Примерами таких протоколов высокого уровня являются HTTP/1.1, HTTP/2, HTTP/3, gRPC, WebRTC и многие другие. Другие транспортные протоколы, такие как QUIC, были построены поверх UDP, чтобы снизить потоковую передачу HTTP/2 на транспортном уровне. Каждый протокол имеет свои плюсы и минусы и подходит для определенных случаев использования. В ходе курса я обсуждаю наиболее распространенные протоколы и привожу примеры и демонстрации, где это применимо.
Прежде чем клиент сможет отправить запрос, он должен установить соединение с серверной частью. Понимание того, как устанавливается соединение и какие части установления соединения выполняются в ядре, а какие — в процессе внутреннего приложения, имеет решающее значение. Как соединение затем принимается серверным приложением и как оно может принимать соединения как можно быстрее, чтобы очередь ядра не заполнялась, иначе клиенты больше не смогут подключаться.
После того, как соединение установлено, клиент отправляет запрос, но что именно происходит в бэкэнд-приложении, чтобы прочитать запрос? Что такое запрос? Понимание стоимости разбора запроса на основе протокола позволяет инженеру оценить проделанную работу и снабдить его лучшими инструментами для устранения проблем с производительностью или ошибок.
Как только запрос достигает серверной части, приложение должно выполнить запрос. Бэкэнд имеет множество вариантов дизайна, когда дело доходит до стиля исполнения, который он может выбрать. Понимание разницы между процессом и потоком, многопроцессорностью, многопоточностью и взаимосвязь с количеством ядер ЦП или аппаратных потоков имеет решающее значение для выбора правильного шаблона выполнения. Не обязательно придерживаться этих шаблонов, но можно изобретать новые, соответствующие их потребностям.
Этот курс предназначен для инженеров, которые создавали серверные приложения, это курс среднего и продвинутого уровня, требуются определенные знания в области программирования и сетей, поэтому я рекомендую пройти мой курс по основам сетевой инженерии перед тем, как пройти этот курс, если у вас нет навыков работы в сети. Я надеюсь, вам понравится этот курс, и большое спасибо за его рассмотрение.
https://www.udemy.com/course/fundamentals-of-networking-for-effective-backend-design/