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

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

https://gosuslugi.ru/snet/67b0613c6411ff785396754a
Download Telegram
Оконные функции

Оконные функции — функции, которые выполняют вычисления внутри заданного набора данных или "окна" в таблице БД

Принцип работы

1⃣ Оконная функция (ОФ) определяет "окно" данных, на которых будет выполняться вычисление (несколько строк или диапазон значений столбца)
2⃣ Если требуется, данные внутри окна упорядочиваются по одному/нескольким столбцам
3⃣ Применяются вычисления, заданные в ОФ (сумма, среднее значение, ранжирование и тд)
5⃣ Если требуется, результаты группируются по столбцам или выражениям
5⃣ Возврат результатов

Упрощенный синтаксис

➡️ <имя функции> OVER (<окно>)
где имя функции = имя оконной функции
окно = выражение, описывающее набор строк для обработки и порядок обработки


Характеристики

🟠в отличие от агрегатных функций, оконные могут вычислять значения для каждой строки в результате запроса. Агрегатные работают над всем набором данных
🟠это не то же самое, что GROUP BY. ОФ не уменьшают количество строк, а возвращают столько значений, сколько получили на вход
🟠в отличие от GROUP BY, OVER может обращаться к другим строкам


Как используются?


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


Виды


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

Ранжирующие — назначают ранг каждой строке в пределах окна в соответствии с заданными критериями сортировки. Например, можно ранжировать товары по его цене в каждой категории.
Под ключевым словом OVER обязательным идёт условия ORDER BY, по которому будет происходить сортировка ранжирования
➡️ROW_NUMBER — возвращает номер строки, используется для нумерации;
➡️RANK — возвращает ранг каждой строки

Смещения — позволяют перемещаться и обращаться к разным строкам в окне, относительно текущей строки, а также к значениям в начале или в конце окна
➡️LAG — обращается к данным из предыдущих строк окна
➡️LEAD — обращается к данным из следующих строк. Аналогично LAG имеет 3 аргумента


Примеры

➡️Ранжирование данных
SELECT student_id, test_score,  
RANK() OVER (ORDER BY test_score DESC)
AS rank
FROM student_scores;


➡️Вычисление среднего значения по группам
 SELECT region, sales_amount,  
AVG(sales_amount) OVER (PARTITION BY region)
AS avg_sales_per_region
FROM sales_data;


Окно vs Партиция в оконных функциях

Окно — набор строк внутри результата запроса, на котором выполняется операция агрегации или аналитическая функция
➡️Таблица с данными о студентах и их оценках за тесты.
Нужно вычислить средний балл каждого студента по последним трем тестам.
ОФ определит "окно", которое охватывает последние три записи для каждого студента, и вычислит средний балл только в этом окне данных.

Партиция (оператор PARTITION BY) — подмножество строк, выделенное для ОФ по одному/нескольким столбцам в таблице.
Задает условие, по которому эти строки группируются для вычисления функций.
➡️ Есть таблица с данными о продажах,.
ОФ помогут вычислить суммы продаж в каждом регионе отдельно.
Партиция разделит данные на группы по регионам, после чего сумма продаж вычисляется в каждой группе отдельно.

💡 Окно определяет, где выполняется функция,
а партиция - как данные группируются для выполнения этой функции


Недостатки оконных функций

🟢не все СУБД их поддерживают
🟢производительность может ухудшаться из-за их влияния на выполнение запроса
🟢отладка также может быть затруднительна


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#бд #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍1882
🔐 Хэширование и Шифрование

🤗 Хэширование и Хэш-функции

⚪️Хэширование — преобразование данных с помощью специального алгоритма
В результате возникает хеш (hash) — отображение данных в виде уникальной строки
😍размер строки одинаковый для информации разного объема.
😍хеш состоит из цифр и латинских букв.


😂 Хэш-функция

Хэш-функция
— алгоритм, который принимает входные данные любого размера и возвращает хэш фиксированного размера
Результат хеш-функции называется «хеш-суммой»\«хеш», а входные данные — «сообщением»
Исходное сообщение -> [Хэш-функция] -> Хэш 


Когда хэши совпадают — это коллизия. Это небезопасно, т.к. позволяет подменить данные.

Как работает хеш-функция


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

🔣В хеш-функциях для более простых случаев преобразования проще. Например, хэш-функция построения таблиц

🔣Хэш с солью — хэш, к которому добавили случайные данные (соль) перед хэшированием.
Это делается, чтобы предотвратить атаки по радужным таблицам и сделать каждый хэш уникальным, даже для одинаковых исходных данных

Основные характеристики хэш-функций

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


Для чего используется хэширование

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

Примеры хэширования


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

Популярные алгоритмы хэширования

MD5 (Message Digest Algorithm 5)
SHA-1 (Secure Hash Algorithm 1)
SHA-2 — семейство алгоритмов с общей идеей хеширования данных
☺️SHA-256


🥶 Шифрование

Шифрование — преобразование данных в вид, который нельзя прочитать без специального ключа

Как работает шифрование

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

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

Симметричное: Один и тот же ключ используется как для шифрования, так и для дешифрования данных
Асимметричное: Используются два различных ключа – публичный для шифрования и приватный для дешифрования

Для чего используется

⚪️Конфиденциальность: защищает данные от несанкционированного доступа
⚪️Целостность: чтобы данные не были изменены
⚪️Аутентификация: подтверждает подлинность отправителя данных

Примеры использования

😥в HTTPS для защиты данных при передаче между веб-браузером и сервером
😥в емэйлах для прочтения только авторизованными пользователями
😥VPN сервисы шифруют интернет-трафик между устройством и сервером VPN
😥в бд при передаче и хранении

Популярные алгоритмы


AES (Advanced Encryption Standard)
RSA (Rivest–Shamir–Adleman)
Blowfish


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1612
😸 Работа со списками данных в REST API: сортировка, фильтрация, пагинация

🟧Сортировка

Нужна, чтобы упорядочить данные по определённому критерию

Алгоритм работы

🤯клиент отправляет запрос к API с параметром сортировки
🤯сервер обрабатывает запрос, извлекает данные из БД, сортирует по параметру и возвращает их

Примеры параметров

🟧Sort или order_by: для указания поля и порядка сортировки
GET /products?sort=price&order=desc
сортировка по цене в порядке убывания
🟧Order: указывает порядок сортировки, по возрастанию (asc) или убыванию (desc)
GET /products?sort=price&order=desc — сортировка по цене в порядке убывания
sort=field1,field2 sort = field1,field2: указание несколько полей для сортировки
GET /products?sort=price,name — сначала сортировка по цене, затем по имени
🟧custom_sort: пользовательская логика сортировки
GET /products?custom_sort=popularity — сортировка по популярности, где popularity — кастомный критерий
🟧nulls (first или last): указывает, где значения null должны идти (первыми / последними)
GET /products?sort=price&nulls=last — значения null идут последними

Примеры использования

🟧 сортировка вакансий по дате публикации, зарплате или компании
🟧 сортировка плейлистов по популярности, дате релиза или алфавиту.

🌇 Чтобы избежать сложных и затратных, нужно ограничивать количество сортируемых полей


💙 Фильтрация

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

В URL, используются параметры строки запроса для условий фильтрации
Каждый параметр имеет формат field=value, несколько параметров разделяются символом "&"

Методы

Поиск по значению: на основе точного совпадения значений
GET /api/items?status=active — фильтрует все элементы, у которых статус = active
Диапазонный фильтр: когда значения находятся в определенном диапазоне
GET /api/items?price[gte]=10&price[lte]=50 — элементы с ценой в диапазоне от 10 до 50
Поиск по подстроке: когда значения содержат указанную подстроку
GET /api/items?name[like]=%book% — элементы со словом book в названии
Фильтрация по множеству значений: значения записей из набора
GET /api/items?category=in:(books,electronics) — элементы с категорией books или electronics

Примеры использования

💙Поиск фильмов по жанрам, годам выпуска или рейтингам
💙Фильтрация задач по статусу, приоритету или дате создания

💙Для более точного поиска можно комбинировать несколько фильтров.
Для ускорения запросов — использовать индексы на колонках, которые часто фильтруются


♥️ Пагинация

При пагинации происходит разделение данных на страницы для удобства просмотра и ускорения ответов

Алгоритм работы

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

Методы

➡️ Offset-Based: использует параметры limit и offset для определения диапазона возвращаемых записей
GET /items?limit=10&offset=20 — возвращает 10 элементов, начиная с 21-го элемента (т.к. offset=20)
➡️ Page-Based: использует параметры page и page_size для определения страницы данных и количества записей на странице
GET /items?page=3&page_size=10 — 10 элементов, начиная с третьей страницы
➡️ Cursor-Based: использует указатели позиции (курсоры) в наборе данных. Позволяет избежать проблем с изменением данных во время пагинации
GET /items?cursor=abc123&limit=10 — 10 элементов, начиная с позиции, определенной курсором abc123

Примеры использования

🔴Соц сеть отображает ленту новостей с постами по 10 шт на странице
🔴Пользователи видят только несколько товаров на одной странице

💚 Полезно возвращать информацию о текущей странице, общем кол-ве страниц и кол-ве записей в ответе API
Для больших наборов данных лучше использовать курсорную пагинацию


🖋️ Порядок в запросе

Параметры в URL указываются в любом порядке, сервер должен обрабатывать их в логической последовательности:
Фильтрация ➡️ Сортировка ➡️ Пагинация


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#api
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4316🔥8
🌎 Как работает интернет

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

Структура интернета

🔵 Протоколы связи: Основной протокол интернета — это TCP/IP (Transmission Control Protocol/Internet Protocol). TCP гарантирует целостность передачи, разбивая данные на пакеты и контролируя их доставку. IP отвечает за маршрутизацию пакетов от отправителя к получателю
🔵 Доменная система имен (DNS): Распределенная база данных, которая служит для хранения и преобразования доменных имен (например, google.com) в IP-адреса (172.217.18.0), которые используются для маршрутизации данных в интернете
🔵 Интернет-провайдеры (ISP): Компании, которые предоставляют доступ к интернету
🔵 Маршрутизаторы и коммутаторы: Устройства, которые направляют данные через сеть, по оптимальным маршрутам
🔵 Протоколы приложений: Протоколы, такие как HTTP/HTTPS, FTP, SMTP, POP3 и другие, обеспечивают работу интернет-сервисов и приложений (веб-сайты, электронная почта, файловый обмен и т.д.).

Интернет работает на базе набора протоколов TCP/IP, которые реализовывают 3, 4 и 7 уровни модели OSI:

🔵TCP (Transmission Control Protocol): Обеспечивает надежную передачу данных.
🔵IP (Internet Protocol): Определяет маршрутизацию пакетов.
🔵HTTP/HTTPS (HyperText Transfer Protocol): Протоколы передачи гипертекста, обеспечивающие взаимодействие между клиентом и сервером. HTTPS включает шифрование для безопасности.

Подробнее про OSI — в наших постах (ссылки в материалах)


Доменная система имен (DNS). Включает:

1⃣ Корневые серверы — вершина иерархии DNS. Их задача — направлять запросы к соответствующим серверам доменов верхнего уровня (TLD). В мире существует 13 наборов корневых серверов, обозначенных буквами от A до M, управляемых различными организациями.
Пример: Один из корневых серверов — A.ROOT-SERVERS.NET, управляемый организацией VeriSign.

2⃣ DNS-серверы доменов верхнего уровня (TLD DNS Servers — top-level domains) — управляют доменами верхнего уровня, такими как .com, .org, .net, .ru и т.д. Они получают запросы от корневых серверов и направляют их к авторитетным серверам для конкретных доменов второго уровня.
Пример: Для домена .com существует множество TLD серверов, например, a.gtld-servers.net.

3⃣ Авторитетные серверы содержат информацию о доменных именах и их IP-адресах. Возвращают окончательные ответы на DNS-запросы.
Пример: Если запрос касается домена example.com, авторитетный сервер для google.com может быть ns1.google.com.

Интернет централизован?

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

Однако существует координационный орган — ICANN (Internet Corporation for Assigned Names and Numbers). ICANN отвечает за распределение IP-адресов, управление доменными зонами и поддержание стабильности работы сети.

ICANN координирует распределение IP-адресов и доменных зон верхнего уровня (.com, .org и т.д.), т.е. обеспечивает работу корневых DNS-серверов. ICANN не управляет содержимым сайтов и интернет-провайдерами, а лишь поддерживает техническую инфраструктуру. Хотя ICANN не может физически отключить интернет в стране, но может прекратить обслуживание доменных зон.

Что происходит, когда мы вводим в браузере google.com?

1⃣ Браузер отправляет запрос на локальный DNS-сервер.
2⃣ Локальный DNS-сервер ищет IP-адрес. Если не находит, пересылает запрос на корневой сервер
3⃣ Корневой сервер направляет запрос на TLD-сервер (для .com)
5⃣ TLD-сервер направляет запрос на авторитетный DNS-сервер для google.com
5⃣ Авторитетный сервер возвращает IP-адрес
6⃣ Браузер отправляет HTTP/HTTPS-запрос на полученный IP-адрес
7⃣ Сервер Google отвечает, и браузер отображает страницу

Автор: Виталия Малютина

#сети
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍2410
🔵OLTP и OLAP

OLTP

OLTP (Online Transaction Processing) — система, предназначенная для управления и обработки множества транзакций в режиме онлайн
Транзакции обычно включают в себя операции создания, чтения, обновления и удаления (CRUD)

Алгоритм работы

🟡Ввод данных: пользователь вводит данные через интерфейс (форму заказа в Amazon)
🟡Валидация: система проверяет корректность и полноту введенных данных (проверка номера карты)
🟡Транзакция: cистема создает транзакцию с операциями (уменьшение количества товара на складе)
🟡Запись в БД: изменения сохраняются в БД, используя характеристики ACID
🟡Подтверждение: пользователь получает уведомление об успешном выполнении транзакции (сообщение об успешной покупке)

Характеристики

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

Примеры

Сбербанк Онлайн — банковские транзакции и управления счетами
1С:Предприятие — учет и управления предприятием
Ozon — бронирование и продажа товаров, управление складскими запасами
РЖД — бронирование и продажа билетов


OLAP

OLAP (Online Analytical Processing) — система для выполнения сложных запросов и анализа больших объемов данных.
— Собирает информацию из БД, ERP, CRM и др источников, затем формирует многомерный массив данных для дальнейшего анализа. Эти массивы называют OLAP-кубами
Кубы объединяют информацию из большого числа таблиц с её предварительной обработкой. Могут иметь разные измерения (в годах, регионах и тд)

Компоненты OLAP

Источники данных — реляционные или многомерные БД, хранилище данных
ETL-инструменты (extract, transform, load) — набор средств извлечения, преобразования и загрузки данных в хранилище
OLAP-сервер, управляющий многомерными массивами данных
Аналитические инструменты для формирования отчетов, графиков, диаграмм для пользователей

Алгоритм работы

данные поступают из различных источников, таких как OLTP системы, файлы, сторонние API в ETL систему
процесс ETL:
— извлечение данных
— данные очищаются, нормализуются и преобразуются
— загрузка в OLAP хранилище
данные организуются в многомерные структуры (кубы) для быстрого выполнения аналитических запросов
пользователь запрашивает данные через аналитический интерфейс, выполняются аналитические запросы (агрегация, фильтрация, анализ)
результаты анализа визуализируются, создаются отчеты и дашбордов

Характеристики

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

Примеры систем

Yandex DataLens — визуализация и анализа данных
Microsoft Power BI — инструмент бизнес-анализа
Vertica — БД для OLAP


Cвязь между OLTP и OLAP

Дополняют друг друга в процессе управления данными и аналитики:
🟡OLTP системы генерируют и собирают данные через транзакционные операции. Данные используются в OLAP системах для анализа и отчетности
🟡данные из OLTP систем извлекаются, преобразуются и загружаются в OLAP системы для анализа
🟡результаты анализа из OLAP систем могут влиять на операции в OLTP системах
(анализ покупательского поведения может привести к изменениям в маркетинговых кампаниях или стратегиях продаж)


Пример компонентов архитектуры с OLTP и OLAP системами

OLTP
🟡Пользовательский интерфейс (UI): веб-приложение / мобильное приложение
🟡Серверное приложение для обработки транзакций и бизнес-логики
🟡Реляционная БД: для хранения транзакционных данных

OLAP
🟡ETL Процесс: извлечения, трансформации и загрузки данных из OLTP БД в хранилище данных
🟡Хранилище данных: централизованное, для анализа данных
🟡Аналитические инструменты (BI Tools): для анализа данных и создания отчетов


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#проектирование #бд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍127
🔖Паттерны проектирования и архитектурные паттерны

Паттерны проектирования
(ПП) — проверенные решения для часто встречающихся проблем в ПО. Шаблоны, которые применяются для повышения эффективности и качества кода

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


✳️ Отличие

Служат для разных уровней проектирования ПО:

🟢 ПП работают на уровне классов и объектов. Используются разработчиками при написании / рефакторинге кода
🔵 АП на более высоком уровне, описывают структуру всего продукта. Определяют на какие компоненты/модули будет делиться приложение и каким образом они взаимодействуют


✳️ Паттерны проектирования

Применение

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

Делятся на три вида:

🟢 Порождающие

Для создания экземпляра объекта или группы связанных объектов

➡️ Одиночка (Singleton): гарантирует существование только одного экземпляра определенного класса, который можно использовать из любой части программы
➡️ Фабрика (Factory): создает объекты через специальный метод или класс, скрывая детали их создания
➡️ Прототип (Prototype): объект сам создает свои копии
➡️ Ленивая инициализация (Lazy Initialization): создает объект по мере необходимости

🟢 Структурные

В основном связаны с композицией объектов, с тем, как сущности могут использовать друг друга

➡️ Декоратор (Decorator): динамически добавляет новые обязанности объектам
➡️ Фасад (Facade): предоставляет простой интерфейс к сложной системе, скрывая ее реализацию
➡️ Заместитель (Proxy): паттерн, похожий на «Фасад», но со специальным объектом-заместителем, который контролирует доступ к основному

🟢 Поведенческие

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

➡️ Наблюдатель (Observer): позволяет объектам следить за изменениями состояния другого объекта
➡️ Посредник (Mediator): организует слабые связи между объектами, чтобы снизить их зависимость друг от друга
➡️ Хранитель (Memento): помогает сохранить объект в каком-то состоянии с возможностью вернуться к нему в будущем


✳️ Архитектурные паттерны

Применение

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

Примеры


Более абстрактные:
➡️ Service-Oriented Architecture (SOA) (Сервис-ориентированная архитектура): система организована вокруг предоставления услуг (сервисов), которые могут использоваться различными приложениями
➡️ Layered Architecture (Слоистая архитектура): делит систему на уровни (слои), каждый из которых отвечает за конкретный функционал

Более конкретные:
➡️ Event-Driven Architecture (Событийно-ориентированная архитектура): компоненты системы взаимодействуют через передачу событий. Это один из способов реализации SOA
➡️ Микросервисы: разделяет приложение на небольшие, самостоятельные сервисы, которые могут разрабатываться и разворачиваться независимо. Является конкретным примером SOA
➡️ Клиент - сервер: делит систему на серверы, предоставляющие услуги, и клиенты, запрашивающие их
➡️ MVC (Model-View-Controller) (Модель-Вид-Контроллер): разделяет систему на три основные компоненты для улучшения тестирования и организации кода


✳️ Взаимосвязь GRASP с архитектурными паттернами

В объектно-ориентированных системах внутри архитектурных паттернов можно использовать паттерны GRASP
Например, паттерны для распределения обязанностей между классами и объектами (Creator, Information Expert)
Они помогут определить, как распределять обязанности


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#проектирование #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍163
🗺 Customer Journey Map (CJM)

CJM (Карта пути клиента) — инструмент визуализации пути клиента, включая все этапы взаимодействия с продуктом или сервисом.
CJM помогает понять опыт пользователя, выявить проблемы и улучшить взаимодействие пользователя c продуктом

Зачем нужна

Новая фича Довести клиента до цели
Текущая фича Найти и решить проблемы клиента при достижении цели

Примеры использования

🟡Аналитика: визуализация помогает выявить требования, проблемные ситуации, спроектировать пользовательский интерфейс
🟡Разработка продуктов: для анализа процессов, создания пользовательских и тестовых сценариев
🟡UX/UI дизайн: для улучшения пользовательского интерфейса и опыта, основываясь на реальных данных о взаимодействии пользователей с продуктом
🟡Маркетинг: для анализа как клиенты реагируют на маркетинговые кампании, поиска эффективных каналов продвижения


Основные элементы

CJM может выглядеть по-разному в зависимости от целей
Основные элементы:

🟡Действующее лицо ― клиент (образ из ядра основных групп клиентов или несколько конкретных покупателей (персонажей)
🟡Цели и ожидания пользователя
🟡Этапы пользовательского пути
🟡Точки контакта (места, ситуации и интерфейсы, когда клиент сталкивается с продуктом)
🟡Эмоции и действия пользователя
🟡Барьеры, которые мешают перейти на дальнейший этап
🟡Способы улучшения продукта и преодоления барьеров

Как построить CJM


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

Пример построения CJM по шагам

🟡 Определение целей: почему клиенты интернет-магазина часто покидают корзину, не завершив покупку
🟡Создание персонажей: составляются профили ключевых клиентов (молодые профессионалы, пожилые покупатели, с их характеристиками и поведение)
🟡 Сбор данных: анализ веб-аналитики, опросов, отзывов и интервью с клиентами для выявления ключевых точек взаимодействия и проблем
🟡 Определение этапов пути клиента: поиск товара, добавление в корзину, процесс оформления заказа, оплата и доставка
🟡 Идентификация точек взаимодействия: на сайте, через email-рассылки и службу поддержки
🟡 Анализ эмоционального состояния клиента: определяются моменты, когда клиент испытывает радость (быстрая доставка) или раздражение (сложный процесс оплаты)
🟡 Выявление болевых точек и возможностей для улучшений: проблемы на этапе оплаты и доставки. Упрощение процесса оплаты и более точное отслеживание доставки
🟡 Визуализация карты пути клиента: создается графическая карта всех этапов и точки взаимодействия с болевыми моментами и предложениями по улучшению
🟡Внедрение изменений и мониторинг результатов


Программы для построения CJM


Онлайн-доски и специальные сервисы: UXPressia, Miro, Canvanizer
Дизайнерские программы и редакторы: если создание CJM требует визуализации (Figma, Adobe Illustrator или Photoshop)

Похожие инструменты


📍Service Blueprint: более детализированная карта, описывает внутренние процессы и ресурсы, необходимые для предоставления услуг
📍Experience Map: общий контекст и опыт клиента с брендом, со всеми точками взаимодействия и эмоциями
📍Empathy Map: инструмент для понимания мыслей, чувств, действий и слов клиента, помогающий создать персонализированный опыт
📍User Story Mapping: инструмент для организации и приоритизации пользовательских историй
📍Touchpoint Map: фокусируется только на точках взаимодействия клиента с продуктом, без детального анализа этапов пути клиента


#требования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍229🔥42
😌 Знакомство со Swagger

Swagger — набор инструментов для создания, документирования и тестирования RESTful API. Основой Swagger является формат OpenAPI, который позволяет описывать API на уровне спецификаций

Зачем нужен?

автоматическая генерация интерактивной документации
тестирование API в реальном времени
единый стандарт (OpenAPI) для совместимости между различными системами и командами
автоматизация создания клиентских SDK и серверных частей

Возможности

💙 Интеграция с инструментами для авто-тестирования (Postman и др.), создание тестов на основе спецификаций API
💙 Поддержка версионирования спецификаций API
💙 Широкая экосистема: множество плагинов, инструментов и расширений для различных нужд
💙 Добавление информации о безопасности API, включая поддержку OAuth2, JWT и др. механизмов аутентификации и авторизации


Из чего состоит?

Swagger Core — ядро Swagger, программная реализация спецификации OpenAPI 3.0.

Swagger Editor: Веб-инструмент для создания и редактирования спецификаций OpenAPI
подсветка синтаксиса и автодополнение
встроенная валидация спецификаций
работа с YAML и JSON форматами
экспорт / импорт спецификаций

Swagger UI: Интерактивная документация, которая генерируется на основе спецификаций API
тестирование API вызовов
поддержка авторизации (Bearer, Basic Auth, API Key)
визуальное отображение структуры API
встроенная поддержка для описания моделей данных

Swagger Codegen: инструмент для автоматической генерации клиентских SDK и серверных частей на основе спецификаций OpenAPI
поддержка разных языков программирования и фреймворков (Java, Python, C#, Ruby и др.).
генерация клиентских библиотек, серверных стубов и документации
настраиваемые шаблоны для генерации кода
интеграция с CI/CD процессами

С чего начать работу со Swagger?

Создать спецификацию API в Swagger Editor
Сохранить в формате JSON или YAML
Открыть в Swagger UI, чтобы визуализировать и тестировать API
Использовать Swagger Codegen для генерации кода клиента или сервера


Подходы к созданию API

💙 Code First
Спецификации API генерируются на основе кода
Используется:
💙когда необходимо быстро создать API
💙для создания прототипов и экспериментальных проектов
💙когда добавляются API к уже существующим кодовым базам

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

😌 Пример реализации
💙 Swagger annotations (Java) / атрибуты (C#): добавление документации в код
💙 Swagger-Core (Java)/ Swashbuckle (C#): генерация спецификаций

💙 Contract First (API First)
Спецификации создаются до написания кода
Используется:
💙для обеспечения согласованности и стандартизации
💙когда несколько команд работают над разными частями системы
💙для детальной проработки API до начала разработки

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

😌 Пример реализации
💙 Editor: создание спецификаций API в формате OpenAPI
💙 Codegen: генерация серверных шаблонов и клиентских библиотек по спецификациям


Примеры расширений и плагинов

💙 SwaggerHub: Платформа для совместной работы над спецификациями API в реальном времени
💙 SwaggerHub Explorer: Инструмент для тестирования API без необходимости писать код
💙 Swagger Validator: Проверка спецификации на наличие ошибок и соответствие стандартам


Отличие от Postman


Цель
Swagger ориентирован на проектирование и документирование API
Postman — на тестирование и отладку
Функции
Swagger позволяет создавать спецификации и генерировать код
Postman фокусируется на тестировании, хранении запросов и автоматизации тестов


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#api #инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44👍18141
🔵 Колоночные БД, Cassandra vs PostreSQL

В колоночной БД данные хранятся и обрабатываются по столбцам, а не по строкам.

Все значения одного столбца хранятся вместе, отдельно от значений других столбцов.

В строковой БД данные хранятся построчно:
🟡[1, 2024-01-01, Телефон, 500]
🟡[2, 2024-01-02, Ноутбук, 1000]
🟡[3, 2024-01-03, Планшет, 300]

В колоночной — по столбцам:
▫️ID: [1, 2, 3]
▫️Дата: [2024-01-01, 2024-01-02, 2024-01-03]
▫️Продукт: [Телефон, Ноутбук, Планшет]
▫️Цена: [500, 1000, 300]

Чтение: если нужно найти все цены, БД сразу читает столбец "Цена", не проходя по каждой строке.


Особенности

*️⃣Данные одной колонки сохраняются вместе на диске. Каждая колонка хранится отдельно (в строковых — вместе)
*️⃣Хранят все ячейки, которые относятся к колонке, в виде непрерывной записи — это и делает выполнение операций по поиску и доступу быстрее
*️⃣Агрегированные операции выполняются быстрее, так как считывается меньше данных и не нужно обрабатывать лишние колонки
*️⃣Оптимизированы для операций агрегации, таких как SUM, AVG, COUNT
*️⃣Каждая запись в семействе колонок идентифицируется уникальным ключом строки (Row Key)

Когда лучше выбрать?

Когда нужно быстро читать большие объемы данных по конкретным столбцам
Когда важна быстрая агрегация данных
Для данных, собранных по времени или другим параметрам, т.к. информация часто анализируются по определенным метрикам (столбцам)
Для распределенной обработки данных и масштабируемости
Некоторые БД (Apache Cassandra и HBase) спроектированы для работы в распределенной среде. Они легко масштабируются горизонтально, добавляя новые узлы в кластер
Это позволяет обрабатывать большие объемы и распределять нагрузку между серверами
Для OLAP систем при анализе больших объемов данных

Когда неэффективны

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

Примеры использования


🟠Анализ данных продаж для определения трендов и прогнозов
🟠Хранилище данных для аналитики финансовых транзакций
🟠Мониторинг производительности серверов и сетевого трафика

Отличия колоночных SQL от NoSQL

SQL:
*️⃣Имеет более строгую схему, таблицы и типы данных фиксированы
*️⃣Стандартный язык SQL для запросов
*️⃣Для вертикального масштабирования (увеличение мощности одного сервера)
*️⃣Для аналитических запросов

NoSQL:
*️⃣Более гибкая схема, можно легко добавлять новые столбцы
*️⃣Часто собственные языки или API
*️⃣Легче масштабируется горизонтально (добавление новых серверов)
*️⃣Для больших распределенных систем

Примеры БД


*️⃣SQL: Clickhouse, Google BigQuery
*️⃣NoSQL: Apache Cassandra, Apache HBase


Когда лучше выбирать строковые БД

🟠Для транзакционных систем (OLTP): БД, такие как PostgreSQL и MySQL, оптимизированы для быстрого выполнения транзакций, включая вставку, обновление и удаление строк. Подходят для банковских систем или системы обработки заказов.
🟠Когда структура данных может часто меняться: в строковых БД каждая запись хранится в виде строки, операции обновления данных более эффективные
🟠Для частого соединения данных из разных таблиц и реляционных операций между таблицами


Сравнение Cassandra vs PostgreSQL на картинке поста 👇

⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#бд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍218🤔1
Производительность API: краткий обзор способов

1⃣ Кэширование

Временное хранение часто используемых ответов
💛 снижение время отклика, уменьшение нагрузки на сервер за счет повторного использования данных
💛 риск устаревания данных, сложность управления сроками жизни кеша
➡️ Применяется при частых запросах к неизменяемым или редко изменяемым данным

2⃣ Batch-запросы

Объединение нескольких запросов в один для сокращения количества обращений к серверу
💛 снижение количества сетевых вызовов;
💛 повышение производительности за счет групповой обработки запросов
💛 увеличение сложности обработки на сервере, что может вызвать задержки;
💛может усложнится обработка ошибок, т.к. все запросы обрабатываются вместе
➡️ Когда клиенту нужно выполнить несколько связанных запросов одновременно.

3⃣ Chunked-запросы

Разделение большого запроса или ответа на более мелкие части (чанки), которые отправляются последовательно
💛 улучшение обработки больших объемов данных за счет поэтапной передачи
💛 снижение вероятности тайм-аутов при передаче больших файлов
💛 сложнее реализация и координация частей запроса, возможны задержки между частями
➡️ При работе с большими объемами данных, например, загрузка файлов

4⃣ Rate Limiting

Ограничение количества запросов за определенный промежуток времени
💛 защита сервера от перегрузок за счет контроля нагрузки
💛 исключение злоупотребления API
💛 может вызвать неудобства у пользователей при жестких ограничениях
требует мониторинга и настройки
➡️ Для защиты от DDoS-атак и управления ресурсами сервера

5⃣ Retry

Повторение неудавшихся запросов
💛 повышает надежность взаимодействия, снижает влияние временных ошибок
💛 увеличение нагрузки на сервер, риск дублирования операций
➡️ При временных сбоях в сети или сервере, для критичных операций, требующих гарантированной доставки

6⃣ Timeout

Установка максимального времени ожидания ответа
💛 предотвращение долгих ожиданий
💛 освобождение ресурсов
💛 обнаружение проблем с задержками
💛 возможны сбои при медленной работе сервера, требует точной настройки
💛 неправильно настроенные тайм-ауты могут привести к преждевременным отказам
➡️ Для предотвращения зависания запросов и оптимизации ресурсов

7⃣ Pagination

Разделение результатов на страницы
💛 снижение нагрузки на сервер за счет обработки небольших частей данных
💛 улучшение скорости обработки
💛 увеличение сложности навигации по данным
💛 усложнение реализации API
➡️ Для работы с большими объемами данных (списки, поисковые результаты)

8⃣ Compression

Сжатие данных перед передачей
💛 снижение объема данных, повышение скорости передачи
💛 требует дополнительноых и ресурсов на сжатие и разжатие данных
➡️ Для уменьшения трафика


Верхнеуровневые (архитектурные) способы

😈 Load Balancing

Распределение нагрузки между серверами
улучшение масштабируемости и устойчивости за счет равномерного распределения запросов
повышение доступности системы
увеличение сложности настройки и управления
требуется мониторинг и управление балансировщиками нагрузки
➡️ Для высоконагруженных систем

😈 CDN (Content Delivery Network)

Использование сети серверов для кэширования и доставки контента
снижение времени отклика за счет храненич контента на серверах, расположенных ближе к пользователям
снижение нагрузки на основной сервер за счет распределения на несколько серверов
стоимость использования и сложность настройки
зависимость от стороннего провайдера
➡️ Для ускорения доставки статического контента (изображения, видео и файлы)

😈 Асинхронное взаимодействие

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


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#api
Please open Telegram to view this post
VIEW IN TELEGRAM
👍59🔥1712
ETL и ELT

Это способы доставки данных из источников в централизованную систему (хранилище)

Ключевое отличие: ГДЕ и КОГДА выполняются преобразование и загрузка данных:
🟠в ETL данные трансформируются перед загрузкой в целевую систему
🟢в ELT данные загружаются сначала, а трансформируются уже в целевой системе


ETL (Extract, Transform, Load)

Как работает по шагам:
1⃣Извлечение "сырых" данных из различных источников (БД, файлов, API)
2⃣Трансформация их в нужный формат или структуру, включая очистку, нормализацию, объединение
3⃣Загрузка в целевую систему (например, хранилище данных)

Когда эффективны

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

Примеры применения

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

➡️объединение данных о продажах, клиентах и товарах из различных источников в аналитическое хранилище для прогнозирования спроса и анализа покупательского поведения

Минусы

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


⭕️ ELT (Extract, Load, Transform)

Как работает по шагам:
❤️Извлечение данных из источников
🩷Загрузка в целевую систему без предварительной обработки (промежуточной БД нет)
🩷Трансформация в целевой системе (например, с помощью SQL-запросов в хранилище данных)

Когда эффективны

Для быстрой загрузки и обработки больших объемов данных, т.к. извлекает и загружает в целевую систему (например, облачное ХД) сырые данные.
А трансформация происходит после загрузки
➡️ это позволяет при преобразовании данных использовать мощности целевой системы

Когда использовать

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

Примеры применения


➡️ загрузка логов серверов, данных из соц сетей или IoT-устройств в хранилище данных, а затем их трансформация для аналитики

➡️ загрузка сырых данных из различных бирж в облачное хранилище, где выполняется очистка, агрегация и анализ данных для создания инвестиционных стратегий

Минусы

— целевая система должна быть достаточно мощной для выполнения трансформаций
— могут появится неконсистентные данные в целевой системе до выполнения всех трансформаций


⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу

#архитектура #проектирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4110🔥6
С праздником!
🎉131🤣4619😁10🔥43👎1
🎙 Бесплатные выпуски подкаста «Аналитики у микрофона» для и про аналитиков

Ссылки на выпуски собрали в один пост:

1 сезон

👉 Удаленка
Делимся своим опытом, с чем столкнулись, какие трудности нас ждали в таком формате работы и как мы с ними справляемся или не справляемся.

👉 Дарья Перминова. Legal Tech, вопрос «зачем?» и динозаврики
Обсудили с гостем ее работу в продуктовой компании и историю ее карьерного пути. Даша также поделилась с нами своими методами найма аналитиков и размышлениями о смене работы. В выпуске поговорили о продуктовой разработке, о том, какие бывают аналитики в этой сфере, как важно уметь учиться, о материнстве и о многом другом! 

👉 Алёна Ельцова. Из бухгалтера в аналитики 1С или В переговорку с самоваром
Алёна рассказала о своем карьерном пути, о том, как она пришла к ведению профессионального блога и к созданию авторского курса "Супер-ЗУПер", и о своих планах на будущее.
Поговорили о том, что ждёт бухгалтеров и кадровиков при переходе в новую профессию Аналитик 1С и нужно ли им это.

👉 Татьяна Паваляева. Коммуникации на удаленке: свет, камера, микрофон или как налаживать отношения
В выпуске поговорили про команду, про камеры, про то как НЕ читать между строк. Подняли тему семьи, детей и переработок. Обсудили даже здоровье.

Бонусные выпуски 1 сезон, интервью с теми, кто стоит рука об руку с аналитиками

👉 Евгений Жильцов про тестировщиков
Тестировщик- кто это? Чем занимается? Как может помочь аналитику?

👉 Марина Трушникова про руководителей проектов
Обсудили, чем занимается РП, как обучиться и попасть в эту сферу, где граница работы РП и аналитика, а также затронули тему коммуникаций и пофантазировали о том, что ждет эту роль с развитием технологий.

👉 Евгений Руднев про бизнес-аналитиков
Кто такой бизнес-аналитик и для чего он нужен бизнесу?
Что общего у бизнес-аналитика и следователя?
Какими качествами должен обладать бизнес-аналитик?
Почему коммуникации намного важнее знания нотаций?
Где учиться на бизнес-аналитика и как развиваться в профессиональном плане?

2 сезон

👉 Подкаст в подкасте
Зачем мы делаем подкасты? Зачем мы слушаем подкасты? Зачем мы участвуем в других подкастах? Вопрос «зачем?» прозвучал в выпуске очень много раз, как мы любим, постарались поделиться нашим мнением.

👉 Татьяна Макарова. В поисках идеальной работы
Обсудили важные моменты, на которые стоит обратить внимание на собеседовании, чтобы избежать неприятных ситуаций и не жалеть потом о своем выборе. 

#подкасты
👍14🔥94
✔️SQA: обеспечение качества ПО

SQA (Software Quality Assurance) — процесс для обеспечения соответствия ПО установленным стандартам и требованиям.
Это система подходов, которая интегрирована в процесс разработки, чтобы гарантировать качество на всех этапах.

Почему важно SQA?

💛 Обеспечение соответствия ПО требованиям и ожиданиям пользователей
💛 Раннее выявление и устранение дефектов
💛 Снижение затрат на исправление ошибок на поздних стадиях разработки
💛 Повышение доверия и лояльности пользователей

Основные аспекты SQA

🟢Планирование и анализ требований: определение требований к качеству и разработка плана его обеспечения

🟢 Процессы и методологии разработки: внедрение практик разработки (Agile, Scrum, DevOps)

🟢 Документирование и стандарты: создание и поддержка документации, стандартизация процессов и методов тестирования.

🟢 Тестирование ПО: проверка соответствия ПО требованиям, поиск и устранение дефектов.
  
🟢Контроль качества (QC): мониторинг и проверка соответствия результатов требованиям и стандартам.

🟢Анализ и улучшение процессов


Примеры применения

➡️ внедрение методологии Agile для улучшения взаимодействия между командами разработки и тестирования
➡️ создание стандартов кодирования и тестирования для поддержания качества на всех этапах разработки
➡️ проведение аудитов процессов разработки и тестирования, автоматизация тестирования

Примеры атрибутов качества

Внешние
Удобство установки / удаления
Целостность (насколько хорошо система защищает от неточности)
Совместимость (взаимодействие и обмен данными с другими системами и компонентами)
Производительность
Надежность
Устойчивость
Безопасность
Удобство использования

Внутренние
Эффективность использования ресурсов системой
Возможность модификации
Переносимость (насколько легко заставить систему работать в другой
операционной среде)
Возможность повторного использования
Масштабируемость
Проверяемость и тестируемость (как быстро можно протестировать систему

Инструменты и методы

🟢для управления тестированием: Jira, TestRail
🟢для авто-тестирования: Selenium, TestComplete
🟢системы контроля версий и CI/CD: Git, Jenkins
🟢для статического анализа кода: SonarQube


Отличие от нефункциональных требований


🔵QA охватывает весь процесс разработки и контроля качества ПО, обеспечивая соответствие всем требованиям (функциональным и нефункциональным).
🟢 Нефункциональные требования определяют конкретные критерии, которым должна соответствовать система для обеспечения качественного функционирования, не затрагивая процесс их обеспечения  (производительность, безопасность, масштабируемость, надежность и удобство использования)


#требования
Please open Telegram to view this post
VIEW IN TELEGRAM
128👍4🔥4
🛡 Изолированность транзакций в БД: MVCC, блокировки

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

Как обеспечить изолированность

🟣 MVCC (multiversion concurrency control) — создание отдельной версии данных для каждой транзакции
🟠 Блокировка — ограничение доступа к данным


MVCC

Принцип работы


Во время транзакции создается копия данных, в которой происходят изменения
Если транзакция завершилась успешно, копия становится основным источником, старая версия — удаляется
Если во время транзакции произошла ошибка, старая версия остается основной, а копия удаляется

Пример

Два пользователя одновременно меняют карточку товара
⚪️ Они открывают карточку товара, создается две копии записи о товаре
⚪️ Одновременно меняют поля товара. Обе копии могут стать основной записью
⚪️ Перед сохранением БД пытается слить две записи в одну
▫️ Если конфликтов нет (менялись разные поля), транзакции завершаются успешно
▫️ Если появились конфликты, обе транзакции откатываются


Блокировки

Примеры видов блокировок


*️⃣ Централизованная
*️⃣ Распределенная
*️⃣ Независимая


😀 Централизованная
Приложение-координатор дает доступ к БД или отклоняет запрос, если БД занята.

Алгоритмы выбора координатора

Забияка
🟡 рассылается сообщение о выборе координатора
🟡 отвечают все неупавшие приложения
🟡 инициатор выбирает приложение с наибольшим ID

Выбор в кольце
🟡процессы образуют кольцо, передавая сообщение о выборе координатора, пропуская неотвечающие узлы
🟡по завершению инициатору приходит список "живых" приложений
🟡инициатор выбирает приложение с наибольшим ID

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


😀 Распределенная
Каждый процесс отправляет запросы на доступ к ресурсу всем другим (и себе)

Действия получателя:
🟠ОК: если другое приложение не имеет доступа и не запрашивает его
🟠В очередь: если получатель уже использует ресурс
🟠Сравнение времени: если получатель планирует использовать ресурс, он
сравнивает время запроса со времени своего запроса
ОК: если у входящего сообщения время меньше
В очередь: если время больше
После отправки запросов приложение останавливается, ждет подтверждения от остальных.
Далее отправляет OK всем в своей очереди и чистит ее

📍Проблемы: при сбое одного из процессов могут возникнуть задержки, блокирующие
доступ к ресурсу

😀  Независимая
Минимизация блокировок за счет работы с копиями данных.

*️⃣Каждая транзакция работает изолированно со своей копией данных
*️⃣Перед фиксацией изменений, проводится проверка на наличие конфликтов.
  — если не обнаружено, изменения транзакции применяются к основной БД
  — если обнаружено (например, другой транзакцией изменены те же данные), текущая транзакция откатывается и, возможно, повторяется

📍Проблемы: частые откаты при высокой конкуренции, сложность управления копиями данных


Пример блокировки в БД


Две транзакции (T1 и T2) работают с таблицей accounts (информация о балансах пользователей)

🟡T1: Начинает транзакцию, читает баланс аккаунта
🟡T1: Запрашивает блокировку на аккаунт для обновления баланса
🟡T2: Начинает транзакцию и пытается прочитать баланс аккаунта
Блокировка: т.к.T1 удерживает блокировку, T2 ждет, пока T1 завершит свою транзакцию
🟡T1: обновляет баланс и фиксирует транзакцию, освобождая блокировку
🟡T2: читает обновленный баланс


Что выбрать для обеспечения изолированности?

🟣 MVCC
    ▫️если важен параллельный доступ
    ▫️скорость обработки транзакции
    ▫️когда важно, чтобы чтения не блокировали записи
🟠Блокировки
    🟡если нельзя допустить любую рассогласованность данных
    🟡важна строгая последовательность данных
    🟡недостаточно памяти для хранения копий


#бд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥189👍94
Grafana: Обзор и возможности

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

Возможности

Подключение к различным источникам данных
〰️поддерживает широкий спектр источников данных: Prometheus, InfluxDB, Graphite, Elasticsearch, MySQL, PostgreSQL и другие
〰️возможность работы с несколькими источниками данных одновременно.

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

Алертинг
〰️настройка оповещений на основе заданных условий и метрик
〰️поддержка различных каналов уведомлений: Email, Slack, PagerDuty и др.
〰️создание сложных правил для оповещений с использованием логических выражений

Управление пользователями и ролями
〰️поддержка многопользовательского режима с разграничением прав доступа
〰️интеграция с системами аутентификации: LDAP, OAuth и др.
〰️настройка ролей и разрешений для управления доступом к данным

Плагины и расширения
〰️установка и использование плагинов для расширения функциональности
〰️плагины для дополнительных источников данных, новых типов визуализаций и интеграции с внешними системами

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


Примеры применения
🔘мониторинг серверов и приложений: визуализация и анализ метрик производительности серверов, сетевых устройств и облачных ресурсов
🔘DevOps и CI/CD: отслеживание и анализ процессов CI/CD, включая скорость сборки, качество кода, успешность и время выполнения тестов.
🔘мониторинг производительности приложений, включая задержки, количество запросов, использование ресурсов и другие метрики.
🔘 бизнес-анализ: создание дашбордов с отчетами по ключевым бизнес-метрикам (продажи, конверсия, пользовательская активность)
🔘 интернет вещей (IoT): визуализация и мониторинг данных с IoT-устройств (температура, влажность, уровень заполнения и другие показатели)

Недостатки
🟣Некоторые расширенные возможности доступны только в платных версиях (Grafana Cloud или Grafana Enterprise)
🟣Эффективность работы зависит от качества и производительности источников данных
🟣Для максимальной эффективности требуется правильная настройка и регулярное обновление

Экосистема Grafana
😥Grafana Loki: система для управления логами
😥Grafana Tempo: для распределенного трейсинга
😥Grafana Cloud: услуга для облачного хостинга и управления всей экосистемой Grafana
😥Grafana Agent: агент для сбора метрик и логов

#инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍259🔥8
🌎 Синхронизация времени по NTP

NTP (Network Time Protocol)
— протокол для синхронизации времени между компьютерами в сети.
Позволяет устанавливать точное время на устройствах, синхронизируя их часы с часами специальных серверов времени (NTP-серверами)

Как работает по шагам

1⃣Запрос времени: клиент отправляет запрос на сервер NTP с собственной меткой времени
отправления (T1)
2⃣ Ответ от сервера: сервер NTP записывает время получения запроса (T2), отправляет ответ с
временем отправления (T3) и временем получения (T2)
3⃣ Получение ответа: клиент сохраняет время получения ответа (T4) и рассчитывает сетевую
задержку и смещение во времени своих часов для их корректировки.


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


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

Обеспечение безопасности

для своевременного мониторинга и реагирования, для проверки подлинности транзакций или предотвращения повторных атак

Координация действий между системами
помогает координировать действия между серверами и другими устройствами.

Работа распределённых БД
для правильного применения изменений и согласования данных между различными узлами.

Для правильного воспроизведения мультимедиа
поток контента идёт пакетами данных, сбой времени в одном пакете приведет к изменению его места в потоке, и последовательность видео нарушится


За счет чего достигается высокая точность


😀 Высокоточные источники времени: использует атомные часы и GPS-синхронизированные серверы времени UTC.
UTC (всемирное координированное время) обеспечивает единый стандарт времени для всего мира.
Время с атомных часов и серверов UTC распространяется через сеть
😀 Алгоритмы коррекции задержек: используются ы для оценки и коррекции задержек в сети между клиентами и серверами времени. Это позволяет компенсировать задержки и улучшать точность синхронизации


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

😀Сетевые инфраструктуры: для согласования времени на маршрутизаторах и серверах
😀Финансовые системы: для точной фиксации времени транзакций
😀Системы безопасности: для точного ведения логов событий
😀Облачные сервисы и дата-центры: для координации операций между серверами


Кейсы использования

У пользователя украли данные карты и хотят снять деньги
💠Пользователь в ту же секунду блокирует карту
💠Банковская система отсортирует по времени входящие сообщения о снятии денег и о блокировке карты
💠Если часы пользователя, отстают, мошеннику удастся снять деньги
Если обмен сообщениями проходит с использованием NTP, клиент успеет спасти деньги

Компилятор при пересборке проверяет время изменения файла
🟡Если исходный файл имеет большее время, чем его объектный файл, значит, исходный файл был изменен, и его нужно перекомпилировать
🟡При отставании часов распределённой системы даже на миллисекунду результат компиляции будет состоять из старых и новых файлов. Это делает отладку невозможной
Если исходные файлы из разных частей системы передаются через NTP, то с отладкой кода проблем нет


Классы точности NTP-серверов


Цифра - уровень по отношению к UTC
🟡 Stratum 0 — референсные часы (атомные, GPS), обеспечивают наиболее точное время.
Это устройства не подключены напрямую к сети, служат основным источником
времени для серверов Stratum 1
🟡 Stratum 1 — серверы, напрямую подключенны к Stratum 0.
Самые точные серверы, могут учитывать время с точностью в одну триллионную долю секунды.
Они используют сложное и дорогое оборудование и обычно
не отвечают на запросы конечных пользователей, обслуживают только серверы более
низкого уровня.
🟡 Stratum 2 и выше — получают данные от Stratum 1 и работают с погрешностью примерно 0,001 секунды.
🟡Stratum 3 — получают данные от stratum 2, с точностью до 0,05 секунды. Дальше идут уровни 4, 5 и т.д.


#инфраструктура
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥94
🔵 Уровни изоляции транзакций в базах данных

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

Изоляция является одним из ключевых компонентов ACID

Напомним, транзакция в БД — последовательность операций, выполняемых как единое целое.
Должны быть либо полностью выполнены, либо полностью отменены.
Это обеспечивает целостность данных.

Где применяются уровни изоляции

💙в реляционных базах данных (MySQL, PostgreSQL, Oracle и SQL Server)
💙в системах с высоким количеством параллельных транзакций (финансовые, интернет-магазины, системы бронирования)


Основные механизмы

В основном реализуется через механизмы СУБД:
Блокировки: предотвращают одновременное чтение и запись одних и тех же данных
MVCC: версионирование данных для каждой транзакции

Иные:
Паттерны проектирования: например, очереди задач
Транзакционные менеджеры: внешние компоненты в распределенных системах


Аномалии при параллельной обработке транзакций

🔘Потерянное обновление: две транзакции одновременно изменяют одни и те же данные, и одно из изменений теряется

0️⃣«Грязное» чтение: транзакция читает данные, которые были изменены другой транзакцией, но еще не зафиксированы

0️⃣Неповторяемое чтение: транзакция повторно читает данные и видит разные значения из-за изменений, внесенных другой транзакцией

0️⃣Фантомная запись: транзакция повторно выполняет запрос и видит новые строки, добавленные другой транзакцией


Уровни изоляции



💙 Read Uncommitted (Чтение неподтвержденных данных)

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

💙Подходит для аналитических запросов, где требуется высокая скорость чтения данных
💙 Пример: логирование или мониторинг, где важна скорость, а не точность данных

Возможны все проблемы: "грязное" чтение, повторное обновление, неповторяемое чтение, фантомные записи


💙 Read Committed (Чтение подтвержденных данных)

Транзакции могут читать только те изменения, которые были зафиксированы
Механизм: блокировка строк на запись до завершения транзакции

💙Когда важна балансировка между целостностью данных и производительностью
💙 Система интернет-магазина: заказы читаются только после их подтверждения
💙 Большинство OLTP систем

избегается "грязное" чтение и повторное обновление
неповторяемое чтение и фантомные записи


💙 Repeatable Read (Повторяемое чтение)

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

💙Когда критично избегать несогласованность данных
💙 Финансовая система: состояние счета должно быть неизменным на протяжении всей транзакции

избегаются "грязное" чтение, неповторяемое чтение, повторное обновление
фантомные записи


💙 Serializable (Сериализуемость)

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

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

Избегаются все аномалии


Как выбрать уровень изоляции

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

Чем выше уровень изоляции, тем:
💙больше шансов блокировки транзакций
💙выше целостность данных

💙меньше ошибок из-за параллельных транзакций
💙меньше производительность системы

#бд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🔥118💩1
Системный Аналитик
Основы Kafka – что нужно знать аналитику Неделей ранее мы рассматривали основные понятия очередей сообщений. Пришло время копнуть чуть глубже и познакомиться с Кафкой. Apache Kafka – популярный брокер сообщений с открытым исходным кодом. Применяется в …
Apache Kafka

Apache Kafka – распределённая система для обработки данных в режиме реального времени.
Работает как почта — одни сервисы передают туда сообщения, а другие — получают.
Называют брокером сообщений, так как выступает в качестве посредника


Компоненты

🟣Продюсеры — приложения, которые публикуют данные
🟣Консьюмеры — приложения, которые читают

⚪️Топики – каналы, куда продюсеры публикуют сообщения. Могут иметь множество подписчиков (консьюмеров)
⚪️Партиции – части топиков для параллельной обработки данных.
Сообщения в партиции хранятся в строгом порядке

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

Принцип работы


*️⃣Публикация: продюсер отправляет данные в топик, выбирает партицию для записи (с помощью ключа сообщения, по алгоритму round-robin)

*️⃣Хранение: сообщение записывается в выбранную партицию на одном из брокеров.
Происходит репликация (об этом далее)

*️⃣Чтение: консьюмер запрашивает данные из топика, Kafka направляет консьюмера к соответствующей партиции.
Читает, начиная с последнего прочитанного сообщения (офсета).

*️⃣Обновление офсетов: консьюмер периодически обновляет свой текущий офсет (в Zookeeper / в самом Kafka, зависит от настройки)
Это позволяет возобновить чтение с правильного места в случае сбоя.


Репликация данных

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

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

Как работает?


Сообщения записываются в лидера и затем копируются на фолловеров
Фолловеры следят за лидером и обновляются в реальном времени
Если лидер выходит из строя, один из фолловеров становится новым лидером для непрерывности работы

Replication factor — количество реплик для каждой партиции. Например, фактор репликации 3 означает 1 основную копию и 2 резервные.


Типы доставки сообщений

🟠At most once: сообщение может быть доставлено максимум один раз, возможны потери
🟠At least once — как минимум один раз, возможны дублирования
🟠Exactly once — ровно один раз, без потерь и дублирования

Надежность доставки


Продюсеры могут настроить количество подтверждений (acks) от брокеров
😀acks=0: Без подтверждений, низкая надежность.
😀acks=1: Подтверждение от лидера, средняя надежность.
😀acks=all: Подтверждение от всех реплик, высокая надежность.


Способы Интеграции с Kafka


*️⃣Прямое подключение: через стандартные клиенты (Java, Python, Go и др.)
*️⃣Коннекторы Kafka Connect: для интеграции с БД, хранилищами и др.
*️⃣Потоковые платформы: Apache Flink, Apache Spark и др


Примеры

Синхронная работа


Синхронная передача: приложения отправляют данные и ожидают подтверждения от Kafka
☺️ параметр acks=all у продюсера, чтобы дождаться подтверждения от всех реплик перед продолжением

Запрос-ответ: консьюмер отправляет запрос и ожидает ответа в другом топике.
☺️ уникальные ключи для корреляции запросов и ответов

Асинхронная

Логирование и мониторинг: отправка логов без ожидания подтверждения
☺️ параметр acks=1 или acks=0 для продюсеров, чтобы минимизировать задержку

Обработка событий
☺️ группа консьюмеров параллельно обрабатывает события

ETL-процессы: загрузка в хранилища через Kafka
☺️ Kafka Connect для интеграции с источниками и приемниками


Kafka как хранилище данных

😀Можно настраивать время хранения сообщений от минут до нескольких лет
😀Сообщения хранятся в сегментах и индексируются эффективное управление большими объемами данных
😀Высокая скорость записи и чтения данных

Ограничения
😀Нет сложных запросов и транзакционной поддержки
😀Старые данные автоматически удаляются по истечению срока
😀Иногда нужна интеграция с др системами (HDFS, S3, реляционные БД)


📎
Подборка материалов в этом посте

#интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6826🔥92👎1
Системный Аналитик
Типы интеграции систем. Преимущества и недостатки Выделяют 4 основных типа интеграции: 1. Файловая интеграция 2. Общая база данных 3. Удалённый вызов процедур 4. Обмен сообщениями 1️⃣ Файловая интеграция. Cистема А передает файл системе Б в определенном…
✉️ Интеграция через файловый обмен

Интеграция через файловый обмен
— один из 4-х главных методов интеграции систем. Системы обмениваются между собой обычными файликами в стандартных форматах, например, CSV, XML или JSON.

Особенности

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

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

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

Способы

1⃣ Протоколы

🟡FTP (File Transfer Protocol) — простой протокол для передачи файлов, но без встроенной защиты
🟡FTPS (FTP Secure) -- расширение FTP с использованием SSL/TLS для шифрования
🟡SFTP (SSH File Transfer Protocol) — расширение FTP, обеспечивает защищенную передачу данных с использованием SSH (Secure Shell).

SSH — сетевой протокол прикладного уровня для защищенного соединения между клиентом и сервером

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

3⃣ Облачные сервисы: удаленные серверы для хранения файлов с доступом через интернет (например, AWS S3, Google Drive)

4⃣ Отправка файлов как вложения по электронной почте
🧑‍🏫есть ограничения на размер файлов и проблемы с безопасностью и конфиденциальностью данных
🧑‍🏫актуально для небольших файлов и нечастых обменов


Принцип работы FTP, FTPS, SFTP

FTP
➡️клиент подключается к серверу
➡️вводит логин, пароль
➡️файлы передаются в нешифрованном виде через отдельный порт
➡️отключение клиента от сервера

FTPS
➡️подключается с использованием SSL/TLS для шифрования
➡️вводит логин, пароль. Передаются по защищенному каналу
➡️файлы передаются в зашифрованном виде через защищенный канал
➡️отключение

SFTP
➡️подключается с соединением через SSH
➡️вводит логин, пароль / использует SSH-ключи
➡️файлы передаются в зашифрованном виде через SSH-соединение
➡️отключение


Пример использования

В
ETL процессе:
извлечение: использование SFTP для загрузки CSV файлов с данными
преобразование: чтение файлов с данными, удаление дубликатов, приведение дат к единому формату, агрегация данных.
загрузка: передача обработанных данных через FTPS на сервер БД для дальнейшего анализа

Обмен данными между отделом логистики и складом
отдел логистики создает файлы с информацией о грузах в формате XML
логистика загружает файлы на защищенный SFTP-сервер
склад скриптом скачивает их и импортирует


Как обеспечить безопасность

🟧 SFTP: использование SSH для шифрования данных и аутентификации пользователей обеспечивает безопасную передачу данных.
🟧 Шифрование данных: При использовании облачных хранилищ или общих сетевых дисков рекомендуется шифровать файлы перед передачей.
🟧 Контроль доступа: Настройка прав доступа и использования аутентификации для ограничения доступа к файлам.
🟧 Антивирусная защита: Проверка файлов на вирусы и вредоносные программы перед и после передачи.
🟧 Логирование и мониторинг: Ведение журналов передачи файлов и мониторинг активности для обнаружения и предотвращения несанкционированного доступа.


Сервисы и приложения

➡️ FTP-клиенты: FileZilla, Cyberduck, CuteFTP
➡️ Интеграционные платформы: Mulesoft, Boomi, Talend для автоматизации обмена файлами
➡️ Сетевые файлообменники: NAS (Network Attached Storage), SAN (Storage Area Network)


#интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍1512🤡1