388
Subscribers
-124 hours
+17 days
+1530 days
Posts Archive
Транзакции, ACID и BASE.
Транзакции - это последовательность команд, которые должны выполнится полностью, либо не выполнится вообще. Чаще всего приводят в пример простейшую банковскую операцию - Петя переводит Васе 100 долларов (обычное дело), сначала списывается 100 долларов у Пети, а после зачисляются на счет Васи. Но что если после списывания 100 долларов у Пети произойдет сбой? Ничего, транзакция просто откатится (
ROLLBACK) и деньги у Пети не спишутся.
ACID.
В реляционных СУБД гарантируется выполнение свойств ACID:
1. Атомарность (atomicity) - транзакция либо выполняется полностью, либо не выполняется совсем.
2. Согласованность (consistency) - данные переходят из одного согласованного состояния в другое. Это свойство реализуется на стороне приложения, приложение должно создавать таблицы и следить за правильностью заполнения данных в ней.
3. Изоляция (isolation) - транзакции должны оказывать минимальное влияние на другие транзакции, в идеале быть полностью изолированными.
4. Долговечность (durability) - обязательство не потерять данные, в случае успешной транзакции. Это трудно реализуемое требование, так как факторов, способных привести к потере данных, множество: крах операционной системы, прекращение электроснабжения, отказ жесткого диска и так далее.
BASE 🟢.
Понятие BASE делает упор на доступности и масштабируемости, а не на согласованности данных как ACID:
1. Basically Available - система, в основном, доступна. Согласно этому свойству СУБД должна быть доступна в любое время. Достигается это за счет: репликации, шардирования или кешей.
2. Soft state - гибкое (мягкое) состояние. Согласно этом свойству данные могут быть временно несогласованные, то есть на одном сервере данные уже обновлены, но на другом еще нет.
3. Eventual consistency - согласованность в конечном итоге. Согласно этому свойству не самые несогласованные данные по свойству soft state будут согласованны в конечном итоге, когда произойдет синхронизация между нодами.
По сути ACID и BASE это два разных подхода проектирования распределенных систем и выбор между ними должен зависеть от конкретных требований.
Например:
- Для банковских транзакций важнее согласованность данных, поэтому может быть выбран подход ACID.
- А для социальных сетей важнее доступность и масштабируемость системы. Не страшно если ваш лайк будет не сразу у всех виден, а лишь через какое-то время, главное что данные и сервис всегда доступны. Тут лучше использовать BASE подход.
Здесь я не рассказал про аномалии транзакций и уровни изоляции, так как это отдельная большая тема. О ней расскажу в скором будущем 🙂
Источники:
1. BASE
2. Intro to ACID Database Transactions
3. Моргунов Е. П.; PostgreSQL. Основы языка SQL. Стр. 256
P.S. Вас становится больше и мы приближаемся к отметке в 250 ответственных профессионалов, поэтому начинаю готовить подборку материалов по Python, как и обещал.
#базаТеорема CAP.
В 2000 году Эриком Брюэром была сформулирована теорема CAP, которая утверждает, что распределенное хранилище данных может обладать только двумя из трех свойств:
- Согласованность (consistency) - любая операция чтения возвращает самое актуальное состояние данных, независимо от того, какой узел опрашивается
- Доступность (availability): любой запрос к системе завершается успешно
- Устойчивость к разделению (partition tolerance): система продолжает работать, даже если некоторые ее части недоступны
Подробнее каждое свойство проиллюстрировал на рисунках.
Links:
- Перевод отличной статьи про теорему CAP: https://habr.com/ru/articles/130577/
- Friendly Intro To the CAP Theorem: https://www.youtube.com/watch?v=gkg-FAEXIkY
- Wiki: https://ru.wikipedia.org/wiki/Теорема_CAP
#база
Яндекс запускает тренировки по DevOps с домашними заданиями.
Программа:
* Теория DevOps
* Облака
* Linux
* Сети
* Базы данных
Записаться можно тут: https://yandex.ru/yaintern/training/devops-training
Увидимся там 😎
#devops #образование
ChatGPT пустили в интернет.
doomsday_remained--;
source: https://twitter.com/OpenAI/status/1707077710047216095?t=k3YL6R28E2ih_riI-PAr8w&s=35
#newsЧто такое файловые дескрипторы?
На собеседованиях вы можете часто услышать вопрос: “У вас есть лог-файл nginx размером 100Гб и у вас полностью закончилось место на диске. Вы удаляете этот лог-файл, а место не освободилось. В чем проблема и как ее решить?”
Все просто, но перед тем как ответить на этот вопрос, давайте разберемся как процесс взаимодействует с файлами.
Для того чтобы прочитать или записать что-то в файл, процессу нужно сначала открыть его. Для этого процесс выполняет системный вызов
open(), если файл будет успешно открыт, то этот вызов вернет номер файлового дескриптора.
Теперь мы можем прочитать или записать в файл с помощью системных вызовов read() и write() передав туда номер этого файлового дескриптора.
Файловый дескриптор - это целочисленное значение открытого файла.
Каждый процесс хранит свою структуру данных файловых дескрипторов в /proc/<pid>/fd. Например вы можете посмотреть список файловых дескрипторов для вашей оболочки:
$ ls -la /proc/$$/fd
...
lrwx------ 1 root root 64 Sep 26 16:46 0 -> /dev/pts/0
lrwx------ 1 root root 64 Sep 26 16:46 1 -> /dev/pts/0
lrwx------ 1 root root 64 Sep 26 16:46 2 -> /dev/pts/0
...
Файловые дескрипторы процессов ссылаются на общую таблицу открытых файлов (посмотреть можно с помощью команды lsof):
$ lsof -p $$
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 698540 root cwd DIR 9,2 4096 3936774 /home/yaengineer
bash 698540 root rtd DIR 9,2 4096 3932162 /
...
bash 698540 root 0u CHR 136,0 0t0 3 /dev/pts/0
bash 698540 root 1u CHR 136,0 0t0 3 /dev/pts/0
bash 698540 root 2u CHR 136,0 0t0 3 /dev/pts/0
bash 698540 root 255u CHR 136,0 0t0 3 /dev/pts/0
Каждая запись ссылается на inode, которая в свою очередь указывает на область диска с данными.
Так вот, переходим к вопросу. Что делать?
1. Если файл был удален, посмотреть его можно добавив grep ‘(deleted)’:
$ lsof | grep '(deleted)'
...
nginx 797508 root 3r REG 9,2 0 3932504 /var/log/nginx.log (deleted)
...
Или посмотреть в директорию файловых дескрипторов процесса в /proc:
ls -la /proc/797508/fd
...
lr-x------ 1 root root 64 Sep 26 17:29 3 -> '/home/maximdubakin/nginx.log (deleted)'
...
2. Дальше нам нужно сделать restart или reload (если приложение умеет) процесса. PID процесса берем из второй колонки команды lsof.
3. После перезапуска процесс отпустит файловый дескиптор и место освободится.
UPD. Подписчик так же подсказал, если процесс не может быть легко перезапущен, можно воспользоваться командой truncate для очистки файла.
Источники:
- Baeldung. List the Open File Descriptors
- Stackexchange
- У. Ричард Стивенс, Стивен А. Раго: Unix. Профессиональное программирование. Стр. 103
- Керриск Майкл: Linux API. Исчерпывающее руководство. Стр. 128
+1 к навыку собесов 😎
#база #linuxА вот и вторая часть ответов на вопросы собеседования у Антона Павленко.
Ссылка на первую часть.
#it #it_interview #devops
Tutorial Hell или как наконец получить скиллы в IT.
Tutorial Hell - это процесс когда вы складируете книги, статьи (или мои посты), лекции и курсы по IT и просто смотрите их. Вы смотрите один курс по
Linux, затем другой, затем третий, но у вас остается ощущение, что вы почти ничего не знаете.
Я сам до недавнего времени находился в Tutorial Hell, выйти из него мне помогла установка: Потребляй информации меньше, чем ее воспроизводишь.
Это не значит что нужно всем создать тг-каналы и писать посты после каждого видео или статьи, но это значит что потребленный контент нужно сразу же использовать, иначе он не закрепится.
Как можно закреплять пройденный материал:
- Написать мини-проект по новому знанию, ну или решить какое-то задание или упражнение
- Написать конспект (постараться по памяти) для себя или группы. Добавить в конспект рисунки, таблицы, диаграммы
- Начать учить других
Как я закрепляю информацию?
Пишу посты в тг-канал, работаю наставником на курсе, организовал изучение языка Си внутри простого сообщества. Все это позволяет мне тут же закрепить материал, который я изучил, и, возможно, помочь другим.
Вот парочка видео по теме:
- How To Get Out of Tutorial Hell: https://www.youtube.com/watch?v=343EWZS9O88
- Mindset of Successful Programmers: https://www.youtube.com/watch?v=nogh434ykF0
В заключении отмечу, что вам в любом случае нужны курсы, статьи и книги, но самое важное - практика!
#продуктивность #образованиеТоповая оболочка, которая изменит вашу жизнь в терминале.
Этот билд я открыл для себя около 2 лет назад и теперь не могу представить свою работу без него (на удаленных серверах приходится, конечно 😳). Вот сам билд:
1.
Oh-my-zsh: https://github.com/ohmyzsh/ohmyzsh
2. Plugins: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins
3. powerlevel10k: https://github.com/romkatv/powerlevel10k
1. Установка oh-my-zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
2. Откройте директорию с плагинами по ссылке выше и найдите нужные вам, тут в списке я порекомендую несколько топовых, которые сам использую. Открываете в редакторе файл ~/.zshrc и добавляете плагины:
plugins=(
git
aliases
nmap
tmux
zsh-autosuggestions
)
Вот ссылки на эти и еще на несколько топовых плагинов:
- aliases - список всех ваших алиасы с помощью команды als
- docker - добавляет autocomplete и алиасы для docker
- helm - добавляет autocomplete и алиасы для helm
- kubectl - добавляет autocomplete и алиасы для kubectl
- nmap - добавляет несколько топовых алисаов для nmap, теперь не нужно запоминать длинные команды и можно эффективней работать с nmap
- tmux - добавляет алиасы для tmux
- git - добавляет алисасы и функции для git
3. Переходим в репозиторий powerlevel10k и выполняем инструкцию по установке:
3.1. Клонируем репозиторий:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
3.2. В файле ~/.zshrc указываем: ZSH_THEME="powerlevel10k/powerlevel10k”
3.3. Если ваш терминал не iTerm2 или Termux, тогда вам нужно скачать и установить шрифты: https://github.com/romkatv/powerlevel10k#manual-font-installation
3.4. После установки шрифтов запускаете установщик: p10k configure
Подробное видео с установкой тут: https://www.youtube.com/watch?v=cbit4CbsxYM
Ускоряйтесь 🕺
#linux #terminal #продуктивностьСгенерировал пичку к посту выше с помощью сервиса Шедеврум по запросу "DevOps инженер решает сложную задачу"
Можете зарегистрироваться, позабавиться и покидать свои пикчи сюда
P.S. С руками у ИИ реальные проблемы😂
За что я люблю свою работу?
Сегодня я столкнулся с интересным багом.
Описать все не могу по NDA, но суть такая, есть скрипт который успешно отрабатывает локально, если задеплоить и запустить руками на сервере, то тоже все ок. Но если этот скрипт запустить из cron'а, то будет ошибка.
Как обычно все оказалось просто и часы расследования в режиме Шерлока решаются правкой одной строки кода 😊
Проблема заключалась в том, что внутри скрипта запускается
sudo systemctl status <some_service>. Если запустить этот скрипт из под своего пользователя или root, то ошибок не было, так как мой пользователь есть в sudoers с указанием доступа к systemctl по NOPASSWD.
А в cron скрипт запускался из под пользователя monitoring, которого нет в sudoers. Решение элементарное - убрать из команды sudo, все равно все пользователи имеют по умолчанию доступ на просмотр состояния служб в systemd.
Сложность этой отладки еще заключалась в том, что в скрипте нет нормальной обработки ошибки и любая ошибка приводит к одному результату.
В общем, я обожаю такие моменты, когда перед тобой интересный баг и в конце концов его выходит починить, это кайф 🕺
Если у вас есть подобные истории - делитесь в комментариях, мне было бы очень интересно почитать.
#работа #troubleshootingДумаю о цикле постов про bash, в котором я буду знакомить вас с базой + давать домашние работы. Первые 5 домашних работ для каждого поста я буду ревьюить и давать обратную связь.
План примерно такой и может быть дополнен по ходу:
#. Переменные и константы, кавычки и литералы
#. Специальные переменные и коды возврата
#. Арифметика и присваивания
#. Логические операторы
#. Подстановка команд, подоболочки, импортирование библиотек
#. Условный оператор
if / else
#. Условный оператор case
#. Цикл for
#. Цикл while и until
#. basename, awk, sed, xargs
#. Функции и позиционные параметры, локальные переменные
#. Массивы
Дайте обратную связь, интересно ли вам это 😎
💯 - супер, буду делать дз и кидать на проверку
👍 - интересно, может узнаю что-то новое, но дз вряд ли буду делать
👎 - я с базой знаком, давай технологии и devops
🗿 - когда уже будут курсы для камней?
#linuxТерминальный мультиплексор tmux.
Задача
tmux - создавать и управлять shell-сессиями.
Он может быть полезен, когда вам нужно запустить долгую команду на удаленном сервере, например бэкап СУБД или аналитику. Вы создаете сессию, запускаете команду и можете спокойно покидать сессию без опасения что ваш процесс остановится.
Вот основные команды tmux:
- Создать сессию: tmux new -s <name>
- Посмотреть список сессий: tmux ls
- Подключиться к сессии: tmux attach -t <name>
- Удалить сессию: tmux kill-session -t <name>
А это основные горячие клавиши внутри сессии tmux:
- Отключиться от текущей сессии: Ctrl-B + D
- Создать новое окно в ceссии: Ctrl-B + C
- Переключиться между окнами: Ctrl-B + N (след.); Ctrl-B + P (пред.); Ctrl-B + <номер_окна> (переключиться на определенное окно)
- Закрыть окно: Ctrl-B + X
- Split окна: Ctrl-B + % (вертикально); Ctrl-B + “ (горизонтально)
- Переключиться между split’ами: Ctrl-B + <стрелки>
Полезные ссылки:
1. Обзорное видео от Диджитализируй (https://www.youtube.com/watch?v=1Y2CD4WnbP0)
2. Шпаргалка, если забыли команду (https://www.tmuxcheatsheet.com/)
#linux #terminalИнтервью с автором книги с кабанчиком.
Когда я иду пешком из офиса домой, обычно слушаю книги, но сегодня решил прокачать навык прослушивания английской речи. Нашел интервью с автором той самой книги с кабанчиком - https://www.youtube.com/watch?v=sMRpv0fBJLU
Русскоговорящие ребята взяли интервью на простом английском, да и Мартин отвечал понятно, поэтому осилил 80-90% интервью.
Будет интересно всем DevOps / SRE / SysAdmins / SWE + прокачаете английский немного.
Очень советую послушать по дороге на работу 😃
P.S. Купить книгу можно здесь: https://www.piter.com/collection/best/product/vysokonagruzhennye-prilozheniya-programmirovanie-masshtabirovanie-podderzhka
#interview #english
Зачем нужна команда nohup в Linux?
Команда
nohup (no hangup) отвязывает сессию вашего терминала от запущенного процесса, то есть делает так, чтобы процессу не посылался сигнал SIGHUP при завершении сессии. Например:
- вы запускаете фоновый процесс командой sleep 100 &
- выходите из терминала
- ваш процесс завершается
Теперь если вы добавите nohup:
- вы запускаете фоновый процесс командой nohup sleep 100 &
- выходите из терминала
- ваш процесс продолжает работу
Это может быть супер полезно, например при ручном бэкапе БД, который может продолжаться минуты, а то и часы. Вы создаете процесс через nohup и если обрубится ваше соединение, бэкап продолжит выполняться.
Чтобы выполнить несколько команд в nohup, вам потребуется заключить их в фигурные скобки, например так: { nohup sleep 10 && echo “Hello World” && sleep 10; } &
Записал вам этот пример использования с помощью asciinema (как пользоваться этой крутой штукой есть пост выше): https://asciinema.org/a/5OwY1jGG6g3WuCtLFpXwJPQFs
Но ИМХО лучше использовать менеджер сессий вроде screen или tmux, последний я использовал при записи asciinema.
Рассказать про tmux?
👍 - Да
👎 - Нет
🗿 - Я камень
#linux #terminalДофаминовая яма от потребления информации.
“Если мы потребляем бессмыслицу, то и жизнь наша будет бессмысленной.”
Вот этой цитатой можно подытожить видео Курпатова о дофамине.
Я отказался от социальных сетей 4 года назад, удалил все приложения с телефона и с тех пор крайне редко захожу туда (раз в месяц). Я думаю это сильно помогло мне вырасти как человеку и как инженеру.
Но еще одна проблема современности, кроме соц. сетей - это неконтролируемое потребление информации. Люди открывают ютуб и просто смотрят видео по порядку или ищут кликбейтный заголовок / заставку.
Таким образом мы тратим с вами дофамин, и потом его просто не хватает на свершение важных дел:
- Улучшение отношений
- Занятие спортом
- Проактивную работу
- Усердную учебу
Что можно с этим сделать?
- Удалить соц. сети
- Перед тем как потребить контент, задать вопрос “Зачем?”
- Составлять список изучения книг, статей, видео, лекций, фильмов
Вот подборка очень полезных материалов на тему саморазвития от канала Простые Мысли:
1. Как я учусь онлайн. Полная инструкция для самообразования
2. НАУКА О ТВОЕМ ОКРУЖЕНИИ. Как люди вокруг изменяют твою реальность
3. Порно ОПАСНЕЕ, чем вы думаете
4. КАК ЧИТАТЬ С УМОМ. Простые, но важные советы
5. Что-то СТРАШНОЕ происходит с мужчинами. Тестостерон и дофамин
#здоровье #offtop #продуктивность
Болезнь сеньоров.
Я более 5 лет сижу по 8-10 часов ежедневно.
Пару лет назад у меня начала немного побаливать поясница. Я не предавал этому значение.
За последний год эти боли обострились, порой было нереально работать и думать, хочется как-то растянуться и похрустеть спиной. Я пошел к неврологу, он мне посоветовал пройти курс массажа и ходить в зал.
Курс массажа на кучу денег прошел - эффекта ноль. Окей, пошел в зал. Качаюсь месяц, два, три - боль осталась со мной. Тут я сразу отмечу, что не уделял должного внимания мышцам кора, а качал спину, ноги, руки и плечи.
Друг сказал мне - веси на турнике и качай мышцы кора. И знаете, действительно, все эти боли с каждой тренировкой становятся все меньше и меньше. Я уже не мучаюсь и могу вести нормальную жизнь и работу.
Что я добавил к каждой тренировке:
- Гиперэкстензию: https://youtube.com/shorts/O-OTQHYNAec?si=DQXzb2jsPIsLr5Vt
- Упражнения на пресс по желанию
Так же сегодня встретил подобную историю от программиста, ее тоже можете послушать + он дает советы по выбору стола, настройке кресла и тренировке.
Если кто-то страдает подобной проблемой, надеюсь вы нашли что-то полезное для себя, а если не страдаете - то все равно занимайтесь спортом, иначе это может рано или поздно случится и с вами.
Здоровья вам и вашим близким, это самое важное 💛
#тренировки #здоровье
