Системный Аналитик – Telegram
Системный Аналитик
18.6K subscribers
91 photos
4 videos
49 files
254 links
Канал для системных аналитиков и не только: подборки полезных материалов на все случаи жизни.

Реклама и сотрудничество @radale

https://gosuslugi.ru/snet/67b0613c6411ff785396754a
Download Telegram
📂 Стратегии работы с кэшем

Ранее описывали процесс кэширования
Рассмотрим подходы к работе с кэшем


Стратегии чтения данных

Кэширование на стороне (Cache Aside) 

🟡приложение запрашивает данные из кэша
🟡если данные отсутствуют в кэше, приложение запрашивает их из БД
🟡после получения, приложение записывает их в кэш для следующих запросов

Обновление кэша: обновляется только после запроса данных из БД

просто реализовать, контроль за кэшированием на уровне приложения
если данные изменяются в базе, кэш может стать устаревшим

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


Сквозное чтение (Read Through) 

🟡приложение запрашивает данные только из кэша
🟡если данных нет, кэш сам обращается к БД, извлекает данные и возвращает их приложению, одновременно сохраняя их в кэше

Обновление кэша: автоматически при отсутствии данных в нём, во время запроса из БД

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

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


Стратегии записи данных

Сквозная запись (Write Around) 

🟡приложение записывает данные напрямую в БД
🟡данные в кэше при этом не обновляются
🟡последующие чтения могут вызвать обновление кэша через механизм Cache Aside

Обновление кэша: приложение запрашивает данные из БД. Получает и записывает их в кэш

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

В системе учёта заказов приложение напрямую записывает новые заказы в БД, не обновляя кэш.
Кэш обновляется только при последующем чтении. Изменения редки и не требуют моментальной синхронизации с кэшем


Сквозная запись (Write Through

🟡приложение записывает данные сначала в кэш
🟡кэш автоматически обновляет данные также в БД, синхронизируя их

Обновление кэша: кэш и БД всегда синхронизированы, так как данные записываются одновременно в в БД и в кэш

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

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


Обратная запись (Write Back) 

🟡приложение записывает данные в кэш
🟡кэш откладывает обновление БД, выполняет его асинхронно через определенные интервалы времени / по необходимости

Обновление кэша: данные в кэше актуальные, но БД обновляется позже, асинхронно

быстрая запись данных, поскольку операция записи в БД откладывается
риск потери данных в случае сбоя кэша до того, как БД будет обновлена

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


Хранение кэша

Кэш в архитектуре приложения обычно хранится в памяти, либо на выделенных серверах для кэширования. Их располагают ближе к приложению для быстрой обработки запросов.
Например,
🟡внутри приложения — локальный кэш
🟡на внешнем сервере / группе серверов — распределённый кэш


📎 Материалы
1. [По полочкам] Кэширование
2. SE: Проектирование эффективной системы кэширования
3. Стратегия кеширования в приложении
4. Все о кэшировании: стратегии, проблемы и оптимизация
5. Все о кэшировании и кэшах
6. Основные принципы кэширования веб-приложений
7. Проектирование эффективной системы кэширования для высоконагруженной системы
8. Cache-aside паттерн
9. Введение в кэширование со сквозным чтением с помощью NCache
10. Продуманные запросы: стратегии кэширования в век PWA

#проектирование #архитектура



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍11🔥6😁1
🤣116🔥15😁12👍115🤡3
✍️ Server-Sent Events (SSE)

Server-Sent Events (SSE) —  технология, при которой сервер отправляет клиенту обновления по мере их появления.
Клиенту не нужно отправлять повторяющиеся запросы
Соединение одностороннее: от сервера к клиенту

◾️Для поддержания соединения открытым, сервер может отправлять пустые события с определенной периодичностью, чтобы не закрылось соединение браузером из-за таймаута.

◾️Относится к асинхронным методам, т.к. позволяет получать данные от сервера, как только они становятся доступны, без задержек и постоянных перезапросов.


Как работает


😈клиент делает HTTP-запрос на сервер и  остается подключенным к серверу
😈сервер открывает однонаправленный поток данных, отправляет обновления на клиент в формате текстовых событий
😈онлайн клиент получает данные по мере их поступления с сервера


Где применяется

Когда сервер должен регулярно обновлять информацию на веб-странице.
Например:
🔘в системах мониторинга (получение обновлений о состоянии системы)
🔘чатах (получение новых сообщений)
🔘торговых приложениях (обновления котировок)
🔘лентах новостей и социальных сетях
🔘push-уведомления из веб-приложения


Пример работы SSE для мониторинга системы

💙 Сервер отслеживает метрики системы (загрузка CPU, ошибки, статус сервера)
💙 Клиент подключается через SSE и получает обновления об изменении состояния системы в реальном времени
💙 Как только сервер получает новые данные, он отправляет их клиенту


Плюсы и минусы

интегрируется через стандартные HTTP-запросы
только сервер инициирует обновления,не нужно постоянно отправлять запросы от клиента на сервер (polling). Это снижает нагрузку
автоматически восстанавливает соединение при его потере

однонаправленность — только от сервера к клиенту
работает только через HTTP, менее гибко по сравнению с WebSocket
может не поддерживаться старыми браузерами (работает только с UTF-8)
нет возможности передать свои заголовки в запрос


📎 Материалы

1. Асинхронный веб: WebSocket, Server-Sent Events, Long Polling и Short Polling
2. Подписки на GraphQL: Почему мы используем SSE/Fetch вместо Websockets
3. Вам посылка, или Как мы доставляем сообщения с сервера на клиент в реальном времени
4. Server-Sent Events: пример использования
5. Потоковое обновление с событиями, отправленными сервером
6. Server Sent Events
7. WebSockets vs SSE: особенности и сценарии использования

📚Книги
1. Сергей Константинов. API
2. Джей Гивакс. Паттерны проектирования API
3. Арно Лоре. Проектирование веб-API


#api #интеграции



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2911👍11
SOLID

SOLID — набор принципов проектирования объектно-ориентированных систем.
Помогает создавать гибкую, поддерживаемую и масштабируемую архитектуру.
Нужны для улучшения структуры и качества кода.


SOLID и ООП: в чём разница? 

🔷ООП —  методология или стиль программирования ( с основными свойствами: инкапсуляция, наследование и полиморфизм)
🔴SOLID — набор рекомендаций, как правильно использовать принципы ООП, чтобы создать код, который будет легче поддерживать и расширять
ООП даёт инструменты, а SOLID помогает применять их эффективно.


Принципы SOLID

❤️ — Single Responsibility Principle (Принцип единственной ответственности) 
Каждый класс должен решать одну задачу
делай модули меньше
🟢Пример: класс "Order" отвечает только за управление заказом, а уведомления отправляются другим классом

♥️Связь с ООП: связан с инкапсуляцией — каждый объект скрывает детали своей реализации и выполняет только одну функцию

❤️— Open/Closed Principle (Принцип открытости/закрытости) 
Класс должен быть открыт для расширений, но закрыт для изменений
делай модули расширяемыми

🟢чтобы добавить новый тип отчёта, создаём новый класс, не изменяя существующий код

♥️использует наследование - создание новых классов на основе существующих;
и полиморфизм - способность объектов разных типов использовать общий интерфейс для выполнения различных действий

❤️— Liskov Substitution Principle (Принцип подстановки Барбары Лисков) 
Подклассы должны заменять родительские классы без ошибок
наследуйся правильно
🟢 если класс "Bird" имеет метод "fly", класс "Penguin" не должен его наследовать, так как пингвины не летают

♥️связан с принципом наследования. Подклассы должны правильно реализовывать поведение родительских классов, не нарушать полиморфизм

❤️ — Interface Segregation Principle (Принцип разделения интерфейса) 
Узкие специализированные интерфейсы лучше, чем один общий
дроби интерфейсы
🟢вместо общего интерфейса "Animal" создаём отдельные интерфейсы "Flyable", "Swimmable", "Runnable"

♥️поддерживает полиморфизм и инкапсуляцию. Это делает классы более гибкими и позволяет  зависеть только от нужных методов

❤️ — Dependency Inversion Principle (Принцип инверсии зависимостей) 
Модули должны зависеть от абстракций, а не от конкретных реализаций
используй интерфейсы
🟢класс "UserService" зависит от интерфейса "Database", а не от конкретной реализации БД

♥️использовании абстракций (отделения концепции от её реализации);
и полиморфизма для уменьшения зависимости между модулями


Нарушение SOLID приводит к антипаттернам, таким как "God Object" (класс с множеством задач) или "Spaghetti Code" (запутанный код)


Зачем аналитику SOLID? 

➡️ поможет оценить архитектуру на этапе проектирования
🟢например, при добавлении новых способов оплаты система не должна требовать переписывания основного кода (принцип ❤️)

➡️ для составления требований к разработке и задач рефакторинга
🟢 если каждая функция изолирована, то изменения не затронут другие модули (принцип ❤️)

➡️ для согласования архитектурны с разработкой
🟢 корректное использование интерфейсов предотвратит сложную интеграцию с новыми системами в будущем (принцип ❤️)


📎 Материалы
1. Принципы SOLID в программировании — что это такое
2. SOLID
3. Простое объяснение принципов SOLID
4. SOLID принципы: что это такое и зачем они нужны?
5. SOLID — это несложно. С примерами на Python
6. SOLID == ООП?

📚Книги
1. Чистая архитектура — Роберт Мартин
2. Объектно-ориентированный анализ и проектирование с примерами приложений - Грэди Буч
3. Объектно-ориентированное мышление - Мэтт Вайсфельд
4. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Хелм Ричард, Влиссидес Джон

#проектирование



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍119
Сравнение способов асинхронного взаимодействия API

🧑‍🎓 Описание каждого метода и материалы можно найти в базе знаний по системному анализу

#интеграции #async
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥48👍1611
✍️ ESB / MOM / MQ

🟣ESB (Enterprise Service Bus, шина данных) — посредник для обмена данными между системами. Объединяет системы и приложения в единую интеграционную архитектуру. Управляет бизнес-логикой и маршрутизацией данных

🟡MOM (Message-Oriented Middleware) — промежуточное ПО для асинхронной передачи сообщений между приложениями

🟣MQ (Message Queue) — реализация системы очередей, частный случай MOM

MOM/MQ — не шины данных, но могут быть частью решения, основанного на шине


ESB (Enterprise Service Bus)

🟣управление данными идет через одну точку позволяет контролировать потоки данных
🟣применяется для большого количество приложений с разными протоколами и форматами данных
🟣обеспечивает маршрутизацию, трансформацию и оркестрацию сообщений между ними
🟣часто используется с легаси-системами для интеграции старых приложений с новыми
🟣может направлять сообщения между системами через MOM или MQ

Как работает

1. приложение отправляет данные на ESB через адаптер (например, для БД или веб-сервиса)
2. ESB преобразует формат данных, если требуется
3. шина маршрутизирует сообщение в нужное приложение
4. получатель получает сообщение и обрабатывает его


Шина данных считается устаревшим видом интеграции:

🟣требует сложной настройки и поддержки, т.к. нужно интегрировать много систем с разными протоколами и форматами данных
🟣труднее масштабировать: централизованная шина может не справляться с нагрузкой, в отличие от микросервисов — легко масштабируются независимо.
🟣центральная точка, сбой может привести к остановке всего обмена данными
🟣альтернативы: микросервисы и очереди сообщений (MQ). Они более гибкие: каждое приложение управляет своими связями без централизованного посредника

Пример: Apache Camel, MuleSoft


MOM (Message-Oriented Middleware)

🟣может поддерживать очереди (MQ), публикацию/подписку (Pub/Sub), маршрутизацию, обработку событий
🟣используется, когда не нужно дожидаться ответа от другой системы
🟣полезен в микросервисной архитектуре, чтобы разгрузить приложение и повысить отказоустойчивость

Как работает

1. приложение отправляет сообщение посреднику (MOM)
2. посредник сохраняет сообщение в буфере до тех пор, пока приложение-получатель не будет готово его принять
3. получатель обрабатывает сообщение, когда готов
4. MOM удаляет сообщение из буфера только после его успешной доставки

Пример: ActiveMQ, RabbitMQ - поддерживают и очереди, и другие модели, такие как Pub/Sub


MQ (Message Queue)

🟣используется для гарантированной доставки сообщений между приложениями, например, в платежных системах
🟣 сообщения обрабатываются по принципу FIFO (первый пришел, первый ушел) и удаляются после их получения
🟣позволяет передавать данные без ожидания мгновенного ответа

Пример: IBM MQ


📎 Материалы
1. От хаоса к порядку: как легко интегрировать сервисы с помощью Enterprise Service Bus
2. Шины данных (ESB): зачем компаниям использовать этот инструмент
3. Почему технари против шин данных: middleware, ESB, брокеров сообщений?
4. Как я 10 лет строю интеграцию в банке: от ESB-монолита к целой линейке систем
5. Уже поменяли шину? Наш опыт «переобувания» и разработки интеграционной платформы
6. ESB интеграция: объяснение и цель
7. Что такое MQ? Основные понятия
8. Интеграция на основе сообщений. Преимущества и отличия от других подходов
9. Кафка это шина? API, MQ, шины/ESB. Неочевидные минусы подходов и их плюсы

#проектирование #архитектура



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1211🔥6🤣3
Media is too big
VIEW IN TELEGRAM
🔹 БАЗА ЗНАНИЙ ПО СИСТЕМНОМУ АНАЛИЗУ 🚀

Все посты из канала за всё время разложены по полочкам в едином месте — базе знаний 🤓

Наша цель — сделать кладезь знаний системного аналитика 🧠

Какие плюшки вас ждут:

🗂 Все знания в едином месте: кратко, ёмко, без воды и с подборками полезных материалов 🔥

🔎 Удобный поиск и навигация: все наши конспекты структурированы по группам навыков СА и есть поиск по тексту — вы не утоните в тоннах воды и часах гуглинга

🆕 Всегда актуально: мы регулярно добавляем новые материалы и улучшаем базу, при этом стараемся обновлять уже опубликованный контент

📝 Контент на заказ бесплатно: хотите материал на конкретную тему? Любой покупатель может оставить запрос, и мы сделаем обзор с исчерпывающей подборкой материалов абсолютно бесплатно!

➡️ Приобрести вечный доступ к постоянно обновляемой Базе знаний по цене айтишниой книги можно тут — всего 4900 ₽

На analitik.me можно узнать про Базу знаний больше.

P.S. Если нет карты РФ и по любым другим вопросам можно писать сюда: @radale
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32125😁5👍4
🙂 Архитектурные паттерны (MV(X)

Архитектурные
паттерны — шаблоны для высокоуровневой организации системы.
Определяют основные компоненты системы, их взаимосвязи и взаимодействия

Паттерны MV(X) используются в
🟡мобильных и веб приложениях
🟡банкинге и финансовых системах, где важны четкая структура и гибкость
🟡в играх и графических интерфейсах (для отделения логики от UI и управления сложными связями)

MV(X) — семейство паттернов со схожей структурой
Разделяют приложения на основные компоненты:
Model — отвечает за данные, бизнес-логику, сервисы для работы с БД и сетью (например, класс в ООП, API, библиотека, микросервис и тд)
View — визуальное представление для пользователя, отображение данных из Model
эти компоненты выполняют одни и те же роли во всех паттернах MV(X)
Presenter / Controller / ViewModel - меняются в зависимости от паттерна

Чем лучше разделение обязанностей между компонентами,
тем проще управлять проектом, добавлять и тестировать компоненты


Рассмотрим некоторые из них:

MVC (Model-View-Controller)

Controller: логика, которая связывает model и view
направляет данные от пользователя к системе и наоборот
напрямую обновляет view

Подходит для небольших / средних приложений
Чем проще Controller, тем лучше

Пример

В веб-приложении для управления библиотекой:
🟡Model: класс Book с полями noscript, author и методами для работы с книгами
🟡View: HTML-страница с формой для добавления книг и списком всех книг
🟡Controller: обработчик, который принимает POST-запросы на добавление книг и обновляет Model и View

Недостатки

в больших приложениях Controller объемный сложнее поддержка кода
View и Model разделены, но View и Controller тесно связаны тяжелее масштабировать каждый из этих компонентов
View и Controller тестировать сложно из-за тесной связи тестируется в основном Model


MVP (Model-View-Presenter)

Presenter: полностью управляет логикой view
обрабатывает ввод
взаимодействует с моделью
обновляет view через интерфейс, не зависит от конкретной реализации view (как у controller)

Отличие от MVC: связь view и model идет через presenter, а не напрямую

Эффективен в приложениях с высокой нагрузкой на UI,
и где необходимы модульные тесты, т.к. Presenter можно тестировать

Пример

В Android-приложении для управления задачами:
🟡Model: класс task, представляет задачу с полями noscript, denoscription и методами для изменения состояния
🟡View: UI для отображения списка задач и формы для добавления новой задачи
🟡Presenter: объект, который запрашивает список задач из Model и обновляет View при изменениях

Недостатки
требует создания доп классов и интерфейсов может перегружать простые приложения


MVVM (Model-View-ViewModel)

View взаимодействует с ViewModel через привязку данных

ViewModel
🟡содержит свойства и команды, к которым привязывается View
🟡взаимодействует с Model для извлечения или обновления данных

Эффективен для приложений со сложными структурой данных и интерфейсом

Пример

В WPF-приложении для управления контактами:
Model: класс Contact содержит информацию о контакте
View: UI, показывает список контактов и формы для добавления/редактирования
ViewModel: объект, который загружает данные из Model и обновляет View, а также обрабатывает команды от View

Недостатки
сложно настроить привязку данных
ViewModel может перегружаться лишней логикой


📎 Материалы
1. MVC
2. Достоинства использования MVC архитектуры в разработке клиент-серверного интернет-магазина
3. Что такое MVP архитектура
4. Реализация MVC паттерна на примере создания сайта-визитки на PHP
4. MVC против MVVM — разница между ними
5. Понимание различий: MVC и MVVM
6. Шпаргалка по MV-паттернам для проектирования веб-приложений
7. Архитектурные шаблоны: объяснение MVC, MVP и MVVM
8. Паттерны для новичков: MVC vs MVP vs MVVM


#архитектура #проектирование



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥148👍61
✍️ Транзакции в Apache Kafka

Kafka поддерживает транзакции, чтобы гарантировать выполнение операций по принципу «всё или ничего»
Такая гарантия доставки называется exactly-once

Подробнее о других типах гарантии доставки
тут

Когда применяется

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


Как работают транзакции в Kafka

продюсер начинает транзакцию, присваивает  уникальный transactional.id. Это идентификатор, который отличает записи транзакций
продюсер отправляет сообщения в одну / несколько очередей с пометкой "транзакционные"
продюсер подтверждает данные (коммит) или отменяет (откат)
Коммит фиксирует сообщения, и они становятся видимы потребителям, в противном случае --  откатываются


ACID в Kafka

◾️атомарность (Atomicity): вся группа сообщений фиксируется сразу
◾️согласованность (Consistency): контроль за статусами сообщений в метаданных
◾️изолированность (Isolation): с помощью настройки read_committed (на стороне консьюмера) потребители могут видеть только зафиксированные данные, пока транзакция не завершена
◾️долговечность (Durability): достигается за счёт репликации и журналов с зафиксированными сообщениями


Плюсы и минусы

💚гарантия целостности операций с использованием ACID
💚защита от дублирования и конфликтов через изоляцию транзакций

💚требуют больше ресурсов, что может снизить производительность
💚поддерживаются с 0.11.0 версии Kafka


Пример транзакции в Kafka

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

Есть два топика в Kafka:
— orders: хранит общую информацию о заказе
— inventory: содержит информацию об изменении запасов после заказа

Шаги для транзакции:
🟡создать продюсера с transactional.id 
🟡отправить сообщения в транзакции: записать детали нового заказа в оба топика orders и inventory
если успешно, фиксируется (коммит) транзакция: сообщения видны для потребителей обоих топиков
если ошибка, транзакция откатывается: ни одно сообщение не попадёт в топики

Результат: транзакция гарантирует, что потребители прочтут согласованные данные


📎 Материалы
1. Изоляция транзакций в Apache Kafka при потреблении сообщений
2. Семантика exactly-once в Apache Kafka
3. Транзакции в Apache Kafka: атомарность публикации сообщений
4. Что такое гарантия доставки сообщений или как избавиться от дублей и потерь в Apache Kafka и других Big Data брокерах

📚 Книги
1.
Kafka в действии -- Дилан Скотт, Виктор Гамов и Дейв Клейн
2. Apache Kafka. Потоковая обработка и анализ данных -- Гвен Шапира, Тодд Палино, Раджини Сиварам, Крит Петти
3. Effective Kafka: A Hands-On Guide to Building Robust and Scalable Event-Driven Applications with Code Examples in Java -- Emil Koutanov (англ)

#интеграции



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍14103😁2
✍️ Content Delivery Network (CDN)

CDN (Сеть доставки контента) — сеть серверов, которые
▫️распределены по разным регионам
▫️совместно работают для ускорения доставки контента пользователям
Основная задача: быстро и надёжно доставлять статические и медиа-данные (изображения, видео, стили, скрипты) независимо от местоположения пользователя


Применение

Когда важно быстро и стабильно доставлять контент:
➡️в крупных веб-приложениях
➡️онлайн-магазинах
➡️стриминговых платформах и соц сетях и тд
Примеры: Selectel , CDNCloud, CDN от Яндекса, CloudFront


Основные понятия

*️⃣ Ориджин (Origin): сервер, где хранятся первоначальные файлы или данные, которые распространяются через CDN. При первом запросе контент загружается с него. Может быть несколько

*️⃣ PoP Point of Presence (точка присутствия) или Edge Node (пограничный узел) : кэширующий сервер, размещенный близко к конечным пользователям. Узлы принимают и кэшируют запросы, уменьшают расстояние между пользователем и данными. Это повышает скорость доступа

*️⃣Purge (очистка): удаление контента на пограничных узлах для последующего обновления из ориджинов

*️⃣Restriction (ограничение): кто может /не может получать доступ к содержимому из кэша. Например, разрешение запросов только из определенных доменных зон, регионов или групп IP-адресов

*️⃣Time to Live, TTL (время жизни): период кэширования на пограничном узле (Edge Node, PoP) до нового извлечение данных


Виды контента

🔷динамический: данные изменяются в реальном времени или по запросу пользователя (данные профиля, месторасположение, корзина покупок).
Уникален для каждого пользователя, его нельзя кэшировать. Но CDN позволяет ускорять его передачу за счет:
оптимальных маршрутов к ближайшему PoP-узлу
шифрования / дешифрование SSL на PoP-узлах для сокращения времени обработки
протоколов ускорения: HTTP/2 и QUIC

🔷статический: неизменные в течение указанного TTL (изображения, CSS, JavaScript и тд). Кэшируется и доставляется с PoP


Пример работы CDN


🟣запрос контента (веб-страниц или видео)
🟣браузер проверяет локальный кэш. Если данных нет / устарели, запрос идет к CDN, то есть к ближайшей точке присутствия (PoP) на основе местоположения пользователя и анализа сети (подробнее см ниже)
🟣 PoP проверяет, есть ли запрашиваемый контент в кэше:
если контент уже есть, PoP отправляет его
если нет, запрос передаётся на сервер ориджина (к бэкэнду) для получения контента
🟣PoP кэширует данные для последующих запросов
🟣пользователь получает контент с ближайшего PoP с минимальными задержками


Кэширование в CDN


🟢контент хранится в точках присутствия (PoP) рядом с пользователями
🟢CDN-кэш обновляется через инвалидацию или истечение срока хранения (TTL).
Связь с бэкэнд и фронтенд кэшем:
☀️бэкэнд может отправлять данные в CDN с TTL или правилами инвалидации в заголовке. При обновлении данных на бэке CDN-кэш может очищаться
☀️фронтенд: браузерный кэш использует HTTP-заголовки и часто кэширует содержимое после CDN

Синхронизация: по правилам инвалидации и версиями URL для одновременного обновления всех уровней кэша — от бэка до фронта через CDN


Балансировка нагрузки


Распределяет трафик между PoP-узлами и серверами внутри них

Для направления запросов к ближайшему PoP-узлу используются способы:
♥️GeoDNS, который ориентируется на геолокацию пользователя
♥️Anycast — на сетевое расстояние до ближайшего узла

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


📎 Материалы
1
. CDN
2. CDN: что такое и как работает технология
3. Что такое CDN: смотрим на примерах
4. Что такое CDN и как это работает?
5. 10 интересных фактов про CDN и скорость сайтов
6. Разбираемся в статусах кеша CDN
7. CDN или Кэширование?

#архитектура



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍186🔥3
🤣186😁2717🤡7😢6😐2
🔵 Уровни кэширования

Кэширование — временное сохранение данных, чтобы ускорить их повторное использование и уменьшить нагрузку на системы.
Подробнее читать тут

Уровни кэширования
— места в цепочке передачи данных, где может происходить кэширование


Клиентский кэш

Хранение данных на устройстве пользователя (например, в браузере) для ускорения доступа к часто запрашиваемым ресурсам
 
Тип данных: статические (изображения, CSS, JavaScript)

💙хранит статические данные (изображения, CSS, скрипты)
💙работает с заголовками HTTP (Cache-Control, ETag, Last-Modified)
💙срок жизни данных ограничен временем в заголовках или ручной очисткой

Проблемы и решения

💙 устаревшие данные: использовать версии URL или кэш-бастинг (например, если файл style.css обновился, к URL добавить параметр style.css?v=2.0)
💙 избыточное кэширование: уменьшить объем кэшируемых данных с помощью заголовков (например, Cache-Control: no-cache для динамических данных, ETag, Last-Modified)


Сетевой кэш

Кэш на промежуточных узлах сети (например, CDN)
Используется для уменьшения задержек и нагрузки на сервер

Тип данных: статические (медиафайлы, страницы) и динамические (обработанные данные с учетом TTL)

хранит данные близко к пользователю (PoP-узлы, точки присутствия) 
уменьшает трафик за счет ускорения доставки статических ресурсов
обновление данных через TTL или инвалидацию

Проблемы и решения

несинхронизированные данные: регулярная инвалидация и настройка TTL
Стратегия «push» обновлений помогает предотвратить "протухания"
высокая нагрузка на основной сервер при обновлении: расширение сети PoP или  многоуровневый кэш (узлы обновляют данные между собой)


Серверный кэш 

Кэширование данных на сервере (например, в памяти или на диске) для ускорения обработки запросов

Тип данных: динамические (результаты запросов, промежуточные вычисления)

💙применяется для часто запрашиваемых данных (например, результаты сложных вычислений)
💙примеры: Redis, Memcached
💙кэширование как статических, так и динамических данных

Проблемы и решения

💙 перезапись кэша и потеря данных: использовать алгоритмы управления кэшем, например, LRU (Least Recently Used). Или механизм TTL для периодической очистки.
💙 конкуренция за память: настроить лимиты на использование памяти и использовать высокоэффективные структур данных (например, Bloom filter) для снижения нагрузки на память


Уровень приложения (кэш приложения) 

Кэширование на уровне бизнес-логики приложения, где данные обрабатываются и сохраняются в памяти / специализированных хранилищах

Тип данных: динамические (сессии, промежуточные результаты)

сохраняет промежуточные данные, которые генерируются во время работы приложения
позволяет минимизировать повторные вычисления или запросы к БД
пример: кэширование запросов в БД с помощью ORM

Проблемы и примеры решения

избыточное кэширование: кэшировать только те данные, которые повышают производительность
неактуальные данные: введение стратегий инвалидации данных с учетом бизнес-логики (например, обновление данных после определенных изменений или событий)


📎 Материалы
1. Что такое кэширование сайта и почему это важно
2. Кэш
3. Чем полезно кэширование сайта и как его настроить
4. Браузерное и серверное кэширование
5. Проектирование эффективной системы кэширования
6. Обзор использования клиентского кэша с распределенным кэшированием
7. Основы клиентского кэширования понятными словами и на примерах. Last-modified, Etag, Expires, Cache-control: max-age и другие заголовки
8. Кеширование. Настроить и проверить параметры кеширования на CDN-серверах
9. Клиентский кэш данных

#архитектура



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥97
🔵 Data Lake

Data Lake — метод хранения данных системой или репозиторием в сыром (неструктурированном) или частично обработанном виде

большой срок хранения данных
есть возможность их преобразования
поддерживаются разные схемы чтения данных


Как хранятся данные


Сырой (Raw) слой

🔘загружаются без предварительной обработки

Обработанный (Processed) слой

🔘структурируются, очищаются, трансформируются
🔘форматы: табличные, агрегированные данные.

Аналитический (Curated) слой

🔘оптимизированы для аналитики и бизнес-отчетов, например, формируются OLAP-кубы или специализированные наборы данных

Форматы хранения

🔘структурированные: SQL-таблицы, Parquet, ORC.
🔘полуструктурированные: JSON, XML
🔘неструктурированные: видео, изображения, аудиофайлы, логи

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


Где используется Data Lake?

аналитика Big Data: анализ поведения, прогнозы, сегментация (e-commerce, банки, нефтегаз и тд)
ML и AI: подготовка данных для моделей (рекомендации, NLP, CV)
телекоммуникации: хранения и анализа данных о клиентах, трафике, сетевых устройствах
кибербезопасность, поддержка: логи, аудио, видео, текст
объединение источников: CRM, IoT, соцсети, финтех


Виды интеграций с Data Lake

🔹ETL/ELT-процессы: загрузка данных из источников с минимальной трансформацией или после обработки
🔹API
🔹с BI и ML-платформами: например, Tableau, Power BI, Spark или TensorFlow для обработки данных напрямую из хранилища


Пример работы

Сбор данных о продажах из онлайн-магазина (CSV-файлы), отзывы клиентов (текст), логи веб-сервера (JSON) и записи звонков в службу поддержки (аудио)

➡️ для анализа отзывов используется NLP (извлекает из текстов тональность)
➡️ создаются модели машинного обучения по веб-логам анализиру
➡️ по объединным данным о продажах и звонках создаются отчеты


Чем отличается от СУБД и DWH

СУБД: хранит структурированные данные в таблицах, оптимизирована для транзакций (например, учет заказов)ю Также предназначена для бизнес-логики
💙Data Lake: поддерживает любые форматы данных и предназначен для аналитики

DWH: хранит обработанные и агрегированные данные для аналитики и отчетности
💙Data Lake: сохраняет исходные данные в сыром виде


Плюсы и минусы

хранение любых данных (структурированные, полу- и неструктурированные)
легко обрабатывать большие объемы данных, быстрый доступ к ним
базируются на Open Source решениях

риск "болота данных": потеря структуры и полезности данных без управления метаданными
данные требуют дополнительных шагов для анализа (ETL/ELT)
сложность реализации контроля доступа
для аналитики данные нужно обработать
для сбора реляционных данных есть гораздо более удобные решения


📎 Материалы
1. Data Lake
2. Хранилище данных vs. Data Lake. Или почему важно научиться ходить перед тем, как начать бегать
3. Чем озеро данных отличается от базы и зачем оно нужно аналитикам
4. Что такое озеро данных?
5. Распределенное хранилище данных в концепции Data Lake: с чего начать
6. Как мы организовали высокоэффективное и недорогое DataLake и почему именно так
7. Data Lake – от теории к практике. Сказ про то, как мы строим ETL на Hadoop
8. Что в глубинах Data Lake? Строим архитектуру, укладываем слои, распределяем ответственность
9. Озера данных vs обычные БД

#инфраструктура



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍87
💻 PaaS, IaaS, SaaS, CaaS, FaaS

Это различные модели облачных услуг от провайдеров
Предоставляют ИТ-ресурсы через интернет

Для чего нужны?

🟡Снижение затрат
— нет расходов на оборудование, центры обработки данных, их обслуживание
— оплата только за используемые ресурсы

🟡Масштабируемость
— быстрое добавление/уменьшение ресурсов под нагрузку
— универсальные платформы и инструменты для разработки и управления приложениями


Кратко


*️⃣SaaS (Software as a Service) ПО как сервис: готовые приложения через интернет

*️⃣IaaS (Infrastructure as a Service) Инфраструктура как сервис: аренда серверов, сетей, ХД и др ресурсов, которые управляются через облако

*️⃣PaaS (Platform as a Service) Платформа как услуга: платформа для разработки и запуска приложений без управления инфраструктурой

*️⃣CaaS (Containers as a Service) Контейнер как услуга: платформа для развертывания и управления контейнерами (Docker, Kubernetes)

*️⃣FaaS (Function as a Service) Функция как услуга: платформа без сервера для выполнения функций по событиям


SaaS

🔘Провайдер управляет: всем — инфраструктурой, приложениями, обновлениями. Используется ПО через браузер или API
🔘Клиент: только использует приложение

Применение

🟡доступ к CRM, ERP, корпоративным почтовым сервисам
🟡аналитика

Пример

для ведения учета продаж можно:
🟡использовать онлайн-CRM
🟡вносить данные через браузер, управлять клиентской базой и создавать отчеты


PaaS


🔘Провайдер управляет: инфраструктурой, ОС, БД и инструментами для разработки
🔘Клиент: приложениями, кодом

Применение

🟡быстро разработать приложения (микросервисы, мобильные приложения)
🟡протестировать + автоматический деплой (интеграция с CI/CD)

Пример


чтобы разработать приложение для управления задачами, можно
🟡использовать платформу (например, Google App Engine)
🟡на нее загрузить код на Python
🟡платформа автоматически масштабирует приложение и управляет сервером


IaaS

🔘Провайдер управляет: инфраструктурой (серверы, ХД, сеть), виртуальными машинами, системами безопасности
🔘Клиент: ОС, средствами разработки, приложениями

Применение

🟡развертывание виртуальных серверов для веб-приложений
🟡хранение и обработка больших объемов данных
🟡создание тестовых и продакшн-сред
🟡масштабирование инфраструктуры под нагрузку

Пример

для развертывания интернет-магазина можно:
🟡арендовать виртуальные машины через AWS EC2
🟡установить на них веб-серверы (например, Apache) и базы данных (PostgreSQL)
🟡настроить балансировщик нагрузки и хранение файлов


CaaS

🔘Провайдер управляет: инфраструктурой, оркестрацией контейнеров
🔘Клиент: контейнерами, приложениями, кодом

Применение

🟣создание микросервисных приложений
🟣автоматизация CI/CD процессов
🟣переносимость приложений между средами (локальные и облачные)
🟣масштабирование приложений без сложной настройки серверов

Пример

для развертывания микросервисов можно:
🟣создать образы приложений с помощью Docker
🟣развернуть их в кластере Kubernetes через сервис, например, AWS ECS
🟣автоматически масштабировать приложения под нагрузку


FaaS

🔘Провайдер выполняет функцию по событию (HTTP-запрос, изменение файла), ресурсы автоматически выделяются под задачу
🔘Клиент управляет кодом функций, событиями

Применение

🟣 автоматическая обработка данных (например, изображений)
🟣 запуск API или без-серверных приложений
🟣 реакция на события (загрузка файлов, обновление базы)

Пример

для обработки изображений можно:
🟣написать функцию на Python для сжатия изображений
🟣загружать файлы в облачное хранилище, событие запускает функцию через AWS Lambda
🟣функция сжимает изображения и сохраняет их


📎Материалы
1
. В чем разница между IaaS, PaaS, SaaS, FaaS и CaaS
2. X-as-a-services: как не погрязнуть в аббревиатурах облачных услуг
3. Что такое IaaS, PaaS и SaaS: объясняем простыми словами
4. Разница между IaaS, PaaS и SaaS: самая понятная статья об облаках в интернете
5. В чем разница между PaaS, SaaS и IaaS?
6. SaaS, PaaS, IaaS: в чем разница
7. Введение в модели облачных сервисов - PaaS, SaaS, IaaS, FaaS и другие

#инфраструктура



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍146😁2👎1
🔼 Модель зрелости REST API Леонарда Ричардсона

Модель зрелости REST API Леонарда Ричардсона — концепция, которая оценивает уровень соответствия API принципам REST
◾️показывает эволюцию от простого RPC к полноценным REST API: чем выше уровень в модели, тем лучше выстроено API

Применяется:
🔘для анализа текущего состояния API и для создания REST API, которые легко интегрируются и поддерживаются, что делает их более гибкими для бизнеса


💡 Напомним

URL
(Uniform Resource Locator): указывает, где находится ресурс, и как к нему обратиться (например, протокол + адрес)
💙https://example.com/page

URN (Uniform Resource Name): уникальное имя ресурса, независимое от его местоположения.
💙urn:isbn:0451450523

URI (Uniform Resource Identifier): общий термин, включающий как URL, так и URN, т.е. идентификатор ресурса в сети
💙URI может быть как https://example.com, так и urn:isbn:0451450523



Уровни зрелости модели


💙 Уровень: API как удалённый вызов процедур (RPC)
Иногда называется "болото оспы" (The Swamp of POX (Plain Old XML)


API — точка входа, которая принимает параметры и возвращает результат (единственный endpoint).
Действует как обёртка для удалённых процедур, не использует RESTful принципы

🔹один URI, один HTTP метод
🔹HTTP используется только для взаимодействия компонентов распределенной системы
🔹например, это могут быть протоколы XML-RPC и SOAP
🔹действия определяются через параметры запроса,

💙 пример: POST /api с телом запроса {action: "createUser", data: {...}}
Запросы обрабатываются как действия, а не как операции с ресурсами


💙 Уровень: Разделение ресурсов через URL

🔹несколько URI, один HTTP метод
🔹отдельные endpoints для каждого ресурса
🔹действия привязаны к URL

💙 пример: POST /createUser для получения спискапользователей, POST /getUsers для создания.


💙 Уровень: HTTP-методы

🔹несколько URI, каждый поддерживает разные HTTP методы
🔹используются методы HTTP, например, GET, POST, PUT, DELETE
🔹добавлены коды ответа HTTP (например, 200 OK, 404 Not Found). Это делает интерфейс более понятным

💙 пример:
GET /users/123 → возвращает пользователя
DELETE /users/123 → удаляет пользователя


💙 Уровень: HATEOAS для управления состоянием через ссылки

Самый высокий уровень зрелости REST API

🔹сервер предоставляет не только данные, но и гиперссылки. Они показывают клиенту действия, доступные с этим ресурсом
🔹ресурсы сами описывают свои возможности и взаимосвязи

HATEOAS
(Hypermedia as the Engine of Application State) — характеристика веб-сервиса возвращать действия, которые могут быть выполнены с ресурсом, в виде URL
Дает возможность менять URI независимо от клиентов

💙 пример применения HATEOAS

Есть API для управления задачами в приложении
Сервер может вернуть ответ на запрос списка задач, в том числе гиперссылки
🔘self — ссылка на текущий ресурс (конкретную задачу)
🔘update — для обновления задачи
🔘delete — для удаления
Клиент может следовать ссылкам, но не знать заранее URL-структуры API

{
"tasks": [
{
"id": 1,
"noscript": "Buy groceries",
"status": "pending",
"_links": {
"self": "/tasks/1",
"update": "/tasks/1/update",
"delete": "/tasks/1/delete"
}
},



📎 Материалы
1. А ваша служба является RESTful? Все что необходимо/обязательно знать про веб службы и REST
2. Richardson Maturity Model – RESTful API (en)
3. REST API — Что такое HATEOAS?
4. REST, что же ты такое?

#api



🧑‍🎓 Больше полезного в базе знаний по системному анализу
Please open Telegram to view this post
VIEW IN TELEGRAM
26🔥15👍13
Системный_анализ_IT's_Tinkoff_Solution_Cup.pdf
625 KB
🏦Tinkoff. Разбор задач отборочного тура трека Системный анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
38🔥2212😱9