Привет, Хабр!Часто задается вопрос: как эффективно и быстро обработать огромные объемы информации? Ответом на этот вызов стала концепция MapReduce, разработанная в недрах Google. MapReduce — это парадигма программирования, созданная для обработки и генерации больших объемов данных с использованием параллельных распределенных алгоритмов. Основная фича проста: сначала данные разбиваются на небольшие части (фаза Map), а затем результаты этих частей агрегируются в финальный результат (фаза Reduce).…
Меня зовут Максим Горозий. Я тимлид в Т-Банке, работаю над нашей образовательной платформой, которая служит для разных направлений бизнеса. В ИТ больше 10 лет и успел поработать в двух GameDev-компаниях, где управление памятью занимало весомое время в оптимизации производительности кода. Люблю строить системы и взаимосвязи между ними, а также EdTech и преподавание, а еще больше — работать над инструментами обучения. Хотя начинал с C, я идеологический фанат Go, DDD и Agile.«Оно тормозит» — класс…
Приветствую, друзья. Квалифицирую себя как джуна на языке GO, с анализом данных еще не сталкивался, поэтому после изучения вопроса, решил что выйдет классная статья из полученного опыта. Плюс разложу материал для себя по полочкам. Статья будет описываться поэтапно, т.к считаю это самым удобным восприятием алгоритмов.Поступила задача выполнения кластеризации множества товаров, по их размерам. Значения распределения: ширина и высота.После изучения вопроса, было найдено несколько подходящих алгори…
Topological consensus system (TCS)Автор: Александр Коробкин и команда разработчиковВведение новой инновационной технологии распределенных систем: СТКСегодня мы рады представить вашему вниманию нашу новую инновационную технологию, основанную на протоколе Chord, но с рядом уникальных особенностей, которые увеличивают его функциональность и производительность. Мы назвали нашу технологию "СТК" (Система Топологического Консенсуса).Предназначение СТКСТК является распределенной хэш-таблицей (D…
В одной из московских компаний решили расширить функции системы на Golang, и заказчик попросил внедрить в неё SMS и прочие каналы для уведомлений клиентов. В этой статье пошагово разберём, как отправлять SMS с использованием сервиса МТС Exolve и популярного языка программирования Golang.SMS — полезный инструмент в сценариях взаимодействия с клиентами, если вы получаете их согласие на уведомления. В основном про доставку товара или о состоянии онлайн-заказа; сообщения о бонусах и акциях; автомат…
Приветствую, в прошлой статье мы разбирали определение bytes.Buffer изнутри. Теперь хочется обратить внимание на сам пакет bytes. Что за ним скрывается? Каждому разработчику приходилось использовать его будь то в production или локальной разработке. Это достаточно мощный по своим меркам пакет, который предоставляет нам функции для работы с байтами.Давайте разберем каждую функцию отдельно и поговорим какая и зачем нужна, а самое главное посмотрим на исходный код вблизи. Статья может являться нек…
Привет! Меня зовут Денис, я - разработчик ПО SEDMAX. Это промышленное ПО для сбора и визуализации данных в энергетике. Как и у всех, у нас бывают баги. Мне бы хотелось поделиться опытом в поиске таких багов, а также порассуждать на тему того, что необходимо было сделать, чтобы баг не появился. У нас серверная часть написана на go в виде некоторого множества сервисов, поэтому специфика большинства багов будет асинхронное взаимодействие, а код примеров представлен на go. В прошлой статье были сде…
ВступлениеНи для кого не секрет, что стандартный пакет context широко используется для создания ваших сервисов. В данный момент, не побоюсь этого слова, любой сервис написанный на Go использует контексты повсеместно. Мое мнение таково - если ты хочешь прогрессировать как специалист, ты должен копать все глубже и глубже. Предлагаю рассмотреть context с призмы его работы внутри.Определение СontextСуществует несколько типов context, с которыми Golang разработчику приходится сталкиваться. Давайте к…
Работая с кодом на Go, любому специалисту приходилось сталкиваться со стандартным пакетом bytes . Внутри него лежит определение Buffer . Что же это такое?Определение bytes.BufferСам по себе bytes.Buffer является структурой.type Buffer struct { buf []byte // содержимое - это байты buf[off : len(buf)] off int // читает по &buf[off], пишет по &buf[len(buf)] lastRead readOp // последняя операция чтения, чтобы Unread* могло работать корректно }Buffer — это буфер с переменным…