🍀BitBitGo🍀 Системный Анализ
3.22K subscribers
218 photos
154 videos
112 links
Курс «Системный анализ»
https://bitbitgo.by/
Пишем про системный анализ.
Поможем стартануть в карьере IT. Присоединяйся!
Download Telegram
Базовые операции SQL

💾 SQL — это ключевой инструмент для работы с базами данных. Одни из самых важных операций известны как CRUD:

1️⃣ Создание записи (Create):
Добавляем новую запись с помощью команды INSERT.
INSERT INTO employees (name, age, department)  
VALUES ('Анна', 30, 'Маркетинг');


👉 Этот запрос добавляет сотрудника "Анна" в отдел "Маркетинг".


2️⃣ Чтение данных (Read):
Используем SELECT, чтобы извлечь данные.
SELECT name, department  
FROM employees
WHERE age > 25;


👉 Этот запрос возвращает имена и отделы всех сотрудников старше 25 лет.


3️⃣ Обновление данных (Update):
Изменяем существующие записи с помощью UPDATE.
UPDATE employees  
SET department = 'Продажи'
WHERE name = 'Анна';


👉 Теперь "Анна" работает в отделе "Продажи".


4️⃣ Удаление записи (Delete):
Удаляем ненужные данные с помощью DELETE.
DELETE FROM employees  
WHERE name = 'Анна';


👉 Этот запрос удаляет запись о сотруднике "Анна".

💡 Советы для работы с CRUD:
• Используйте WHERE, чтобы применять изменения только к нужным строкам.
• Будьте осторожны с UPDATE и DELETE: без условий они затронут всю таблицу.

🔗 #DBMS
3👍2
Архитектура хранилищ данных: традиционная vs облачная

💾 Хранилище данных — это система, собирающая данные из разных источников для поддержки управленческих решений. Сегодня компании всё чаще выбирают облачные хранилища данных, которые предлагают значительные преимущества перед традиционными локальными системами.


Почему облачные хранилища данных?
1️⃣ Экономия ресурсов: Нет необходимости покупать и поддерживать физическое оборудование.
2️⃣ Гибкость: Быстрая настройка и масштабирование под текущие потребности бизнеса.
3️⃣ Производительность: Массовая параллельная обработка ускоряет выполнение аналитических запросов.


Традиционная архитектура: подходы
🔹 Трёхуровневая структура:
Нижний уровень: Извлечение данных из источников.
Средний уровень: Преобразование данных для анализа с помощью OLAP.
Верхний уровень: Клиентский интерфейс для визуализации и анализа.

🔹 Подходы к проектированию:
Ральф Кимбалл: Децентрализованное хранилище через витрины данных (подход «снизу вверх»).
Билл Инмон: Централизованное корпоративное хранилище с нормализованной моделью (подход «сверху вниз»).


Новые облачные архитектуры
☁️ Amazon Redshift:
• Использует колоночное хранение и массовую параллельную обработку.
• Поддерживает структурированные данные и интеграцию с AWS-сервисами.

☁️ Google BigQuery:
• Облачная архитектура без серверов с автоматическим управлением ресурсами.
• Позволяет загружать данные в реальном времени.

☁️ Panoply:
• Самооптимизирующаяся система на основе машинного обучения.
• Ускоряет обработку данных от источника до анализа.


Сложности при работе с облачными хранилищами
1️⃣ Настройка ETL/ELT-процессов для загрузки данных.
2️⃣ Работа с полуструктурированными данными.
3️⃣ Оптимизация кластеров и запросов для высокой производительности.
4️⃣ Резервное копирование и восстановление данных требуют тщательной настройки.

🔗 #DBMS
👍21
Когда тебя всё-таки взяли с липовым резюме🧑‍💻
4
This media is not supported in your browser
VIEW IN TELEGRAM
Пирожки с картошкой или с капустой?
😁121
Секреты оптимальной работы с базами данных

Индексы в базах данных: зачем и как их использовать?
Индексы применяются для ускорения выполнения запросов с фильтрацией (WHERE), сортировкой (ORDER BY), группировкой (GROUP BY), агрегацией (SUM, COUNT) и объединением таблиц (JOIN). Они позволяют сократить время выборки данных за счёт создания структуры, облегчающей доступ к строкам таблицы. Составные индексы оптимизируют запросы по нескольким столбцам, а уникальные индексы предотвращают дублирование данных. Однако индексы увеличивают нагрузку на операции INSERT, UPDATE и DELETE, требуя регулярного обновления. Их использование эффективно для часто запрашиваемых данных, но может быть избыточным для редко используемых столбцов.

Типы индексов в реляционных БД:
1️⃣ B-Tree: Универсальный тип, эффективен для диапазонных запросов.
2️⃣ Hash: Быстрее всего на точных совпадениях, но не подходит для диапазонов.
3️⃣ Bitmap: Идеален для столбцов с небольшим числом уникальных значений.

Нужно ли индексировать внешние ключи (FK)?
Да! Это ускоряет выполнение запросов с JOIN и предотвращает замедления при проверке связей между таблицами. Без индекса FK проверка ограничений может стать узким местом.

Индексация для агрегации: избыточность или польза?
Если атрибут используется только для агрегации (SUM, COUNT, AVG), индекс может быть полезен при частом выполнении таких запросов. Однако, если данные обновляются часто, индекс может замедлять систему. Оцените частоту операций перед индексацией.

Нормализация: какую НФ (нормальную форму) выбрать?
Чтобы понять, до какой нормальной формы (НФ) нормализовать данные:
1️⃣ 1НФ: Минимум требований: атомарные значения в ячейках.
2️⃣ 2НФ: Если есть составные ключи, избегайте частичных зависимостей.
3️⃣ 3НФ: Избегайте транзитивных зависимостей (значения зависят друг от друга через третью колонку).

🔗 #DBMS
4
Что такое Service Level Agreement (SLA)?

💼 SLA (Service Level Agreement) — это соглашение об уровне предоставляемого сервиса между поставщиком услуги и клиентом. Оно описывает ключевые параметры и характеристики, которые определяют качество и доступность услуг.

Что включает SLA?
1️⃣ Доступность — процент времени, в течение которого услуга доступна (например, 99,9% времени).
2️⃣ Время реакции — скорость, с которой поставщик начнёт реагировать на инциденты или запросы.
3️⃣ Обязательства — чёткие гарантии качества предоставляемого сервиса.

Почему это важно?
SLA позволяет:
• Установить ожидания между клиентом и поставщиком.
• Минимизировать риски, связанные с нарушениями сервиса.
• Упростить управление и мониторинг предоставляемых услуг.

Пример: Для облачного сервиса может быть указано, что его доступность составляет 99,95%, а время реакции на критические инциденты — не более 1 часа.

🔗 #SYSTEMDESIGN
👍8
SLO и SLI: как улучшить пользовательский опыт и контролировать качество сервиса

Когда речь заходит о качественном предоставлении ИТ-услуг, важно понимать, что ключевые параметры SLI (Service Level Indicator) и SLO (Service Level Objective) играют огромную роль в оценке и улучшении пользовательского опыта.

👉 Что такое SLI?
SLI — это измеримый индикатор качества работы сервиса. Это может быть время отклика, процент ошибок или доступность. Например, если доступность сервиса составляет 99,95%, это значит, что он доступен практически всегда.

👉 Что такое SLO?
SLO — это целевое значение для SLI. Если доступность сервиса измеряется через SLI, то SLO может быть определено как 99,95% в месяц. Это цель, которой стремится достичь команда, обеспечивая стабильную работу системы.

🛠 Практическое внедрение
1. Определите критичные пути пользователя. Начните с выявления транзакций или сервисов, которые напрямую влияют на пользовательский опыт, например, добавление товара в корзину или оплата.
2. Выберите метрики для SLI. Это могут быть время выполнения операций, процент ошибок или производительность.
3. Установите SLO и Error Budget. Error Budget определяет допустимое время простоя. Например, если SLO равен 99,95% доступности, Error Budget может составить 21 минуту в месяц.
4. Настройте визуализацию. Используйте инструменты мониторинга, такие как Instana, для отслеживания метрик и визуализации статуса SLO.

🚨 Error Budget: право на ошибку
Этот показатель помогает командам контролировать допустимый уровень недоступности сервиса. Например, если сервис выходит за рамки Error Budget, приоритетными задачами становятся устранение проблем и работа над стабильностью, а не внедрение новых фич.

📊 Инструменты для контроля
В инструментах вроде Instana вы можете создать SLI, определить метрики и установить виджеты для мониторинга SLO. Это позволяет оперативно отслеживать статус сервиса и предпринимать меры в случае нарушений.

🔗 #SYSTEMDESIGN
6👍2
Умный брокер или глупый consumer?

В мире брокеров сообщений часто обсуждают концепцию "умный брокер, глупый consumer" и наоборот. Эта характеристика описывает архитектуру распределения задач между брокером сообщений и потребителями. Давайте разберемся, где в этом спектре находится Kafka.

📌 Умный брокер, глупый consumer
Примером таких систем является RabbitMQ. Брокер берет на себя всю сложность: управление очередями, маршрутизацию, подтверждения доставки и балансировку нагрузки. Потребители получают готовые сообщения, минимально участвуя в логике обработки.

📌 Глупый брокер, умный consumer
Теперь давайте разберем противоположную концепцию. Kafka ближе к этой модели. Брокер в Kafka работает как высокопроизводительное хранилище, которое просто сохраняет и отдает сообщения. Все сложные задачи — например, управление смещениями (*offsets*), распределение нагрузки и повторная обработка сообщений — возлагаются на потребителей.

🎯 Почему Kafka выбирает "глупый брокер"?
Производительность. Упрощенный брокер может работать с огромными объемами данных, минимально вмешиваясь в обработку. Kafka поддерживает миллионы сообщений в секунду.
Гибкость. Потребители полностью контролируют логику обработки: какой *offset* читать, как обрабатывать ошибки и в каком темпе работать. *(Offset — это позиция, с которой потребитель начинает читать сообщения в топике.)*
Долговременное хранение. Kafka сохраняет данные в течение заданного времени, позволяя потребителям возвращаться к старым сообщениям.
8👍1
Что произойдет, если перезапустить consumer во время обработки сообщения? 🤔

В системах, где используются брокеры сообщений, таких как Kafka, перезапуск consumer'а в момент обработки сообщения может привести к разным сценариям. Давайте разберем, как это работает👇

1️⃣ Сообщение будет считаться необработанным
В Kafka consumer сам отслеживает, какие сообщения он обработал, с помощью _offset_. Если consumer перезапускается, но не успел подтвердить (_commit_) обработку сообщения, брокер считает, что это сообщение не обработано. После перезапуска это сообщение будет снова отправлено потребителю.

2️⃣ Идемпотентность – ключ к правильной обработке
Если обработка сообщения не является идемпотентной (например, при внесении изменений в базу данных), то повторная обработка одного и того же сообщения может привести к дублированию действий. Поэтому важно проектировать обработку так, чтобы повторный запуск не создавал проблем. Например, использовать уникальные идентификаторы транзакций.

3️⃣ Автоматическая передача другому consumer'у
Если вы используете consumer group, то после перезапуска брокер может переназначить партиции другому consumer'у из той же группы. В этом случае сообщение начнет обрабатываться другим consumer'ом.

4️⃣ Настройка автокоммита
Если у вас включен автоматический коммит (_auto-commit_), есть вероятность, что _offset_ уже был зафиксирован, даже если сообщение фактически не обработано. Это может привести к пропуску сообщения. Чтобы этого избежать, лучше использовать ручной коммит после успешной обработки.

🔗 #SYSTEMDESIGN
🔥6👍1
Задача: Гарантированная доставка заказов в нестабильный брокер

Есть две системы: система А, в которой создаются заказы, и система Б, внешняя по отношению к системе А. Для интеграции требуется настроить процесс передачи заказов из системы А в брокер на стороне системы Б. Однако брокер системы Б работает нестабильно, что может приводить к сбоям при приёме сообщений. На стороне системы А также имеется собственный брокер сообщений, что добавляет возможности для реализации надёжной доставки. В системе А формируется до 2000 заказов в час. Как можно реализовать процесс таким образом, чтобы гарантировать доставку заказов в брокер системы Б, даже при его нестабильной работе? Какие доработки потребуются на стороне системы А, чтобы минимизировать риски потери данных и обеспечить устойчивую интеграцию?
👍1
Ответ:
Для гарантированной доставки заказов в брокер системы Б нужно настроить локальный брокер сообщений в системе А. При создании заказа сообщение о нём отправляется в локальный брокер. Локальный брокер отвечает за попытки доставки в брокер системы Б. В случае недоступности брокера системы Б сообщения остаются в локальном брокере и отправляются повторно до успешной доставки. Для недоставленных сообщений использовать dead-letter queue. Такой подход гарантирует надёжную и масштабируемую интеграцию, минимизируя риски потерь данных.
6
🛠 Контрольная сумма: зачем она нужна и как работает

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

📌 Простейшие методы
Бит четности – базовый способ, проверяющий четность/нечетность единичных битов. Прост, но пропускает двойные ошибки.
8-битная сумма – складывает значения всех байтов данных. Уязвим, если изменения в байтах компенсируются.

📌 Продвинутые подходы
Для улучшения используют побитовое смешивание или умножение на «магические» числа. Например, алгоритмы CRC (Cyclic Redundancy Check) повышают надежность благодаря равномерному распределению изменений данных.

🔗 #SECURITY
7
🖥 Stateful vs Stateless: что выбрать?

В программной архитектуре stateful и stateless относятся к способу управления состоянием системы. Разберем их основные различия, преимущества и недостатки.

📌 Stateful (с сохранением состояния)
Системы сохраняют информацию о сеансах и запросах, что удобно для сложных приложений с длительными взаимодействиями.
Плюсы:
• Сохранение состояния между запросами.
• Упрощенная логика работы.
• Более простое восстановление после сбоев.
Минусы:
• Высокая нагрузка на сервер из-за хранения состояния.
• Сложность изменения состояния.
• Ограниченная отказоустойчивость.

📌 Stateless (без сохранения состояния)
Каждый запрос независим и не зависит от предыдущих. Типичный пример — RESTful веб-сервисы.
Плюсы:
• Отличная масштабируемость.
• Упрощенная разработка и тестирование.
• Высокая отказоустойчивость.
Минусы:
• Сложность работы с сеансами или сложными сценариями.
• Увеличение нагрузки из-за передачи полной информации в каждом запросе.

📌 Что выбрать?
Если вы планируете распределенное и отказоустойчивое приложение - смотрите в сторону stateless-архитектуры. Если же вы создаете MVP, ваше приложение не является критичным с точки зрения простоя, и горизонтальное масштабирование не предполагается - выбирайте stateful-архитектуру. Что касается меня, то мой выбор - stateless по-умолчанию. И только в случае обоснованной необходимости, принимая все потенциальные риски, я выбираю stateful.

🔗 #SYSTEMDESIGN
👍5
🌐 Curl: универсальный инструмент для работы с HTTP-запросами

Что такое Curl?
Curl (Client URL) — это мощная утилита командной строки для работы с HTTP-запросами и передачи данных по множеству протоколов. С её помощью вы можете выполнять GET и POST-запросы, загружать файлы, тестировать API и отлаживать веб-приложения.

🛠 Основные возможности Curl

📥 Скачивание файлов
Сохраните JSON-ответ в файл:
curl -o post.json https://jsonplaceholder.typicode.com/posts/1


📋 Получение заголовков HTTP
Проверьте информацию о типе контента и статусе ответа:
curl -I https://jsonplaceholder.typicode.com/posts/1


🔑 Аутентификация
Работа с защищёнными ресурсами:
curl -u username:password https://jsonplaceholder.typicode.com/posts


🔄 Следование редиректам
Позволяет автоматически перенаправлять запросы:
curl -L https://jsonplaceholder.typicode.com/posts/1


📤 Загрузка данных (POST-запрос)
Создайте JSON-файл и отправьте его на сервер:
echo {"title":"Test","body":"Example","userId":1} > newpost.json  
curl -X POST -H "Content-Type: application/json" -d @newpost.json https://jsonplaceholder.typicode.com/posts


🔍 Почему использовать Curl?
Curl выделяется своей универсальностью, поддержкой множества протоколов (HTTP, HTTPS, FTP и других) и простым синтаксисом.

📌 Поделитесь в комментариях, как вы используете Curl в своей работе!

🔗 #OTHER
🔥3
📂 Системы контроля версий — это программные инструменты, которые позволяют фиксировать изменения в файлах, хранить историю этих изменений и управлять версиями данных. Они незаменимы в командной работе, где важно знать, кто и когда внес правки, возвращаться к нужной версии или откатывать изменения при необходимости.

📂 Основные виды систем контроля версий:
1️⃣ Copy-paste: Самый простой способ — вручную создавать копии файлов с разными названиями, например file_v1, file_v2. Но такой подход неудобен и приводит к ошибкам.
2️⃣ Локальные системы: Первые системы, как RCS, хранили изменения локально. Однако они не подходили для командной работы, так как все данные были на одном устройстве.
3️⃣ Централизованные системы: Например, Subversion (SVN). Все данные хранятся на одном сервере, и команды могут работать вместе. Но если сервер «падает», доступ к проекту теряется.
4️⃣ Распределенные системы: Такие, как Git. Здесь у каждого разработчика есть полная копия проекта. Это обеспечивает надежность — если один компьютер выходит из строя, данные остаются у других участников.

🖥 Почему Git стал лидером?
В 2005 году разработчики Linux создали Git как систему, которая объединяет скорость, децентрализацию и удобство. С тех пор он стал стандартом в IT и используется для работы над проектами любой сложности.

#SYSTEMDESIGN
🔥62