Отправляет email-рассылки с помощью сервиса Sendsay

RSS-канал «Очищает ли страдание, если это страдание х***ей ???»

Доступ к архиву новостей RSS-канала возможен только после подписки.

Как подписчик, вы получите в своё распоряжение бесплатный веб-агрегатор новостей доступный с любого компьютера в котором сможете просматривать и группировать каналы на свой вкус. А, так же, указывать какие из каналов вы захотите читать на вебе, а какие получать по электронной почте.

   

Подписаться на другой RSS-канал, зная только его адрес или адрес сайта.

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

Форма для любого другого канала

Последние новости

Заслужили ли мирные жители германии???
2022-02-23 14:07 krocodl
Я тут взялся запостить в различные доступные мне группы ссылку на объявление евента ФБ - антивоенный митинг, который будет проходить в субботу утром в Люксембурге перед российским посольством. Объявление на английском, все экспатские группы его спокойно приняли, некоторе количество людей даже полайкало - все как обычно. А вот с русскоязычными группами я поимел один интересный экскурс в психологию наших соотечествеников за рубежом.

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

Немедленная реакция (ничего особо интересного):
- И зачем тут политика?
- Дуновение весны все заметнее с каждым днем.

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

А вот затем понеслось свеженькое: оказалось, что хотя это в правилах и не прописано, но "манеры и чувство такта, которые обычно присущи взрослым людям", оказывается страдают.

В полном охуении от такого этического кульбита я переспросил, правильно ли я понимаю, что "само упоминание таких прискорбных вещей как война или смерть есть свидетельство плохих манер и вообще нетактично"?

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

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

Потом гражданам в комментариях объяснили, что (свободное цитирование, но все скриншоты у меня есть. Просто лень удалять с них персданные):
- в приличных обществах не говорят о религии, политике, здоровье и деньгах
- нет, обсуждение проблем геммороя с инвестициями в условиях напряженности тоже запрещено
- "свободу дали, но культуру и уважение к другим не отменяли"

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

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

А в целом остается только вспомнить бессмертную российскую классику:

"Эпоха гласности настала,
Во всем прогресс — но между тем
Блажен, кто рассуждает мало
И кто не думает совсем."

1866 год, между прочим, 150 лет - а просто как в окно глядит...

Немного рефлексии на тему смены работы
2022-02-14 16:02 krocodl
1) хорошая смена работы это большой проект: его надо начинать осознанно, планировать и готовиться тщательно, отводить достаточно времени. Удачно сменить работу просто потому, что на вас свалился хантер с хорошей вакансией, вряд ли получится - данная возможность будет скорее всего с треском и позором провалена, потому что за предыдущие несколько спокойных лет нормальной работы навык прохождения многочисленных интервью был в значительной степени утерян.

2) смена работы означает 3-5 технических интервью. Их прохождение это совершенно особого рода искусство крайне мало имеющее общего с нормальной повседневной работой. Есть работодатели, интервьюеры которых за весь процесс так и не удосужились взглянуть в мой профиль Linkedin и даже не поинтересовались, чем же я раньше занимался и в чем мои сильные стороны. Более того, я с удивлением узнал, что нынче специально рекомендованно не знакомиться с experience претендента, чтобы не создавать себе предвзятого мнения.

3) даже если вы заебись профи к техническим интервью надо готовиться, актуализируя объем информации, который обычно на порядок больше того, которым вы оперируете каждый день. Ну и кроме того это довольно полезно и для повседневной работы. Поэтому имеет смысл откликаться на предложения новой работы просто так, даже не имея в планах сменить текущую. Таким образом поддерживается навык прохождения, выявляются дырки в понимании и расширяет объем знаний "на пальцах". Увы, этот подобная активность требует времени и зачастую довольно болезненна для самолюбия. Да, практика написания дайджестов мне очень помогла, они значительно сокращают время на освежевание памяти.

4) Особый вид искусства это live coding, может быть как отдельным интервью, так и элементом любого другого. Нормально, когда используется это для иллюстрации беседы. Но увы может быть и основным содержанием процесса. Очевидно, что к повседневной работе это никакого отношения не имеет, но эту планку надо как-то гарантированно брать. Поэтому увы планирую в течении следующего периода работы вместо изучения чего-то полезного регулярно тратить часть времени на это фигурное катание.

5) Не надо выпендриваться: если расспрашивают в свободной форме про ООП / тестирование, то надо говорить в точности то, что написано в книжках, даже если весь ваш опыт свидетельствует о прямо противоположном. Это такой ритуал группового причастия общепринятым авторитетам - надо смириться. Им будет приятно услышать привычные заклинания, а вам полезно в плане открывающихся перспектив. Интервью это не место для дискуссий.

6) некоторые интервью провалятся просто потому, что между вами не возникло некоторой "химии", которая собственно говоря в итоге все и определяет. Если интервьюер, расспросив вас про опыт, задаст вопрос, а занимались ли вы в своей карьере чем-либо сложным, то можно быть полностью спокойным за результат. Поэтому soft skills надо применять как можно раньше. Вообще, не стоит слишком эмоционально "вкладываться" в каждое конкретное интервью. Для меня лично самый продуктивный настрой это такое усталое "ну ладно.... давайте еще и с вами до кучи побеседуем....". Горящие глаза и прочий нездоровый энтузиазм это верный признак юниора, "чем больше женщину мы меньше" и все такое прочее...

7) да, встречаются еще места, где граждане (причем, отнюдь не менеджеры или хантеры) всерьез интересуются "а почему вы хотите попасть именно в нашу компанию". Это плохой признак, но демонстрировать свое охуевание явно не стоит - вас проверяют на способность по команде проявить достаточный уровень лицемерия. В общем-то тоже полезный soft skills, хотя и слегка вонючий. То же самое относится к вопросам про ваши сильные / слабые стороны, просьба рассказать про ваш последний опыт преодоления значительных трудностей и прочую хуету. Гугл всем в помощь про то, какие правильные слова на эту тему нынче в моде. Лично я сразу ставлю напротив такого работодателя жирный минус.

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

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

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

11) если вам предлагают самому задавать вопросы, то это не значит, что интервью кончилось - всего лишь сменился формат. На самом деле по тому, что и на каком уровне интересует человека, очень много можно сказать о его профессионализме, так что расслабляться еще рано. Фактически, это слегка переформулированный вопрос "что для вас является самым важным в организации вашей работы?". Ну и кроме того это еще и неплохой шанс ознакомиться с тем, как разные команды готовят свой производственный процесс. У меня был заранее подготовленный список подобных собственных вопросов из которых я выбирал наиболее подходящие по контексту беседы.

12) ну и наконец последнее: один из основных критериев выбора будущего места это четкое понимание, повысится ли моя стоимость на рынке труда после 3-5 лет работы. Если нет, то это плохое место и возможно даже эволюционный тупик, выход из которого обойдется дорого. При прочих равных (и даже возможно слегка в убыток) надо выбирать место, в котором будешь заниматься чем-то как минимум для себя новым, а как максимум еще и перспективным. Хотя, конечно, хрен его знает, что будет через пять лет перспективным.

Ну просто очень хорошо, грех не сохранить....
2022-02-07 20:22 krocodl

Андрей Мовчан


Когда-то Миклухо-Маклай изучал туземные языки просто разговаривая с туземцами и делая выводы относительно значения слов и выражений на основе сопоставления реальности и вербальных символов.
Тем же самым уже давно занимаюсь я изучая племена, населяющие фейсбучную территорию бывшего Советского Союза. На удивление чем больше те или иные представители того или иного племени гордятся именно своим наречием, тем более их язык похож на общий для постсоветского пространства диалект. Да что там язык – правила, обряды и обычаи у них тем более одинаковы, чем больше каждый индивид стремится подчеркнуть свою принадлежность к определенному племени.
Хотя исследование в самом начале, я рад представить на суд публики его первые результаты – краткий справочник верований и краткий словарь выражений фейсбучного постсоветского пространства (словарь – в следующем посте).
Справочник верований. У меня получилось 32, но я буду рад вашим дополнениям:
(1) Хорошие – друзья, плохие – враги; друзья – хорошие, враги – плохие;
(2) Мы хорошие, вы плохие;
(3) Мы никогда не поступаем плохо, а если поступаем, то только потому что вы нас вынуждаете;
(4) Поступать плохо – хорошо, если враги поступают еще хуже; действия врагов всегда являются оправданием наших действий, где бы и что бы враги ни делали;
(5) Нельзя быть немножко беременным: бывает либо всё хорошо, либо всё плохо;
(6) У нас всё хорошо, у вас всё плохо; если бы мы делали как вы, у нас тоже было бы плохо; если у нас плохо, то это из-за вас; если у вас хорошо – то это из-за нас;
(7) Если у вас всё лучше, чем у нас, это потому, что вы плохие (вариант – вам даром досталось);
(�� Хорошо – так как сейчас есть у нас; плохо – так как сейчас есть у вас; любое изменение нашего «хорошо» – плохо; даже если у нас не хорошо, если это менять, то будет еще хуже;
(9) Враги хотят, чтобы у нас что-то поменялось; те, кто хотят чтобы что-то поменялось – враги;
(10) Враги очень хотят заполучить наше «хорошо» себе; это называется «поработить нас»; они так хотят поработить нас, что не утруждаются порабощать никого другого; это потому, что все другие уже порабощены, только это снаружи незаметно;
(11) Враги всегда едины – среди племени врагов не может быть наших друзей; наше племя не едино – в нем тоже есть враги;
(12) Мы не бываем виноваты; враги не бывают невиноваты;
(13) Если у нас что-то плохо, то кто-то должен это исправить, потому что это чья-то вина, но не наша; мы будем искать, чья в этом вина, и требовать, чтобы он всё исправил; пока он не исправит, мы ничего вообще делать не будем; если он не исправляет – он враг; если он – друг, значит мы ошиблись, и это не его вина; если кто-то говорит что это вина друга – значит он враг и наговаривает на наших друзей;
(14) Мы всё знаем; враги тоже всё знают, но скрывают это;
(15) Если ты не из нашего племени – ты не можешь нам советовать и про нас говорить, потому что ты ничего не понимаешь и, наверное, враг;
(16) Если ты не согласен с моим мнением, то ты наверняка враг, и точно не можешь нам ничего советовать и про нас говорить;
(17) Если ты уехал из нашего становища – ты наверняка враг, и поэтому не можешь нам советовать и про нас говорить;
(18) Если ты согласен с моим мнением, значит ты друг, потому что ты прав, а друзья правы; если ты не из нашего племени или уехал из нашего становища, но согласен с моим мнением, значит ты враг, но моё мнение настолько правильное, что ты не можешь этого не признавать;
(19) В любой ситуации вариантов всего два; один – правильный; второй придумали враги; то, что бывает третий вариант, тоже придумали враги чтобы сбить с толку;
(20) Истина – это то, что я думаю, если это написано в Интернете; если в Интернете написано не то, что я думаю, то это написали враги и этому нельзя верить; если я это думаю, а в Интернете это не написано, то это тоже истина, просто настолько очевидная, что про неё не пишут (а пишут другое – но это враги);
(21) Спор необходим для доказательства своей правоты; доказательства своей правоты необходимо достигать любой ценой; аргументы – это уловки врагов; они научились манипулировать аргументами, поэтому необходимо сразу переводить спор на личности, чтобы публично выявить в оппоненте врага – какие еще нужны аргументы если он враг?
(22) Авторитетный источник – это источник, подтверждающий моё мнение; любой другой источник — это пропагандистская помойка;
(23) Факты являются иллюстрацией к выводам; если мне указали на ошибку в фактах, это может поменять иллюстрацию, но никак не меняет выводы;
(24) Наш действующий лидер – самый сильный; он наш друг, поэтому его мнение всегда правильное; мы всегда согласны с его мнением; если наш лидер делает нам плохо, это потому, что он спасает нас от еще худшего;
(25) Если бы наш действующий лидер не сменил предыдущего, всем нам было бы очень плохо; если бы не было нашего действующего лидера, всем было бы очень плохо; если наш лидер поменяется, всем будет очень плохо; любой, кто хочет сменить нашего лидера – наш враг; любой, кто считает, что можно выбирать из разных лидеров – наш враг;
(26) Я имею твердые убеждения; к сожалению, остальных членов моего племени легко можно обмануть; поэтому их надо защищать от вражеских мнений;
(27) Если высказывания врага нельзя запретить, то надо хотя бы дискредитировать его в глазах племени;
(28) Для начала надо честно выразить своё мнение относительно его мнения – коротко и ясно, времени на аргументы нет;
(29) Вот список тех, чьему мнению члены моего племени никогда не поверят: представители другого племени; эмигранты; интеллигенты; академические работники; спекулянты-финансисты; предприниматели; импотенты; уроды; представители сексуальных меньшинств; женщины, не устроившие семейную жизнь; слишком молодые; одетые не так, как принято; слишком старые; поэты; очкарики; богатые; бедные; неудачники; слишком везучие; чтобы обезопасить членов своего племени от вражеского мнения, надо рассказать им о том, что выразитель мнения принадлежит к одной, а лучше – двум-трем вышеперечисленным группам. Такую принадлежность необходимо считать очевидной истиной, а если в Интернете написано другое – это написали враги;
(30) Выразителям мнения, отличного от моего, обязательно надо предложить другое занятие вместо выражения своего мнения – это благородно, помогать ближнему. Им надо указать, куда идти, и чем заниматься; начинать указание надо словами «лучше бы вы…»
(31) Все должны знать, что мы сами разберемся, потому что мы уже разобрались; у нас уже всё хорошо, поэтому делать ничего не надо; если у нас не всё хорошо – это виноваты враги; поэтому надо бороться с врагами; враги это те, у кого другое мнение, и представители другого племени; как видите, мы всё знаем, нам не нужно ваше мнение;
(32) Мы твердо стоим на своем мнении; но как известно если меняются факты, надо менять и свое мнение; например, если мы переехали в другое племя, или поменяли работу, или нам заплатят за другое мнение, мнение можно и нужно поменять; смена мнения не означает что мы были неправы – мы всегда правы, просто обстоятельства изменились; в связи со сменой мнения меняются друзья и враги – иногда просто они меняются местами; от смены мнения верность всех указанных выше верований не меняется – они остаются абсолютно истинными.

Диалог с HR как упражнение во взаимном лицемерии....
2021-08-03 10:47 krocodl
Любопытные критерии: большинство вполне обсуждаемы, но первый имхо, это просто один из маркеров неадекватного работодателя.
Прямо так сразу всплывают в памяти минимум три. Первый, конечно, это попытка заикнуться про то, что мы тут все одна семья и у нас в компании уникально теплые семейные отношения.
Не, так, конечно, бывает, но из уст HR это расшифровывается мною примерно так: мы тут по-родственному ебем сотрудников в хвост и в гриву, не будучи стесняемыми никакими регламентами и контрактами. Ты чо, в натуре, не родной, бля???
Второй идиотский вопрос это про виденье себя через пять лет. Честный ответ звучит примерно так: я вижу себя подорожавшим за счет решения ваших проблем раза в полтора и успешно продающим этот опыт на рынке труда.
Разумеется, я этого никогда впрямую не скажу и все это понимают. Но предложение вот так прямо сразу с порога поупражняться во взаимном лицемерии, говорит о многом.
Требование к знанию компании это пожалуй третий по серьезности тревожный звонок. Господа, мы с вами не к алтарю идем и не в кругосветку позапрошлого века.
Мы собираемся взаимовыгодно решать имеющиеся у вас проблемы, давайте предметно обсудим их. Если у вас нет проблем, то не морочьте мне голову, нанимайте юниоров и обращайтесь через пару лет, когда проблемы неизбежно появятся.
Читать и вникать в стандартные бла-бла-бла про виденье, миссию и блестящие перспективы, которыми скучающие маркетологи забили пустое место на сайте, у меня нет никакого желания.
В отличии от них, мне за это не заплатят, а ничего по делу там очевидно нет по определению.
Не, я конечно всегда могу поискать инсайдерскую информацию и покопаться в вашем грязном белье, которое по определению найдется в любом случае, будь вы трижды замечательными.
Но оно вам действительно так надо? Вы действительно уверены, что я буду пытаться лечить фундаментальные проблемы, а не паразитировать на них? Завидую вашему оптимизму и наивности....
Поэтому давайте оставаться рациональными, действующими в рамках писанных контрактов, регламентов и технических заданий.
Кстати, если вы хотите, чтобы рядовые сотрудники действительно воспринимали близко к сердцу вопросы перспективы и стратегии, то начните им давать акции СВЕРХ рыночно конкурентной зарплаты.
Вот тогда у них появится реальный интерес в происходящием, как в прямом, так и в переносном (%) смысле этого слова.
В противном же случае получается по факту известный советский анекдот: "товарищи! в следующей пятилетке мы будем жить дольше и лучше!!!! Голос из зала: а мы???"
В общем не ебите мне мозги, я, конечно, при наличии интереса изображу все, что вы хотите видеть, но запомню.
Вы действительно с самого начала так уж хотите продемонстрировать мне свои истинные, не декларируемые ценности? Ну-ну...

Кафка и транзакции или мышки продолжают колоться и нечеловечески страдать.
2021-06-16 13:08 krocodl
На пальцах, что происходит во время работы с транзакциями:


  1. транзакции существуют только в воображении потребителя. Поставщики пишут в партицию метки "транзакцию начал / закончил".

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

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


Из этого происходят многочисленные забавные эффекты

  1. Cлужебные метки потребляют смещения. Прочитать сообщения по ним нельзя - там нет сообщений, просто технические метки. Поэтому в последовательности вычитываемых сообщений наблюдаются дырки в смещениях. А Grafana начинает по всем партициям показывать lag минимум в одно значение.

  2. допустим сервис А read_committed и читает транзакционные сообщения сервиса Б. Если сервис Б сломался и начинает откатывать свои сообщения, то сервису А действительно читать нечего. Но сообщения в партиции есть (вместе с метками, кстати), они потребляют смещения. Поэтому через некоторе время прибегают админы с воплями "Ааааааааааааа! сервис А перестал потреблять сообщения, видите на графике Grafana нарисовался gap длинной много тысяч долларов, почините его срочно". Так вот, с сервисом А все нормально, а вот у нас с вами большая головная боль, так как Grafana в принципе не способна различить плохие и хорошие gap-ы, то есть происходящие от непотребленных сообщений и сообщений, которые действительно не должны быть потреблены

  3. если сервис начал транзакцию и записал метку, то потребитель ждет, пока не появится вторая метка о закреплении / откате транзакции. Во-первых, только вторая метка предоставит ему необходимую для продолжения информацию. Во-вторых, сообщения должны быть потреблены в порядке поступления. В документации читаем: "Further, the consumer does not need to any buffering to wait for transactions to complete. Instead, the broker does not allow it to advance to offsets which include open transactions." Соответственно, если один из сервисов начал транзакцию и завис / тормозит, то как минимум одна партиция будет блокирована и потребитель будет ждать окончания транзакции, чтобы продвинуться дальше. Опять-таки имеем gap и никаких инструментов понять, что же собственно происходит. Если тормозящий сервис в процесс транзакции обычно высылает множество сообщений, то у него есть шанс заблокировать топик целиком. Для топиков, в которые одновременно пишут много сервисов это достаточно серьезная потенциальная проблема.


Мораль: Кафка не для enterprise систем, она для больших стабильных потоков нетразакционных данных, часть которых в случае чего не будет больно потерять. Например, технологические логи или информация о поведении пользователей.
В смысле Event Driven Architecture наше все это по-прежнему JMS, ну или на худой конец (если ваши продажники сначала продают модные решения, а потом уже думают) CDC решения типа Debezium.

Дайджест материалов по ElasticSearch
2021-05-25 16:42 krocodl
After the vacation, I lost interest in further research around ElasticSearch. There is still a lot of interesting stuff there, especially in terms of proper deployment and migration of large amounts of data. But the digest volume already exceeds 150 pages, so I decided to post it as it is and switch to something more interesting and relevant. After all, it is highly unlikely that I will ever be needed specifically as an expert on this tool.

What has been read and squeezed out:
* "Elasticsearch in Action" - it is a good book, but very dated. However, the ideas and concepts are well explained.
* "Learning Kibana 7, Second Edition" - it is more modern but very sketchy. But a little bit about all the elements of the stack.
* "Advanced Elasticsearch 7.0" - it is a collection of copypasted fragments from documentation without any additional explanations, but with a bunch of inarticulate screenshots. I strongly recommend that you don't even touch it.
* Official Documentation.
* All sorts of articles, mostly from Habr and Medium.

Как всегда на twirpx

Пересчет работы по контракту в постоянку для Люксембурга
2021-05-22 15:03 krocodl
Обратились тут ко мне хантеры в некоторую общеевропейскую, но не коммиссию, располагающуюся в Бельгии. Соответственно постоянный контракт с оплатой допустим 500 евро в день в расчете на 20 дней в месяц, которые еще надо как-то правильно завести в Люкс с учетом всех нюансов местного законодательства. Проблема в том, что становиться self-employed я не хочу. Прежде всего, чтобы не терять всяческие приятные социальные гарантии (например, год социалки в случае потери работы, а также компенсация разницы, если при трудоустройстве потеряю в зарплате). Кроме того, я в гробу видал всюду регистрироваться, вести хоть и минимальную, но бухгалтерию, и так далее.

Чтобы остаться как есть необходимо прибегнуть к услугам payroll компании, которая выступит между нами прокси и обеспечит за кадром правильное взаимодействие с Люксембургским государством. Началось все с того, что местные (и не только местные) компании не хотят отвечать на почту / вопросы через форму с сайта - XXI век на дворе, но мы хотим общаться голосом, блять!!! Ну то есть либо молчат, либо присылают рекламные брошюрки о собственной неебической крутости. Причем защищенные паролем, а пароль едет отдельно через SMS ( кстати, кредитные карты тут защищают гораздо хуже). Из десяти компаний вменяемый диалог без телефона получился с одной, которая после краткого общения по WhatsApp выслала детальный расчет того, что будет происходить с деньгами. Специалист очень вменяемый, котому надо - могу дать контакты.

В среднем они берут за услуги порядка 5% от этих 500 евро и дальше, после всех налогов и социальных вычетов, на руки чистыми я получаю примерно 62%, но без учета моих личных пенсионных взносов, которые стандартно составляют 8%. Впроде пока так ничего, НО есть одна засада - эти евро день мы получаем ТОЛЬКО в рабочие дни, когда можем выставить timesheet. То есть за отпуск (5 недель), государственные праздники (10 дней) и первые три дня болезни никто не платит и в сумме это практически два месяца. Они там дальше специально манипулируют собственно зарплатой и бонусами, чтобы платить все-таки каждый месяц, а в эти два месяца бонусы не платить, после чего в среднем получается то же самое. НО необходимо понимать, что раз зарплата при этом меньше, то сумма выплат по болезни, пособия по безработице и тому подобного тоже меньше - бонус при этом не учитывается. Если кому интересно, то можно дальше детально обсуждать данные симуляции.

Итого получаем грубую формулу для сопоставления почасовой стоимости контракта и работы по найму: 500*20*0.62*0.92*10/12 = 4753 на руки, то есть примерно 48% от исходной суммы.

Дальше, конечно, можно становиться self-employed, играться с защищенностью (кстати, там тоже можно опционально выплачивать социальный взнос на безработных и в случае чего получать помощь в случае потери работы. Кроме того, страховые компании предлагают защиту от потери работы), а также списывать расходы с налогов (оборудование для работы, мобильники и связь, часть дома, используемая под офис, 40% бензина и страховки машины и т.д.).
Но грубое представление, чтобы оценивать предложения хрюш я получил, думаю кому-то это информация будет полезна.

Ну и последнее. По слухам пятилетней давности, которые я не могу подтвердить документально, нанимая сотрудника в Люксе за условные 60-65К местные консалтеры впаривают его заказчику за как минимум 150 евро в час, что составляет 240К в год. Понятно что офис (кстати, а сейчас уже и не очень понятно), оборудование, гарантия замены и так далее. Но чем более редким и профессиональным становится специалист, тем больше он по идее может выжать из этой разницы.

Очередная самореклама...
2021-02-11 11:53 krocodl
Exceptions and Retry Policy in Kafka

Временно прекратил разбираться с Kubernetes
2021-01-26 12:56 krocodl
Вначале хотел также заодно и про Service Mesh написать, типа Linkerd или Istio.io, но кусок получился слишком жирный, так что придется отложить на следующий раз. То есть идеологию я уже вполне понимаю, а вот про частности придется почитать отдельно.

Материалы:

  • Marko Lukša "Kubernetes in Action"
  • Bilgin Ibryam, Roland Huß "Kubernetes Patterns: Reusable Elements for Designing Cloud-Native Applications"
  • Всяческие статьи, главным образом с Habr и Medium
В итоге обработано порядка 2000 страниц из которых за два месяца отжалось примерно 180 (на самом деле меньше, потому что в этот раз я добавил и примеры конфигураций). Разумеется, первая книга лучше всего, как это вообще характерно для Manning (соэффициент сжатия порядка 7), остальное сильно хуже.

Брать как обычно ТУТ

Кончил копаться в PostgreSQL
2020-12-11 16:44 krocodl
и всяком интересном вокруг типа Patroni или расширений, превращающих базу в платформу для вообще всего (TimescaleDB, PipelineDB). Признаться восхищен богатством выбора и мощностью сообщества. Всю свою карьеру был горячим сторонником Oracle, но что-то он меня перестал радовать. В PostgreSQL конечно тоже не без урода, но потенциал чувствует огромный, а цена весьма соблазнительная.

Брать как обычно ТУТ

Давайте поговорим про историческую травму
2020-07-01 10:38 krocodl
Отличный пост Сергея Кузнецова в ФБ, который на следующий день почему-то бесследно и безо всяких объяснений исчез.
А в ленте остальных, которые его перепостили, стал "недоступным контентом". Прямая ссылка выглядит вот так. 
Я и до этого раздумывал, не прикопать ли его, а теперь вообще без вариантов.  И что-то я начал думать нехорошее про эту площадку.
В общем дальше мопед не мой, но важный и интересный.

Давайте поговорим про историческую травму
(очень длинный текст, я предупредил. Краткое содержание, как всегда, в конце)

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

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

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

Поскольку никто не обязан отчитываться о своих травмах, то иногда хорошие люди попадают в неловкую ситуацию – я вот однажды долго рассказывал про самоубийство Дэвида Фостер Уоллеса человеку, у которого покончил с собой отец и брат (я об этом, разумеется, не знал; окружающие знали, но не очень понимали, как мне об этом сказать).

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

***
Итак, травмы и триггеры.
1. В ХХ веке мы пережили несколько больших проектов, связанных с обещанием построить лучший мир и полностью изменить жизнь человечества и само человечество. Самые известные из этих проектов — СССР и Третий Рейх. Вне сомнения, в каждом из них было что-то хорошее – в СССР признавали равные права женщин, а в Третьем Рейхе строили хорошие автобаны – но в общем и целом поколения, жившие во второй половине ХХ века, склонны были считать оба проекта катастрофически провальными. И не просто провальными в смысле, что джинсы в США были лучше, чем в СССР, а в смысле, что эти проекты принесли страдания миллионам людей.
По большому счету большая часть европейской философии и литературы второй половины ХХ века как раз пытается понять – как же так вышло? И один из ответов как раз заключается в том, что обещания светлого будущего ничего хорошего людям не несут.

Поэтому для меня и многих людей старшего возраста любое обещание светлого будущего и рассказ о том, как люди чудесно изменяться, работают как сильнейший триггер. Я перестаю слышать собеседника и видеть волнующие картинки, которые он мне показывает – вместо этого я, как в старой песне, вижу снега наст и слышу шмона гам, сквозь который доносится не голос собеседника, а лай овчарок, вой метели и звуки выстрелов. Потому что для моего поколения ГУЛаг и Холокост – еще не факт истории, а то, что случилось почти что с нами, то, что могло случиться с нашими родителями или, не дай Бог, случилось с нашими бабушкам и дедушками. Мы все слышали истории про тех, кто погиб, и про тех, кто чудом НЕ погиб. Мы, собравшись вместе, до сих пор в качестве примеров удивительного везения рассказываем что-то вроде «он умер от рака на соломе в сарае, куда его бросили нацисты. А прожил бы чуть дольше – отправился бы в концлагерь!» и «им повезло, что их отец упал с лошади и убился! Так они попали в обычный детский дом – а проживи он еще пару лет, попали бы в детский дом для детей врагов народа!»
(Вообще, кажется, главная удача, которая могла случиться с человеком в ХХ веке – это вовремя умереть).

Короче, дорогие молодые друзья, история ХХ века – это большая историческая травма для тех, кто его застал.
На всякий случай я скажу, что не надо писать, что есть разница между СССР и нацистской Германией. Конечно, есть. Много между чем есть разница. Между анальными изнасилованием и обычным. Между тем, когда тебя бьют палкой и когда бьют металлическим прутом. Между повешением, обезглавливанием и четвертованием.
Разница, конечно, есть – но мне кажется, что есть ситуации, когда обсуждение этих академически-интересных тем немного неуместно. Поэтому, давайте, вы не будете мне писать в комментариях про разницу между СССР и Третьим Рейхом, а я не буду вас держать за дурно воспитанных мудаков.

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

Когда вы говорите «да, конечно, сейчас есть некоторые побочные эффекты, но направление движения верное» — мы слышим «лес рубят – щепки летят» и картина лесоповала стоит у нас перед глазами.

Подводя итоги еще раз скажу: любое обещание светлого будущего действует на нас как триггер.
Не надо говорить нам, что вы хотите построить лучший мир, в котором люди будут совсем другими, где не будет богатых и бедных и человек человеку будет друг, товарищ и брат. Мы это уже слышали. Может, оно и хорошо, чтобы человек человеку был друг, товарищ и брат, но у меня от этого мурашки по коже, примерно как если бы вы вскидывали руку в римском салюте.
Хотя, казалось бы, чего плохого в римском салюте? Гораций, Овидий, Октивиан Август.
Но нет.

2. В СССР мы жили в стране, в которой государство и общество считало себя вправе влезать в частную жизнь граждан. Иногда развод означал конец карьеры. Супружеская измена могла стать предметом общественного разбирательства. Добрачный роман (добровольный, по любви, 18+) был связан с преодолением различных сложностей (без штампа в паспорте не селили в гостинице, в случае обнаружения мальчика и девочки в одном номере могли сообщить на работу/в институт и тд). Это, конечно, не такого размера травма, как про обещание светлого мира, но вообще-то тоже довольно значительная. Это было страшно унизительно – жалко, что мы не знали слова slutshaming, был бы повод его сказать администратору в гостинице.

И когда люди моего и тем более старшего поколения цитируют «а из зала мне кричат «давай подробности!»» или говорят про «виртуальный местком» — так это в них говорит травма. Да, лично я понимаю, почему университеты сегодня должны регламентировать отношения преподавателей и студентов, но я призываю не кривить лицо «ой, вы опять про ваш местком, когда это было!» Вы же не будете говорить афро-американцу «ой, вы опять про ваш суд Линча!» — между тем, последний суд Линча был в 1981 года, месткомы продержались несколько дольше.

Я вообще сейчас не про то, что надо делать, а про то, как надо разговаривать с оппонентами. Не очень хорошо, столкнувшись с чужой травмой, кривить нос и говорить «фу, когда это было!»

3. В СССР сексуальность был вытеснена, примерно, как в Викторианской Англии. Это не значит, что секса не было, он, разумеется, был, его и в Викторианской Англии было до фига, но это значит, что сексуальность была репрессирована и табуирована. Люди, столкнувшиеся с этим табу в пубертате, получали сильнейшую травму. Секс оказывался связан с виной и стыдом. Им – нам — приходилось прикладывать усилия, чтобы прийти к тому, что секс вообще-то связан с удовольствием и любовью. Следствием этого стало то, что любую попытку ограничить секс эти люди воспринимают как угрозу (кстати, аналогичный опыт пережило поколение шестидесятников на Западе).

Таким образом, когда эти люди говорят «между двумя взрослыми людьми может быть все, что угодно» (забывая добавить, например, «если они не находятся в состоянии административной власти и подчинения») или говорят «какой харрасмент, может, мне нравится, когда меня щиплют за попу? А не нравится, я скажу!» — в этих людях говорит травма. И эта травма – важная часть их самоидентификации как сексуально-свободных людей. Многим, кто пишет и говорит об этом, уже довольно много лет, часто больше, чем мне, и было бы странно ожидать от них, что в свои шестьдесят они начнут перестраивать свое айдентити.

Поэтому не надо говорить «это вам всюду мерещится пуританство!» — как вы знаете, это и есть газлайтинг, рассказывать собеседнику, что ему мерещится что-то не то. А если ему мерещится что-то, связанное с его травмой, то это уже совсем не красиво. Пойдите, скажите афро-американцам, что им мерещится расизм.

4. В СССР было не очень хорошо со свободой слова. Об этом вам наверняка рассказывали мама и папа, если вы учились в хорошей школе – то и в школе рассказывали.
Не очень хорошо со свободой слова – это значит, что вы живет в мире, где вы знаете, что за книжки, которые вы любите или за песни, которые вы поете, вы можете сесть в тюрьму (маловероятно), вылететь с работы или из университета (более вероятно). Скорее всего, обойдется – но вы помните, что тридцать лет назад, при Сталине, в лагерь можно было попасть за анекдот или за то, что ты не выбросил из домашней библиотеки книжку того, кто недавно оказался врагом народа. Эта историческая память усиливала повседневную травму.

Кроме того, ты все время слышал одну и ту же риторику «нам не нужна такая литература», «народу не нужны такие стихи» и так далее. Это тоже было унизительно. Ты сопротивлялся, но все равно начинал думать, что ты – не народ, ты – отщепенец, потому что тебе нравится, скажем, Бродский.

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

Это травматический опыт, честное слово. Это, в конце концов, страшно – ждать, что тебя арестуют, потому что кто-то скажет, что он слышал, что кто-то сказал, что брал у тебя почитать стихи, перепечатанные на машинке.
Даже если на самом деле никому до вас не было дела — это все равно было страшно. Мы же не знали, что до нас никому не было дело — но зато знали, что знакомый знакомых сел за Авторханова.
Господи, кому теперь нужен этот Авторханов?
Но страшно было по-настоящему.

И поэтому не удивляйтесь, что любая попытка ограничения свободы слова работает для нас как триггер. Когда я читаю «We don't need any more poems from white people uncritically and thoughtlessly summarizing the racism they witness and partake in among friends and family» (про поэму, автор которой описывая свою бабушку, в том числе описывает ее расизм – редактор журнала Poetry из-за этой публикации был вынужден уволиться) – я слышу только «нам не нужна такая поэзия!» и всё, у меня всё выключается: идите нахрен, вы сдурели там все!
У меня нет эмпатии к афро-американцам, которые читают эти стихи и страдают? Но у вас же нет эмпатии ко мне, который читает «нам такие стихи не нужны!»
(Разумеется, у меня есть эмпатия к афро-американцам по множеству других вопрсоов, но не про стихи)

А мне все время кажется, что вчера фейсбук начал бороться с hate speech, сегодня редактор журнала уходит в отставку из-за идеологически-неверных стихов, завтра мы прочтем в твиттере «я Пастернака не читал, но скажу!», а послезавтра Володя Марамзин отправиться в лагерь за предисловие к собранию стихов Бродского.
Понимаете, у нас же все время – в ушах шмона гам и овчарки лают. А иногда играет «тум-балалайка» и дымят трубы крематориев.

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

Вы же все слышали эту историю, как выжившая в Холокосте женщина говорит школьникам: «дорогие дети, запомните: если кто-то говорит, что он хочет вас убить – не раздумывайте шутит он или нет, просто бегите!» Вам же не приходит в голову комментировать эту историю в жанре «у нее паранойя», «она преувеличивает» или «ну, у нас же не нацистская Германия»? То есть, я надеюсь, если вам кто-то скажет «убью!» вы не будете паковать вещи и убегать, но и женщине этой, случись вам встретиться, вы не будете говорить, что она ведет себя как нецивилизованная дура.
Вот и нам, для которых свобода слова – важная ценность, вы не говорите «ничего с вашей свободой слова не станется!»

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

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

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

5. Многие из нас были евреями в СССР. Это значило бытовые оскорбления, насилие на улице, институциализованную дискриминацию. Плюс к этому у нас была – и осталась – историческая память про 1948 год, «дело врачей» и, разумеется, Холокост. То есть нам довольно странно слышать, когда нам говорят, что у нас есть какие-то привилегии белых людей – хотя бы потому, что мы не чувствовали себя белыми. Меня, например, завали «черномазым» и «черножопым» до тех пор, пока я не пошел в седьмом классе в школу, где таких детей как я было столько, что никому не приходило в голову обсуждать степень чьей-либо смуглости.

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

Так, в СССР не говорили публично не только слово «жид», но и слово «еврей» — нас называли «лица еврейской национальности». Антисемитизма от этого меньше не становилось – и поэтому любой призыв не говорить «гомосексуалист», а говорить «гомосексуал» вызывает в лучшем случае пожатие плечами – ну, то есть, можно и так говорить, какая разница? От этого ничего не меняется (здесь должна быть справка, что гипотеза Уорфа-Сепира так и остается гипотезой и серьезные лингвисты ее не слишком уважают, но это уведет нас в сторону). А когда за неправильное слово на кого-то обрушиваются обвинения в расизме или ксенофобии, то у нас тут же включается триггер про свободу слова и комсомольское собрание.

Сюда же попадает история про позитивную дискриминацию. В СССР были национальные квоты при поступлении в ВУЗы, почти как в США сейчас. Некоторые национальности имели официальное преимущество при поступлении (см. рассказ Фазиля Искандера «Начало»). У этой практики была своя темная сторона: когда евреев в начале восьмидесятых заваливали при поступлении на мехмат, всем возмущавшимся говорили: «посмотрите на статистику, у нас всех национальностей в процентном отношении столько же, сколько их среди жителей СССР».

То есть мы еще сорок лет назад поняли, что позитивная дискриминация для одних – это самая обычная дискриминация для других. И эти «другие» никогда не будут представителями реально привилегированных слоев населения – иск азиатских абитуриентов к Гарварду показывает, что так оно и осталось до сих пор.

***
Мне кажется, можно остановиться.
Если мы возьмем любой случай, вокруг которого у нас в фейсбуке (и в обществе) происходят межпоколенческие споры, то мы почти всегда найдем у старшего поколения травму, которую оно не осознает и о которой не хочет говорить – но именно эта травма придает спорам такую остроту.
Понятно, что этика старшего поколения не предполагает выпячивания своей травмы (Хэмингуэй, «если надо говорить, то не надо говорить» и всякое прочее), поэтому никто не скажет вам прямым текстом «мне страшно», «мне хочется плакать», «меня это пугает», а будут говорить невнятное и бессвязное. Ну, вы же образованные ребята, вы же должны знать, что травма обычно говорит бессвязно, пока не обретет язык. Нам казалось, что наша травма обрела язык где-то в районе семидесятых-восьмидесятых, но этот язык сегодня утерян и непонятен молодому поколению, поэтому межпоколенческий диалог и выглядит так неконструктивно.

Этот утерянный язык базировался на некоторых ценностях (например, свободе слова), на некоторых эстетических приоритетах (скажем, важности иронии) и на некоторых теоретических утверждениях, среди которых самым важным мне кажется тезис, что всякая утопия содержит в себе темную сторону – и это не баг, это фича. Все эти вещи – ценности, эстетика и убеждения – остались в прошлом веке. Принято считать, что современное американское гуманитарное знание выросло на Деррида и Фуко, но я почему-то уверен, что, если бы Фуко внезапно ожил, он бы охренел, наблюдая, что выделывают люди, которые называют себя его последователями.
(теоретически это интересный кейс: принято считать, что в России травма ХХ века вообще недостаточно проговорена, об этом многие писали. Так вот, у меня есть подозрение, что многие люди проговаривают свою травму довольно диким образом — обсуждая то, что происходит в Америке или Европе. Это не только повторение советской матрицы «а у вас негров вешают!», но и повторение советского фрондерства, когда то, что нельзя сказать про свою страну, говориться про чужую — «пишем ЦРУ, подразумеваем КГБ». Мне кажется, этот механизм еще ждет своего исследователя)

Так вот, мы не любим признаваться, что у нас травма — и даже мне потребовалось отдельное усилие, чтобы сформулировать то, что я написал выше в этих терминах, а не в более привычных «мы-то, обогащенные опытом ХХ века, хорошо знаем, что…».
Фиг его знает, правда ли то, что мы там знаем. Но травма у нас есть, это точно.

Напоследок — немного о местоимениях. Когда я говорю «вы» я не обязательно имею в виду людей моложе меня — и не имею в виду, что все, моложе меня, попадают под это «вы». Это условный оппонент, разумеется, частично вымышленный. Реальные люди не обязательно совпадают с ним по всем перечисленным пунктам: кто-то выступает за позитивную дискриминацию, кто-то против hate speech, кто-то еще по какому-то вопросу.
Аналогично, когда я говорю «мы» или «старшее поколении» я понимаю всю условность – есть много людей моего возраста и старше, которым нормально со взглядами их детей. Честно говоря, лично мне тоже нормально, причем не только с моими детьми, но и с большинством молодых людей, с которыми я общаюсь – в частности, потому что по любому конкретному вопросу почти всегда выясняется, что мы думаем примерно одно и то же, а наши расхождения носят даже не теоретический, а риторический характер. Если честно, мне довольно редко прилетало даже в теоретических спорах — люди, которые со мной знакомы, редко считают меня ксенофобом или лишенным эмпатии социал-дарвинистом.

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

Но мне важно было не столько объясниться «по пунктам», сколько чуть-чуть сдвинуть рамку спора и помочь тем, кто, защищая условную «новую этику» или «новую чувствительность», видит в своих оппонентах врагов всего хорошего и светлого, ксенофобов и ретроградов. Этим людям мне хочется объяснить, что происходит в голове у тех, с кем они спорят. Мне хотелось призвать их не видеть в оппонентах врагов, а включить свою т.н. «эмпатию» (я ставлю кавычки, потому что я застал время, когда у этого слова было профессиональное значение – как-нибудь я об этом отдельно напишу). Перестать, опять же, шеймить своих собеседников, обзывая их расистами и ксенофобами.
Вообще-то все знают, что многие афро-американские мужчины ведут себя довольно патриархально и уровень домашнего насилия в гетто выше, чем в благополучном белом районе Нью-Йорка, но мы же понимаем, что это последствия рабства и дискриминации, поэтому ищем способы решить проблему, а не начинаем презирать афро-американских мужчин. Ну, вот с русскими людьми старшего поколения похожая история – исторические и личные травмы их немного деформировали, давайте это учитывать, беседуя с ними.

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

Ну, и, наконец, я не могу не воспользоваться случаем и не рассказать о своем личном триггере.
В фейсбуке есть такой типаж автора, обычно уехавшего на запад несколько лет назад и работающего на полставки в университете. Этот человек прикоснулся к либеральной западной культуре и его переполняет новый взгляд на мир, который ему вдруг открылся. Он смотрит на своих бывших соотечественников и пишет «как ужасно, что эти умные люди ведут себя как нецивилизованные дикари!» — и дальше приводит какой-нибудь в самом деле прискорбный пример про «распоясавшихся н**геров» или «а почему нельзя е**** студенток?».
Проблема заключается в том, что человек, уехавший из России, и написавший про своих бывших соотечественников «нецивилизованные дикари», слишком мало читал книжек, которые читали те, с кем он живет на одном кампусе — иначе он бы знал, что он демонстрирует многократно описанный типаж жителя колоний, который переехал в метрополию и отказался от своего народа, его культуры и его ценностей. Это довольно отвратительное зрелище, у POC есть для этого специальные обидные слова (Кстати, отдельно доставляет выражение «нецивилизованные дикари» — оно, разумеется, чудовищно колониалистское. Хуже только выражение «готтентотская мораль» — с учетом того, что готтентоты были первыми жертвами геноцида в ХХ веке, хорошим аналогом будет «жидовская скупость». Как люди, разговаривая таким языком, умудряются при этом считать себя светлыми борцами за все хорошее против всего плохого и возмущаться русским словом «негр» –для меня большая загадка).
Короче, я много что могу простить собеседнику, но вот позиция белого сахиба по отношению к травмам собственного народа вызывает у меня (извините) ярость. Хочется бить оппонента по голове сначала тремя томами Архипелага ГУЛаг, а потом – томом Эдварда В. Саида и прочих теоретиков постколониальных исследований (примерно это же хочется делать с людьми, которые, сидя в Москве, переживают про black lives, игнорируя даргинские, таджикские, чеченские и прочие постколониальные жизни с окраин бывшей Российской Империи).

***
Я вижу, что мой пост немного затянулся :)

Для тех, кто пропустил середину, я быстро подведу итоги
— У русских людей, проживших большую часть жизни в ХХ веке, осталось в наследство от этого века много травм. Эти травмы до сих пор определяют их взгляд на жизнь и их ценности. Эти травмы заставляют испытывать сильный страх, маскируемый яростью, презрением, цинизмом и прочим. Столкнувшись с сильной эмоцией у таких людей, надо понимать, что скорее всего за этой эмоцией стоит травма – выше я описал несколько самых заметных, но, очевидно, их еще больше.
— Происходящая на наших глазах смена риторики часто делает затруднительной беседу между разными поколениями. Давайте учитывать это с обеих сторон. Как правило, люди с которыми мы общаемся, выступают против расизма и ксенофобии. Формы выражения их «против» могут различаться, методы борьбы различаются еще больше, но, вообще-то, никто не знает, какие формы выражения и методы борьбы лучше – в конце концов, предыдущие два поколения очень сильно изменили мир именно в смысле ксенофобии, так что, возможно, методы, в которые верили в ХХ веке не такие уж неэффективные. Вообще мне кажется, что лучше находить точки, в которых мы союзники, чем точки, в которых мы противники. Расизм — это плохо? Да, плохо. Надо помогать бедным? Надо. Ура, договорились. А дальше уже можно обсуждать детали.
— Говоря с жителями России, мне кажется важным помнить, что Россия как минимум лет сто не страна первого мира и поэтому заметная часть риторики, созданной для внутреннего употребления в США мало применима к России. У России и ее жителей огромные и довольно уникальные исторические травмы (общие для всех европейцев в ХХ веке, общие для всех жителей СССР плюс к этому различные для разных народов, включая русских), это надо учитывать.

Как всегда, я хочу призвать в комментариях к сдержанности.
Я много раз писал, что я не верю в том, что травму можно обесценить – я и сейчас так считаю. Но это не отменяет норм вежливости.
На чужих похоронах не поют веселых песен и не говорят «хорошо, что сдох, сука!» — но не потому, что это обсеценит скорбь близких, а потому что это невежливо и неуместно.
Учитывая проблемы с риторикой, о которых я писал, я понимаю, что не следует рассчитывать, что мы одинаково понимаем вежливость и уместность. Поэтому я решил просто перечислить, чего я не хочу видеть в комментариях – не потому, что это обесценит чью-то травму, а потому, что я не люблю читать неуместные и невежливые комментарии. Они меня раздражают и вызывают желание агрессивно спорить — а от таких споров, как известно, нет никакого толка.

Итак, я не хочу читать рассуждений о том, что чьи-то травмы недостаточно серьезные, что у кого-то травмы больше, что чьи-то травмы я забыл, что я написал слишком много про евреев и слишком мало про русских, что я написал слишком много про русских и слишком мало про таджиков, что СССР был прекрасной страной и там была бесплатная медицина и образование, что коммунизм это будущее человечества, что Холокоста не было.
Если очень хочется, можно вместо всего этого написать, что мы все вымрем, а вы унаследуете землю и тогда-то, наконец, построите светлое будущее, которое мы вам мешаем строить.
С этим трудно поспорить – мы в самом деле умрем. А если вы в самом деле собираетесь строить ваше светлое будущее, то я надеюсь умереть до этого.
Вы же помните: ХХ век научил меня, что умереть вовремя – главная удача в эпоху, когда идет такая стройка.
Если я прав, то мои правнуки будут рассказывать, как мне повезло!
А если правы вы, то будут жалеть, что дедушка не дожил.

Залил несколько статей на medium.com
2020-06-12 13:51 krocodl
В общем редактор там таки довольно уебищный, честно сказать... Но увы, популярное место...

 Основные инструменты: deepl.com и grammarly.com, весьма рекомендую...

Очередной ИТ дайджест - Kafka и вокруг нее
2020-05-04 15:53 krocodl

Дайджест выполнен для личного употребления в 2020-ом году на основании следующей литературы:

  • Neha Narkhede, Gwen Shapira, Todd Palino "Kafka: The Definitive Guide"

  • Jakub Korab "Understanding Message Brokers"

  • Dylan Scott "Kafka in Action"

  • Yeva Byzek "Best Practices forDeveloping ApacheKafka® Applicationson Confluent Cloud"

  • Всяческие статьи, главным образом с Habr и Medium

Отражает исключительно субъективный взгляд автора. Бесплатен для любого некоммерческого использования. Все вопросы, замечания и предложения на krocodl@gmail.com


    1. Введение
        1.1. Основные понятия
        1.2. Основные виды API
        1.3. Основные этапы эволющии
        1.4. Общие решения
    2. Установка
        2.1. Apache ZooKeeper
        2.2. Установка Kafka
        2.3. Выбор железа
        2.4. Настройка кластера для реальной эксплуатации
    3. Producers
        3.1. Создание KafkaProducer
        3.2. Сериализация
        3.3. TimeStamp
        3.4. Обработка ошибок
        3.5. Упорядоченность сообщений
        3.6. Ручное управление разделами
        3.7. Интерцепторы
        3.8. Работа с транзакциями
    4. Consumers
        4.1. Перебалансировка разделов
        4.2. Потребление записей
        4.3. Тюнинг потребителей
        4.4. Адресация сообщений
        4.5. Подтверждение потребляемых записей
        4.6. Участие в перебалансировке
        4.7. Ручное управление смещениями
        4.8. Автономный (без группы) потребитель
        4.9. Масшибируемость чтения
        4.10. Ошибки обработки сообщений
        4.11. Интерцепторы
        4.12. Транзакции
    5. Внутреннее устройство
        5.1. Основные действующие лица
        5.2. Обработка запросов
        5.3. Физическое хранение
    6. Надежность доставки данных
        6.1. Настройка брокера
        6.2. Настройка производителей
        6.3. Настройка потребителей
        6.4. Однократная доставка данных (EOS, exactly-once semantics)
    7. Оптимизация
        7.1. Пропускная способность (Throughput)
        7.2. Время отклика (Latency)
        7.3. Надежность хранения (Durability)
        7.4. Доступность(Availability)
    8. Интеграция
        8.1. Основные функциональные требования
        8.2. Использование
        8.3. Архитектура
        8.4. Альтернативы
    9. Зеркалирование кластеров
        9.1. Мульти кластерные архитектуры
        9.2. Mirror Maker
    10. Тестирование
        10.1. Проверка конфигурации
        10.2. Тестирование производительности
    11. Администрирование
        11.1. Операции с темами
        11.2. Группы потребителей
        11.3. Управление смещениями
        11.4. Динамическое управление конфигурацией
        11.5. Управление разделами
        11.6. Анализ журналов
        11.7. Потребление / генерация из командной строки
        11.8. Управление доступом клиентов
        11.9. Ручные операции через ZooKeeper
        11.10. Обслуживание собственно кластера
        11.11. Программное администрирование
    12. Безопасность
        12.1. Защита взаимодействия
        12.2. Права доступа
        12.3. Квоты
        12.4. Шифрование данных
    13. Мониторинг
        13.1. Показатели брокеров
        13.2. Собственные логи (которые через log4j)
        13.3. Показатели производителей
        13.4. Показатели потребителей
        13.5. Квоты
        13.6. Мониторинг отставания
        13.7. Сквозной мониторинг
        13.8. Комплексные системы мониторинга
    14. Обработка потоков данных
        14.1. Таблично-потоковый дуализм
        14.2. Некоторые сценарии
        14.3. Основные понятия
        14.4. Шаблоны проектирования
        14.5. Типовые сценарии
        14.6. Введение в Kafka Stream DSL
        14.7. Введение в KSQL
    15. Kafka vs JMS (на примере ActiveMQ)
        15.1. Хранение сообщений
        15.2. Общая архитектура
        15.3. Отправка сообщений
        15.4. Потребление сообщений
        15.5. Масштабирование и отказоустойчивость
        15.6. Итого
    16. Приложения
        16.1. Приложение I: MQ и ActiveMQ


Скачивать где обычно - twirpx

Kafka vs JMS (на примере ActiveMQ)
2020-04-27 22:09 krocodl
Пока временно выложу сюда, чтобы обсудить на русском.

Вообще Kafka это такой NoSQL в мире MQ, поэтому возможностей выстрелить себе в ногу предоставляется более чем достаточно. Но зато при правильном применении и глубоком понимании как оно устроено можно добиться замечательных результатов с оптимальной затратой ресурсов. Расплачиваться же за это приходится сложность клиента, однако Connectors и Kafka Streams позволяют в ряде случаев значительно упростить реализацию (разумеется, за счет очередного слоя абстракции, периодически делающим поведение еще более загадочным).





Хранение сообщений

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

В том же время MQ не рассчитано на длительное хранение данных: "потребили - удалили", постоянно переполненные и тем более растущие очереди есть симптом проблем. Durability и тем более Persistence значительно замедляют обработку и как правило ими приходится жертвовать при достижении производительности.

Логическая структура

MQ
  • подразумевает семантическое различие между очередью и топиком, а также опциональные durability и persistence для каждого из типов.

  • все сообщения идут одним потоком и равномерно (round-robin) распределяются между произвольным количеством читателей, каждый из которых потенциально может получить любое сообщение. Есть опциональная возможность организовать воспроизводимое распределение сообщений между потребителями на основании JMSXGroupID заголовка

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

Kafka
  • в терминах JMS, темы это только топики с обязательным durability и persistence

    • можно играться в объемом хранения и замещением одних данных другими по ключу, но данные всегда будут некоторое время надежно доступны

    • возможности организовать классическую очередь нет принципиально

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

  • Сообщения Kafka удаляются не тогда, когда они были доставлены, а в соответствии с политикой хранения (настраиваются максимальное время / объем хранения), даже если они вообще не были доставлены вообще).

    • Подписчик может прочитать хранящиеся сообщения заново, с самого начала или используя смещение / момент времени

    • у подписчика принципиально нет возможности "удалить" сообщение, чтобы оно перестало быть доступным остальным участникам

Уникальная возможность Kafka - "сжатые" темы (log compacted), хранящие последнее значения для каждого ключа.

Физическое хранение

ActiveMQ
  • в принципе можено сообщения вообще на хранить и работать полностью с оперативной памятью

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

  • брокер обеспечивает опциональное надежное сохранение данных за счет принудительного сброса всех кэшей для каждого сообщения (группы сообщений), что значительно замедляет работу

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

  • В каждый момент времени с хранилищем работает только один брокер

  • различные подключаемые способы постоянного хранения данных (несколько на диск, можно через JDBC)

  • сохранение производится более или менее автоматически, не требует администирирования и мониторинга

Kafka
  • сообщения Kafka сохраняются всегда, другой опции просто нет

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

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

    • Это значительно повышает пропускную способность (иногда в тысячи раз), так как

      • фактически сообщения фиксируются со скоростью обновления памяти, но брокер при этом потребляет больше кэша файловой системы.

      • heap используется минимально и броекеры не страдают типичной проблемой JVM приложений в виде STW паузы во время сборки мусора.

    • Можно также настроить и принудительный сброс для каждого пакета сообщений, применяется довольно редко

  • трафик сообщений более или менее равномерно распределен по всему кластеру за счет партиционирования каждой темы на множество разделов, распределеяемых по кластеру

  • единственный способ хранения данных в сегментированном журнале. Данные всегда дописываются большими пакетами к активному сегменту и поднимаются страницами в кэш файловой системы. Отсутствие произвольного доступа к содержимому журналов обеспечивает значительное увеличение производительности файлового I/O.

  • требует настройки и мониторинга с целью поддержания равномерного распределения данных и нагрузки по узлам кластера

Общая архитектура

Фундаментальное отличие - умный брокер vs умный клиент

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

  • обычно поддерживает много протоколов и более сложные шаблоны маршрутизации / интеграции приложений.Например: временные очереди, легко завернуть в MQ синхронный запрос-ответ, повторная обработка сообщений + dead-letter queue для так и не обработанных

  • сообщение кроме собственно payload может нести в виде заголовков большое количество стандартных для JMS (или стандартных для конкретной реализации) системных метаданных, сообщающих брокеру как его обрабатывать.

    • Например, время устаревания / куда слать ответ / нужно ли надежно сохранять. Имеется возможность подписки с условием на системные метаданные / пользовательские метаданные.

    • за счет этого и иерархической системы наименований топиков / очередей возможна реализация множества Enterprise Integration Patterns

  • используется для интеграции между приложениями/услугами в SOA архитектуре

Kafka, с другой стороны,
  • ориентирована на "умных" клиентов, которые совместно берут на себя многие функции традиционного брокера (определение раздела для поставляемого сообщения, распределение разделов между потребителями при получении, обработка отказов, отслеживание потребленных сообщений, фильтрация сообщений по условиям и так далее)

  • взамен имеем простой, быстрый и масштабируемый брокер, слабо замедляющийся с ростом числа подключенных клиентов

  • чаще встречается в микросервисной архитектуре и в качестве платформы обработки потоков данных.

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

Протоколы взаимодействия

ActiveMQ
  • кроме нативного OpenWire поддерживает также AMQP, STOMP, MQTT, XMPP

  • Как поверх TCP, так и на основе WebSocket, что позволяет интегрироваться с веб UI

  • размер сообщений потенциально не ограничен

  • push подход - брокер выталкивает сообщения клиентам

Kafka
  • принципиально не поддерживает ничего, кроме собственного бинарного протокола из соображений сохранения полного котроля над реализаций

    • так как это "always-on" система, то критически важно сохранять совместимость протоколов по мере эволюции ПО и проведения постепенного обновления узлов кластера.

    • Также это позволяет сохранять получаемые сообщения в журнале как они есть без трасформации (zero-copy) и экономить таким образом ресурсы. При этом в силу долгосрочности хранения, самая новая версия ПО может получить за счет реплики сообщение в самом древнем формате.

  • дефолтный размер сообщений 1МБ и крайне не рекомендуется его увеличивать. Помогает шаблон интеграции "Baggage Claim"

  • pull подход (реактивный) - клиенты вытягивают сообщения с брокера, backpressure не нужен в принципе

Отправка сообщений

ActiveMQ
  • как правило (есть варианты, но не представлены в API) синхронный блокирующий вызов от поставщика до сохранения данных на диск брокера

  • изменения сразу доступны потребителям

Kafka - процесс очень гибкий
  • получение сообщения брокером вовсе не означает, что они уже были физически где-то сохранены

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

  • отправка принципиально асинхронная, что позволяет при необходимости автоматически исправлять retryable проблемы (недоступность брокера, отсутствие лидера для раздела и так далее). Но при этом приходится жертвовать фиксированным порядком передачи сообщений.

  • широкий диапазон вариантов "пропускная способности" vs "надежность сохранения данных" - от "послал и забыл" до ожидания пока все брокеры кластера подтвержят получение сообщения

Потребление сообщений

MQ
  • централизованным распределением сообщений между подключающимися потребителями занимается брокер, что его сильно грузит

  • брокер управляет потоком сообщений и в принципе может перегрузить потребителя

  • посредством фильтров клиент может ограничить получаемые сообщения каким-то фильтром. За счет этого, например, можно организовать выполнение синхронный запросов-ответов множества компонентов через пару очередей

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

    • фиксировать можно как средствами Kafka (в ZooKeeper для старых клиентов, в специальной служебной теме для новых), так и за счет собственного хранилища (например, вместе с результатом обработки сообщения в БД, что обеспечивает некоторую транзакционность)

    • Могут получать как последние сообщения, так и уже раз прочитанные повторно за счет применения предварительно сохраненнго смещения последнего полученного сообщения или произвольного момента времени

  • потребители фиксируют НЕ отдельные полученные сообщения, как в случае JMS, а собственное смещение в потоке данных последного полученного сообщения.

    • Таким образом, фиксация сообщения Х автоматически означает, что сообщения Х-1, Х-2 и так далее тоже благополучно получены

    • если пакет полученных сообщений в целях ускорения отдается пулу обработчиков, то могут быть проблемы

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

  • потребители получают все сообщения из назначенным из разделов. У них нет возможности что-то не получить, что делает, к примеру, упомянутый шаблон "синхронный запрос-ответ" не реализуемым

Транзакционность

Kafka
  • не участвует в транзакциях с другими системами.

  • Несколько последовательных вызовов в Kafka также не могут быть объединены в отдельную транзакцию:

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

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

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

  • встроенного аналога "dead letter queue" нет

JMS
  • позволяет организовать как транзакцию между несколькими вызовами брокера, так и использовать в качестве ресурса в локальной транзакции.

  • исключение при обработке отдельного сообщения автоматически приводит к его повторному получению. Можно ограничить число таких попыток и организовать "dead letter queue" для недоставленных сообщений

Распределение сообщений

Kafka
  • обязательное распределение сообщений между потенциальными потребителями производится в момент сохранения сообщения в теме

  • В рамках каждого раздела (партиции) сообщения храняется упорядоченно и в том же порядке поступают потребителю

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

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

ActiveMQ
  • разбрасывает сообщения как round-robin между всеми зарегистрированными потребителями непосредственно в момент потребления

  • партиционирование это достаточно редкая возможность, при необходимости может быть реализована за счет добавления к сообщениям специальныых метаданных и не является частью JMS стандарта.

  • НЕ гарантирует упорядоченность доставляемых сообщений, но в большинстве случае строгая упорядоченность сообщений вообще не столь важна:

    • Некоторые события (например, поток системных метрик или записи логов) вообще не чувствителен к порядку получения отдельных сообщений, так как каждое событие снабжено временем и обработка каждого события независима

    • В других случаях, временное "расстояние" между сообщениями, которые не должны быть перепутаны, настолько велико, что вероятность их перепутать пренебрежима мала

  • не прерывает работу когда потребители добавляются / отваливаются, делает JMS очень удобным при эластичной балансировке запросов между конкурирующими потребителями

Масштабирование и отказоустойчивость

Kafka
  • изначально рассчитана на кластер с избыточным реплицированием данных и распределение пользовательских запросов между узлами. Это позволяет практически неограниченно наращивать вместимость и неограниченно с оговорками (только одна реплика каждого раздела активна, соответственно для распределения нагрузки надо увеличивать число разделов) нагрузку.

  • степень параллелизма доступа к данным темы определяется числом разделов (максимум один читатель на раздел) и должно желательно определяться заранее при проектировании (увеличение числа разделов сдвинет текущие смещения)

  • все это достигается горизонтальным образом на обычном железе, которое перестраивается / добавляется в кластер по мере необходимости без остановки системы (always-on система)

  • проблемы одной темы до какого-то момента изолирована и приводит к проблемам части брокеров. За счет этого разница между наличием и отсутствием проблем для кластера Kafka более размытой.

ActiveMQ
  • поволяет только Master-Slaves конфигурацию на основе общего хранилища. Таким образом масштабируемость ограничена и при росте нагрузки приходится развертывать отдельные сервера с отдельными храниищами и вручную заниматься распределением приложений между ними

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

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

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

Итого

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

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


Очередной ИТ дайджест - Ansible и вокруг него
2020-03-31 16:13 krocodl
Выполнен на основании следующей литературы:


  • Rene Moser, Lorin Hochstein "Ansible: Up and Running"

  • Jesse Keating, James Freeman "Mastering Ansible"

  • Всяческие статьи, главным образом с Habr и Medium




  • Введение:

    • Основные понятия и объекты

    • Структура

    • Общее конфигурирование

  • Реестр хостов:

    • Устройство

    • Соединение

    • Вынесение переменных из реестра

    • Реестр в виде INI

    • Динамический реестр

  • Сценарий (playbook)

  • Операция

  • Переменные:

    • Типы переменных

    • Формат определения переменных

    • Использование

    • Регистрация переменных в результате выполнения задачи

    • Загрузка значений переменных из других источников (подстановки)

    • Факты

    • Магические переменные

    • Защищенное хранение

  • Задача:

    • Поиск модулей

    • Передача параметров

  • Выполнение:

    • Стратегии выполнения

    • Статус выполнения

    • Логика выполнения

    • Место выполнения

    • Постобработчики

    • Плагины обратного вызова

    • Ускорение выполнения задач

  • Повторное использование кода:

    • Повторное использование наборов задач

    • Повторное использование обработчиков (handlers)

    • Вложения переменных

    • Вложение плейбука целиком

  • Роль:

    • Определение

    • Применение

    • Централизованное хранение ролей

  • Разработка на Ansible:

    • Общие моменты

    • Логирование

    • Отладка Ansible кода

    • Отладка Python кода

    • Тэги

    • Контроль кода

    • Тестирование ролей

    • Тестирование конфигурации

  • Обслуживание систем:

    • Обновление существующих серверов

    • Расширение и сужение набора серверов

    • Комбинирование индивидуальных ролей

    • Управление множественными средами

  • Работа с Docker:

    • Сборка контейнеров

    • Запуск контейнеров

    • Проект "Ansible Container"

    • Подключение

  • Модули

  • Приложения:

    • Немного о Vagrant

    • Немного о YAML

    • Немного о SSH

    • Шаблоны

    • Сравнение с Puppet

    • Корпоративное использование на основе AW



Скачивать где обычно - twirpx

О, ЖЖ научился легко фотки грузить...
2019-08-22 20:26 krocodl

И не стыдно тебе в одно горло жрать, когда у тебя котики некормленые???

Куррентнудное
2019-08-22 14:33 krocodl

А ещё нас вчера занесло в русский ресторан в Арлоне. Нет, мы не ебнулись, просто мой приятель по рукопашке, глубоко нейтив люксембуржец, захотел экзотики в виде русской кухни с пояснениями в нашем лице. Вопреки ожиданиям это было неплохо. Борщ был так прямо даже очень хорош. Правда подавался крайне скромными порциями в тарелках для ну очень высокой кухни величиной с дамскую шляпку, что вызывало некоторый когнитивный диссонанс. Собственно сколь-либо русской кухни в меню было крайне мало. Даже кваса, селёдки по шубой и салата оливье не было. Зато были очень приличные манты. Из остального запомнились пельмени, поджарка и бефстроганов, которые впрочем никто не попробовал. Персонал по русски не говорит, других русскоязычных посетителей за все время идентифицировано не было, хотя заведение явно пользуется успехом. Недостаток русского колорита восполняют слегка разваливающиеся под клиентами стулья, а также музыка. Периодически вжаривает собственно "калинка" с такой мощью, что хочется сразу сдастся на милость загадочным восточным варварам, отползти в угол, накрыться плинтусом и не отсвечивать. Ну или прямо сразу жахнуть водки и немедленно приступить к пункту меню "драка кабацкая", минуя промежуточные пункты в виде танцев на столе и вынужденный проблев в сортире. Из других хитов запомнились "музыка нас связаааааала....", а также почему-то Сердючка, которую жена приятеля сразу  идентифицировала как что-то еврейское. Ну и так по мелочи: матрёшки от Ленина до Путина, фуражки с ушанками, предлагаемые для примерки и фото гостям и так далее. Ни одного медведя и даже захудалой балалайки замечено не было. Зато через улицу напротив имеется какая-то арт выставка, вход в которую декорирован обилием берёзовых палок, что дало мне повод пояснить гостям, что это такое специальное российское дерево для понастальгировать.
В целом, несмотря на изначально предвзятое отношение, место хорошее.
Ночью мне упорно снился сериал по толкиену, где я в роли хоббита все время перся куда-то через мрачные сырые горы в компании гномов. Причем этот сериал упорно не прерывался даже после похода в туалет и ночного чая с конфетами. В итоге меня заперли в каком-то скальном замке и заставили писать ПО, обещая впрочем вскоре отпустить на волю. Отдельно запомнилась сетка, которая шла по каменной стене, причем каждая нить из восьми отдельно, серебряной проволкой, на почему-то классических советских фарфоровых изоляторах, знакомым по дачам.
Подсознание явно что-то имело мне сообщить, но я его не понял...

Очередной ИТ дайджест - Разработка микросервисов
2019-08-07 17:45 krocodl
Обещанное продолжение.


Содержание:

REST слой

  • Обработка ошибок
  • Гипермедиа (HATEOAS)
  • Управление версиями
  • XML vs JSON
  • Бинарные форматы
  • Клиентская часть

Альтернативы REST
  • REST vs RPC
  • GraphQL
  • WebSocket
  • Обмен сообщениями

Валидация данных

Работа с хранилищами данных
  • Из REST в ORM и обратно
  • Реляционная БД
  • MongoDB
  • Neo4
  • REDIS

Кэширование
  • Простейшая постановка задачи
  • Общий функционал
  • Spring
  • Infinispan

Реактивная архитектура
  • Основные достоинства
  • Основные недостатки
  • Взаимодействие с окружением
  • Серверные архитектуры

  • Сервера
  • HTTP клиенты
  • Реляционные БД
  • NoSQL
  • Camel

Тестирование
  • Юнит тесты
  • Комплексные тесты
  • Системные тесты

Документирование
  • Swagger
  • Spring RESTDocs

Приложение 1 – REST
  • Основные принципы
  • Коды возврата
  • HTTP методы - стандартные операции над ресурсами
  • Spring support for REST
  • Best Practices & Use Cases

Приложение 2 – работа с БД
  • QueryDSL
  • Обновление БД

Приложение 3 - Bean Mapping
  • Orika Bean Mapper
  • MapStruct Mapper

Приложение 4 - Bean Validation
  • Простейший сценарий
  • Проверка бинов
  • Проверка методов
  • Построение сообщений об ошибке
  • Группировка ограничений
  • Разработка ограничений
  • Bootstrapping & конфигурирование
  • Интеграция с другими фреймворками
  • Расширения по сравнению со стандартом



Скачивать где обычно - twirpx

Очередной ИТ дайджест - Инфраструктура микросервисов
2019-08-06 11:36 krocodl
Решил наконец систематизировать для себя опыт, полученный относительно subj за последние годы. Это первая часть, рассказывающая про все то, что необходимо использовать кроме собственно говоря той бизнес логики, которую необходимо реализовать. Будет еще и отдельная вторая, через пару дней, посвященная непосредственно бизнес разработке.

При работе использовались следующие источники:

  • John Carnell "Spring Microservices in Action"
  • Josh Long, Kenny Bastani "Cloud Native Java"
  • Raj Malhotra "Rapid Java Persistence and Microservices"
  • Множество различных статей вокруг данного вопроса.



Содержание:

Введение
  • Современные тенденции
  • Монолит
  • Микросервисы
  • Обзор понятий и шаблонов
  • Spring Boot & Spring Cloud как инфраструктура

12 DevOps best practices при разработке и развертывании микросервисов
  • Ключевые идеи
  • Манифест Adam Wiggins
  • Особенности микросервисов применительно к манифесту

Декомпозиция
  • Гранулярность
  • Работа с хранилищем данных

Конфигурирование
  • Этапы работы с конфигурацией в Spring
  • Типовой подход
  • Принципы управления конфигурацией:
  • Основные сервисы хранения конфигурационной информации
  • Consul
  • Spring Cloud Configuration Server

Service Discovery
  • Spring Cloud + Netflix Eureka service discovery agent
  • Consul
  • Best practices
  • Client resiliency
  • Spring Retry
  • “Fail Fast” на основе Hystri

Service routing на основе Zuul
  • Основной функционал
  • Архитектура
  • Серверная конфигурация
  • Роутинг входных запросов
  • Фильтры
  • Неизбежные проблемы
  • Zuul-2

Безопасность
  • Введение (более подробно в приложении)
  • Архитектура Spring Security
  • Oauth2 + SAML
  • OAuth2 + JWT
  • Общие рекомендации

Интеграция и обмен сообщениями
  • Spring integration
  • Spring Cloud Stream
  • EDA на основе HTTP
  • Spring Cloud Data Flow

Выполнение заданий (пакетная обработка данных)
  • Основные элементы архитектуры
  • Локальное выполнение
  • Распределенное выполнение
  • Управление задачами

Обеспечение целостности данных
  • Проблемы:
  • X / Open XA транзакции
  • SAGA шаблон
  • CQRS шаблон
  • TCC ( Try-Confirm / Cancel )
  • REST + ACID на коленке

Промышленная эксплуатация
  • Диагностика – отслеживаемость состояния системы
  • Логирование
  • Администрирование

Развертывание
  • Развертывание в Amazon Cloud
  • Cloud Foundry
  • Типовые проблемы с пермещением приложений в облако

Приложение 1 – тюнинг серверов
Приложение 2 – Oauth 2.0 и вокруг
  • Основные варианты взаимодействия участников (Types of grants)
  • Недостатки
  • Веб токены

Приложение 3 – Advanced Messagin Patterns


Скачивать где обычно - twirpx

Охренеть, тут кто-то ещё есть...
2019-06-23 23:04 krocodl

.