Книжный куб
11.1K subscribers
2.66K photos
6 videos
3 files
1.96K links
Рекомендации интересных книг, статей и выступлений от Александра Поломодова (@apolomodov), технического директора и эксперта в архитектуре
Download Telegram
Темные данные (Dark Data. Why What We Don’t Know Is Even More Important Than What We Do) (Рубрика #Management) (Part I)

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

В последней части книги автор дает советы о том, как извлекать из темных данных пользу через
- Рандомизированные контролируемые исследования (привет a/b тесты)
- Симуляции (на эту тему я как-то читал книгу "Вероятностное программирование на практике")
- Репликацию данных (тут автор рассказывает про бутстреппинг)
- Баейсовский подход с априорным распределение (тут можно вспомнить про многорукие бандиты)
- Конфиденцильность данных и сбор их без раскрытия чувствительной информации

Ну и в самом конце автор вспоминает анекдот про поиск под фонарем, где светлее
Пьяный мужик что-то ищет под фонарем. К нему подходит милиционер:
— Вы что вы тут делаете?
— Ключи от квартиры ищу
— А где потерял?
— Да вон там, в парке.
— А зачем здесь ищешь?
— А здесь светлее.

И желает читателям найти свои способы расширить маленькое пятно света и осветить окрестности своих данных:)

P.S.
В следующем посте я расскажу подробнее про виды темных данных

#Management #Data #Math #Statistics
👍146🔥5
ЦЕХ 4 - Урок #9 "Рассказываем истории: сторителлинг в книге. Эксперт — Лариса Парфентьева" (Рубрика #Writing)

Продолжаю обучение написанию книг, догоняя программу, что ушла на месяц вперед:) Этот урок был посвящен сторителлингу, который я активно изучал самостоятельно, но интересно было послушать урок Ларисы, которая делилась своим опытом. Предыдущие посты доступны здесь: 1, 2, 3, 4, 5, 6, 7 и 8.
Если возвращаться к самому уроку, то вот основные мысли, что я вынес из него:
- Важно понимать цель и мотивацию написания книги - тут может быть и развитие личного бренда и терапия:)
- Какая цель бы не стояла перед автором, сторителлинг отличный инструмент для привлечения внимания и удержания аудитории
- Дальше автор вспоминает книгу "Сделано, чтобы прилипать" ("Made to Stick") и рассказывает про фреймворк SUCCESs из него. Суть в том, что идеи прилипают если они соотетствуют шести категориям: простота (simplicity, неожиданность (unexpected), конкретность (concrete), достоверность (credentialed), эмоциональность (emotional), истории (story). Кстати, я про эту книгу уже рассказывал раньше
- Потом речь идет про структуру истории, где в простейшем случае у нас есть начало, завязка, конфликт, усиление конфликта, кульминация, развязка и финал. Причем важно соблюдать некоторую последовательность, когда напряжение нарастает, конфликт усиливается и история достигает кульминации.
- Для создания интересных историй можно использовать архетипические сюжеты и здесь автор вспоминает "Морфологию волшебной сказки" Владимира Проппа, про которую я рассказывал раньше
- Также можно использовать правило зебры и контраста - для создания эмоциональной вовлеченности у читателя стоит чередовать периоды напряжения и расслабления в истории
- Для создания персонажей надо использовать яркие и запоминающие детали - это позволяет добавить образам персонажей объема. Для оживления персонажей можно использовать те детали и привычки, что вы подмечали у своих знакомых
- Концовку истории можно организовать по разному - оставить читателей на пике или закончить все выводом (хорошо если не нудным). Кстати не все истории должны иметь happy end - тут можно почитать книгу "Я — легенда" ("I Am Legend"), про которую я рассказывал раньше

P.S.
Про сторителлинг и рассказывание историй я уже рассказывал раньше в этом канале:
- про мастер класс по сторителлингу
- про то, как сторителлинг сделал нас людьми
- про тысячеликого героя - классическая книга про путь героя
- про работу сценаристов - классический подход для написания сценариев
- про создание подкастов и рассказывание историй
- про фрирайтинг для решения задач
- про черную риторику и власть слова
- про искусство словесной атаки
- про публичные выступления с прошлого MBA с Ниной Зверевой
- пример крутого выступления с рассказом истории - последняя лекция Randy Pausch
- про откровения оратора про выступления и истории
- про построение историй и выступления в лекции от Yandex
- про риторику и поэтику от Аристотеля
- про нейробиологию чтения

#SelfDevelopment #PublicSpeaking #Storytelling #Writing
👍73🔥3👏1
The Most Dangerous Phrase • Daniel Terhorst-North • GOTO 2023 (Рубрика #Management)

Интересное выступление Daniel Terhorst-North на тему фразы "We've always done it way" ("Мы всегда делали это так"). Родственником этой фразы является "Так исторически сложилось":) Опасность в том, что, однажды приняв решение и начав действовать определенным способом, дальше мы действуем так по накатанной. Возможно, уже поменялись условия, при которых принималось решение, но образ действия уже стал самоподдерживающейся привычкой. И это плохо, так как наши действия уже могут быть далеки от оптимума. В итоге, автор говорит про
- Наши привычки и смену парадигмы, которая бывает болезненной - на эту тему стоит почитать книгу Томаса Куна "Структура научных революций"
- Идеи устаревают, даже блестящие идеи, но некоторые делают это достойно и адаптируются под реальность, а другие как Скрам или SOLID становятся скорее вредными
- Автор показывает удачную эволюцию идей на примере книги "Цель" Элияху Голдратта, разбирая ее продолжение через пару десятков лет с названием "Beyond the Goal". В этой книге есть интересный алгоритм размышлений о пользе технологий:
1) What is the power of technology?
2) Which limitation does the tehcnology diminish?
3) Which rules enabled us to manage the limitation?
4) Which new rules we need?
В этой книге хорошо описано, что важно измененять правил для использования технологий и их ограничений.
- Дальше автор начинает препарирует SOLID, показывая чем были обусловлены single responsibility principle и open-closed principle примерно 30 лет назад. А дальше становится видно, что в том контексте принятия решений предложенные подходы работали хорошо. Но с тех пор много воды утекло, поменялось окружение и SOLID в том виде, как его рассказывает uncle Bob, стал нерелевантным. Рекомендую посмотреть аргументацию автора выступления - он отличный рассказчик и умеет погружаться в историю возникновения вопроса и вспоминает даже статью Дейкстры "On the role of scientific thought". А потом он примерно также разбирает open closed principle:)
- Потом наступает время Scrum, историю которого автор начинает с Мартины Девос, которая в 1990х создала процесс с шестинедельными спринтами и упрощенными планами на спринт (вместо бесконечного Ганта). Это позволило командам работать более эффективно и быстро реагировать на изменения. Тогда это был прорыв - делать релизы раз в шесть недель на фоне конкурентов, что релизились раз в год или реже. Но с тех пор индустрия научилась релизить изменения в масштабе минут или часов - для этого автор вспоминает про современные подходы к CI/CD. Правда, Скрам как и прежде двигает все в сторону недельных релизов, что сейчас кажется шагом в прошлое:) Но создатели Скрам продают его как чудодейственное средство как ни в чем не бывало - ведь это их способ заработка.

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

P.S.
А для того, что последовать совету автора, я рекомендую почитать книги по критическому мышлению, про которые я уже как-то рассказывал в отдельном посте.

#Processes #Management #Agile #Leadership #Software #Project #CriticalThinking
12🔥7👍5
Leetcode - прогресс за пятый месяц

Вот уже 5 месяцев я играюсь с leetcode, вспоминая как писать код:) И этот месяц пока вышел самым слабым - часть его я проболел и поэтому подзапустил свой ежедневный ритуал с решением задачек. Плюс курс "Data Structures and Algorithms" почти закончился (я прошел все темы) и там остались только те задачки, что я откладывал на потом, но каждая из них требует больше времени, чем стандартная. Так у меня и получилось в мае, что я в среднем решал 1 задачку в день:) А если говорить в общем, то я вроде как вспомнил базовый синтаксис python и простой код могу писать без IDE и автоподсказок:) В июне попробую пройти курс "System Design for Interviews and Beyond" - уж больно интересно посмотреть на его содержание.

P.S.
Предыдущие посты на эту тему доступны здесь: 1, 2, 3, 4 и 5

#SelfDevelopment #Algorithm #Software #SoftwareDevelopment
23👍17🔥11
Тинькофф теперь Т‑Банк (Рубрика #News)

Сегодня мы объявили о том, что Тинькофф стал Т-Банком. Об этом рассказывает Станислав Близнюк в своем интервью Ведомостям. Если кратко, то для клиентов ничего особо не меняется, кроме названия продуктов.

#News
🎉24👎15🗿10😭7🤡63👍1🥴1💅1
Cassandra: The Definitive Guide, 3rd edition (Рубрика #Architecture)

Уже больше года назад я прочитал эту книгу про популярную NoSQL базу данных и запланировал написать краткое саммари. Но когда я начал писать саммари, то понял, что сначала нужно сделать отдельные посты
- Про CAP теорему
- Про формализацию CAP теоремы и ее доказательство
- Про теорему PACELC (расширение CAP)
- Про модели консистентности от Jepsen

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

1. Beyond Relational Databases - в этой главе приводится кратка инфа, из тех постов, что я привел выше
2. Introducing Cassandra - здесь автор приводит ключевые слова, которые характеризуют Cassandra в формате elevator pitch и продает читателям ее крутость: distributed and decentralized, elastic scalability, high availability and fault tolerance, tuneable consistency, Brewer’s CAP Theorem, row-oriented, high performance:)
3. Installing Cassandra - базовое описание установки кластера, создание keyscpace (аналог database в RDBMS) и tables. Этой главы хватит для того, чтобы поднять кластер для экспериментов, но для администрирования стоит почитать доки или книгу для администраторов Cassandra
4. The Cassandra Query Language - эту главу автор начинает с того, что вспоминает модель данных в RDBMS. А дальше он проводит параллели с моделью данных в Cassandra. Все начинается с пар мапы key-value, что вместе с primary key является row в Cassandra. Дальше набор row собирается в партицию. Внутри строки есть primary key, который в Cassandra является составным, который состоит из обязательно partition key и опционального набора clustering columns. Partition key определяет как строки распределены по нодам кластера, а набор clustering columns определеляет порядок размещения строк уже внутри ноды. Еще есть static column для оптимизаций - это колонка, которая не входит в primary key, но все строки внутри partition шарят общее значение. Партиции собираются в таблички, таблички собираются в keyspace, а keyspace размещаются на cluster. Дальше автор рассказывает про типы данных в Cassandra, которых достаточно много и в которых есть интересные типы вида counter, set, list, map, tuples.
5. Data Modeling - самая интересная глава, в которой авторы рассказывают про моделирование внутри Cassandra и как оно отличается от моделирования внутри RDBMS. Если говорить про RDBMS, то там мы идем от концептуальной модели предметной области. Мы нормализуем данные и раскладываем их удобно с точки зрения консистентного хранения данных. Дальше мы можем относительно просто писать нужные нам деларативные запросы на получение данных, где мы спокойно используем joins, соединяя таблицы как нам требуется. И если нам надо писать другие запросы на выбор данных, то это с высокой вероятностью можно сделать достаточно просто.

В Cassandra мы моделируем данные совсем по другому. Авторы книги показывают это на примере моделирования сервиса для букинга отелей. В Cassandra надо идти не от концептуальной модели предметной области, а от модели запросов (query model) и авторы дают такой совет
Think of the most common query paths your application will use, and then create the tables that you need to support them.

Целью является создание такой модели данных в Cassandra, который минимизирует количество партиций, которые нам надо потрогать, чтобы ответить на запрос. Суть в том, что партиция является единицей хранения и если мы попадаем в одну партицию, то обычно получаем оптимальную производительность. Отдельно стоит отметить, что сортировка данных в Cassandra тоже является дизайн решением, так как данные на ноде внутри партиции раскладываются в том порядке, что определен набором clustering columns.
Кстати, для моделирования данных в Cassandra используются Chebotko diagrams, на которых моделирование как раз идет от query, которые поддерживаются табличками, а дальше для таблицы указываю входящие колонки и все виды ключей.

Обзор оставшейся части книги в следующих постах: 2 и 3.

#Software #Architecture #DistributedSystems #SystemDesign
👍155🔥1
Продолжая рассказ про книгу "Cassandra: The Definitive Guide, 3rd edition" приложу несколько иллюстраций
👍10🔥1
Engineering Architecture Meetup @ Т-Банк (Рубрика #Architecture)

Сегодня у нас в офисе Т-Банка проходит архитектурный митап, у которого доступна и трансляция (она начнется в 19.00).
Мои коллеги собрали интересную программу из трех докладов, только один из которых от моего коллеги, а остальные от приглашенных экспертов
- Определение границ сервисов
- Пойди туда, не знаю куда. Особенности взаимодействия в распределенных системах
- Микросервисы в очень больших проектах: где помогают, а где не очень?

Тизеры к докладам доступны на страничке с описанием митапа

#Architecture #DistributedSystems #Software #Engineering #SoftwareArchitecture #SystemDesign
🔥14👍53😁1
Cassandra: The Definitive Guide, 3rd edition - Part II (Рубрика #Architecture)

В этом посте я продолжаю рассказ об интересной книге по Cassandra (начало в предыдущем посте) и говорю только про шестую главу "The Cassandra Architecture"
Эта глава начинается с определения архитектуры
Architecture—fundamental concepts or properties of a system in its environment embodied in its elements, relationships, and in the principles of its design and evolution.
—ISO/IEC/IEEE 42010

И дальше начинается интересное

1) Про топологию развертывания кластера, а точнее про датацентры и стойки (racks). Это важно для понимания того, а как обеспечивается отказоустойчивость - для этого в Cassandra есть сплетни (gossip protocols) и детекция сбоев (phi accrual failure detector). И про то и про другое прикольно рассказано в книге "Database Internals", которую мы обсуждали в "CoA" (выпуски раз и два).

2) Про механизм consistent hashing с токенами, кольцом и виртуальными нодами (насайте DataStax есть отличное описание и визуализация). Про то, как работает partitioner, который раскидывает наши партиции по нодам кластера и про стратегии репликации. Дальше наступает время обсудить consistency level и tunable consistency кассандры, которую мы можем выставлять на каждый запрос.

3) Про координацию запроса координирующей нодой, которая от имени клиента взаимодействует с репликами, чтобы обеспечить запрошенный уровень консистентности. Тут появляется такая штука как hinted handoff для write запросов, когда координирующей ноде не удалось записать данные, но она оставила себе напоминание, что надо надо услышав сплетню о возвращении реплики в строй отправить туда write запрос. Тут же появляются темы как бороться с энтропией (anty-entropy) и чинить реплицированные данные (подход Cassandra основан на подходе Amazon Dynamo, про который можно почитать в whitepaper от 2007 года). Тут и пригождается знание алгоритмов и структур данных, например дерева хешей или дерева Меркла (Merkle trees).

4) Про транзакции, точнее lightweight transactions (LWT) и протокол Paxos для достижения консенсуса. Собственно LWT нужно для достижения линеаризуемости, о которой речь шла в знаменитой CAP теореме (подробнее в прошлых постах: Про CAP теорему и Про формализацию CAP теоремы и ее доказательство). Автор объясняет, что чтение с кворума и запись в кворум, которые гарантируют strong consistency, не позволяют предотвратить состояние гонки (race conditions) в случаях, когда клиентам сначала надо прочитать, а потом записать данные. Именно для этого и появляется LWT, который базируется на Paxos (про который надо рассказывать отдельно). Но надо отметить, что
Cassandra’s lightweight transactions are limited to a single partition.

А значит мы не можем гарантировать линеаризуемость, если делаем запрос по разным партициям.

5) Про внутренее устройство движка хранения данных, где у нас есть Memtables, SSTables, and Commit Logs. Это работает так, что запросы на запись мы пишем в commit log и делаем это durable, а дальше записываем данные в in-memory структуру memtable, где каждая memtable содержит данные для специфичной таблицы Cassandra. Дальше при достижении определенного предела memtable записывается на диск (это уже называется sstable - sorted strings table или отсортированная таблица строк). Таких SSTable на диске много и Cassandra периодически их компактит, производя mergesort (опять тут пригодятся алгоритма для понимания).

Дальше интересно обсудить чтение данных, где нам помогают вероятностные структуры данных, а точнее фильтры Блума (Bloom filters). Они позволяют понять, а есть ли искомая запись внутри конкретной SSTable без full scan. Кроме того используются стратегии кеширования для производительности. Плюс удаление записей с append-only структурой хранения выглядит интересно - мы не можем просто удалить запись, так как надо сохранить tombstone о том, что она удалена. Если мы это не сделаем, то при compaction наши удаленные записи оживут ... и не в виде зомби, а полноценными записями:)

Финал обзора в следующем посте.

#Software #Architecture #DistributedSystems #SystemDesign
👍8🔥32
Сложность и модулярность две стороны одной медали - Влад Хононов - ArchDays 2023 - Part 1 (Рубрика #Architecture)

Интересное выступление Влада Хононова с конференции по архитектуре, в программный комитет которой я состою. В этом выступлении Влад рассказал кратко связь complexity и modularity, которые позволяют ввести интересные метрики качества систем и кода, которые упрощают coupling/connascence/cohesion. Этот доклад основан на материале книги "Balancing Coupling in Software Design", которую я закажу в бумаге сразу после ее издания

Ну а теперь пройдемся по основным мыслям доклада
- Влад определяет систему как набор взаимосвязанных элементов, организованных для достижения цели (это основано на определении Медоуз из книги "Азбука системного мышления", про которую я уже рассказывал)
- Дальше автор идет вглубь уровней абстракций и показывает, что система - это фрактальная история вида: системы -> микросервисы -> неймспейсы -> классы -> методы -> ...
- Возникает вопрос, а в чем разница между компонентами системы и модулем? И автор показывает, что различие не в физических или логических границах. Автор обращается к классическим определением модулей (self-contained, вызывается другими элментами, может быть скомпилированными отдельно). И дальше автор говорит, что у компонентов и модулей отличие в целях - деление на компоненты решает текущую задачу системы, а деление на модули помогает решить будущую задачу, когда система будет эволюционировать.
- Потом автор рассказывает про определение сложности от автора фреймворка Cynefin, где сложность зависит от простоты установления связи между причиной и эффектом. Условно, если мы можем предсказать последствия своих действий в системе, то это простая система. А вот если нам нужны эксперименты для определения взаимосвязи, то комплексная система
- В проектировании софта сложность может быть локальной и глобальной (условно сложность внутри модуля или сложность взаимосвязей между модулями). Понятно, что локальность/глобальность сложности зависит от точки
- В итоге, модульность и сложность - многоуровневые явления, которые можно наблюдать на разных уровнях абстракций.
- Дальше автор показывает метрики сложности, которые приводил uncle Bob в своей книге "Clean Architecture". Кстати, я уже делал краткое саммари ее части про дизайн модулей здесь. Влад в выступлении показывает как можно хачить метрики abstractness, stability, distance from main sequence. Хотя при желании можно похачить любые метрики, а значит и метрики самого Влада, которые он предлагает дальше:)
- Влад предлагает метод оценки через модель интеграции, которая основана на оценке взаимосвязи между элементами системы. Эта модель объединяет coupling/connascence/cohesion. Суть в том, что нам надо оценить интенсивность обмена между модуля по этим связям
- Модель включает четыре уровня, которые идут от самых терминальных случаев к оптимальным (по мере этого уменьшается объем общих знаний между модулями)
1) Intrusive coupling - интеграция через вторжение, когда нарушаются границы инкапсуляции и зависимый модуль получает доступ к внутренней реализации другого модуля. Примеры: взаимодействие через базу данных, использование reflection для доступа к приватным свойствам.
2) Functional coupling - взаимосвязь через функцию или бизнес-требования. Интересно, что тут не обязательно наличие связи в коде.
3) Model coupling - связь через общую модель бизнес домена, структуру данных. Здесь нам дальше сложно эволюционировать общую модель
4) Contract coupling - связь через контракты (API). В DDD для этого есть способы вида published language, anti-corruption layer, etc

Про то, как использовать эту модель я расскаал в продолжении поста, плюс рекомендую другую книгу Влада "Learning DDD" ("Изучаем DDD – предметно-ориентированное проектирование"), про которую я много рассказывал раньше.

#Software #Architect #SystemDesign #SoftwareArchitecture #Processes #Management
👍11🔥32
Сложность и модулярность две стороны одной медали - Влад Хононов - ArchDays 2023 - Part 2 (Рубрика #Architecture)

Продолжая пост про доклад Влада Хононова на ArchDays 2023, я расскажу про использование модели интеграции для оценки качества архитектуры.
Для оценка Влад предлагает использовать 2 параметра: расстояние между взаимодействующими компонентами и уровень этого взаимодействия (intrusive coupling, functional coupling, model coupling, contract coupling). Получается у нас связь между стоимостью изменения и расстоянием между компонентами, что затрагивают эти изменения. Для того, чтобы отобразить доступные варианты Влад предлагает использовать стандартный подход консультантов с матрицей 2 на 2, где осями являются дистанция и сила связи. В итоге, у нас получается 4 варианта (2 первых предпочтительных и последние 2, которых стоит избегать)
- High distance, low strength - это стандартное loose coupling, когда компоненты далеко друг от друга и они полльзуются contract coupling
- Low distance, high strength - это стандартный high cohesion, когда компоненты рядом и связь между ними сильна
- Low distance, low strength - это локальная сложность, когда у нас в близлежащих компонентах нет связи и при изменениях нам надо пытаться вспомнить, а почему эти компоненты вообще расположены вместе:)
- High distance, high strength - а это стандартная история с глобальной сложностью, когда изменения в вроде бы несвязанных далеких компонентах приводят к спецэффектам наавроде взрыва на макаронной фабрике
Я приложил картинку с визуализацией этой матрицы 2x2.

В итоге, главным уравнением в этом подходе является
Modularity = Strength Xor Distance

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

#Software #Architect #SystemDesign #SoftwareArchitecture #Processes #Management
👍92🔥1
Музыка от SUSE (Рубрика #Humor)

У компании SUSE есть отличная музыкальная группа, которая делает крутые it версии популярных песен:) Самое то для пятницы - послушать забавную музыку и отдохнуть после сложной недели, которая получилась сложной и для многих моих коллег, но все справились на отлично. А теперь подборка от SUSE:
- Linus Said
- KUBERNETES
- SUSE. Yes Please.
- Every Byte You Take
- Paint it Green
- Remember When
- Can't Stop the SUSE
- We Didn't Start the Kernel
- Uptime Funk
- Coding
- SUSECON
- Open and Wild
- Where Open Source Grows
- Open Source My Way
- The Time Has Come

Возможно, я что-то пропустил, но если вам музыка понравилась, то вы сможете сами найти другие клипы на Youtube.

#Humor #Music
👍7🔥21🗿1
Cassandra: The Definitive Guide, 3rd edition - Part III (Рубрика #Architecture)

Этим постом я заканчиваю рассказывать о книге про Cassandra (предыдущие посты: 1 и 2).

7. Designing Applications with Cassandra - авторы разбирают дизайн приложения для букинга отелей и выбирают микросервисный подход из-за обеспечения инкапсуляции логики внутри сервисов, наличия автономности для деплоя сервисов, а также независимого масштабирования при необходимости. Для проектирования авторы предлагают итеративно работать над UX design, data modeling, architecture. С точки зрения проектирования авторы начинают с идентификации bounded context, идентификации сервисов, дизайна persistence для микросервисов. Причем авторы ратуют за polglot persistence, где мы можем выбирать разные базы для разных сценариев (RDBMS, Document-oriented, Wide-column, graph databases, ...). В итоге, у нас получаются bounded contexts и наборы query для получения данных - это можно использовать для моделирования данных с использование Chebotko diagrams. Тут же авторы рассказывают про secondary indexes, свою часть которых должна хранить каждая нода. А также про материализованные представления (materialized views), которые позволяют хранить преконфигурированное view, которое помогает с запросами, которые основаны на одной из колонок, что не входят в primary key.

8. Application Development with Drivers - рассказ про возможности драйверо для работы с Cassandra. Так как книга была написана уже давно, то рекомендую почитать доки к последнему драйверу для Java от DataStax.

9. Writing and Reading Data - авторы рассказывают и показывают как писать и читать в Cassandra с учетом tunable consistency. Они объясняют как выглядит write path и read path с учетом схемы деплоймента кластера, а также работы движка хранения (Commit logs, Memtable, SSTable, LWT). Также авторы рассказывают как работает батчевая запись, read repair, запросы по диапозонам, сортировка, фильтрация, пейджинация и удаление записей.

10. Configuring and Deploying Cassandra - авторы показывают как задеплоить свой Cassandra кластер при помощи ccm (Cassandra cluster management). Если у вас Cassandra предоставляется ни как сервис, то вам стоит внимательно прочитать эту главу (а тем у кого это сервис читать можно менее внимательно:) )

11. Monitoring - эта глава посвящена мониторингу кассандры. Авторы рассказывают про использование jmx, nodetool и virtual tables, которые предоставляют метаданные о нодах и таблицах через стандартный CQL. Также в этой главе упоминается про логгирование Cassandra

12. Maintenance - из этой главы становится ясно, что поддержка Cassandra совсем не тривиальная задача:)
13. Performance Tuning - авторы предлагают использовать USE для анализа performance и дальше они рассказывают про то, как устроить стресс-тестирование кластеру, а потом про ее тюнинг за счет кеширования, настройки memtables, sstables, commit logs, hinted handoff, compaction, concurrency и тредов, сети и выставленных таймаутов. А напоследок авторы разбирают настройки JVM, что влияют на perf Кассандры.

14. Security - глава начинается с того, а как устроена аутентификация и авторизация в Cassandra, например, авторы рассказывают про RBAC. Дальше наступает время обсудить encryption (сертификаты, node-to-node и client-to-node encryption) и опции безопасности, что можно настроить в JMX. А напоследок в главе рассказывается про audit logging и как его можно настроить

15. Migrating and Integrating - эта глава рассказывает как переехать с RDBMS на Cassandra и авторы выдают следующий алгоритм
- Понять когда пора мигрировать (авторы приводят список триггеров)
- Адаптировать модель данных (entity, relationships)
- Адаптировать приложение (поменять способы доступа к данным, способы поддержания консистентности, избавиться от хранимок (авторы рассказывают про UDF в Cassandra))
- Распланировать схему деплоя и смигрировать данные (предлагается стандартная схема без даунтайма с параллельной работой с новой/старой базой на уровне приложения)

#Software #Architecture #DistributedSystems #SystemDesign
5👍5🔥2
Архитектурный репозиторий на базе GitLab и C4 Model для большой компании - Кирилл Ветчинкин - ArchDays 2022 (Рубрика #Architecture)

Интересный доклад Кирилла на тему архитектурного репозитория для компании среднего размера, в котором Кирилл рассказал про внедрение архитектурных процессов при росте компании. Основные мысли следующие
- При росте компании нужна формализация процессов проектирования
- Эта формализацию в небольшой компании может быть сделанна централизованно и для этого можно действовать пытаясь идти к подходам Arch as Code, который в версии Кирилла основан на следующих подходах и инструментах:
- Использование plantuml для описания диаграмм (фактически, это diagrams as a code) - я сам люблю этот инструмент для создания диаграмм. Он позволяет описывать диаграммы C4 Model и UML
- Использование Markdown для создания документации (из markdown можно генерировать в шагах пайплайна любые нужные вариации документации: сайт, pdf, ...)
- Использование Gitlab и TBD - собственно markdown документация и plantuml описания диаграмм лежат в коде (отсюда и название arch as a code)
- Процесс архревью выглядит как ревью изменения в архитектурном описании и получение аппрувов от нужных ребят: staff engineers, infra, security, etc

Дальше Кирилл интересно рассказывает про то, как выглядит их архитектурный репозиторий, который завязан на использование поддоменов из стратегических паттернов DDD и C4 Model для иерархического отображения архитектуры системы на разных уровнях абстракции. Интересно, что Simon Brown, создатель C4 Model, сделал свой инструмент для моделирования архитектуры - structurizr, где сначала идет описание модели системы, а потом можно делать разные view для разных целей (подробнее в моем посте)

В итоге, архитектурный репозиторий Кирилла имеет структуру вида
- Domains
-- Subdomains
--- Teams
---- Services
Дальше Кирилл рассказывает как эта вся машинерия работает, например, как заведены общие компоненты, как команды описывают свои сервисы и все такое. А дальше он переходит к описанию того, как в этом архитектурном репозитории пишутся и ревьювятся ADR (architecture decision records). Собственно при создании нового сервиса создается init ADR, в котором есть 3 части
- Описание проблема
- Ссылка на проведенный event storming (про который я уже как-то рассказывал раньше)
- Описание решения
Плюс прикладываются основные диаграммы:
- Container diagram
- Component diagram
- ERD diagram
- Use case diagram
При дальнейших ADR при изменениях системы описываются причины изменений + прикладываются диаграммы с diff было-стало, а также апдейтятся изначальные диаграммы.
Все это проходит ревью, у которого есть SLA по скорости ревью (утверждается, что SLA выставлено в 2 дня). После аппрува это все мерджится в репозиторий.

В общем, я думаю, что этот подход может неплохо работать на масштабе нескольких сотен человек. Но у описанного подхода есть проблема - реальность архитектуры существует рядом с кодом, так как схемы рисуют отдельные люди в отдельной репе, а код пишут другие и в других местах. Насколько эти разные реальности близки - это большой вопрос. Но называть такой подход как architecture as a code я бы не стал - это скорее тянет на architecture documentation as a code:) Но это уже большой шаг вперед по сравнению с тем, как обычно в компаниях управляют архитектурой, так что если у вас нет ничего, то попробуйте внедрить что-то похожее.

#SoftwareArchitecture #Architecture #SystemDesign #Software #SoftwareDevelopment #DistributedSystems
👍25🔥103
ArchDays 2024 - CFP (Рубрика #Architecture)

Я уже рассказывал, что этой осенью пройдет очередная конференция ArchDays, причем уже в шестой раз. Я вхожу в программный комитет конференции и у нас открыт call for paper. И если вы принесете туда доклад по темам вроде arch governance, arch as a code, enerprise arch и вот это все, то с большой вероятностью именно я буду ревьювить его. Так что если у вас было желание обсудить со мной архитектурные вопросы, то you are welcome, регистрируйтесь как спикер здесь, заполняйте заявку, а дальше уже буду действовать я:) А если заявка пройдет ревью, вы выступите на конфе, а я потом пошарю ваше выступление в свой канал:)

#SoftwareArchitecture #Architecture #Software #SoftwareDevelopment #DistributedSystems #Conference
👍114🔥3
Архитектура как код - Роман Пионтик - ArchDays 2022 (Рубрика #Architecture)

Интересное выступление про Dochub от автора инструмента на ArchDays 2022. Актуальная информация по инсструменту расположена здесь, но тут я расскажу про основные тезисы доклада:
- Основная идея была в создании инструмена для покрытия всех этапов развития компании, от стартапа до зрелой организации.
- Этот инструмент должен быть адекватным конкретному домену, встраиваться в процессы производства и анализировать архитектуру.
- Инструмент должен был поддерживать расширяемую метамодель, позволяющую анализировать данные архитектуры.
- Инструмент должен поддерживать командное развитие архитектуры и контроль глобальных стандартов.
- То, что получилось позволило сделать "живые" документы и шаблоны, которые валидируются и актуализируются
- Внутри есть комбинация инструментов вида
-- PlantUML и Mermaid - для диаграмм как код
-- Markdown - для разметки и документации
-- Swagger и AsyncAPI - для документации контрактов API
-- YAML/JSON манифесты для описания архитектурных объектов
-- SmartAnts - язык для запросов по этим описаниям
Все это позволяет накрутить поверх проверки этой архитектурной документации, которые позволяют контролировать важные для архитекторов вещи при помощи запросов на языке SmartAnts.

В общем и целом, по моим ощущениям от этого доклада получается примерно такая схема:
- Предлагается некоторая система для документирования архитектуры на базе Dochub
- В этой системе работают специальные люди, у которых шилдик "архитектора"
- Они пишут не код приложений, а код, который документирует архитектуру
- Они же пишут валидаторы этого описания архитектуры
- А SDE (software development engineers) пишут свой код в продакшен системах
- Дальше встает вопрос а кто поддерживает актуальность production code vs architecture code и в рамках какого процесса? Например, если это обязательный этап для любой фичи и его надо пройти еще до ее релиза, то тогда lead time взмывает в небеса, если это делает благословленный небом архитектор, а если это делают SDE, то неясно какое преимущество он получает от этих действий. Если это делается постфактум, то мы опять получаем лаг между реальным кодом и архитектурным описанием как бы оно не было получено: нарисовано картинками или сгенерировано из описания картинки кодом (с тем же успехом можно промптом попросить chatGPT генерировать картинки).

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

P.P.S.
Интересно сравнить рассказ Романа из Сбера про Dochub и то, что в том же 2022 ходу рассказал Кирилл Ветчинкина из Сбер Маркета про их архрепу и процесс написания ADR (я рассказывал об этом вчера). Подход Кирилла показался мне более приземленным, практичным и полезным.

P.P.S
В следующем посте напишу куда я бы хотел копать эту тему с архитектурой, чтобы сделать сделать работу над архитектурой неинвазивной и полезной для самих разработчиков.

#Architecture #Software #SoftwareArchitecture #Management #Processes
🔥11👍61🤔1
Материалы к докладу "Architecture at T-Bank: how we design our solutions" (Рубрика #Architecture)

Сегодня я выступаю на нашем фестивале Т-Двор в Питере с рассказом про проектирование и архитектуру. Сегодняшний день фестиваля посвящен науке и технологиям, поэтому я решил взять такую тему и подать ее по максимуму просто, чтобы любой посетитель фестиваля понял. В итоге, у меня в докладе получилось много отсылок, которые заинтересовавшиеся смогут изучить в свободное время сами, а не просто верить мне на слово:) И вот эти отсылки
- Мое древнее выступление на ArchDays 2020 про подходы T-Bank (ex Tinkoff) к архитектуре
- Книга "Learning Domain Driven Design"("Изучаем DDD") Влада Хононова и особенно первая часть книги про стратегические паттерны DDD, где идет речь про бизнес домены и поддомены, а также их типы (core, generic, supporting). Про книгу я уже много рассказывал раньше
- Cynefin framework - интересная концепция про сложность с точки зрения предсказуемости наших действий, подходит для размышлений как в контексте менеджмента, так и архитектуры
- Книга "Balancing Coupling in Software Design" Влада Хононова или хотя бы его выступление "Сложность и модулярность две стороны одной медали" на ArchDays 2023, про которое я рассказывал раньше. Влад хорошо рассказывает про архитектуру как управление сложностью и показывает простой инструмент для ответа на вопрос "а хороша ли наша архитектура" и пора ли ее улучшать:)
А дальше идут отсылки к тому, а как менять это в большой организации
- Закон конвея и обратный маневр Конвея и почему нам часто для улучшения архитектуры системы под задачи бизнеса надо поменять оргструктуру. Кстати, я раньше рассказывал про интересный доклад "How Technical Problems Cause Organizational Friction" от Adam Tornhill на тему того, как из кода можно вытащить данные о том, что есть проблемы со взаимодействием команд и принять меры:) Ну и в эту же тему есть мой рассказ про изменения в мобильном банке, где менялась команда, процессы, архитектура, ...
- Переход на платформенные решения - мне видится это основным способом двигать архитектуру IT систем в сторону унификации и начинать экономить на масштабе, так как платформенные решения можно централизованно развивать под нужные сценарии. Рекомендую на эту тему почитать статью моего коллеги Димы Гаевского, который ее сделал по мотивам своего выступления на Highload++ Spb 2022 (я уже рассказывал про этот доклад раньше)
- Архитектура как код - это интересная концепция, которая у многих на слуху. Текущие подходы больше напоминают архитектурную документацию как код, которую сложно и дорого поддерживать, но которая дает ощущение контроля за архитектурой. На эту тему можно посмотреть
-- Выступления Кирилла Ветчинкина из Сбер Маркета, про которое я уже рассказывал
-- Выступление Романа Пионтика из Сбера, про которое я уже рассказывал
Мне кажется, что можно сделать работу над архитектурой еще лучше, но про это я отдельно напишу большой пост позже.
- Тестирование архитектуры - когда архитектура становится чем-то более приземленным, чем картинки, то появяляется желание ее протестировать. На эту тему можно почитать следующие книги
-- "Building Evolutionary Architecture", в которой был концепт fitness function, но не было интересных примеров (я про нее рассказывал)
-- "Software architecture metrics", где были примеры с архитектурными метриками (я про нее рассказывал)
-- "Continuous Architecture in Practice", где была похожая история с тестами архитектуры (я про нее рассказывал)

#Architecture #Software #SoftwareArchitecture #Management #Processes
👍96🔥5