Библиотека программиста | программирование, кодинг, разработка
83.3K subscribers
3.79K photos
175 videos
89 files
6.85K links
Все самое полезное для программиста в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/a32a0d94

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5ba2901234b69883a4d46
Download Telegram
api-protocols.pdf
784.1 KB
💡Развитие протоколов API в 2023 году: по мотивам статьи Alex Xu в блоге Postman

В PDF-файле — обзорная демонстрация, а в статье вас ждет подробный взгляд на шесть самых популярных протоколов API с акцентом на преимущества и проблемы каждого:

1️⃣ REST
2️⃣ Webhooks
3️⃣ GraphQL
4️⃣ SOAP
5️⃣ WebSocket
6️⃣ gRPC

💬 Какой используется в вашем проекте? Делитесь в комментариях мыслями по данной теме👇

#проектирование_систем
🔥13👍5👾1
Software Styles Cheatsheet.pdf
170.9 KB
💡10 архитектурных стилей ПО и их паттерны: шпаргалка для разработчика

Архитектурные паттерны более конкретны и специфичны для определенной проблемы или модуля в системе, в отличие от архитектурного стиля.

📌 Основные характеристики архитектурных стилей и примеры паттернов:

1️⃣ Многослойный: разделяет систему на слои с четко определенными ролями и зависимостями. Каждый слой выполняет определенную функцию.

📝 «N-уровневая архитектура», «Чистая архитектура».

2️⃣ Компонентно-ориентированный: фокусируется на разделении системы на отдельные, взаимозаменяемые компоненты, каждый из которых имеет четко определенный интерфейс.

📝 «Микроядро», «Плагин».

3️⃣ Сервисно-ориентированный: состоит из независимых сервисов, которые общаются друг с другом.

📝 SOA, Broker, «Микросервисы», FaaS.

4️⃣ Распределенная система: включает системы, распределенные по различным сетевым узлам для улучшения масштабируемости и надежности.

📝 Space-Based, «Одноранговая сеть».

5️⃣ Предметно-ориентированный: подход, сосредоточенный на моделировании домена и бизнес-логики, и акцентирующий внимание на сложных бизнес-правилах.

📝 Шестигранный паттерн, DDD.

6️⃣ Событийно-ориентированный: архитектура, основанная на обработке событий, где компоненты системы реагируют на события.

📝 CQRS, Pub-Sub.

7️⃣ Разделения ответственности: фокусируется на разделении системы на части, каждая из которых решает отдельную задачу.

📝 MVVP, MVP.

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

📝 «Интерпретатор».

9️⃣ Конкурентность: ориентирован на разработку систем, которые одновременно выполняют несколько операций, улучшая производительность и отзывчивость.

📝 «Оркестрация», Choreography, Primary-Secondary, Pipeline.

🔟 Ориентированный на данные: архитектура, в которой данные играют ключевую роль, и все компоненты системы ориентированы на обработку данных.

📝 CQRS, Event Sourcing, Kappa, Lambda.

👉 Источник
👉 Читать на русском

#проектирование_систем
👍25🔥21🥱1🌚1
💬 Что такое микросервисная архитектура и как правильно ее реализовать с помощью Self-contained Systems?

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

В отличие от микросервисов, существует так называемый подход Self-contained Systems (SCS), который приоритезирует децентрализацию приложений на независимые системы, каждая из которых обладает своей доменной логикой, UI, хранилищем данных и сервисным API в случае необходимости. Обычно за них отвечает одна команда.

📌 Основные преимущества:

☑️ Автономность: каждая SCS работает независимо со своей базой данных, бизнес-логикой и UI
☑️ Ориентированность на домен: SCS структурированы вокруг конкретных бизнес-доменов
☑️ Децентрализованное управление данными: индивидуальные базы данных для каждой SCS обеспечивают консистентность данных в пределах своих границ, уменьшая зависимости между сервисами
☑️ Технологическое разнообразие: позволяет использовать различные технологические стеки в разных SCS, соответствующие конкретным потребностям каждого домена
☑️ Независимый деплой: каждую SCS можно деплоить, масштабировать и обновлять независимо, не влияя на другие системы

📌 Почему SCS можеть быть альтернативой микросервисам:

☑️ Более широкий охват
☑️ Уменьшенная операционная сложность
☑️ Консистентность данных
☑️ Уменьшенное межсервисное взаимодействие

Такие системы хорошо сочетаются с DDD. Первый шаг в создании таких систем — анализ домена, который может быть проведен путем выявления ограниченных контекстов, соответствующих конкретным бизнес-доменам. Каждый ограниченный контекст затем инкапсулируется в SCS, который включает в себя управление данными, бизнес-логику и UI, обеспечивая автономность каждой системы, но при этом способность взаимодействовать с другими через четко определенные API при необходимости.

👉 Источник

#проектирование_систем
🔥21👍161
System Design Blueprint.jpeg
965.2 KB
👨‍🎓Направления проектирования систем: шпаргалка для подготовки к собесу от ByteByteGo

☑️ Балансировка нагрузки
☑️ API Gateway
☑️ Протоколы связи
☑️ CDN
☑️ База данных
☑️ Кэш
☑️ Очередь сообщений
☑️ Генерация уникальных идентификаторов
☑️ Масштабируемость
☑️ Доступность
☑️ Производительность
☑️ Устойчивость к сбоям и восстановление
☑️ Безопасность и многое другое

#проектирование_систем
👍27
👀 Свежий взгляд на методологию The Twelve-Factor App для разработки SaaS-приложений

Методология предоставляет набор лучших практик для разработки современных веб-приложений на любой платформе. Практики описывают приложения, которые готовы:

✔️ к горизонтальному масштабированию;
✔️ к непрерывному развертыванию;
✔️ к современным облачным хостингам.

👉 Читать

#проектирование_систем #инфографика
10👍3
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

👉 Источник

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

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

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

👉 Источник

#проектирование_систем #инфографика
🔥10👍31
📑 Пагинация страниц при проектировании 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

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

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

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

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

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

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

#проектирование_систем #инфографика
👍9🔥4
👨‍💻 Шпаргалка по проектированию реляционных баз данных

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

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

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

👉 Источник

#инфографика #проектирование_систем
👍116🥱3😁1
☝️ Проектирование системы — это компромиссы

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

👉 Источник инфографики

#инфографика #проектирование_систем
👍141🤩1