Pull to refresh
11
0
Muhamad Zununov @VanquisherWinbringer

CIO

Send message

Знакомство с Debezium — CDC для Apache Kafka

Reading time18 min
Views105K


В своей работе я часто сталкиваюсь с новыми техническими решениями/программными продуктами, информации о которых в русскоязычном интернете довольно мало. Этой статьей постараюсь восполнить один такой пробел примером из своей недавней практики, когда потребовалось настроить отправку CDC-событий из двух популярных СУБД (PostgreSQL и MongoDB) в кластер Kafka при помощи Debezium. Надеюсь, эта обзорная статья, появившаяся по итогам проделанной работы, окажется полезной и другим.

Что за Debezium и вообще CDC?


Debezium — представитель категории программного обеспечения CDC (Capture Data Change), а если точнее — это набор коннекторов для различных СУБД, совместимых с фреймворком Apache Kafka Connect.
Читать дальше →
Total votes 52: ↑52 and ↓0+52
Comments1

Заблуждения большинства программистов относительно «времени»

Reading time6 min
Views59K
Много дней назад я решил записать некоторые наблюдения, сформировавшиеся пока в последние годы я занимался тестированием. Рассматривая области, которые получают наибольшую отдачу от тестирования, я понял, что у меня накопилось много конкретных мыслей о том, как мы — программисты — склонны небрежно обращаться с понятием «время» в программировании.

Тогда я написал пост «Заблуждения программистов относительно „времени“», в котором указал 34 ошибочных представления и заблуждения, относящихся как к календарному, так и к системному времени. С большинством из них я столкнулся сам, занимаясь дебаггингом программ (как рабочих, так и тестовых).

Читать дальше →
Total votes 62: ↑55 and ↓7+48
Comments100

NBomber как альтернатива JMeter для .NET разработчика

Reading time11 min
Views12K

Как и многие разработчики, впервые столкнувшиеся с нагрузочным тестированием, я начал с JMeter. Для ознакомления и простых сценариев JMeter полностью меня устраивал, но с усложнением задач и потребностью в большем контроле я начал задумываться о поиске более удобной альтернативы. Особенно хотелось чтобы инструмент легко адаптировался или уже был адаптирован под экосистему .NET.

В этой статье мы рассмотрим NBomber как легкую для освоения альтернативу JMeter, а также постараемся ответить на вопрос "Почему я должен проводить нагрузочное тестирование именно с NBomber ?".

Эта статья предназначена для .NET разработчиков, которые хотят пополнить свой инструментарий удобным инструментом для нагрузочного тестирования, а также тем кто рассматривает альтернативы JMeter для экосистемы .NET.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments11

Эффективная генерация сортируемых GUID для первичных ключей БД на клиенте

Reading time12 min
Views21K

Использовать Guid.NewGuid() в качестве первичного ключа в базе данных — плохая с точки зрения производительности идея. Это связано с тем, что в SQL Server, MySQL и некоторых других БД для первичных ключей создаются кластерные индексы, которые определяют, как строки будут храниться на диске. GUID — это по сути случайное значение, поэтому новая строка может попасть в начало, середину или конец таблицы. Серверу БД в этом случае придётся перемещать другие строки, что приведёт к фрагментации данных, а их извлечение может занять больше времени, если вам нужно извлечь несколько добавленных последовательно записей (например, когда вы добавляете набор связанных сущностей, которые потом будут извлекаться вместе — БД понадобится прочитать данные из разрозненных страниц вместо последовательного чтения набора данных).

Поэтому, чаще всего, лучше пользоваться сгенерированными БД первичными ключами. В SQL Server, например, есть функция NEWSEQUENTIALID(), которая генерирует последовательные GUIDы. Зачем может понадобиться генерировать ключи именно на клиенте и как это правильно сделать?

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments35

Ехать или не ехать? Check list

Reading time5 min
Views59K

Эта статья не даст вам советов, ехать или не ехать. Принять решение вы должны сами, однако, я попытаюсь систематизировать аргументы ЗА и ПРОТИВ так как сам жил и работал за границей по 3 года дважды - в Америке и Франции.

Читать далее
Total votes 153: ↑99 and ↓54+79
Comments468

Сказка про Guid.NewGuid()

Reading time11 min
Views26K

C#. Guid.NewGuid(). Linux. Windows. Randomness or Uniqueness. RNG and PRNG. Performance. Benchmarking.

Цель нашей сегодняшней сказки — развлечься как следует. Детективная история в поисках потерянного перфоманса с красивым финалом и эффектным результатом непосредственно связана с набором слов из предыдущего абзаца.

Читать далее
Total votes 61: ↑59 and ↓2+67
Comments34

Сейчас плохо, но все может быть еще хуже

Reading time23 min
Views88K

Разбираю ключевые идеи неизданной на русском книги «Внутри коллапса Венесуэлы» Уильяма Ноймана.

В своей книге автор рассказывает о жизни в Венесуэле, в которой огромные запасы нефти сочетаются с нищетой населения и полным отсутствием перспектив, и о причинах экономического коллапса этой страны.

Читать далее
Total votes 176: ↑164 and ↓12+201
Comments175

Разработка архитектуры для чайников. Часть 3

Reading time3 min
Views17K

Event system architecture (EDA)

Ещё одна из популярных архитектур — Event system architecture (EDA), что в переводе на русский означает “архитектура на основе событий”. Суть данной архитектуры состоит в том, что приложение работает с событиями (эвентами), которые генерируются пользователем или другими системами.

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

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments10

Разработка архитектуры для чайников. Часть 2

Reading time5 min
Views22K

Monolite or MicroService ?

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

Давайте для начала разберём что такое монолит и его преимущества и недостатки.

Читать далее
Total votes 16: ↑7 and ↓9-1
Comments8

Агрегаты

Reading time16 min
Views18K

Я считаю, что именно агрегаты из Domain-Driven Design лежат в основе поддерживаемых информационных систем. Однако эта концепция малоизвестна за пределами DDD-сообщества и довольно сложна для понимания, поэтому я решил написать очередной пост посвящённый агрегатам. В основном для чтобы структурировать собственное понимание агрегатов и создать "методичку" для своих команд, но и широкой общественности, я надеюсь, этот пост тоже может быть полезен.

Что такое агрегат?
Total votes 15: ↑14 and ↓1+15
Comments4

Стратегии выплаты технического долга

Reading time6 min
Views5.1K
image

Технический долг: он есть у всех, и каждый достойный своего звания разработчик хочет его выплатить, но как же организовать этот процесс?

Реализуем севооборот


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

Эта метафора остаётся подходящей и для разработки ПО; кроме того, она содержит в себе намёки на возможные стратегии, которые можно использовать для выплаты технического долга.

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

В рамках этой статьи мы будем предполагать, что вы работаете в методологии agile-разработки, однако многие принципы при условии творческой переработки применимы и к другим методологиям.
Читать дальше →
Total votes 14: ↑12 and ↓2+18
Comments1

IQueryable порождает сильную связанность

Reading time4 min
Views10K

Время от времени я встречаю людей, пытающихся выразить API в терминах IQueryable<T>. Почти всегда это плохая идея. В этой статье я объясню почему. Вкратце, IQueryable<T> — это один из лучших примеров заголовочного интерфейса (Header Interface), предлагаемых платформой .NET. Его почти невозможно реализовать полностью.


Эта статья о проблемах реализации API на основе интерфейса IQueryable<T>. Это не претензия к интерфейсу как таковому. Кроме этого, это не претензия к замечательным методам LINQ, доступным для интерфейса IEnumerable<T>.

Можно сказать, что IQueryable<T> — это одно сплошное нарушение принципа подстановки Лисков. Я буду использовать закон Постела, чтобы объяснить почему это так.


Принцип устойчивости, также известен как закон Постела в честь Джона Постела: «Будь либерален к тому, что принимаешь, и консервативен к тому, что отсылаешь (Be liberal in what you accept, and conservative in what you send)».
Читать дальше →
Total votes 18: ↑17 and ↓1+21
Comments38

Как Amazon тратил по $500 млн на разработку провальных игр и почему ничего не вышло

Reading time4 min
Views40K


В 2012 году в структуре Amazon возникла собственная студия по производству компьютерных игр. По замыслу Джеффа Безоса, Amazon Game Studios должна была стать успешной и эффективной частью корпоративной экосистемы. Однако за прошедшие восемь лет добиться этого, увы, так и не удалось. Как же так вышло, что богатейшая компания, у которой получалось практически всё, не сумела завоевать рынок геймдева?

Ответы на этот вопрос нашел журналист Джейсон Шрайер (автор книги “Кровь, пот и пиксели”). Публикуем главные тезисы расследования.
Читать дальше →
Total votes 59: ↑59 and ↓0+59
Comments102

Как выбрать тимлида

Reading time15 min
Views16K

Будучи разработчиком, я выработал в себе привычку читать доки и мануалы систематически и в большом объеме. Сейчас я руковожу отделом iOS разработки в Cardsmobile и практически не пишу код, но привычка осталась. Статей про менеджмент написано не меньше, чем по программированию. И начитавшись публикаций на очередную такую тему, я кое-что понял: зря я не читал их, пока активно кодил. Ведь в моей команде всегда есть как минимум один менеджер и хорошо было бы разбираться в том, что он делает. Хотя бы немного. Ведь если он делает свою работу плохо, то лучше подыскать нового?       

Люди увольняются не из-за плохой работы, а из-за плохих руководителей. Исследование Герцберга показывает, что вторым по значимости негативным фактором, влияющим на мотивацию, является плохое руководство. Первый – политика компании и бюрократия, что на самом деле является следствием плохого руководства.

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

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

Читать далее
Total votes 21: ↑19 and ↓2+21
Comments20

Как американцы становятся миллионерами: принципы FIRE

Reading time9 min
Views74K
Пару лет назад на Хабре уже была статья про движение FIRE (Financial Independence / Retire Early). Она хорошо описала суть явления, но мало углублялась в детали, поэтому у многих читателей сложилось впечатление, что это не применимо в российских реалиях, или же ведет к очень ограниченной и несчастливой жизни по мере достижения финансовой независимости. Эти аргументы регулярно используют и американцы, в том числе неплохо зарабатывающие, которые знакомы с FIRE лишь понаслышке. Поэтому мне кажется полезным рассказать о принципах и способах достижения финансовой независимости, используемых американцами, а дальше уже каждый сам решит что из этого инструментария им доступно в их ситуации и их стране.

Один из частых мифов про последователей FIRE — это то, что они хотят бездельничать, и потому спешат “выйти на пенсию”. Как правило, это не так. Основное, чего стремятся избежать люди из этой группы — зависимость от работодателя. Одна из первых важных точек отсчета — это “fuck you money”. Такое количество денег, которое позволяет развернуться и хлопнуть дверью перед носом своего работодателя, если тот решит хамить или эксплуатировать зависимого (как ему кажется) сотрудника. Большинство людей любят работать и создавать, но хотели бы иметь возможность выбирать ту работу, что нравится, даже если там мало платят или не платят вообще. Многие “уволившиеся” создают свои подкасты, блоги, начинают консультировать, и иногда это довольно неожиданно превращается в успешный бизнес, позволяющий им перестать пользоваться своими накоплениями.

Для некоторых профессий, включая программистов, стандартный возраст выхода на пенсию еще и слишком высок с учетом возрастной дискриминации при приеме на работу. Многие сталкивались с тем, что после 50 лет работу найти все сложнее, и решать задачи на leetcode при подготовке к интервью все труднее. Поэтому желание обеспечить себе пенсию на 10-20 лет раньше официального ее наступления вполне понятно.
Читать дальше →
Total votes 35: ↑32 and ↓3+44
Comments294

Как DDD помог нам построить новые ревизии в пиццериях

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

Ревизия в Додо не бумажная: у ревизора есть планшет, где ревизор отмечает все продукты и создает отчеты. Но до 2020 года в пиццериях ревизия проводилась именно на бумажках — просто потому что так было проще и легче. Это, конечно, приводило к недостоверным данным, ошибкам и потерям, — люди ошибаются, бумажки теряются, а ещё их много. Мы решили исправить эту проблему и улучшить планшетный способ. В реализации решили использовать DDD. Как у нас это получилось, расскажем дальше.


Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments7

Как приручить событийно-ориентированные микросервисы

Reading time7 min
Views13K
Как приручить событийно-ориентированные микросервисы

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


TL;DR: А вот и нет! Вы столкнетесь с препятствиями связанными с пониманием и управлением потоком событий.


В этой статье я просуммирую свой опыт работы с хореографией микросервисов и укажу на различные препятствия и последствия данного подхода. Я использую типичный пример из бизнеса — процесс “клиентской адаптации” (в зависимости от отрасли, вы могли слышать о нем как об открытии счета). Для представленной очереди событий ниже, я использую Apache Kafka, но не беспокойтесь если используете другой стек, для него будут применимы все те же понятия.

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments3

Почему в России почти нет гражданского/коммерческого высокотехнологичного производства?

Reading time27 min
Views410K
Статью с обзором ситуации с микроэлектроникой в России я закончил утверждением, что сейчас в России есть технические возможности для создания любых военных микросхем (если не считаться с ценой). Однако и в комментариях к той статье, и во многих других — всех больше волновал вопрос отсутствия (на уровне погрешности измерений) производства чисто-коммерческих (гражданских) высокотехнологичных продуктов. Этот вопрос волновал и меня, потому я постоянно мучил вопросами всех, кто так или иначе связан с высокими технологиями и бизнесом в России.

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

Под катом попробуем разобраться чем отличаются «высокотехнологичные» компании от «низкотехнологичных», что нужно, чтобы высокотехнологичные компании могли рождаться и выживать, почему с софтом у нас лучше, чем с хардом, с чего начиналась кремниевая долина в США и можно ли её «скопировать», почему Китай всех рвет, а также — окинем взором все, что происходит в Сколково, Роснано, фонде перспективных исследований и приведут ли они к расцвету российских инноваций. Безусловно, я где-то могу ошибаться — буду рад дополнениям в комментариях.

Сразу нужно отметить, что в связи с многогранностью проблемы объем статьи получился довольно большой, так что можно начать читать с резюме в конце, и затем прочитать лишь те разделы, которые вызовут интерес. Сразу хочу предупредить — повествование «нелинейное», соседние заголовки могут описывать разные аспекты проблемы и быть друг с другом практически не связанными.
Читать дальше →
Total votes 389: ↑380 and ↓9+371
Comments304

Поиск родственников через тест ДНК. Часть 4 – Расшифровка результата

Reading time15 min
Views34K
Итак, вы определились для чего нам нужен ДНК-тест, выбрали в какой лаборатории будете покупать его, заказали через интернет и дождались получения. Потом вы сделали тест себе или родственникам и отправили тест обратно, перейдя в режим ожидания.

И вот спустя несколько недель мы получаем извещение на e-mail, что наш тест готов, результаты загружены на сайт и теперь можно ознакомиться с его результатом!



Что мы увидим в результатах ДНК-теста на сайте лаборатории?


Прежде чем смотреть непосредственно результаты, я бы рекомендовал заполнить профиль на сайте лаборатории.

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

Далее будут много картинок, т.к. без этого обзор будет неполноценным.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments21

Юрий Бушмелев «Карта граблей на поле сбора и доставки логов» — расшифровка доклада

Reading time16 min
Views11K

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


  • как писать логи из приложения;
  • куда писать логи;
  • как доставлять логи для хранения и обработки;
  • как обрабатывать и хранить логи.

Применение популярных ныне технологий контейнеризации добавляет песочка поверх граблей на поле вариантов решения задачи.


Как раз об этом расшифровка доклада Юрия Бушмелева "Карта граблей на поле сбора и доставки логов"



Кому интересно, прошу под кат.

Total votes 10: ↑9 and ↓1+8
Comments13

Information

Rating
Does not participate
Location
Россия
Registered
Activity

Specialization

Chief Technology Officer (CTO), Chief information officer (CIO)
C#
Software development
Project management
Product management
Development management
Agile
Scrum
Kanban
Development of tech specifications
Scala