Как стать автором
Обновить
97.07
Сначала показывать

SAGA на golang

Время на прочтение9 мин
Количество просмотров12K

После того, как я написал статью про паттерн CQRS, мне захотелось описать ещё один интересный шаблон для микросервисной архитектуры, а именно saga (он же повествование).

Читать далее
Всего голосов 6: ↑4 и ↓2+5
Комментарии15

Дело об исчезнувшем покрытии кода

Время на прочтение3 мин
Количество просмотров3K

Однажды, после штатного обновления версий библиотек, когда-то достаточно популярный плагин JaCoCo перестал считать покрытие кода тестами на одном из наших проектов в Каруне. Усердный поиск хоть как-то похожих проблем не принёс результатов. Помощи ждать было неоткуда, поэтому нам пришлось погрузиться в вопрос. Как же мы смогли вернуть покрытие? Расскажу под катом.

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии0

Angular Libs как монорепозиторий: начало, настройка, работа с assets

Время на прочтение18 мин
Количество просмотров5.2K

Всем привет! Меня зовут Илья и я хочу рассказать вам как можно подробнее про Angular Libs. В частности, то, как можно использовать его в качестве монорепозитория для сборки нескольких приложений с tree-shaking и переиспользуемостью различных модулей в разных библиотеках и частях системы.

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии1

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

Время на прочтение6 мин
Количество просмотров1.4K

Возможно, вы сталкивались с классической историей: поговорили с заказчиком о задаче, всем всё понятно. Начали работать — и началось: "А я думал, это и так ясно" или "Я ожидал, что ты это опишешь точнее". 

Начинается круговорот вопросов, переделок, а главное — неоправданных ожиданий и недовольств.

Как с этим бороться?

Расскажу!
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

CQRS на golang

Время на прочтение9 мин
Количество просмотров13K

Сегодня рассмотрю архитектурный паттерн CQRS и его возможное место в вашей архитектуре. Также осуществим его реализацию на языке golang.

Читать далее
Всего голосов 6: ↑4 и ↓2+3
Комментарии8

Инструменты практического изучения сетей

Время на прочтение4 мин
Количество просмотров5.2K
Привет! Я — golang разработчик в Каруне. Часто в работе сталкиваюсь с тем, что нужно понять, как функционирует та или иная сетевая система. Как правило, современные компьютерные системы объединены в сеть, и взаимодействие между узлами этой сети можно рассматривать через теоретическую призму модели OSI. 
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Что происходит, когда вводишь url, или как работает интернет

Время на прочтение7 мин
Количество просмотров85K

Об этом спрашивают на собеседованиях. Структурированное понимание этого может помочь вам, даже если вы давно строите сложные архитектурные процессы или кодите 20-ый год подряд. Я — программист уже много лет, последние пару из которых пишу на Go в Каруне. Работа работой, а внутренний исследователь не дремлет. И вот я наконец-то решил привести в порядок информацию, разбросанную по разным закоулкам чертогов разума, по добротным книгам и статьям на тему сетевых технологий.

Хочу представить краткую выжимку о работе протоколов. А если тема окажется интересной, могу продолжить работать с ней более детально. Рассмотрим простейший пример: вы ввели некоторый url в адресную строку. Поехали.

Читать далее
Всего голосов 11: ↑8 и ↓3+6
Комментарии21

Работаем с индексами при высокой нагрузке в rails с psql: как добавить/удалить индекс и при этом не умереть

Время на прочтение8 мин
Количество просмотров5.7K

Всё, что кладёт прод, делает тебя умнее. © программист, положивший прод

Привет! Я — Женя, рубист из Каруны. В этой статье расскажу, как мы получили, на первый взгляд, тривиальную задачу по работе с индексами, набили кучу шишек и пришли к не очень тривиальному и эффективному решению.

Читать далее
Всего голосов 8: ↑7 и ↓1+11
Комментарии3

Integration hell: путеводитель

Время на прочтение15 мин
Количество просмотров2K

В мае 2021 года ваш покорный слуга выступил на Codefest c докладом про интеграции и связанные с ними трудности. Поездка на эту конференцию запомнилась сразу несколькими вещами. Во-первых, было чертовски приятно выступить оффлайн — организаторам и участникам большой респект! А во-вторых, ни одна компания из тех, где я раньше работал, не поддерживала так сильно своих спикеров, как это делает Каруна. И где, как не в блоге компании, публиковать расшифровку доклада.

Читать далее
Всего голосов 9: ↑8 и ↓1+11
Комментарии4

Как сделать alter table в высоконагруженной таблице

Время на прочтение3 мин
Количество просмотров16K

Ещё лет 5 назад на собеседованиях с backend-разработчиками был популярен вопрос: как переименовать колонку в высоконагруженной таблице (возможны вариации: как сделать любой другой alter table)?

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

Читать далее
Всего голосов 20: ↑18 и ↓2+23
Комментарии29

Real-time мониторинг тормозящих запросов PostgreSQL своими руками за полчаса

Время на прочтение4 мин
Количество просмотров16K

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


Ключевое слово — в конкретный момент времени. Например, база непонятно от чего напряглась на 5 минут, потом всё само рассосалось, и очень хочется знать, почему. Отчёты за сутки, присылаемые dba на основе pg_stats_statements, не всегда проясняют ситуацию. Другие графики и логи могут помочь. Но всё же хочется не гадать на кофейной гуще, а конкретно посмотреть, что такому-то запросу в такое-то время было плохо, или его было много.


Можно, конечно, подключить системы а ля okmeter, но okmeter стоит денег. Да ещё и отсылает запросы в чужое облако — что, понятно, не в каждой организации можно считать безопасным.


На удивление, сделать такой мониторинг самому занимает всего полчаса времени, буквально с помощью нескольких строк Go-кода и палок.

Читать дальше →
Всего голосов 10: ↑9 и ↓1+11
Комментарии8

Когнитивные искажения с примерами для айтишников

Время на прочтение6 мин
Количество просмотров31K

Про когнитивные искажения много пишут и много говорят.


Однако всегда не хватало более чёткого понимания, как именно это влияет на профессиональную деятельность, мою и моих коллег. Какие решения я как тимлид и программист принимаю неправильно. Что мне подправить, на что обратить внимание.


Поэтому я решил взять справочник когнитивных искажений и поискать примеры из реальной IT-жизни по каждому пункту.


Если вам интересно, добро пожаловать под кат.


Ладно, по каждому пункту — это я погорячился, так как я нашел аж 176 видов искажений. Поэтому выберу рандомно лишь некоторые из них.

Читать дальше →
Всего голосов 43: ↑40 и ↓3+53
Комментарии56

Как мы делали инструмент для QA, а сделали для всего техотдела

Время на прочтение4 мин
Количество просмотров3.7K

Как-то очень давно наш отдел автоматизации внутренних процессов посетил админ (ops) с идеей помочь нашим тестировщикам. Основная идея был упростить деплой т.к. было очень неудобно писать ручные curl запросы к gitlab'у с кучей меняющихся параметров. Так заставили нас наша команда решила помочь дружественному отделу и сделать их работу более приятной.

В статье я постараюсь поделиться тем, как мы разрабатывали GUI для curl'a, а сделали очень крутой сервис автоматизации. А также с какими проблемами столкнулись и как их решили (или нет).

Читать далее
Всего голосов 6: ↑4 и ↓2+4
Комментарии5

Стреляем себе в ногу с помощью GenServer'а, или как мы фиксили неуловимый баг в Elixir проекте

Время на прочтение4 мин
Количество просмотров3.1K

Привет, Хабр! Меня зовут Иван, я — техлид в Каруне.

В команде мы активно используем Elixir в одном из самых нагруженных проектов.

Мы уделяем особое внимание тому, что за код выполняется в коллбеках GenServer'а, особенно если это код третьесторонних библиотек.

В этой статье я расскажу, почему это настолько важно, и продемонстрирую, как с помощью простейших механизмов, которые предоставляют нам Elixir и Erlang, мы можем сломать поведение GenServer'a и породить трудноуловимые баги. Ещё расскажу, как мы боролись с таким багом в реальной жизни.

Поехали!

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии6

Опыт хранения IP-адресов в PostgreSQL

Время на прочтение4 мин
Количество просмотров13K

Не раз наша команда сталкивались с задачей, связанной с хранением и использованием IP-адресов в базе данных. Предположим, что есть типичная задача: необходимо парсить огромное количество диапазонов адресов (~300k) с известного ресурса, а далее определять страну по IP-адресу клиента. Кажется, ничего особенного. Это довольно просто решается любым ниже описанным способом при малых нагрузках. Но если у нас тысячи пользователей или наш сервис является прокси перед всеми остальными? В этом случае не хочется быть бутылочным горлышком и приходится бороться за каждую долю секунды.

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии10

Дженерики в языке Go

Время на прочтение6 мин
Количество просмотров62K
func Map[F, T any](s []F, f func(F) T) []T {
    r := make([]T, len(s))
    for i, v := range s {
        r[i] = f(v)
    }
    return r
}

Как вы уже наверняка знаете, proposal по дженерикам в Golang принят (официально это называется type parameters) и будет имплементирован в go 1.18. Бета будет доступна уже в конце этого года. А это значит, что пора разобраться, на чём в итоге остановились разработчики языка — ведь черновик type parameters постоянно менялся в течение последних лет.


Технология новая, на практике толком никто не использовал. Поэтому если увидите какую-то неточность в статье, не стесняйтесь указать это в комментариях.


Самостоятельно поиграться с дженериками можно здесь


Итак, поехали.

Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии49

Информация

Сайт
karuna.group
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия