Библиотека программиста | программирование, кодинг, разработка
81.5K subscribers
2.77K photos
118 videos
87 files
6.08K links
Все самое полезное для программиста в одном канале.

Список наших каналов: https://t.me/proglibrary/9197
Учиться у нас: https://proglib.io/w/a32a0d94

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv
Прайс: @proglib_advertising
Download Telegram
Cookies 🆚 Sessions

Куки и сессии используются для передачи данных о пользователе (учетные данные и разрешения) через HTTP-запросы.

🔹 Cookies
• Куки обычно имеют ограничение на размер в 4 КБ
• Используются для хранения учетных данных пользователя или разрешений
• Отправляются с каждым последующим запросом от вошедшего пользователя
• Пользователи могут отключить куки в своем браузере, что может привести к выходу из системы

🔹 Sessions
• Создаются и хранятся на серверной стороне
• Сервер генерирует уникальный идентификатор сессии
• Идентификатор сессии связывается с конкретной пользовательской сессией
• Идентификатор сессии может быть отправлен клиенту в куки, параметрах URL или HTTP-заголовках
• Могут хранить больше данных, чем куки
• Обеспечивают большую безопасность по сравнению с куки, так как данные сессии не доступны напрямую клиенту

👉 Источник

#инфографика
This media is not supported in your browser
VIEW IN TELEGRAM
7 стратегий для масштабирования базы данных

1️⃣ Индексация
2️⃣ Materialized Views
3️⃣ Денормализация
4️⃣ Вертикальное масштабирование
5️⃣ Кэширование
6️⃣ Репликация
7️⃣ Шардирование

👉 Источник

#инфографика
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🧰 Краткий обзор архитектуры Reddit, основанный на исследованиях из инженерных блогов

🔹 CDN
🔹 Фронтенд: jQuery —> Typescript —> Node.js
🔹 Балансировка нагрузки
🔹 Микросервисы: монолит на Python —> микросервисы на Go
🔹 API: GraphQL —> GraphQL Federation —> несколько новых Go subgraphs для разделения монолита GraphQL
🔹 Хранение данных: memcached + Postgres + Cassandra
🔹 Репликация данных: Debezium
🔹 Асинхронная обработка: RabbitMQ + Kafka
🔹 Хостинг: AWS и Kubernetes
🔹 Деплой и инфраструктура: Spinnaker, Drone CI и Terraform

👉 Источник

#инфографика #проектирование_систем
This media is not supported in your browser
VIEW IN TELEGRAM
🔁 Обработка ретраев на практике

В распределенных системах и сетевых приложениях стратегии ретраев имеют решающее значение для эффективной обработки временных ошибок и нестабильности сети. На диаграмме показаны 4 распространенные стратегии:

🔹 Linear Backoff
🔹 Linear Jitter Backoff
🔹 Exponential Backoff
🔹 Exponential Jitter Backoff

👉 Источник

#проектирование_систем #инфографика
This media is not supported in your browser
VIEW IN TELEGRAM
🧰 Ключевые компоненты веб-приложения в продакшене

🔹 CI/CD
🔹 Балансировщик нагрузки / реверс-прокси
🔹 CDN
🔹 API
🔹 Сервер баз данных
🔹 Кэширующий сервер
🔹 Очереди заданий
🔹 Сервис полнотекстового поиска
🔹 Инструменты мониторинга и логирования
🔹 Уведомление в случае каких-либо проблем

👉 Источник

#инфографика
This media is not supported in your browser
VIEW IN TELEGRAM
🧰 Twelve-Factor App: наглядная демонстрация методологии, которая описывает лучшие практики для разработки современных веб-приложений на любой платформе

📌 Ключевые преимущества:

☑️ Одно приложение — один репозиторий
☑️ Явные зависимости
☑️ Конфигурация — это свойства среды выполнения
☑️ Локальные и сторонние службы
☑️ Разделение сборки, релиза и выполнения
☑️ Приложение — набор процессов
☑️ Приложение не зависит от сервера
☑️ Быстрый запуск и корректное завершение
☑️ Масштаб с помощью процессов и многие другие

👉 Источник

#инфографика
⚡️ Топ-10 наиболее популярных опенсорсных баз данных: на заметку разработчику

1️⃣ MySQL
2️⃣ PostgreSQL
3️⃣ MariaDB
4️⃣ Apache Cassandra
5️⃣ Neo4j
6️⃣ SQLite
7️⃣ CockroachDB
8️⃣ Redis
9️⃣ MongoDB
🔟 Couchbase

👉 Источник

#инфографика
This media is not supported in your browser
VIEW IN TELEGRAM
🔄 Ключевые компоненты DevSecOps

DevSecOps возникла как естественная эволюция практик DevOps с акцентом на интеграцию безопасности в процесс разработки и деплоя ПО.

☑️ Automated Security Checks
☑️ Continuous Monitoring
☑️ CI/CD Automation
☑️ Infrastructure as Code
☑️ Container Security
☑️ Secret Management
☑️ Threat Modeling
☑️ QA Integration
☑️ Collaboration and Communication
☑️ Vulnerability Management

👉 Источник

#инфографика
🤔 Как Netflix использует кэширование для удержания вашего внимания? Выдержки из доклада "Caching at Netflix: The Hidden Microservice" от Scott Mansfield

Цель Netflix — удерживать пользователей как можно дольше, несмотря на их короткую продолжительность внимания. Для этого используется EVCache (распределенное хранилище ключ-значение):

1️⃣ Кэш Lookaside
🔹 Приложение сначала запрашивает данные у EVCache.
🔹 Если данных нет, обращается к серверу и базе данных Cassandra.
🔹 Кэш обновляется для будущих запросов.

2️⃣ Временное хранилище данных
🔹 Отслеживает временные данные.
🔹 Один сервис запускает сессию, другой обновляет, третий завершает.

3️⃣ Основное хранилище
🔹 Ежедневно предвычисляются данные для домашней страницы каждого пользователя.
🔹 Данные записываются в EVCache.
🔹 Онлайн-сервисы считывают данные из EVCache для «построения» домашней страницы.

4️⃣ Большие объемы данных
🔹 Данные асинхронно публикуются в EVCache для низкой задержки и высокой доступности.

👉 Источник

#инфографика
☑️ Идемпотентность: шесть популярных юзкейсов

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

1️⃣ REST API запросы
2️⃣ Обработка платежей
3️⃣ Системы управления заказами
4️⃣ Операции с базой данных
5️⃣ Управление учетными записями пользователей
6️⃣ Распределенные системы и обмен сообщениями

👉 Источник

#инфографика
🐳 Ключевые концепции Docker в одной диаграмме от Ивана Величко: на заметку разработчику

#инфографика
This media is not supported in your browser
VIEW IN TELEGRAM
🔒 Блокировки баз данных: ключевые различия

Блокировка — временное ограничение на выполнение некоторых операций обработки данных. Она предотвращают одновременный доступ к данным для обеспечения целостности и консистентности данных.

📌 Основные типы блокировок:

🔷 Shared Lock: позволяет нескольким транзакциям одновременно читать ресурс, но не модифицировать его
🔷 Exclusive Lock: позволяет транзакции как читать, так и модифицировать ресурс
🔷 Update Lock: используется для предотвращения взаимоблокировки, когда транзакция намеревается обновить ресурс
🔷 Schema Lock: используется для защиты структуры объектов базы данных
🔷 Bulk Update Lock: используется во время массовых вставок
🔷 Key-Range Lock: используется в индексированных данных для предотвращения фантомных чтений
🔷 Row-Level Lock: блокирует конкретную строку в таблице
🔷 Page-Level Lock: блокирует конкретную страницу (фиксированный блок данных) в базе данных
🔷 Table-Level Lock: блокирует всю таблицу

👉 Источник

#инфографика
📑 Пагинация страниц при проектировании API: основные методы

🔹 На основе смещения:
GET /orders?offset=0&limit=3

🔹 На основе курсора:
GET /orders?cursor=xxx

🔹 На основе страницы:
GET /items?page=2&size=3

🔹 На основе ключа:
GET /items?after_id=102&limit=3

🔹 На основе времени:
GET /items?start_time=xxx&end_time=yyy

🔹 Гибридная пагинация:
GET /items?cursor=abc&start_time=xxx&end_time=yyy

👉 Читать подробнее о достоинствах и недостатках

#проектирование_систем #инфографика
🛠 Технический стек Netflix: обзор инструментов CI/CD пайплайна

☑️ Планирование работы: Jira + Confluence
☑️ Разработка: Java + другие языки для различных юзкейсов
☑️ Сборка: Gradle + Gradle-плагины
☑️ Packaging: Amazon Machine Image
☑️ Хаос-тестирование
☑️ Деплой: Spinnaker для Canary rollout deployment
☑️ Мониторинг: Atlas + Kayenta
☑️ Инциденты: PagerDuty

👉 Источник

#инфографика
🚀 8 ключевых стратегий масштабирования систем:

☑️ Проектирование stateless сервисов, которые не зависят от данных конкретного сервера и проще масштабируются
☑️ Расширение количества серверов для распределения нагрузки
☑️ Использование балансировщика нагрузки для равномерного распределения входящих запросов по серверам
☑️ Автоматическое масштабирование для автоматической корректировки ресурсов в реальном времени
☑️ Кэширование для уменьшения нагрузки на базу данных и обработки повторяющихся запросов
☑️ Репликация данных на нескольких узлах для масштабирования операций чтения и повышения отказоустойчивости
☑️ Распределение данных по нескольким инстансам для масштабирования операций записи и чтения
☑️ Перенос трудоемких задач на фоновые рабочие процессы с использованием асинхронной обработки

👉 Источник

#инфографика
🚀 История девятимесячного пути к горизонтальному шардированию стека Postgres Figma и ключ к открытию (почти) бесконечной масштабируемости: по мотивам статьи из блога Figma

Стек базы данных Postgres, с ростом пользовательской базы на 200% с 2018 года до 3 миллионов пользователей в месяц, вырос почти в 100 раз.

📌 Как команде это удалось?

🔷 Вертикальное масштабирование и репликация: они обновили базу до крупнейшего инстанса Amazon RDS и создали несколько реплик для масштабирования чтения, используя PgBouncer для управления соединениями.
🔷 Вертикальное разделение: перенесли высоконагруженные таблицы в отдельные базы данных, управляемые несколькими PgBouncer.
🔷 Горизонтальное шардирование: для больших таблиц внедрили горизонтальное шардирование, создавая новый сервис DBProxy для маршрутизации и выполнения запросов.

👉 Подробнее
👉 Источник

#проектирование_систем #инфографика
🛠 Коллекция инструментов для разработчика на любой случай жизни

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

👉 Источник

#инфографика
🤩 Почему PostgreSQL — лучшая СУБД по мнению разработчиков в соответствии с Stackoverflow Developer Survey?

Потому что это единая СУБД, которая охватывает почти все кейсы, в которых нуждаются разработчики:

☑️ OLTP (Online Transaction Processing)
☑️ OLAP (Online Analytical Processing)
☑️ Потоковая обработка с PipelineDB
☑️ Геопространственные возможности с PostGIS
☑️ Данные временных рядов с Timescale
☑️ Распределенные таблицы с Citus

👉 Источник

#инфографика
📌 Семантическое версионирование (SemVer): наглядная иллюстрация

Семантическое управление версиями — это формальное соглашение для определения номера версии новых выпусков ПО. Учитывая номер версии МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ, следует увеличивать:

1️⃣ МАЖОРНУЮ версию, когда сделаны обратно несовместимые изменения API
2️⃣ МИНОРНУЮ версию, когда вы добавляете новую функциональность, не нарушая обратной совместимости
3️⃣ ПАТЧ-версию, когда вы делаете обратно совместимые исправления.

Дополнительные обозначения для предрелизных и билд-метаданных возможны как дополнения к формату МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ.

👉 Источник

#инфографика