Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
11af3b7
Update README.md
IlyaKham May 15, 2025
d2d8877
Update README.md
IlyaKham May 15, 2025
56fd71b
Update README.md
IlyaKham May 15, 2025
28e7525
Rename README.md to Jenkins.md
IlyaKham May 17, 2025
013b86d
Create GitLab
IlyaKham May 17, 2025
071b58e
Create GitLab.md
IlyaKham May 21, 2025
45de671
Update GitLab.md
IlyaKham May 21, 2025
90aa425
Update GitLab.md
IlyaKham May 28, 2025
23f9344
Create Zabbix_Part1
IlyaKham Jun 8, 2025
874ba52
Update and rename Zabbix_Part1 to Zabbix_Part1.md
IlyaKham Jun 8, 2025
8b3e625
Update Zabbix_Part1.md
IlyaKham Jun 8, 2025
6f49ef7
Update Zabbix_Part1.md
IlyaKham Jun 8, 2025
8ef0348
Update Zabbix_Part1.md
IlyaKham Jun 8, 2025
1c18b66
Update Zabbix_Part1.md
IlyaKham Jun 8, 2025
d2bba87
Update Zabbix_Part1.md
IlyaKham Jun 8, 2025
ff3a8a1
Update Zabbix_Part1.md
IlyaKham Jun 8, 2025
e56748b
Update Zabbix_Part1.md
IlyaKham Jun 8, 2025
1874376
Create Zabbix_Part2.md
IlyaKham Jun 8, 2025
ca4501a
Update Zabbix_Part2.md
IlyaKham Jun 8, 2025
ce4f023
Update Zabbix_Part2.md
IlyaKham Jun 8, 2025
6ef9ac9
Create Disaster Recovery
IlyaKham Jun 20, 2025
eb892b6
Create example
IlyaKham Jun 20, 2025
19de3dc
Update example
IlyaKham Jun 20, 2025
0608495
Update Disaster Recovery
IlyaKham Jun 20, 2025
7406f01
Rename Disaster Recovery to Disaster_Recovery
IlyaKham Jun 20, 2025
0759194
Rename Disaster_Recovery to Disaster_Recovery.md
IlyaKham Jun 20, 2025
0895226
Update Disaster_Recovery.md
IlyaKham Jun 20, 2025
afc3d13
Create haproxy.md
IlyaKham Jun 24, 2025
d63e2bb
Update haproxy.md
IlyaKham Jun 24, 2025
0d3bcbd
Update haproxy.md
IlyaKham Jun 24, 2025
9c68e99
Update haproxy.md
IlyaKham Jun 24, 2025
58f2c23
Update haproxy.md
IlyaKham Jun 24, 2025
996a2e8
Update haproxy.md
IlyaKham Jun 24, 2025
1a4bb9f
Update example
IlyaKham Jun 25, 2025
fbc870c
Update example
IlyaKham Jun 25, 2025
e055e37
Create rsync.md
IlyaKham Jun 25, 2025
6770411
Create Database-and-theseTypes
IlyaKham Jul 20, 2025
a0e5a98
Update Database-and-theseTypes
IlyaKham Jul 20, 2025
39b57b0
Rename Database-and-theseTypes to Database-and-theseTypes.md
IlyaKham Jul 20, 2025
0c263cb
Create Redis_and_memcached.md
IlyaKham Jul 20, 2025
70a88ea
Update Redis_and_memcached.md
IlyaKham Jul 20, 2025
bb12403
Update Redis_and_memcached.md
IlyaKham Jul 22, 2025
b96d54c
Update Redis_and_memcached.md
IlyaKham Jul 22, 2025
819e602
Update example
IlyaKham Jul 25, 2025
0ffa14c
Update example
IlyaKham Jul 25, 2025
8b995b4
Update example
IlyaKham Jul 25, 2025
a907aa6
Update example
IlyaKham Jul 25, 2025
36d4771
Create ELK.md
IlyaKham Jul 26, 2025
3557475
Update example
IlyaKham Jul 26, 2025
430aaec
Update example
IlyaKham Jul 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions DB/Database-and-theseTypes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# Домашнее задание к занятию "Базы данных и их типы" - `Хамуро Илья`

### Задание 1
Кейс
Крупная строительная компания, которая также занимается проектированием и девелопментом, решила создать правильную архитектуру для работы с данными. Ниже представлены задачи, которые необходимо решить для каждой предметной области.

Какие типы СУБД, на ваш взгляд, лучше всего подойдут для решения этих задач и почему?

1.1. Бюджетирование проектов с дальнейшим формированием финансовых аналитических отчётов и прогнозирования рисков. СУБД должна гарантировать целостность и чёткую структуру данных.

Рекомендуемая СУБД: Реляционная (PostgreSQL, Microsoft SQL Server, Oracle)
Почему?

- Требуется строгая структура, ACID-гарантии, сложные JOIN-запросы для аналитики.

- Поддержка транзакций критична для финансовых данных.

- Возможность интеграции с BI-инструментами (Power BI, Tableau).

1.1.* Хеширование стало занимать длительно время, какое API можно использовать для ускорения работы?

API: Можно использовать Redis API (кеширование промежуточных результатов) или специализированные библиотеки (например, Google CityHash для быстрого хеширования).

1.2. Под каждый девелоперский проект создаётся отдельный лендинг, и все данные по лидам стекаются в CRM к маркетологам и менеджерам по продажам. Какой тип СУБД лучше использовать для лендингов и для CRM? СУБД должны быть гибкими и быстрыми.

Рекомендуемые СУБД:

Лендинги: Документоориентированная (MongoDB, Firebase) – гибкость, быстрое чтение/запись.

CRM: Реляционная (PostgreSQL) или гибрид (MongoDB + SQL для аналитики).

1.2.* Можно ли эту задачу закрыть одной СУБД? И если да, то какой именно СУБД и какой реализацией?

Да, если: Использовать PostgreSQL с JSONB (гибкость для лендингов + структура для CRM).

Альтернатива – MongoDB (если CRM не требует сложных JOIN).

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

Рекомендуемая СУБД: Графовая (Neo4j) или реляционная (PostgreSQL).
Почему?

Если данные иерархичны (например, дерево документов), подойдёт PostgreSQL с рекурсивными запросами.

Если важны связи (например, правила → отделы → проекты), лучше Neo4j.

1.3.* Можно ли под эту задачу использовать уже существующую СУБД из задач выше и если да, то как лучше это реализовать?

Да, если: Взять PostgreSQL из 1.1 или 1.2 и добавить таблицы для документов.

1.4. Департамент логистики нуждается в решении задач по быстрому формированию маршрутов доставки материалов по объектам и распределению курьеров по маршрутам с доставкой документов. СУБД должна уметь быстро работать со связями.

Рекомендуемая СУБД: Графовая (Neo4j) или реляционная с гео-расширениями (PostgreSQL + PostGIS).
Почему?

Графы идеальны для маршрутизации (поиск кратчайшего пути).

PostGIS удобен для работы с координатами.

1.4.* Можно ли к этой СУБД подключить отдел закупок или для них лучше сформировать свою СУБД в связке с СУБД логистов?

Да, если: Использовать PostgreSQL (логистика + закупки в одной схеме).

Нет, если: Закупкам нужна специализированная система (например, ERP-модуль).

1.5.* Можно ли все перечисленные выше задачи решить, используя одну СУБД? Если да, то какую именно?

PostgreSQL (с JSONB, PostGIS, рекурсивными запросами) покрывает 90% задач:

Финансы (1.1) – транзакции.

CRM (1.2) – гибкость через JSONB.

База знаний (1.3) – иерархии.

Логистика (1.4) – PostGIS.

Исключение: Для сложной маршрутизации лучше добавить Neo4j.

Альтернатива:

MongoDB + PostgreSQL + Redis (оптимально для масштабирования).

### Задание 2 Транзакции

2.1. Пользователь пополняет баланс счёта телефона, распишите пошагово, какие действия должны произойти для того, чтобы транзакция завершилась успешно. Ориентируйтесь на шесть действий.

1) Старт транзакции – СУБД начинает транзакцию, блокируя необходимые данные (баланс пользователя).

2) Проверка реквизитов – Система проверяет, существует ли указанный номер телефона и доступен ли для пополнения.

3) Списание средств с плательщика – Если пополнение идёт с карты/кошелька, списывается сумма.

4) Зачисление средств на счёт телефона – Баланс номера увеличивается на указанную сумму.

5) Фиксация операции в логе – Запись о транзакции сохраняется в историю (для отката при ошибке).

6) Фиксация транзакции (COMMIT) – Если все шаги успешны, транзакция завершается, изменения сохраняются.

2.1.* Какие действия должны произойти, если пополнение счёта телефона происходило бы через автоплатёж?

1) Проверка подписки на автоплатёж – Система проверяет, активен ли автоплатёж для данного номера.

2) Проверка лимитов – Если у пользователя установлен лимит (например, "не более 1000 руб./месяц"), система проверяет, не превышен ли он.

3) Автоматическое списание – Средства списываются с привязанной карты/кошелька без запроса подтверждения.

4) Уведомление пользователя – После успешного пополнения отправляется SMS/email-уведомление.

### Задание 3 SQL NoSQL

3.1. Пять преимуществ SQL-систем перед NoSQL
Гарантии ACID – Полная поддержка транзакций (атомарность, согласованность, изолированность, долговечность), что критично для финансовых и бизнес-приложений.

Строгая схема данных – Чёткая структура таблиц, типы данных, внешние ключи. Упрощает валидацию и уменьшает риск ошибок.

Мощные JOIN-запросы – Возможность сложных связей между таблицами без дублирования данных (нормализация).

Зрелость и экосистема – Большой выбор инструментов (BI, ETL, ORM), обширная документация и сообщество.

Универсальность – Одна СУБД (например, PostgreSQL) может закрывать задачи аналитики, транзакций и даже частично NoSQL-сценарии (через JSONB).

3.1. Преимущества NewSQL перед SQL и NoSQL*

NewSQL (CockroachDB, Google Spanner, YugabyteDB) – гибрид, сочетающий плюсы SQL и NoSQL:

1) Перед классическим SQL:

Горизонтальная масштабируемость – Распределённые кластеры без потери ACID (в отличие от шардинга в SQL).

Высокая отказоустойчивость – Автоматическое восстановление при падении узлов.

2) Перед NoSQL:

Полная поддержка SQL-синтаксиса – JOIN, транзакции, сложные запросы без ограничений NoSQL.

Гибридные модели данных – Можно использовать как реляционные таблицы, так и документы (как в MongoDB).

### Задание 4. Кластеры

Критерии выбора СУБД:

1) Горизонтальная масштабируемость – Система должна эффективно распределять нагрузку на 1000 узлов без деградации производительности.

2) Поддержка распределённых транзакций – Если нужны ACID-гарантии (например, для финансовых расчётов).

3) Тип рабочих нагрузок:

OLTP (много коротких транзакций) → NewSQL (CockroachDB, YugabyteDB).
OLAP (аналитика, сложные агрегации) → Колоночные СУБД (ClickHouse, Apache Druid).
Гибридные задачи → Greenplum, Vertica.

4) Отказоустойчивость – Автоматическое восстановление при падении узлов.

5) Скорость обработки запросов – Минимизация задержек при работе с большими данными.

Если нужна аналитика → ClickHouse (MPP) – максимальная скорость агрегаций.

Если нужны транзакции + масштабируемость → CockroachDB (NewSQL, Shared-Nothing).

Если данные смешанные (OLTP + OLAP) → TiDB (гибридный подход).
12 changes: 12 additions & 0 deletions DB/ELK.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Домашнее задание к занятию "ELK" - `Хамуро Илья`

### Задание 1
<img width="687" height="306" alt="Снимок экрана 2025-07-26 200548" src="https://github.com/user-attachments/assets/daf14e32-0073-45c8-b006-5a13a934b57b" />

### Задание 2

<img width="1205" height="570" alt="Снимок экрана 2025-07-26 203115" src="https://github.com/user-attachments/assets/387ebe0d-edb0-43d3-828c-febbb6eed37d" />

### Задание 3


32 changes: 32 additions & 0 deletions DB/Redis_and_memcached.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Домашнее задание к занятию "Кеширование Redis/memcached" - `Хамуро Илья`

### Задание 1 Кеширование
1. Ускорение доступа к данным
Проблема: Частые запросы к медленным источникам (базам данных, диску, API) замедляют работу приложения.
Решение: Кеширование часто запрашиваемых данных в оперативной памяти (например, Redis, Memcached) ускоряет их получение.

2. Снижение нагрузки на сервер
Проблема: Высоконагруженный сервер (например, веб-сайт) может не справляться с большим количеством запросов.
Решение: Кеширование страниц (например, через CDN или Nginx) снижает количество обращений к бэкенду.

3. Уменьшение задержек в распределённых системах
Проблема: Запросы к удалённым серверам (например, внешним API) могут выполняться долго.
Решение: Локальный кеш результатов уменьшает зависимость от внешних сервисов.

4. Оптимизация вычислений
Проблема: Сложные вычисления (например, агрегация статистики) требуют много ресурсов.
Решение: Кеширование результатов (например, в виде предварительно рассчитанных отчётов) ускоряет их получение.

### Задание 2. Memcached

<img width="814" height="274" alt="Снимок экрана 2025-07-20 232545" src="https://github.com/user-attachments/assets/f05ddef5-53a5-44dd-aee1-60fa479c6ea2" />

### Задание 3. Удаление по TTL в Memcached
Решил выполнить задание с помощью пайтон)
<img width="520" height="328" alt="Снимок экрана 2025-07-22 223928" src="https://github.com/user-attachments/assets/2a6e5c69-f0a4-4e89-b0f7-89a93925ebd4" />

<img width="895" height="246" alt="Снимок экрана 2025-07-22 223940" src="https://github.com/user-attachments/assets/5b8f3c87-0f5a-4cc6-99fc-cfc6467ec790" />

### Задание 4. Запись данных в Redis

<img width="453" height="334" alt="Снимок экрана 2025-07-22 235551" src="https://github.com/user-attachments/assets/4a8cf992-c2ac-4d33-8754-c7825af07e24" />
12 changes: 12 additions & 0 deletions Disaster_Recovery.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Домашнее задание к занятию "`Disaster Recovery. FHRP и Keepalived`" - `Хамуро Илья`

### Задание 2

![Снимок экрана 2025-06-21 000020](https://github.com/user-attachments/assets/d1fe9176-3e31-4299-988c-0d3e3e7b4629)
![Снимок экрана 2025-06-21 000031](https://github.com/user-attachments/assets/aba4d9ca-6163-48a9-be12-8f6c50164b11)
![Снимок экрана 2025-06-21 000054](https://github.com/user-attachments/assets/4ff50220-d3dc-4144-89a1-965f3535999d)
![Снимок экрана 2025-06-21 000112](https://github.com/user-attachments/assets/a05ddab8-87c1-42b3-9083-09f0501f1e83)

![Снимок экрана 2025-06-21 000158](https://github.com/user-attachments/assets/8ff8c77f-3275-48de-b0c0-074e1c77d8f6)


1 change: 1 addition & 0 deletions GitLab
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

14 changes: 14 additions & 0 deletions GitLab.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Домашнее задание к занятию "`GitLab`" - `Хамуро Илья`

### Задание 1
Я выполнял задание через готовый образ GitLab в ЯндексCloud.
![Снимок экрана 2025-05-29 003834](https://github.com/user-attachments/assets/7d3fe91a-1816-4138-849c-022975ad1ee7)
![Снимок экрана 2025-05-29 005054](https://github.com/user-attachments/assets/05fc97ac-d58c-4bab-b6d6-236bd2c71b79)


### Задание 2
![Снимок экрана 2025-05-29 011352](https://github.com/user-attachments/assets/095c4121-7154-4595-9796-f79dcd47818d)
![Снимок экрана 2025-05-29 011052](https://github.com/user-attachments/assets/0e1c7dde-ef5a-499f-a61b-94825dbe6785)
![Снимок экрана 2025-05-29 011127](https://github.com/user-attachments/assets/68747297-e17b-425f-a315-7ccb8c6683e9)
![Снимок экрана 2025-05-29 011309](https://github.com/user-attachments/assets/2f4f6ae1-6bdf-4416-932a-fe61c40d679b)

77 changes: 77 additions & 0 deletions Jenkins.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Домашнее задание к занятию "DevOps. CI/CD" - `Хамуро Илья`

---

### Задание 1
Выполнил задание с использованием docker, без vagrant, делал работу на вм в Яндекс облаке

![Снимок экрана 2025-05-15 234540](https://github.com/user-attachments/assets/321af4b4-eeef-45bb-9da4-2714b3068b87)
![Снимок экрана 2025-05-15 234258](https://github.com/user-attachments/assets/d562a653-a616-4760-b853-65bffc412352)
![Снимок экрана 2025-05-15 234226](https://github.com/user-attachments/assets/26168e79-80b8-4fa7-823d-fe25140ab640)
![Снимок экрана 2025-05-15 234231](https://github.com/user-attachments/assets/c32f86c4-9011-4dce-bc5c-81f9eab62246)
![Снимок экрана 2025-05-15 234236](https://github.com/user-attachments/assets/6d1287e5-d2f4-4291-93e0-467143adc809)



---

### Задание 2

pipeline {
agent any

environment {
REPO_URL = "https://github.com/IlyaKham/sdvps-materials.git"
REGISTRY = "158.160.23.101:8082"
IMAGE = "${REGISTRY}/hello-world"
VERSION = "v${BUILD_NUMBER}"
}

stages {
stage('Checkout') {
steps {
echo '📥 Клонируем репозиторий...'
git url: "${REPO_URL}", branch: 'main'
}
}

stage('Go Test') {
steps {
echo '🧪 Запускаем go test...'
sh '/usr/bin/go test .'
}
}

stage('Docker Build') {
steps {
echo '🐳 Собираем Docker-образ...'
sh 'docker build -t ${IMAGE}:${VERSION} .'
}
}

stage('Docker Push') {
steps {
echo '📦 Публикуем в Nexus...'
sh '''
docker login ${REGISTRY} -u admin -p zaq123
docker push ${IMAGE}:${VERSION}
docker logout ${REGISTRY}
'''
}
}
}

post {
success {
echo "✅ Успешно загружено в Nexus: ${IMAGE}:${VERSION}"
}
failure {
echo "❌ Ошибка в пайплайне."
}
}
}

![Снимок экрана 2025-05-16 000653](https://github.com/user-attachments/assets/e188e4d0-fae0-4592-bd4e-0cae72e9f2c2)



Loading