Your AI powered learning assistant

ПОЧЕМУ джунам нужно знать ТАК МНОГО и что вообще нужно знать?

вступление

00:00:00

Преодоление входного барьера для новых разработчиков Новые застройщики часто сталкиваются с высоким барьером для входа на сегодняшний перенасыщенный рынок по сравнению с прежними временами. Ключевой проблемой, мешающей новичкам, является их неполное понимание общей картины, включая такие понятия, как интерфейс, роль Python, веб-фреймворки, базы данных SQL, ORM и то, как все это сочетается в единую структуру.

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

Часть 1. Как устроен web в общих чертах

00:01:20

Чтобы узнать, как работает веб-браузер, введите название веб-сайта в адресную строку браузера. Используя инструменты разработчика для отслеживания действий браузера, мы видим, как загружается страница Google после нажатия клавиши Enter. Анализ нашего первого запроса позволяет получить важную информацию, такую как заголовки и данные ответа, с акцентом на структуру URL и IP-адрес.

протокол http

00:02:25

Протокол HTTP в схеме и доменное имя. Схема указывает, что запрос был выполнен с использованием протокола HTTP, который является более высокоуровневым, чем TCP/IP. Для отправки запроса серверу необходимо знать IP-адрес сервера, а не только его доменное имя.

DNS

00:03:13

DNS преобразует доменные имена в IP-адреса, упрощая доступ к веб-сайтам за счет использования запоминающихся имен вместо сложных цифр. Знание IP-адреса позволяет нам подключаться к серверу в Интернете и напрямую отправлять запросы. Введя IP-адрес в адресную строку браузера вместе с номером порта, мы можем протестировать доступ к различным веб-сайтам, не требуя их доменных имен.

hosting

00:04:23

При размещении нашего сервера сквозное соединение осуществляется с сервером, который по сути является другим компьютером с IP-адресом и открытыми портами для приема HTTP-запросов.

веб-сервер

00:04:43

Веб-сервер, обрабатывающий HTTP-запросы HTTP-запрос обрабатывается веб-сервером, а не самим компьютером. Веб-сервер действует как служба, которая прослушивает определенный порт и определяет, как обрабатывать запрос, на основе содержащейся в нем логики программирования.

Логика обработки запросов на веб-серверах Веб-сервер перенаправляет запрос на "конечный" сервер, который содержит инструкции на языке программирования и логику для дальнейшей обработки. Он решает, как обрабатывать запрос, и распределяет его между различными конечными точками в зависимости от доменных адресов, полученных в запросах.

разбор http запроса по таймингам

00:06:00

Спикер расскажет о процессе анализа HTTP-запроса на основе определения времени. Он продемонстрирует, как отображается страница Google, и объяснит соответствующие действия, например, переключение вкладок для наглядного просмотра документации разработчика. Основное внимание уделяется пониманию последовательности событий от постановки запроса в очередь до получения и обработки ответов в течение миллисекунд.

смотрим заголовки запроса и ответа

00:07:22

Эффективный анализ заголовков запросов Анализ заголовков запросов и ответов за миллисекунды позволяет нам воспринимать информацию быстрее, чем мы успеваем моргнуть. Изучая протокол HTTP, мы можем расшифровать такие детали, как тип используемого агента и операционной системы, а также языковые настройки для запросов.

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

Информация из заголовков контента Изучение заголовков содержимого позволяет получить важную информацию о сервере, такую как имя веб-сервера и настройки файлов cookie, запрашиваемые браузерами. Понимание заголовков "Тип содержимого" позволяет получить представление о текстовом содержимом HTML, получаемом с серверов.

разбор ответа от сервера

00:08:40

Изучая HTML-ответ от внутреннего сервера, мы обнаруживаем сочетание JavaScript, стилей и HTML-элементов. Перейдя на вкладку "Элементы" в инструментах разработчика браузера, мы можем визуально просматривать отдельные HTML-теги, такие как изображения, из определенных источников. Например, идентификация тега изображения как "Image" с определенным источником позволяет нам заменять его контентом из другого источника, такого как сайт Google, отправляя запросы HTTP GET.

итоги 1 части

00:10:23

Наш браузер отправляет HTTP-запрос, используя протокол TCP/IP и доменную систему для разрешения доменных имен. IP-адрес соответствует доменному имени, что приводит к отправке запроса на наш веб-сервер для обработки. Затем сервер обрабатывает запрос на основе бизнес-логики и возвращает конкретный ответ.

Часть 2. Реализация backend на python

00:11:30

Внедрение серверной части на Python предполагает создание HTML-страниц, подобных Google. Понимание структуры серверной части на Python имеет решающее значение для разработчиков. Изучение проблем локальной разработки и перенос кода с локального на рабочий.

язык программирования

00:12:00

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

веб-фреймворки

00:12:23

В первой части мы обсудили, как клиент отправляет HTTP-запрос на веб-сервер, который затем обрабатывает его и выполняет определенные действия. Бизнес-логика определяет ответ, отправляемый обратно после обработки. Для реализации этого процесса на Python широко используются различные популярные веб-фреймворки, такие как Django, Flask, FastAPI.

базы данных

00:14:23

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

Выбор PostgreSQL по сравнению с другими Базами данных Наиболее распространенной базой данных, используемой на Python сегодня, является PostgreSQL благодаря своей надежности и широкому использованию. Изучение PostgreSQL на основе MySQL или SQL на 99% повышает вероятность его использования в реальных сценариях.

SQL

00:16:45

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

ORM

00:18:30

Понимание ORM в Django и пользовательской модели ORM в Django работает с базой данных через уровень абстракции, называемый ORM. Пользовательская модель представляет собой таблицу с такими столбцами, как адрес электронной почты и пароль, в которой хранятся пользовательские данные в базе данных.

Преимущества использования ORM для работы с базами данных ORM абстрагирует SQL-запросы, позволяя разработчикам работать с объектами, которые автоматически преобразуются в SQL. Используя ORM, разработчики сосредотачиваются на объектно-ориентированном программировании, а не на конкретных реализациях SQL.

кэширование

00:23:08

Понимание кэширования с помощью Redis Кэширование необходимо в каждом приложении для эффективного хранения и извлечения данных. Redis, популярное SQL-решение для кэширования, использует ключи для временного хранения значений. Установив значение ключа в Redis, мы можем получить к нему доступ в течение 60 секунд; в противном случае значение необходимо пересчитать.

Реализация эффективного кэширования в Django Django по умолчанию реализует кэширование с использованием реляционных баз данных, таких как SBD, что не рекомендуется из-за низкой производительности по сравнению с кэшированием на основе памяти, таким как Redis. Использование кэша помогает избежать избыточных вычислений и значительно ускоряет процессы поиска данных.

celery

00:26:40

Понимание фреймворка Celery в Python Celery - это фреймворк на Python для обработки отложенных или фоновых задач. Он позволяет выполнять такие задачи, как отправка электронных писем после получения определенных запросов от пользователей, ожидание ответов от SMTP-серверов и обновление баз данных по завершении задачи.

Эффективное решение задач с брокерами Код на Python обрабатывает вызовы конечных точек, вызывая отложенные задачи в Celery, и отправляет соответствующие HTTP-ответы. Система эффективно обрабатывает задачи в очереди, используя посредников, таких как Redis или RabbitMQ, для обеспечения бесперебойной работы фонового процесса выполнения задач.

docker

00:30:45

Эффективная разработка с помощью Docker и локального развертывания Docker позволяет нам кэшировать Redis в Django ORM SQL. Используя Docker, мы можем легко перенести Docker-образ Redis в нашу локальную среду, не устанавливая его отдельно. Это позволяет нам запускать несколько экземпляров локально на разных портах без необходимости индивидуальной установки.

Упрощенное управление приложениями с помощью контейнеров Используя Docker Compose, мы можем инкапсулировать приложения, такие как PostgreSQL, в контейнеры вместе с нашим приложением Django. Все управляется в одном файле compose и легко взаимодействует через внутреннюю сеть Docker. Развертывание этой установки упрощается с помощью таких команд, как "docker-compose build" и "start", что делает разработку удобной для последующего производственного развертывания.

git

00:32:30

Чтобы управлять локальной разработкой и в конечном итоге запустить проект в производство, необходимо создать репозиторий Git. Понимание идентификатора Git имеет решающее значение для надлежащего контроля версий и совместной работы. Эффективно используя Git, мы можем отслеживать ход разработки и отправлять код в наш репозиторий.

CI/CD

00:33:42

Важность CI/CD при развертывании кода Непрерывная интеграция и непрерывная поставка (CI/CD) имеют решающее значение для эффективного внедрения кода в рабочую среду. CI предполагает непрерывную интеграцию изменений кода, в то время как CD фокусируется на беспрепятственном внедрении этих изменений в производственную среду. Инженеры DevOps обычно занимаются настройкой конвейеров CI/CD в проектах.

Ключевые этапы процесса ИЦ CI включает в себя такие этапы, как создание, тестирование и объединение ветвей с использованием рабочих процессов Git. CD гарантирует бесперебойную доставку нового кода на рабочий сервер и его корректное функционирование. Сценарии автоматизации управляют такими задачами, как извлечение кода из репозиториев, создание образов Docker и их развертывание на серверах.

Проблемы, связанные с местным развитием и производством Локальные среды разработки могут отличаться от производственных из-за таких факторов, как конфигурации баз данных или платформы, используемые локально, но непригодные для развертывания. Клонирование экземпляров Django помогает точно воспроизвести локальные настройки для плавного перехода в среду реального сервера.

WSGI

00:40:35

Понимание тут WSGI и АСГИ веб-сервера переработка Объясняем разницу между WSGI и ASGI, уделяя особое внимание их синхронной и асинхронной природе. Описываем, как веб-сервер обрабатывает HTTP-запросы, получая их от браузеров и обрабатывая их с помощью выполнения кода на Python.

Использование Gunicorn в качестве интерфейса для приложений Django Представляем Gunicorn в качестве интерфейса шлюза веб-сервера для приложений Django для эффективного взаимодействия с веб-серверами. Подчеркиваем важность глобальных функций в Python для операций ввода-вывода в программах.

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

Масштабирование подключений к базе данных с помощью нескольких рабочих экземпляров Иллюстрирующий, как каждый сотрудник Unicorn устанавливает соединения с базами данных и кэшами, такими как Redis, для обработки поиска или хранения данных во время обработки HTTP-запросов, подчеркивающий соображения масштабируемости при работе с многочисленными одновременными подключениями.

celery workers

00:50:00

Эффективное решение задач с помощью сотрудников Celery и внешних ресурсов Работники Celery могут использовать внешние ресурсы, такие как API, для эффективной обработки отложенных задач. Функция "S" позволяет выполнять отложенные задачи аналогично отдельному процессу с собственным набором рабочих серий. Эти рабочие серии работают независимо и предотвращают конфликты, выполняя разные задачи одновременно.

Автоматизированный рабочий процесс выполнения задач Каждый рабочий сервер в серверной части работает как клон основного обработчика задач, подключаясь к базам данных и кэшам при необходимости. Задачи запускаются с помощью кода с использованием таких функций, как задержка или применение синхронизации, что обеспечивает плавное выполнение без ручного вмешательства. Волшебство заключается в том, как код на Python отправляет брокерам сообщения о запуске задачи на основе заданных аргументов, упрощая сложные процессы до управляемых шагов.

краткий повтор 2 части

00:55:05

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

Эффективная обработка запросов с помощью Unicorn Workers Взаимодействие между Unicorn workers и задачами играет ключевую роль в эффективной обработке запросов. Задачи выполняются Unicorn workers, которые взаимодействуют с базами данных, кэшами и брокерами для выполнения запрошенных операций перед отправкой HTTP-ответа клиентам через веб-сервер.

Итоги

00:56:34

Необходимые знания для разработчиков Важно, чтобы разработчик знал различные технологии и имел целостное представление о сложностях в работе. Понимание основ веб-протоколов, таких как HTTP, TCP/IP, DNS-систем и хостинга, имеет решающее значение для разработчиков. Важно знать веб-фреймворки, такие как Flask или Django, а также базы данных SQL и инструменты ORM.

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