dd

Рубрика: Разработка

  • Локальное окружение в кубере с k3s

    Когда я пришел в ферале на текущую работу, то все окружение разворачивалось в minikube.

    Я уж не знаю какие именно проблемы с ним были (я их не заметил), но мой, на тот момент, тимлид принял решение переезжать на k3s, подсмотрев удачный опыт у одного из разрабов в компании.

    Мне тогда было поручено локально поставить k3s и попробовать развернуть в нем пару сервисов, попутно обновив в них readme.

    Собственно, с задачей я справился. Вот только выбранное решение было очень кривым, да еще и ломало dns при включенном корпоративном впне из-за того, что приходилось ставить dnsmasq. Зачем? На тот момент я думал, что общаться между сервисами очень надо через домены вида service-name.dev.loc (просто потому что по-другому я не знал как, а все примеры обращений из гугла не работали). И dnsmasq позволял это делать и оно даже работало в подах кубера. Но, как у любой задачи типа “было бы прикольно”, приоритет выполнения был минимальный и потому она быстро затерялась в недрах личного бэклога.

    Прошло полгода, у меня честно говоря от кривости работы локального окружения уже порядком горела жопа. Более того, ко мне приходили разрабы и спрашивали — как вы локально разворачиваетесь? У вас то куча репозиториев с docker-compose’ами, то какой-то кубер, то еще что. И вот случился отпуск, а значит шанс снести к чертям собачим всю систему и начать с нуля.

    В этот раз я решил вообще не использовать ничего, кроме самого k3s. И это помогло. Из коробки по прошлой инструкции у меня вообще не работал dns — из пода даже в гугл сходить нельзя было. Я начал копать и понял, что не использовал важную (в моем случае) опцию при установке k3s. А именно — --flannel-backend=wireguard-native . После указания опции все заработало. В гугл теперь можно было ходить, а самое главное — теперь поды могли общаться друг с другом просто через свои имена. Например, my-service-name.application.

    Мне и в голову не приходило, что в кубере может быть удобный способ для общения между подами, как в docker compose, например (там можно обращаться к контейнеру по его имени внутри одной сети). Нет, я конечно видел и читал про CoreDNS, даже в конфиги какие-то лазил. Но почему-то в голове выключатель не щелкал.

    После всего этого пришлось еще ставить сайдкар на базе нгинкса, чтобы поды могли обрабатывать запросы напрямую от других подов. Но там уже честно говоря не так интересно. Там просто мрак в виде go’шных шаблонов для helm.

    Итого, я вроде как меньше стал бояться кубера. Теперь этот зверь кажется более-менее дружелюбным и начинает закрепляться реальное понимание того как там все работает.

  • Отпуск и дача

    с отпуском меня!
    до свидания программирование и привет дача!

    p.s. а еще нас уже 50😊

  • Мольба о силах, шутка

    господи дай мне сил

  • Черная полоса вроде закончилась, началась прикольная

    Меня недавно добавили в чат, где есть люди из разных областей компании
    Разрабы, ПМы, а главное — непосредственные пользователи наших внутренних приложений (операторы)
    У последних, как не трудно догадаться, — всегда все горит, ужасно тормозит, работать невозможно, клиенты массово жалуются и тд
    Иногда это паника, иногда это реальность

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

    Какой-то из 4 сервисов наотрез отказывался укладываться в 20 секунд с ответом
    Беда в том, что запросы делались асинхронно, через multicurl и при выбросе исключения не было никакой информации о том, кто именно уходит в таймаут
    Спустя какое-то время все же нашел виновника и полез смотреть почему не успевает

    А не успевал он по простой причине — на один апи запрос делалось 100500 запросов в базу и в среднем запрос работал около 44-48 секунд
    И ладно бы это просто было простыней из вызовов к базе, но нет, все куда хуже
    Там тянулась сущность из базы, а потом передавалась в экстратор
    Экстрактор в нашем случае это такая шляпа, которой ты даешь список атрибутов, а он их каким-то образом тянет из сущности
    И большая часть атрибутов — смежные сущности, за которыми доктрина каждый раз ходила в базу

    Решение немного экстремальное, но я просто вытягивал все данные по сущности разом
    Да, там много джоинов; да, там жирнющий селект
    Но быстрее на стороне пхп эту кучу данных растолкать по сущностям, чем каждый раз ходить в базу

    Результат в итоге с одной стороны неплохой — прирост х8 (с 48 секунд до 6 секунд)
    С другой — это все равно 6 секунд 🙁
    Но лучшее враг хорошего, поэтому такой результат нас устроит пока что

  • yield from в PHP-генераторах

    Ну и на десерт ссылочка на абсолютно рандомную статью про генераторы в пхп, из которой я впервые узнал про yield from

    https://qirolab.com/posts/php-generators-efficient-data-handling-and-iteration-techniques

  • Аврал вместо тишины

    Подумал, что давно очень ничего не писал сюда
    А что писать? Каждый день теперь это пороховая бочка
    Каждый день прилетают задачи, что все горит и уже вчера надо было сдать огромный кусок функционала
    Как делать задачи? Да кто знает) последний чел, который знал уже месяц как не работает 😀

    Звучит как пиздец? Возможно
    Но я поймал себя на мысли, что мне этого давно не хватало
    Это какой-то особенный азарт решать нерешаемые жопы в краткие сроки и выходить победителем

    Да, все пока очень спонтанно и все такое, но мы в начале пути к светлому будущему

  • Из-за леса, из-за гор

    … прилетела задача по перевозу 13 приложений на выделенную бд.

    Когда мы на подработке только начинали пилить все эти приложения, я и подумать не мог, что их столько будет
    Поэтому, для каждого приложения в докер композе была завернута база
    Ну а что? Это как минимум удобно. И нет, вопросы производительности нас бы не коснулись — масштаб не тот

    Но приложений меньше не становится, а смотреть на вывод docker ps становится страшно
    Да и бэкапы бы не помешало делать, желательно не через костыли
    А хуже всего то, что я не могу через IDE залезть в базу приложения на дев/прод контурах и посмотреть что творится — приходится лезть через ssh на сервак и там уже в контейнере шариться в БД

    Поэтому было принято простое решение — сделать выделенный сервак с БД и загнать туда все БД всех приложений
    Сказано — сделано. Осталось только в конфигах поменять домен для подключения и можно спокойно жить дальше

    Но проблема в том, что мне на месте не сидится и вместе с переездом БД я решил полностью перелопатить раскатывание приложений на проде, деве и локалке
    Вышло-то на самом деле очень даже ничего:
    1. удобно — вся раскатка делается одной командой
    2. нет мусора — теперь есть всего один корневой docker-compose.yml, а вот доп настройки к нему цепляются через docker-compose.override.yml, которые соответствуют нужному окружению
    3. универсально — проекты теперь раскатываются и выглядят в плане деплоя как один
    4. на всех приложениях теперь php8.2 + jit + opcache
    5. редис был успешно везде заменен на файловый кеш (если вообще использовался; было такое, что редис поднят, а коннекта к нему нет)

    Без провалов не обошлось — один раз накатил тестовую базу на прод. Но это мелочи 🙂

    В общем и целом опыт очень крутой. Всегда приятно заниматься стандартизацией и улучшением DX

  • Ребята, я стал лидом

    В среду мне позвонил СТО, сказал, что я закончил испытательный срок
    После этого вывалил мне супер инфу о том, что меня назначают лидом, дают команду и большой проект, а сегодня рассказал об этом всем на дейлике
    Что думать — я пока хз; пока что просто непонятно как это все будет происходить, опыта-то нет

    Вообще, я рад, но я очень надеюсь, что не уйду совсем в менеджерство, слишком люблю кодить

  • Указатели на функции в структурах C

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

    https://youtu.be/6Riy9hVIFDE?si=XwRbWXaKxIvAc_jF

  • Давайте-ка я кое в чём сознаюсь

    После того как переехал работать в офис дома остался только ноут
    Так как живу я не один, да и самому иногда надо, на ноуте поставлена винда 11
    Вместе с этим никуда не делась подработка, которую зачастую приходится делать дома

    И вот, честно говоря, разница с линуксом была только в том, что пришлось поставить WSL2 и Docker Desktop. Все!
    В остальном все абсолютно такое же, даже просадок по производительности нет:
    — докер работает
    — дебаггер работает
    — терминал в шторме открывается сразу внутри WSL2
    — проблем с правами нет
    — порты из докер композа автоматом пробрасываются в винду и в браузере доступно все, что кодишь в WSL2

    Да, у меня простое рабочее окружение на подработке, там нет даже кубера, но думаю и с этим проблем бы не возникло

    Учитывая то, каким говном иногда бывает gnome на дебиане, страшные мысли о переезде на винду иногда закрадываются в голову…