Уютный микросервис
1.17K subscribers
56 photos
6 videos
34 links
В этом канале я буду делится различными знаниями в построении распределенных систем и микросервисов. Буду вкидывать разные темы, сможем их обсуждать, делится своим опытом и так далее. Меня зовут Олег и я старший разработчик в BigTech.
Download Telegram
Занятное дело:) Мне тут сейчас один человек написал благодарственные слова за курс и попутно признался, что спиратил его. А затем накинул вопросов, чтоб я ему помог с чем-то разобраться🤯

Я может чего не понимаю, но кажется это перебор) Сперва берешь без спросу, а потом ждешь хорошего отношения и задаешь вопросы:)

Что думаете?)

P.S. Сообщеньку он дропнул, даже заскринить не успел:(
😁22🤯6🤬4👎3
Сегодня решил поразгонять про базы данных. Начнём с описания существующих видов.

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

Реляционные базы данных (RDBMS) используют табличный формат для организации данных. Они поддерживают операции SQL для запросов и обладают сильной схемой данных. Примеры включают PostgreSQL и MySQL. Они идеально подходят для сложных запросов и транзакций. ACID все дела.

Нереляционные базы данных (NoSQL) предлагают гибкость в хранении данных, не требуя строгой схемы. Они ещё и разные бывают:

* Документо-ориентированные базы данных (например, MongoDB), хранящие данные в формате JSON или XML. Они хороши для работы с иерархическими данными и JSON-структурами.
* Ключ-значение хранилища (например, Redis) предлагают простоту и скорость за счет хранения данных в парах ключ-значение. Они отлично подходят для кэширования и сессий.
* Колоночные базы данных (например, Clickhouse) поддерживают большие объемы данных, распределенные по множеству машин. Используются для больших, масштабируемых приложений.
* Графовые базы данных (например, Neo4j) сосредоточены на отношениях между объектами. Они идеальны для анализа связей, таких как социальные сети.

Базы данных временных рядов (например, InfluxDB) оптимизированы для хранения и анализа последовательностей данных во времени. Они подходят для мониторинга приложений, IoT и аналитики.

Выбор базы данных зависит от требований проекта, объема данных, необходимости масштабирования и типа хранимой информации.

P.S. На фотке я очевидно вспомнил историю знакомого из вк про neo4j и взглядом выражаю сочувствие:) как им было больно с ней работать даже слушать было грустно😁

Что из этого вам приходилось юзать? Что-то экзотическое было?
🔥14👍73
Вернемся к базам

Последнее время работа и всякие выступления захватили мое время и не удавалось сюда ничего написать( Буду исправлять

В прошлый раз я широким мазком накинул про разные виды баз данных, а сегодня углубимся в один из видов - реляционки. Почти всегда жизнь сводила меня с Postgres, так что буду ссылаться на него)

Реляционки это базы, в которых данные лежат в виде табличек, которые могут иметь какие-то отношения, но не половые😂 конечно в тот же постгрес завезли возможность хранить неструктурированные данные, но это уже для зумеров) Дефолтно были таблички)

Реляционки по кайфу юзать, когда данные имеют четкую схему, которая часто меняться не будет и сущности переплетены связями:) Например, хранишь ты в одной табличке юзеров, в другой список чатов, а в третей инфу о том, кто в каком чате сидит:)

Еще крутая фича у таких баз - это транзакции и поддержка ACID. И нет это не кислотная вечеринка, это механизм которые помогает бабки у вас на счету сохранить:)

Сидишь ты такой зпкшки с двух работ ждешь и тут бац банк события об обоих зпешках одновременно получает. В двух запросах берет баланс и накидывает по зпешке. И вот когда транзакций нет, он тебе только одну зпешку начислит, а вторую себе оставит😂 Ибо прибавит то к изначальному балансу, а то что параллельно еще начисления иду и невдомек)

Транзакции также могут обеспечить целостность данных. Например, надо тебе две операции провернуть с базой атомарно, чтоб ничего не разломало. Берешь транзакцию и кайфуешь. Там либо обе выполнятся корректно, либо ни одна :)

Был у меня как-то забавный момент с постгресом. Перед базой обычно ставят пуллер конектов, чтобы на каждый запрос соединение не плодить. Этот пуллер держит штук 20 конектов открытых и перешаривает между запросами из сервиса) И вот я как-то навалил в прод кода, где забыл возвращать конект в пул после запроса) В итоге после 20го дерганья ручки она переставала работать😂 конекты тупо заканчивались в пуле( Я тогда не один час потратил на поиски проблемы, ибо ошибка была не информативной) так что будьте внимательны)

Пост лимиты имеет, всего и не впихнёшь о реляционках, поэтому поделитесь чего хорошего вы в них видите:)
👍12🔥52💩1
Вы хотели новостей с курса, я принёт) а в следующем посте поговорим о уровнях транзакции в бдшках

Вчера стартовала 4-я неделя курса, уже почти половина прошла. Прогресс ребят можете видеть на картинке.

За это время:
- Мы три раза созванивались на 2 часа, чтоб обсудить все вопросики
- Я проверил почти 40 пул реквестов и записал дофига голосовых ахаха
- Один человек ушёл в академ и вернется на курс в следующем потоке, так как сейчас резко возник дефицит времени
- Один человек вернул курс, так как резко понадобились деньги. Я даже специально уточнил не говно ли мой курс на его вкус. Сказал всё чётко, просто бабло понадобилось

В целом всё идёт своим чередом. Код пилится, ребята учатся. В чатике очень крутая активность, друг другу помогают и всё такое. Я вроде тоже не особо устал проверять домашки, так что 20 человек с проверкой вполне норм темп получается. В понедельник у нас будет созвончик с Любой, которая расскажи об ошибках в составлении резюмешек на примере резюмех некоторых ребят с курса. Думаю будет весело и полезно.

Если у вас есть какие-то вопросики о том что и как у нас проходит, то задавайте, а то сложно прикинуть, что вам интересно узнать)
🔥18🥰1
В тему БД, я тут начал читать книженцию. Наверное, как обычно прочту лишь часть, но кажется она годная. Базированная, как говорится)
🔥13
Время поговорить об уровнях изоляции транзакций в реляционках. Удобнее всего разложить за эти уровни на примере бабла и то, как вы можете его потерять, если выберете не тот уровень изоляции.

Для начало небольшой ликбез. Транзакция это набор действий, которые выполняются атомарно, то есть либо все, либо никто. Когда транзакция заканчивается успешно, внесенные ею изменения фиксируются операцией комит. А если всё пошло по бороде, тогда вызывается ролбек и всё откатывает.

А теперь к уровням. Сегодня начнём с самого мягкого и безумного.

READ UNCOMMITTED (Чтение незакомиченых данных)

Есть у меня корефан Лёха и как-то раз он решил перевести своей подружане Маше 100$. Вспомнил, что SWIFT не работает и пошёл искать рублёвую копилку))) Найдя, он наконец то закинул Маше перевод.

Но всё было не так-то просто. Маша уже увидела, как баланс пополнился лёхиными деньгами и побежала делать покупки, но транзакция ещё не завершилась - ну вы знаете эти банки))) И пока Маша заказывала себе новую книженцию по Go, Лёхин банк лаганул и отменил транзакцию аккурат в момент, когда Маша платила за книгу. И в итоге у неё возник отрицательны баланс.

Понятное дело, что Лёха тот ещё Алёша, коль пользуется таким банком, но радости это не добавляет) А всё дело в том, что кто-то “умный” заюзал самый неподходящий уровень изоляции транзакций для банка. Бабки ещё толком от Лёхи не улетели, а Маша уже видит их у себя на счету. А дальше что? ЗП за конец месяца я увижу на счёте в начале месяца ахахаха хотя где тут минусы ахахах

Кстати, в postgres этот уровень отключен к чертям. Видать создатели не любят ЗП раньше времени получать.

А вы когда нить юзали это уровень в проектах?
👍10🔥4😁2
Что делать, если случайно удалил свой код, который долго писал?

Недельку назад я делал очередную таску на работе, долго писал рутинный код и часика через 3-4 закончил это дело. В этот момент серверная версия ветки обновилась перед тем, как я запушил. Поэтому мне нужно было стянуть изменения с сервака, смерджить со своими и пушить. Я уж не помню что я сделал, чисто на автомате тыкал, но я затер локальную ветку серверной и все мои старания пошли лесом.

Сперва я естественно покричал в стенку ахахха Думал уже начинать всё заново писать, но неожиданно вспомнил... В гите же ничего просто так не удаляется сразу. Гугланул как называется команда, которая сможет обернуть время вспять и моё душевное спокойствие было восстановлено))

А теперь небольшая инструкция для тех, у кого кот бегает по клаве или руки кривые, как у меня😂
Есть такая кайфовая команда git reflog. Она покажет вам список всех ваших коммитом, даже тех что вы дропнули. Ищите желанный коммит и прыгаете на него по хэшу - git checkout <sha value>

Тут можно подробнее почитать: https://rewind.com/blog/how-to-restore-deleted-branch-commit-git-reflog

А вы так когда-нить спасали свой код?

P.S. Задний фон на фотке иллюстрирует мою любовь к этой команде аххаха
🔥21👍8
Ты точно повелся на его ложь! Как айтишник жену через chatgpt нашёл

https://youtu.be/DooZB7BQUoY

В январе этого года случился новый хайп на чате gpt. Александр Жадан поделился с миром, что благодаря искусственному интеллекту он автоматизировал свои посиделки в Тиндере и окучив 5000 девушек, нашёл себе жену. При чем совет сделать девушке предложение он, якобы тоже получил от gpt.

Мы с моим корешем Федей решили посмотреть и обсудить одно из интервью мистера Жадана. На мой взгляд получилось весело и содержательно. Кажется мы больше обсуждали, чем смотрели, так что это словно сместь классического реакта и подкаста.

Зачем это смотреть:
* Вы просто хотите расслабиться и посмотреть ненапряжный весёлый контент
* Вам интересно моё мнение про этот инфоповод
* Вы всё пропустили и понятие не имеете кто такой этот Жадан, но хотите узнать
* Вам чисто по кайфу смотреть на меня😂

Это новый формат у меня на канала, поэтому хочу у вас узнать как он вам)
* Что получилось хорошо?
* Что требует доработок или вышло отстойно?
* У вас есть какие-то идеи для дальнейшего развития формата?
* У вас есть предложения кого нам ещё посмотреть?
🔥9🤡6👍4
Погнали в Авито работать?

Я тут регулярно вкидываю, что мне работа ща по кайфу идёт и тут у вас варик возник попробовать побыстрому залететь в Авито. Если всё выгорит, то будете обмазываться кайфовыми процессами и общаться с интересными людьми.

13 и 14 апреля намечается Weekend Offer для Go-разработчиков.
Флоу такой:
* Подаёте заявку до 11 апреля
* Решаете тест до 12 апреля
* Проходите телефонное интервью до 12 апреля
* Проходите собеседования онлайн
* Получаете оффер
* Кайфуете!

Регаться и узнать детали можно тут -> Weekend Offer от Avito

P.S. Если есть вопросы пишите)
🔥9🐳4👍2
КАК УСТРОЕН ПЛАНИРОВЩИК В GOLANG?

На гошных собесах часто спрашивают вопросы про горутины, планировщик и прочие прелести из runtime. Вопросы эти частенько душные и ты небось и сам когда-то сыпался на них. Этот ролик поможет тебе закрепить базу про планировщик в гошке и накинет немного кринжа, чтобы было не так грустно. И смотрите ролик до конца, чтоб ютуб мне потом ночью не звонил и не предъявлял: "а чего это трафик то просел, опять прод уронил?"😂

P.S. У Коли Тузова скоро тоже ролик на эту тему будет, так что сейчас чашечку кринжа наберем, зачилим, а как Коля ролик выложит ещё глубже в тему нырнём интереса ради.

https://youtu.be/z9xXThOOMWc
👍14🔥7
ГДЕ МОИ ДЕНЬГИ, POSTGRES?

Слушайте, вот вам казус из жизни. Хотел я тут заплатить за аренду квартиры. Переважу лавеху арендодателю, Михал Степанычу. Вроде всё просто, но есть нюанс. Давайте обкашляем вопросики с точки зрения базы данных.

Напомню, что в мире баз данных транзакция — это не просто перевод денег, это целая цепочка операций, которая может включать в себя несколько шагов. Если всё идёт гладко, транзакция завершается операцией комит, и ваши изменения остаются в системе навсегда. А если что-то идёт не так? Тогда надо откатываться операцией ролбек.

Так вот, есть такой уровень изоляции транзакций как READ COMMITTED. Он часто юзается многими бдшками по умолчанию. Под этим уровнем, данные, которые вы читаете в рамках транзакции, уже должны быть закомичены. Иными словами, вы НЕ увидите изменений, пока они официально не войдут в базу данных, через операцию коммит.

Вернёмся к оплате за хату. Пока я переводил кровно заработанные деньги Степанычу, он уже начал их тратить. Я хз, может он шопоголик или что похуже, но прекол вот в чём. Когда он собрался сливать бабки, он уже расчитывал на то, что деньги от меня до него долетели, но транзакция чё-то подвисла и ещё не успела закоммититься. По итогу, купить он ничего не смог, так как его транзакция видела лишь старый баланс, где был шишь без масла ахах и это хорошо, потому что предотвращает ряд возможных проблем, типа тех, что случились с Машей из предыдущей истории. Степаныч в кой века в долги не залезат благодаря рид комитеду)))

Этот уровень изоляции защищает от так называемых "грязных чтений", когда данные видны до их окончательного подтверждения. Это как получить чек на оплату, который ещё не прошёл по банковской системе. Вроде быстро и удобно, но может там всё откатится к чертям и чек твой ничего не значит и надо новый печатать.

А как вы платите за аренду хаты налом или мутите мутки со своим Степаныче по сети? ахаха

P.S. Шлем надел для безопасности, а то говорят же, что надо заботится о безопасности при разработке!)
🔥11👍7😁2🤪1
ГДЕ МОЙ СТОЛИК, REPEATABLE READ?

Вы же знаете секрет успеха с девушкой? Её надо накормить, а то будет злая и ты резко из нормального парня рискуешь стать бесячим объектом ахахах Стало быть надо бронирования столика в каком-нить заведении. И всё кажется довольно обыденно, пара кликов и столик твой, ноооооо есть нюанс😂

Твою бронь ж надо положить в базу, а то забуд все про тебя. А в базах опять эти транзакции. Надо ж как-то обесопасить рестик от ситуации, когда один и тот же стол бронят несколько человек. А то приходишь на ужин, а там вместо любимой девушки, питонист сидит😨

У транзакции обычно есть два стула или всё приходит идеально, или ничего не выходит. Если всё идёт по плану, транзакция фиксируется операцией коммит, и изменения становятся постоянными. Если что-то идёт не так — в игру вступает ролбек, и всё возвращается на свои места.

На уровне изоляции REPEATABLE READ каждый раз, когда вы запрашиваете данные в рамках одной транзакции, они остаются неизменными, независимо от того, что происходит снаружи этой транзакции.

Хотел я как-то забронировать столик в модном заведении. Открыл приложение, выбрал столик у окна, который был свободен, и перешёл к бронированию. А по сторонам гляжу, стоит рядом зумерок и бронит тот же столик, паразит. Я уж право дело думал система то тупанёт и едовать еду буду с ним. Но нет!

Благодаря уровню изоляции REPEATABLE READ, моя сессия "запомнила" информацию о том, что столик был свободен в момент начала моей транзакции. И пока я завершал бронирование, для меня столик оставался доступным, несмотря на попытки других клиентов его занять. Я успешно завершил бронь, и когда я закончил, система уже показывала следующим клиентам, что столик занят.

Этот уровень изоляции защищает от "неповторяемого чтения", когда данные изменяются другими операциями в базе данных во время вашей транзакции. Таким образом, вы получаете стабильный и предсказуемый результат.

Однако у уровня изоляции REPEATABLE READ и проблем хватает:

Проблема блокировок и долгое выполнение транзакций
REPEATABLE READ удерживает же блокировку на прочитанные данные до конца транзакции, стало быть все остальные запросы, кто хочет эти данные почитать тупо заблочены и ждут. А значит и время ответа в таких запросах будет расти, что конечно печально.

Потенциальные deadlock'и
Ну это классика, когда логики наворатили кучу и получилось, что первая транзакция заблочила вторую, а вторая первую и всё, шах и мат постгресмены ахахах Хлопот новых прибавится в миг.

Увеличение сложности управления
Про дополнительные хлопоты я уже говорил. С таким уровнем изоляции надо заранее подумать о подводных камнях и всяких внештатных ситуациях. Ну и на проде потом сидеть и ловить какие-нить приколы типо дедлоков.

Тем не менее, несмотря на эти сложности, уровень изоляции REPEATABLE READ помог миллениалам вновь победить зумеров и забронить столик ахахаха

Юзаете этот уровень изоляции или рид комитедов обходитесь?

P.S. Судя по фотке выше я таки ничего не забронил)))
🔥11👍3
Го стримчик в этом канале в воскресенье вечерком?:) Расскажу вам всякого интересного не только про айти, да на вопросы поотвечаю)
Anonymous Poll
69%
Го
20%
Стрим стримом, но Когда курс?
11%
Я занят
Сегодня в 19мск мутим стрим, подключайтесь:)
🔥8👀4👍2
Live stream scheduled for
Начинаем прямой эфир:)
Комменты и вопросы пишите в комменты к этому посту:)

Расскажу вам чего-нить занятного о разработке, новостях курса, психологии и просто поотвечаю на вопросы:) Короч, как обычно, наимпровизируем чего-нить:) Сегодня уличный стрим, я тут в парке тусую) Надеюсь инет не лаганет)
Live stream finished (1 hour)
Что почитать по gRPC?

Меня тут порой спрашивают про gRPC, мол чего такого интересно про него можно почитать. Сейчас накину вам немного материальчика по теме. Что-то будет базой, что-то материалом поглубже)

Читай исходники


Такой ответ мне как-то дал знакомый из платформенной команды Озона))) В целом база, но иногда хочется человеческого чтива ахаха

1) Из того, что на русском на ум приходит книга с уткой. В ней дана база, которая в водит в мир межпроцессного взаимодействия. Из прикольного там рассказывается как именно protobuf сериализует данные.

2) Есть книженция на английском, которая ещё и тему тестирования и деплоя покрывает. В целом даже те, кто в английском не силен поймут половину и так, а вторую переведут в браузере.

3) Ясно дела самая база у меня в видосе есть. Я там на примере гошки показываю шаг за шагом, как намутить простецкий gRPC сервачек и клиент к нему. Ссылка на репу в описании есть.

4) А если кому-то хочется материальчик поглубже, то в игру вступает мой знакомый из Озона. Доклад о плагинах в protobuf. Свят рассказал, как начать мутить свои плагины и нафига это нужно. Доклад самое оно, чтоб преисполниться кодогенерацией.

5) И ещё один доклад от кайфового паренька из Озон. На сей раз Свят рассказал о том, как устроена кодогенерация в Озоне. Мы ж с вами, кто юзал gRPC, привыкли ко всяким protoc или buf, а в Озоне свою тулзу напилили. Свят рассказал зачем они это сделали и как.
🔥10👍6👨‍💻2
Вчера на стриме просили поделится статистикой прошедшего потока. Делюсь)

Отдельно обращу внимение на один момент, который сам не так давно осознал) Раньше почему-то казалось, что те, кто не дошел до конца ничего полезного с курса и не получили. Но по факту то это не так, половину курса прошел, половину пользы получил и кому-то это норм) И сразу после этого осознания как-то легче на душе стало ахахах

Там, например, есть чувак, который чуть больше половины домашек сдал, а сам уже гляжу в Авито залетел) Ну а так, кажется картина доходимости плюс минус по рынку) 20% дошли до конца

И тут должен быть пафосный вывод "А в какой группе окажешься ты? Тех, кто дошел или тех, кто сдался?"😂😂😂 Кринж конечно, когда такое на серьезных щах пишут)
🏆7👍4🎉1