en
Feedback
Yet Another Engineer

Yet Another Engineer

Open in Telegram
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, как и обещал. #база

photo content

Теорема CAP. В 2000 году Эриком Брюэром была сформулирована теорема CAP, которая утверждает, что распределенное хранилище дан
+3
Теорема 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

photo content

А вот и вторая часть ответов на вопросы собеседования у Антона Павленко. Ссылка на первую часть. #it #it_interview #devops
А вот и вторая часть ответов на вопросы собеседования у Антона Павленко. Ссылка на первую часть. #it #it_interview #devops

Tutorial Hell или как наконец получить скиллы в IT. Tutorial Hell - это процесс когда вы складируете книги, статьи (или мои п
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 лет назад и теперь не могу пред
Топовая оболочка, которая изменит вашу жизнь в терминале. Этот билд я открыл для себя около 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 инженер решает сложную задачу" Можете зарегистр
Сгенерировал пичку к посту выше с помощью сервиса Шедеврум по запросу "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

Какой контент вам интересен? (доступен множественный ответ)
Anonymous voting

Терминальный мультиплексор 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 - Упражнения на пресс по желанию Так же сегодня встретил подобную историю от программиста, ее тоже можете послушать + он дает советы по выбору стола, настройке кресла и тренировке. Если кто-то страдает подобной проблемой, надеюсь вы нашли что-то полезное для себя, а если не страдаете - то все равно занимайтесь спортом, иначе это может рано или поздно случится и с вами. Здоровья вам и вашим близким, это самое важное 💛 #тренировки #здоровье