🌐 Curl: универсальный инструмент для работы с HTTP-запросами
Что такое Curl?
Curl (Client URL) — это мощная утилита командной строки для работы с HTTP-запросами и передачи данных по множеству протоколов. С её помощью вы можете выполнять GET и POST-запросы, загружать файлы, тестировать API и отлаживать веб-приложения.
🛠 Основные возможности Curl
📥 Скачивание файлов
Сохраните JSON-ответ в файл:
📋 Получение заголовков HTTP
Проверьте информацию о типе контента и статусе ответа:
🔑 Аутентификация
Работа с защищёнными ресурсами:
🔄 Следование редиректам
Позволяет автоматически перенаправлять запросы:
📤 Загрузка данных (POST-запрос)
Создайте JSON-файл и отправьте его на сервер:
🔍 Почему использовать Curl?
Curl выделяется своей универсальностью, поддержкой множества протоколов (HTTP, HTTPS, FTP и других) и простым синтаксисом.
📌 Поделитесь в комментариях, как вы используете Curl в своей работе!
🔗 #OTHER
Что такое 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: Самый простой способ — вручную создавать копии файлов с разными названиями, например
2️⃣ Локальные системы: Первые системы, как RCS, хранили изменения локально. Однако они не подходили для командной работы, так как все данные были на одном устройстве.
3️⃣ Централизованные системы: Например, Subversion (SVN). Все данные хранятся на одном сервере, и команды могут работать вместе. Но если сервер «падает», доступ к проекту теряется.
4️⃣ Распределенные системы: Такие, как Git. Здесь у каждого разработчика есть полная копия проекта. Это обеспечивает надежность — если один компьютер выходит из строя, данные остаются у других участников.
🖥 Почему Git стал лидером?
В 2005 году разработчики Linux создали Git как систему, которая объединяет скорость, децентрализацию и удобство. С тех пор он стал стандартом в IT и используется для работы над проектами любой сложности.
#SYSTEMDESIGN
📂 Основные виды систем контроля версий:
1️⃣ Copy-paste: Самый простой способ — вручную создавать копии файлов с разными названиями, например
file_v1, file_v2. Но такой подход неудобен и приводит к ошибкам. 2️⃣ Локальные системы: Первые системы, как RCS, хранили изменения локально. Однако они не подходили для командной работы, так как все данные были на одном устройстве.
3️⃣ Централизованные системы: Например, Subversion (SVN). Все данные хранятся на одном сервере, и команды могут работать вместе. Но если сервер «падает», доступ к проекту теряется.
4️⃣ Распределенные системы: Такие, как Git. Здесь у каждого разработчика есть полная копия проекта. Это обеспечивает надежность — если один компьютер выходит из строя, данные остаются у других участников.
🖥 Почему Git стал лидером?
В 2005 году разработчики Linux создали Git как систему, которая объединяет скорость, децентрализацию и удобство. С тех пор он стал стандартом в IT и используется для работы над проектами любой сложности.
#SYSTEMDESIGN
🔥6❤2
🔗 Что такое вебхук и зачем он нужен?
Вебхук — это способ автоматического оповещения о произошедших событиях в системе через HTTP-запрос. Вместо того, чтобы постоянно запрашивать данные, сервер сам отправляет уведомление клиенту, когда происходит нужное событие.
📌 Пример:
🛒 Клиент оформил заказ в интернет-магазине → 🖥 Система отправила вебхук → 📲 Владелец магазина получил уведомление в приложении.
🤔 В чем разница между вебхуком и API?
API: Клиент постоянно запрашивает сервер: «Есть новости?»
Вебхук: Сервер сам отправляет уведомление, когда появятся важные данные.
🛠 Где используются вебхуки?
• GitHub — для уведомлений о новых коммитах.
• CRM и интернет-магазины — для уведомлений о заказах.
• Коллтрекинг — для уведомлений о звонках и заявках.
🔒 Как сделать вебхуки безопасными?
• Использовать HTTPS для шифрования данных.
• Добавлять уникальные токены в URL вебхуков.
• Реализовать аутентификацию для подтверждения отправителя.
💡 Вывод: Вебхуки позволяют мгновенно передавать данные между системами без лишних запросов. Они сокращают нагрузку на сервер, ускоряют обмен информацией и автоматически уведомляют о важных событиях.
#INTEGRATION
Вебхук — это способ автоматического оповещения о произошедших событиях в системе через HTTP-запрос. Вместо того, чтобы постоянно запрашивать данные, сервер сам отправляет уведомление клиенту, когда происходит нужное событие.
📌 Пример:
🛒 Клиент оформил заказ в интернет-магазине → 🖥 Система отправила вебхук → 📲 Владелец магазина получил уведомление в приложении.
🤔 В чем разница между вебхуком и API?
API: Клиент постоянно запрашивает сервер: «Есть новости?»
Вебхук: Сервер сам отправляет уведомление, когда появятся важные данные.
🛠 Где используются вебхуки?
• GitHub — для уведомлений о новых коммитах.
• CRM и интернет-магазины — для уведомлений о заказах.
• Коллтрекинг — для уведомлений о звонках и заявках.
🔒 Как сделать вебхуки безопасными?
• Использовать HTTPS для шифрования данных.
• Добавлять уникальные токены в URL вебхуков.
• Реализовать аутентификацию для подтверждения отправителя.
💡 Вывод: Вебхуки позволяют мгновенно передавать данные между системами без лишних запросов. Они сокращают нагрузку на сервер, ускоряют обмен информацией и автоматически уведомляют о важных событиях.
#INTEGRATION
❤5🔥3
📌 Нотация C4: как визуализировать архитектуру системы понятным языком
Когда речь заходит о проектировании архитектуры программного обеспечения, важно не только понимать систему, но и уметь наглядно передавать информацию другим. Один из самых удобных способов для этого — C4-нотация, разработанная Саймоном Брауном.
🔹 Что такое C4?
C4 помогает моделировать архитектуру ПО на 4 уровнях:
📌 Context — показывает систему в общем контексте (пользователи, внешние сервисы).
📌 Container — определяет основные компоненты (приложения, базы данных).
📌 Component — детализирует структуру внутри контейнеров.
📌 Code — описывает реализацию на уровне классов и модулей (используется редко).
Этот подход позволяет гибко визуализировать систему, адаптируя уровень детализации под конкретную аудиторию: от бизнес-аналитиков до разработчиков.
🔹 Примеры использования
📌 На этапе проектирования: для утверждения архитектуры с командой.
📌 При разработке: чтобы упростить взаимодействие между командами.
📌 Во взаимодействии с заказчиком: помогает объяснить структуру проекта простыми схемами.
📌 В документации: делает систему прозрачной для новых сотрудников.
🔹 Как создавать диаграммы C4?
📌 Draw.io — удобный инструмент для графического создания диаграмм.
📌 Structurizr — генерация C4-схем через код, удобно для автоматизации.
📌 Miro, Lucidchart — подойдут для совместной работы с командой.
#ARCHITECTURE
Когда речь заходит о проектировании архитектуры программного обеспечения, важно не только понимать систему, но и уметь наглядно передавать информацию другим. Один из самых удобных способов для этого — C4-нотация, разработанная Саймоном Брауном.
🔹 Что такое C4?
C4 помогает моделировать архитектуру ПО на 4 уровнях:
📌 Context — показывает систему в общем контексте (пользователи, внешние сервисы).
📌 Container — определяет основные компоненты (приложения, базы данных).
📌 Component — детализирует структуру внутри контейнеров.
📌 Code — описывает реализацию на уровне классов и модулей (используется редко).
Этот подход позволяет гибко визуализировать систему, адаптируя уровень детализации под конкретную аудиторию: от бизнес-аналитиков до разработчиков.
🔹 Примеры использования
📌 На этапе проектирования: для утверждения архитектуры с командой.
📌 При разработке: чтобы упростить взаимодействие между командами.
📌 Во взаимодействии с заказчиком: помогает объяснить структуру проекта простыми схемами.
📌 В документации: делает систему прозрачной для новых сотрудников.
🔹 Как создавать диаграммы C4?
📌 Draw.io — удобный инструмент для графического создания диаграмм.
📌 Structurizr — генерация C4-схем через код, удобно для автоматизации.
📌 Miro, Lucidchart — подойдут для совместной работы с командой.
#ARCHITECTURE
❤9
🛠 Postman для тестировщиков: основы и автоматизация
Postman — это удобный инструмент для работы с API, который позволяет тестировщикам 📌 отправлять запросы, проверять ответы, автоматизировать тестирование и интегрировать проверки в CI/CD. Он поддерживает REST, SOAP, GraphQL, работает на всех ОС и позволяет легко управлять переменными и окружениями.
🔍 Основные возможности
✅ Отправка запросов и анализ ответов
✅ Использование коллекций и переменных
✅ Автоматизация тестирования с Collection Runner
✅ Запуск тестов по расписанию ⏳
✅ Интеграция с CI/CD через Newman
📜 Создание тестов
Вкладка Tests позволяет автоматически проверять ответы сервера. Например, проверка статуса ответа:
Или проверка содержимого ответа:
🔄 Использование переменных
Переменные помогают передавать данные между запросами 🔗. Например, сохранить auth-токен для последующего использования:
Также можно передавать ID созданного объекта:
Переменные бывают глобальные, окружения, локальные и из файлов (CSV, JSON) 📂.
🚀 Автоматизация с Collection Runner
📌 Можно запускать коллекции запросов в нужном порядке, задавать количество итераций и запускать тесты по расписанию.
Postman — это удобный инструмент для работы с API, который позволяет тестировщикам 📌 отправлять запросы, проверять ответы, автоматизировать тестирование и интегрировать проверки в CI/CD. Он поддерживает REST, SOAP, GraphQL, работает на всех ОС и позволяет легко управлять переменными и окружениями.
🔍 Основные возможности
✅ Отправка запросов и анализ ответов
✅ Использование коллекций и переменных
✅ Автоматизация тестирования с Collection Runner
✅ Запуск тестов по расписанию ⏳
✅ Интеграция с CI/CD через Newman
📜 Создание тестов
Вкладка Tests позволяет автоматически проверять ответы сервера. Например, проверка статуса ответа:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});Или проверка содержимого ответа:
pm.test("Response contains campaign name", function () {
pm.expect(pm.response.text()).to.include("Campaign TEST");
});🔄 Использование переменных
Переменные помогают передавать данные между запросами 🔗. Например, сохранить auth-токен для последующего использования:
var jsonData = pm.response.json();
pm.environment.set("authToken", jsonData.token);
Также можно передавать ID созданного объекта:
pm.environment.set("campaignID", jsonData.id);Переменные бывают глобальные, окружения, локальные и из файлов (CSV, JSON) 📂.
🚀 Автоматизация с Collection Runner
📌 Можно запускать коллекции запросов в нужном порядке, задавать количество итераций и запускать тесты по расписанию.
❤6
🤖 ChatGPT vs DeepSeek: Битва AI-титанов для системных аналитиков
Сегодня разберем, какая нейросеть лучше справится с вашими задачами: OpenAI ChatGPT или китайский DeepSeek. Мы устроили им экзамен — от математики до философии.
🔍 Ключевые отличия моделей
1. DeepSeek-R1
- Локальное развертывание Ollama — полный контроль над данными.
- Фишки: Может «мыслить» на китайском (даже в русских ответах), но требует мощного железа (например, NVIDIA A100).
- Пример: Лучше справилась с неочевидными задачами (например, генетикой: дала ответ 12.5%, хотя правильный — 25%).
2. ChatGPT (4o и o1)
- Скорость: Быстрее генерирует ответы.
- Креатив: Сильнее в творческих заданиях (например, стихи про Тирекса).
- Ограничение: Только облачная версия.
🚀 Практические выводы для системных аналитиков
- Для работы с конфиденциальными данными выбирайте DeepSeek-R1 (локальный запуск через Ollama).
- Для быстрых ответов и креатива — ChatGPT 4o.
- Для анализа требований и документов обе модели справляются, но DeepSeek лучше сохраняет контекст.
💡 ТОП-3 примера из интервью
1. Математика:
- Вопрос:
- ChatGPT 4o: 6 (с пояснением).
- DeepSeek-R1: 6 (с юмором: «Если бы не правила, было бы 8»).
2. Химия:
- Вопрос: Константа гидролиза NH4NO2.
- ChatGPT o1: 3.9×10⁻² (близко к истине).
- DeepSeek-R1: 1.2×10⁻⁶ (правильный ответ — 1.23×10⁻⁶).
3. Креатив:
- Задание: Рассказ-утопия только на буквы Г, Р, К.
- ChatGPT o1: Мини-роман про экогород.
- DeepSeek-R1: «Город Радость. Граждане растили розы...» 🌹
📌 Итоги
- DeepSeek выигрывает в безопасности и кастомизации.
- ChatGPT — для скорости и творчества.
- Совет: Тестируйте обе модели на своих кейсах (например, парсинг требований или генерация документации).
#AI
Сегодня разберем, какая нейросеть лучше справится с вашими задачами: OpenAI ChatGPT или китайский DeepSeek. Мы устроили им экзамен — от математики до философии.
🔍 Ключевые отличия моделей
1. DeepSeek-R1
- Локальное развертывание Ollama — полный контроль над данными.
- Фишки: Может «мыслить» на китайском (даже в русских ответах), но требует мощного железа (например, NVIDIA A100).
- Пример: Лучше справилась с неочевидными задачами (например, генетикой: дала ответ 12.5%, хотя правильный — 25%).
2. ChatGPT (4o и o1)
- Скорость: Быстрее генерирует ответы.
- Креатив: Сильнее в творческих заданиях (например, стихи про Тирекса).
- Ограничение: Только облачная версия.
🚀 Практические выводы для системных аналитиков
- Для работы с конфиденциальными данными выбирайте DeepSeek-R1 (локальный запуск через Ollama).
- Для быстрых ответов и креатива — ChatGPT 4o.
- Для анализа требований и документов обе модели справляются, но DeepSeek лучше сохраняет контекст.
💡 ТОП-3 примера из интервью
1. Математика:
- Вопрос:
2 + 2 * 2 = ? - ChatGPT 4o: 6 (с пояснением).
- DeepSeek-R1: 6 (с юмором: «Если бы не правила, было бы 8»).
2. Химия:
- Вопрос: Константа гидролиза NH4NO2.
- ChatGPT o1: 3.9×10⁻² (близко к истине).
- DeepSeek-R1: 1.2×10⁻⁶ (правильный ответ — 1.23×10⁻⁶).
3. Креатив:
- Задание: Рассказ-утопия только на буквы Г, Р, К.
- ChatGPT o1: Мини-роман про экогород.
- DeepSeek-R1: «Город Радость. Граждане растили розы...» 🌹
📌 Итоги
- DeepSeek выигрывает в безопасности и кастомизации.
- ChatGPT — для скорости и творчества.
- Совет: Тестируйте обе модели на своих кейсах (например, парсинг требований или генерация документации).
#AI
🔥4👍1
📌 Куда развиваться системному аналитику?
💡 Системный аналитик — универсальный специалист, который объединяет бизнес, разработку и тестирование. Со временем возникает вопрос: куда двигаться дальше? Разбираем три возможных пути!
🛠 1. Технический путь — архитектор (Solution Architect)
Если хочется погрузиться глубже в технологии, можно развиваться в сторону Solution Architect. Это человек, который проектирует систему на высоком уровне: рисует схемы компонентов, отвечает за их взаимодействие и принимает решения по архитектуре.
🔹 Какие навыки нужны?
✅ Понимание архитектурных паттернов
✅ Глубокие знания API, баз данных и интеграций
✅ Умение видеть систему в масштабе
✅ Навыки коммуникации с разработчиками и заказчиками
🔹 Как развиваться?
📌 Больше взаимодействовать с архитекторами
📌 Изучать REST, SOAP, GraphQL, брокеры сообщений
📌 Разбираться в микросервисах и серверless-архитектуре
📌 Подходит, если: хочется больше работать с технической стороной проектов и видеть систему целиком.
👔 2. Управленческий путь — Product Owner или Project Manager
Если нравится управлять процессами, можно перейти в PO/PM и взять на себя стратегическое развитие продукта.
🔹 Какие навыки нужны?
✅ Управление изменениями и рисками
✅ Планирование и бюджетирование
✅ Развитие продукта и продажа идей
🔹 Как развиваться?
📌 Освоить Agile/Scrum/Kanban
📌 Погрузиться в UX/UI
📌 Учиться презентовать идеи и решать бизнес-задачи
📌 Подходит, если: хочется развивать продукт и влиять на бизнес-решения.
👥 3. Лидерство — Head of Analytics / Team Lead
Если нравится работать с людьми, можно стать тимлидом и выстраивать процессы в команде аналитиков.
🔹 Какие навыки нужны?
✅ Наставничество и развитие коллег
✅ Управление документацией и процессами
✅ Делегирование задач и распределение ответственности
🔹 Как развиваться?
📌 Наставничать и обучать новичков
📌 Оптимизировать процессы в команде
📌 Учиться мотивировать и работать с командной динамикой
📌 Подходит, если: хочется выстраивать работу аналитиков и развивать команду.
💡 Что важно прокачивать всегда?
📌 Структурированное мышление — диаграммы, схемы, таблицы
📌 Глубокое понимание предметной области
📌 Навыки коммуникации внутри команды и с заказчиком
🎯 Выбирай свой путь и развивайся! В каком направлении ты видишь себя? Делись в комментариях! 💬
#OTHER
💡 Системный аналитик — универсальный специалист, который объединяет бизнес, разработку и тестирование. Со временем возникает вопрос: куда двигаться дальше? Разбираем три возможных пути!
🛠 1. Технический путь — архитектор (Solution Architect)
Если хочется погрузиться глубже в технологии, можно развиваться в сторону Solution Architect. Это человек, который проектирует систему на высоком уровне: рисует схемы компонентов, отвечает за их взаимодействие и принимает решения по архитектуре.
🔹 Какие навыки нужны?
✅ Понимание архитектурных паттернов
✅ Глубокие знания API, баз данных и интеграций
✅ Умение видеть систему в масштабе
✅ Навыки коммуникации с разработчиками и заказчиками
🔹 Как развиваться?
📌 Больше взаимодействовать с архитекторами
📌 Изучать REST, SOAP, GraphQL, брокеры сообщений
📌 Разбираться в микросервисах и серверless-архитектуре
📌 Подходит, если: хочется больше работать с технической стороной проектов и видеть систему целиком.
👔 2. Управленческий путь — Product Owner или Project Manager
Если нравится управлять процессами, можно перейти в PO/PM и взять на себя стратегическое развитие продукта.
🔹 Какие навыки нужны?
✅ Управление изменениями и рисками
✅ Планирование и бюджетирование
✅ Развитие продукта и продажа идей
🔹 Как развиваться?
📌 Освоить Agile/Scrum/Kanban
📌 Погрузиться в UX/UI
📌 Учиться презентовать идеи и решать бизнес-задачи
📌 Подходит, если: хочется развивать продукт и влиять на бизнес-решения.
👥 3. Лидерство — Head of Analytics / Team Lead
Если нравится работать с людьми, можно стать тимлидом и выстраивать процессы в команде аналитиков.
🔹 Какие навыки нужны?
✅ Наставничество и развитие коллег
✅ Управление документацией и процессами
✅ Делегирование задач и распределение ответственности
🔹 Как развиваться?
📌 Наставничать и обучать новичков
📌 Оптимизировать процессы в команде
📌 Учиться мотивировать и работать с командной динамикой
📌 Подходит, если: хочется выстраивать работу аналитиков и развивать команду.
💡 Что важно прокачивать всегда?
📌 Структурированное мышление — диаграммы, схемы, таблицы
📌 Глубокое понимание предметной области
📌 Навыки коммуникации внутри команды и с заказчиком
🎯 Выбирай свой путь и развивайся! В каком направлении ты видишь себя? Делись в комментариях! 💬
#OTHER
👍9🔥3
🔗 Оптимизация JOIN в PostgreSQL: ускоряем сложные запросы
При работе с большими объемами данных в PostgreSQL важно понимать, как выполняются
🛠 Виды JOIN и их особенности
🔹 Nested Loop Join – выполняется построчно, хорошо работает на маленьких таблицах с индексами, но неэффективен на больших.
🔹 Hash Join – строит хеш-таблицу, удобен, когда нет индексов, но потребляет много памяти.
🔹 Merge Join – использует отсортированные данные, эффективен, если сортировка уже есть.
📌 Как PostgreSQL выбирает метод JOIN?
1️⃣ Анализирует статистику таблиц (
2️⃣ Рассчитывает стоимость выполнения (
3️⃣ Выбирает наименее затратный метод.
Можно отключить ненужные
В некоторых случаях
⚡️ Оптимизация JOIN в PostgreSQL
✔️ Настройка `work_mem`
- Если запросы используют диск (spilled to disk) → увеличьте
- Не задавайте `work_mem` слишком большим – это может привести к нехватке RAM.
- Пример:
✔️ Настройка `random_page_cost`
- Для HDD (по умолчанию):
- Для SSD:
- Для NVMe:
Пример настройки:
✔️ Использование индексов
- Ускоряют
- Пример создания индекса:
✔️ Обновление статистики и очистка таблиц
- `ANALYZE` – обновляет статистику, помогает планировщику выбрать лучший
- `VACUUM` – удаляет ненужные строки, предотвращает разрастание таблицы.
✔️ Разбиение таблиц (`Partitioning`)
- Снижает объем данных для обработки.
- Поддерживается range, list и hash partitioning.
✔️ Использование EXPLAIN ANALYZE
- Позволяет выявить Seq Scan и неоптимальные планы выполнения.
✅ Чек-лист по оптимизации JOIN
🔲 Проверить индексы на ключах соединения.
🔲 Запустить
🔲 Использовать
🔲 Оптимизировать
🔲 Настроить
🔲 Использовать разбиение (
#DBMS 🗄
При работе с большими объемами данных в PostgreSQL важно понимать, как выполняются
JOIN и как их оптимизировать. Неправильный выбор метода соединения может значительно замедлить запросы. Разбираем, какие бывают JOIN, как их выбирает PostgreSQL и что можно улучшить. 🛠 Виды JOIN и их особенности
🔹 Nested Loop Join – выполняется построчно, хорошо работает на маленьких таблицах с индексами, но неэффективен на больших.
🔹 Hash Join – строит хеш-таблицу, удобен, когда нет индексов, но потребляет много памяти.
🔹 Merge Join – использует отсортированные данные, эффективен, если сортировка уже есть.
📌 Как PostgreSQL выбирает метод JOIN?
1️⃣ Анализирует статистику таблиц (
ANALYZE). 2️⃣ Рассчитывает стоимость выполнения (
cost). 3️⃣ Выбирает наименее затратный метод.
Можно отключить ненужные
JOIN, но это не всегда ускорит запросы: SET enable_nestloop TO off;
SET enable_hashjoin TO off;
SET enable_mergejoin TO off;
В некоторых случаях
Nested Loop останется единственным доступным вариантом.⚡️ Оптимизация JOIN в PostgreSQL
✔️ Настройка `work_mem`
- Если запросы используют диск (spilled to disk) → увеличьте
work_mem. - Не задавайте `work_mem` слишком большим – это может привести к нехватке RAM.
- Пример:
SET work_mem = '256MB';
✔️ Настройка `random_page_cost`
- Для HDD (по умолчанию):
random_page_cost = 4.0 - Для SSD:
random_page_cost = 1.1 – 1.5 - Для NVMe:
random_page_cost = 1.0 – 1.1 Пример настройки:
SET random_page_cost = 1.1;
✔️ Использование индексов
- Ускоряют
Nested Loop и Merge Join. - Пример создания индекса:
CREATE INDEX idx_customer_id ON orders(customer_id);
✔️ Обновление статистики и очистка таблиц
- `ANALYZE` – обновляет статистику, помогает планировщику выбрать лучший
JOIN. - `VACUUM` – удаляет ненужные строки, предотвращает разрастание таблицы.
VACUUM ANALYZE orders;
✔️ Разбиение таблиц (`Partitioning`)
- Снижает объем данных для обработки.
- Поддерживается range, list и hash partitioning.
CREATE TABLE orders_2024 PARTITION OF orders
FOR VALUES FROM ('2024-01-01') TO ('2024-12-31');
✔️ Использование EXPLAIN ANALYZE
- Позволяет выявить Seq Scan и неоптимальные планы выполнения.
EXPLAIN ANALYZE SELECT * FROM orders JOIN customers USING(customer_id);
✅ Чек-лист по оптимизации JOIN
🔲 Проверить индексы на ключах соединения.
🔲 Запустить
ANALYZE и VACUUM для актуализации статистики. 🔲 Использовать
EXPLAIN ANALYZE для анализа запросов. 🔲 Оптимизировать
work_mem для ускорения Hash Join. 🔲 Настроить
random_page_cost в зависимости от типа диска. 🔲 Использовать разбиение (
Partitioning) на больших таблицах. #DBMS 🗄
❤3👍3
📌 Deployment vs StatefulSet: в чем разница?
В Kubernetes есть два основных способа управления развертыванием приложений — Deployment и StatefulSet. Оба объекта управляют подами, но предназначены для разных типов приложений. Разбираемся, когда использовать каждый из них.
🏗 Deployment — для stateless-приложений
✔️ Не сохраняет состояние — при удалении пода данные теряются.
✔️ Использует стратегию Rolling Update — обновление версии без простоя.
✔️ Динамические поды — новые поды могут получать другие IP-адреса.
✔️ Подходит для веб-серверов, API-сервисов и других stateless-приложений.
💾 StatefulSet — для stateful-приложений
✔️ Сохраняет состояние — поддерживает Persistent Volumes для хранения данных.
✔️ Фиксированные имена и IP — поды получают уникальные и постоянные идентификаторы.
✔️ Последовательный запуск и остановка — один за другим, без хаоса.
✔️ Используется для баз данных, кешей и других приложений, требующих постоянного хранения данных.
🔍 Как выбрать?
✅ Если ваше приложение не требует хранения состояния — используйте Deployment.
✅ Если вашему приложению нужна сохранность данных — выбирайте StatefulSet.
#ARCHITECTURE
В Kubernetes есть два основных способа управления развертыванием приложений — Deployment и StatefulSet. Оба объекта управляют подами, но предназначены для разных типов приложений. Разбираемся, когда использовать каждый из них.
🏗 Deployment — для stateless-приложений
✔️ Не сохраняет состояние — при удалении пода данные теряются.
✔️ Использует стратегию Rolling Update — обновление версии без простоя.
✔️ Динамические поды — новые поды могут получать другие IP-адреса.
✔️ Подходит для веб-серверов, API-сервисов и других stateless-приложений.
💾 StatefulSet — для stateful-приложений
✔️ Сохраняет состояние — поддерживает Persistent Volumes для хранения данных.
✔️ Фиксированные имена и IP — поды получают уникальные и постоянные идентификаторы.
✔️ Последовательный запуск и остановка — один за другим, без хаоса.
✔️ Используется для баз данных, кешей и других приложений, требующих постоянного хранения данных.
🔍 Как выбрать?
✅ Если ваше приложение не требует хранения состояния — используйте Deployment.
✅ Если вашему приложению нужна сохранность данных — выбирайте StatefulSet.
#ARCHITECTURE
❤3👍1
🚀 Ingress в Kubernetes: Маршрутизация трафика для системных аналитиков
_Кратко и понятно о том, как управлять внешними запросами в кластере_
Что такое Ingress?
Ingress — это набор правил, которые говорят Kubernetes, куда и как направлять внешний трафик (HTTP/HTTPS) внутрь кластера. Это как GPS для ваших запросов:
- Роутит по доменам:
- Управляет SSL: Подключает TLS-сертификаты для безопасного соединения.
- Балансирует нагрузку: Распределяет запросы между подами.
👉 Проще говоря: Ingress — это инструкция: «Запросы на /api отправляй в backend, а на / — в frontend».
Что такое Ingress-контроллер?
Ingress-контроллер — это «исполнитель» правил Ingress. Без него правила — просто текст. Контроллер состоит из:
1. Обратного прокси (Nginx, Traefik и др.) — обрабатывает запросы.
2. Контроллера — следит за изменениями в Ingress через API Kubernetes.
🔧 Популярные контроллеры:
- Nginx Ingress — гибкий, с кучей аннотаций.
- Traefik — автоматически обновляет SSL-сертификаты.
- HAProxy — для высоких нагрузок.
Как это работает?
1. Пользователь заходит на
2. Ingress-контроллер проверяет правила:
-
-
3. Трафик попадает в нужный сервис.
Пример манифеста Ingress
Зачем это нужно?
- Одна точка входа для всего трафика.
- Легко менять маршруты без перезапуска сервисов.
- Безопасность: Централизованное управление SSL.
💡 Лайфхак: Всегда проверяйте, работает ли Ingress-контроллер:
#SYSTEMDESIGN
_Кратко и понятно о том, как управлять внешними запросами в кластере_
Что такое Ingress?
Ingress — это набор правил, которые говорят Kubernetes, куда и как направлять внешний трафик (HTTP/HTTPS) внутрь кластера. Это как GPS для ваших запросов:
- Роутит по доменам:
app.example.com → сервис frontend. - Управляет SSL: Подключает TLS-сертификаты для безопасного соединения.
- Балансирует нагрузку: Распределяет запросы между подами.
👉 Проще говоря: Ingress — это инструкция: «Запросы на /api отправляй в backend, а на / — в frontend».
Что такое Ingress-контроллер?
Ingress-контроллер — это «исполнитель» правил Ingress. Без него правила — просто текст. Контроллер состоит из:
1. Обратного прокси (Nginx, Traefik и др.) — обрабатывает запросы.
2. Контроллера — следит за изменениями в Ingress через API Kubernetes.
🔧 Популярные контроллеры:
- Nginx Ingress — гибкий, с кучей аннотаций.
- Traefik — автоматически обновляет SSL-сертификаты.
- HAProxy — для высоких нагрузок.
Как это работает?
1. Пользователь заходит на
shop.example.com. 2. Ingress-контроллер проверяет правила:
-
/orders → сервис orders-service. -
/products → сервис catalog-service. 3. Трафик попадает в нужный сервис.
Пример манифеста Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shop-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- shop.example.com
secretName: shop-tls
rules:
- host: shop.example.com
http:
paths:
- path: /orders
backend:
service:
name: orders-service
port: 80
- path: /products
backend:
service:
name: catalog-service
port: 80
Зачем это нужно?
- Одна точка входа для всего трафика.
- Легко менять маршруты без перезапуска сервисов.
- Безопасность: Централизованное управление SSL.
💡 Лайфхак: Всегда проверяйте, работает ли Ingress-контроллер:
kubectl get pods -n ingress-nginx
#SYSTEMDESIGN
❤3
🚀 Метки (Labels) и селекторы (Selectors) в Kubernetes: Как управлять объектами
_Простыми словами о ключевом инструменте организации в кластере_
Что такое метки (Labels)?
Метки — это пары «ключ-значение», которые добавляются к объектам Kubernetes (подам, сервисам и т.д.) для их идентификации и группировки. Например:
-
-
-
👉 Проще говоря: Метки — это «стикеры», которые помогают быстро находить и фильтровать объекты.
---
Что такое селекторы (Selectors)?
Селекторы — это запросы, которые фильтруют объекты по их меткам. Например:
- Найти все поды с меткой
- Исключить сервисы с
👉 Проще: Селекторы — это «поисковый запрос» по вашим стикерам-меткам.
### Примеры использования
1. Группировка подов:
2. Фильтрация через kubectl:
3. Связь сервисов с подами:
В манифесте сервиса селектор указывает, к каким подам направлять трафик:
Операторы в селекторах
- Равенство:
- Неравенство:
- Вхождение в список:
- Исключение:
#SYSTEMDESIGN
_Простыми словами о ключевом инструменте организации в кластере_
Что такое метки (Labels)?
Метки — это пары «ключ-значение», которые добавляются к объектам Kubernetes (подам, сервисам и т.д.) для их идентификации и группировки. Например:
-
env: prod — окружение (продакшн). -
app: frontend — название приложения. -
tier: cache — уровень приложения (кэш). 👉 Проще говоря: Метки — это «стикеры», которые помогают быстро находить и фильтровать объекты.
---
Что такое селекторы (Selectors)?
Селекторы — это запросы, которые фильтруют объекты по их меткам. Например:
- Найти все поды с меткой
env=prod. - Исключить сервисы с
app=legacy. 👉 Проще: Селекторы — это «поисковый запрос» по вашим стикерам-меткам.
### Примеры использования
1. Группировка подов:
metadata:
labels:
app: frontend
env: staging
2. Фильтрация через kubectl:
# Все поды в продакшне
kubectl get pods -l env=prod
# Сервисы, кроме бэкенда
kubectl get services -l app!=backend
3. Связь сервисов с подами:
В манифесте сервиса селектор указывает, к каким подам направлять трафик:
spec:
selector:
app: frontend
env: prod
Операторы в селекторах
- Равенство:
env=prod, app=frontend. - Неравенство:
tier!=cache. - Вхождение в список:
env in (prod, staging). - Исключение:
env notin (test).#SYSTEMDESIGN
👍2❤1