Максим Цепков – Telegram
Максим Цепков
2.29K subscribers
22 photos
5 files
591 links
Автор @MaximTsepkov, сайт http://mtsepkov.org - менеджмент самоуправления, soft skill модели, конференции.
Download Telegram
#AnalystDays Валерий Разномазов. Архитектура мобильного приложения. Когда-то я читал Руководство Microsoft по архитектуре приложений, она хороша тем, что там было собрано очень много архитектурных шаблонов с вариантами реализации. Валерий в своем докладе попробовал сделать тоже самое, но в меньшем масштабе, ограничившись архитектурой мобильного приложения в enterprise, а во второй части показал, как это приложение строится по DDD.

Итак, современное приложение - это трехзвенка: фронт - бэк - база данных. Но, в отличие от старых приложений, в нем еще есть слой API. Приложение включается в экосистему, или само ее образует, и слой API обеспечивает именно это: единую авторизацию и аутентификацию, взаимодействие с другими приложениями, включение в единый фронт и так далее. И вот это взаимодействие через API может порождать нагрузку на сервисы, не только от пользователей, но и от внешних систем. При этом фронт тоже взаимодействует через API, так как мы обычно имеем три разных варианта для Android, iOS и web.

По технологиям в enterprise сейчас, по мнению Валерия, есть консенсус: Javanoscript на фронте, Java в бэке, а вот базы данных - разные, в зависимости от нагрузки: SQL и PL/SQL при низкой сменяется на noSQL и NewSQL по мере возрастания. NewSQL - это хранение Json в современных реляционках, обеспечивающих индексацию по содержимому. При этом структуру для noSQL или NewSQL описывают в YAML или ОЫЩТысруьф и валидируют как раз на уровне API.

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

Будет ли highload - надо оценивать. MAU и DAU. Для оценки - нужна ролевая модель.

Принципы говорят, что бизнес-логику надо реализовывать на бэке, однкако по факту она есть и на фронте и в базе данных, особенно если у нас есть legacy-компоненты, то есть везде можно выделить бизнес-слой. При возрастании нагрузки вынос части бизнес-логики в БД практически неизбежен, только надо понимать, как работает JDBC, иначе он съест весь выигрыш. Замечу, что в этом нет ничего принципиально нового: та же книга Microsoft различала физические слои, называемые tier, которым здесь является фронт, бэк и БД, и логические слои, layer, с выделением UI, бизнес-логики и хранения, и говорила о том, что соответствие может быть различным.

Драйвером архитектуры является семантика - разметка предметного поля. Тезис: мы не можем описать все бизнес-процессы, но можем описать все бизнес-объекты. Описание бизнес-объекта - по шаблону: Что, Где, Когда, Субъекты, объекты и связи. И получается Кредо - краткое описание бизнес-объекта, согласуется с бизнесом. И дальше системный аналитик по принципам DDD, проектирует отражение объекта в в классы, API и структуру данных на всех уровнях. Впрочем, я тут должен сделать замечание: DDD говорит про единообразное отражение в код, его не надо проектировать для каждого объекта, а надо выделить типы с формулировать для них правила. Естественно, при этом учитывается нагрузка. В докладе был пример: заявки реализуют три микросервиса: для создания-изменения заявок, для пользователей (UI) и для уведомлений.

Описание объектов - это не страница в confluence, это yaml или JSONschema, машинно-читаемое и проверяемое описание. И принцип API first. Впрочем, если требования нечетки и их надо выявлять через показ прототипов бизнесу, то возможен Design First, а API - после одобрения бизнесом.

UX/UI проектируем через намерение пользователя, такой бизнес-анализ через Figma. Матрица Эйзенхауэра (часто-важно) для построения интерфейса. И схема орбит для функциональности: главный экран, достижимость в один клик, в два клика и так далее.
2
#AnalystDays. Дарья Бондарева. Аналитик. Архетипы. Инструкция по применению. В докладе - описание 4 типов аналитиков, которые Дарья выделила на основе личных наблюдений. Описание сделано в едином формате: ценности, потребности, авторский почерк документов, формула успеха, проблемы. Это можно посмотреть в презентации, а здесь - заметки с голоса.

* Практик Петя. Системный аналитик, изучает C#. Практицизм, бери и делай. Устранить проблему здесь и сейчас. Детальные инструкции, минимальные описания целей. Уместен для джунов-разработчиков и в ситуации, когда разработчикам нужны детальные инструкции. Проблемы: нет бизнес-описания, с вытекающими последствиями. И неверный дизайн, если не хватает опыта, и возможны конфликты с разработчиком. Как работать? Бизнес-часть, договариваться об уровне детализации.

* Стратег Зоя. В СА из бизнеса, хорошо понимает и генерит космические и прорывные идеи. Процессный подход, ограничения лишь в голове. Способ решения - выгодный бизнесу, в описании это очень хорошо. А дизайна - нет, оно не прорабатывается. Хорошая работа с мотивированными разработчиками. Ориентация на будущее помогает подбирать решения сейчас. Но! если разработчики неопытные, джуны - будут проблемы. И с техдоком может быть пробел. А ще стратег не может оценить реализуемость, сроки и ресурсы - и может быть большая сложность решений. Соответственно работа с опытным разработчиком или с тех-экспертом

* Педант Федя. Работал проектным менеджером, подвыгорел, и пошел в аналитики. Фокус - процесс и документация, формализация и проработка мелочей. Фокус на процесс, сплочение коллектива на задаче. Может начать управлять или быть оркестратором процесса - это профит. А минусы - когда он навязывает свое видение сроков и решений, возможны конфликтам. А следование правилам и формализм дают накладные расходы. И тут надо очертить ответственность, смягчение выпадов.

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

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

Типология любопытная. В некотором приближении она описывает типы аналитиков, позволяет их сопоставить с типами проектов и разделением труда в команде, дает рекомендации по работе, и в этом - практическое применение. Она неплохо раскладывается по двум дихотомиям: технологии - процессы и детали - концепты. И ее можно сопоставить с известными психологическими классификациями, такими как Адизес, Белбин, MBTI или DISC. Подумать, почему сопоставление такое, почему какие-то типы при таком сопоставлении делятся, объединяются или отсутствуют и почему. Ответ, отчасти, в том, что общие типологии не учитывают место аналитика в разделении труда, они инвариантны к этому.
#AnalystDays Нелли Бовина. PBR как инструмент для эффективной работы аналитика и команды в целом. Product Backlog Refinement - инструмент коллективного обсуждения задач при подготовке к включению в спринт. Идея состоит в том, что на отдельных встречах задачи представляются и обсуждаются командой, разработчики намечают способ реализации, тестировщики - способ тестирования, и задача оценивается. Такая встреча снижает неопределенность, позволяет на этапе разработки обойтись без уточнений и сделать то, что нужно. Они внедрили такой процесс, бэклог подготавливается на 2-3 спринта вперед. Внедрение - постепенное, сначала команда просто учится готовить задачи в формате заранее такого обсуждения, и уже потом учится оценивать. Профит - отсутствие необходимости уточнений и возвратов для изменения реализации, а также повышение точности планирования. Накладные расходы - часть подготовленных задач в низком приоритете в реализацию не идет, и время подготовки сгорает.
#AnaystDays Наталья Семенова. Концептуальное мышление: зачем оно вам, есть ли оно у вас, и как его развить. Это - продолжение зимнего доклада Натальи на WAW, конспект которого у меня есть в отчете с конференции https://mtsepkov.org/WAW-2024, и который можно посмотреть https://youtu.be/LuEjzZmWPP0. Мне по-прежнему интересны источники, на основе которых Наталья рассказывает про концептуальное мышление, надеюсь, она мне пришлет ссылки, а я опубликую. Пока я нашел, что компетенция концептуального мышления описана наряду с большим количеством других в книге Лайл и Сайн Спенсер "Компетенции на работе. Модели максимальной эффективности работы". И там выделено те самые семь уровней, о которых говорит Наталья, но детального раскрытия там нет.

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

И так, ясные (простые) системы. Для работы с ними нужно уровни (1) использование правил и (2) распознавание моделей концептуального мышления, доступные джунам. Требуется следующие виды мышления.
* Аналитическое мышление: делим на кусочки и каждый обрабатываем по схеме
* логическое мышление
* рациональное мышление - это логическое + отрицание чувств и эмоций
* системное мышление - целостное видение мира
* абстрактное мышление - работа с абстракциями
* репродуктивное мышление - переиспользование опыта знаний и других, используем инструкцию

Сложные системы - область известных неизвестных. Работают сеньоры, применяя фреймворки и стандарты решения задач. Уровни: (3) Применение сложных концепций и (4) упрощение сложности. Это позволяет превратить сложную задачу в набор простых. Требуется следующие виды мышления.
* продуктивное мышление - способность применять методы подходы и получать результаты
* стратегическое - достижение целей
* теоретическое мышление - работа с тем, что не щупали
* практическое - опрокидываем теорию в практику

Запутанные системы: неизвестные неизвестные, зона экспериментов, Исследуй - Воспринимай - Реагируй. Уровни: (5) создание новых концепций и (6) создание новых концепций по сложным вопросам.
* реалистическое мышление - стремление к пониманию истинны и ликвидации конфликтов в многоаспектной ситуации
* творческое мышление для создания новых концептов
* синтетическое мышление - способность к синтезу разных концептов
* индуктивное мышление - обобщение частных кейсов
* критическое мышление - посмотреть критически, особенно на свои выводы и рассуждения

Хаотичное системы. Причины-следствия неясны, Действуй - Чувствуй - Реагируй. Требуется уровень (7) создание новых моделей и следующие методы мышления.
* дивергентное мышление - способность видеть спектр решений
* альтернативное мышление - работать с разными мнениями на один вопрос, без выбора
* латеральное мышление - возможность мыслить не стандартно, как никто не подумал

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

Дальше были способы работы с задачами с примерами.

Меняем точку зрения:
* inside внутри системы
* inside out куда развиваться
* outside in я-точка в мире

Компания не очень нравится - а уйти не решаешься, и что делать? Смена позиции inside - inside out: какие направления развития в компании и за пределами. А ouside in - посмотрите от целей жизни. И решайте с учетом этого, а не только изнутри ситуации.

Концептуализация: все переводи в диаграммы.
🔥4
Задача - приоритизация архитектурного бэклога платформы относительно продуктовых. Что делаем: Накидываем элементы, затем кидаем связи: Компания - Клиент и цепочка продажи; Компания: продажа, разработка, поддержка; Этапы, стоимость, сроки; Клиент: продукт стоимость качество функции; поток ценности и стоимость владения; Первая сделка: маржа, конкурентное преимущество, стоимость владения, стоимость приобретения. Получаем блоки: компания, продукт, клиент, по каждому - пункты. И дальше оцениваем наши задачи по каждому разрезу, получая основания для приоритетов.

Знать свои цели и ценности. Цикл Колба - как обучаются взрослые. Опыт - Анализ - Теория - Практика. Мы не школьники, взрослым теорию не рассказывают. Хотя я бы тут отметил, что зря люди стараются учиться исключительно на своем опыте. полезно поискать подходящие теории и на них опереться.

Итого, рецепт: менять взгляд, изучать модели, осваивать сопутствующие типы мышления, все в диаграммы - концептуализация.

В ответах на вопросы.
* А если задача в хаосе - что сделать? Ответ. Посмотреть вокруг. Возможно, систему специально кто-то держит в хаосе. Насколько есть рычаги влияния и возможность выводить? Может, тут невозможно? Стоит ли терять время? Чему можно научиться в такой системе?
* А есть ли повышение сложности? Ответ - да. Есть методология и инструкции в компании, но их ставят под сомнение, отвергают - и сложность повышается.
* Позиция - субъективный подход к реальности, или есть объективная картина? Ответ - субъективно. Вы для джунов расписали - и им все ясно. А вы взаимодействуете с клиентом, неопределенность - там сложно. Или хаос.
* Вопрос. Если из запутанной попали в хаотичную? То как действовать, если сроки сжатые. Ответ - два варианта: (1) строгие правила от харизматичного руководителя, (2) долгий путь с обучением людей, очень сложно.
* Повышение уровня концептуального мышления - нельзя ставить такую задачу подчиненному. Потому что напрямую эффект не очевиден и желания тоже.

Почему мне интересны источники по концептуальному мышлению? Дело в том, что видно четкое ранжирование, в котором внизу - исполнение, а выше - решение творческих задач в условиях неопределенности - сильно выше. И это ранжирование совершенно не соответствует освоению разных типов мышления человеком. Ребенок замечательно умеет творчески решить задачу получения разрешения мамы посмотреть мультики, в том возрасте, когда выполнение инструкций совершенно недоступно. Потом, правда, школа успешно гробит способности к творческому мышлению, об этом свидетельствует зефирный эксперимент (ищем "Marshmallow Peter Skillman") и другие исследования. Так что основания для выделения именно таких уровней - интересно. У Спенсера этого нет. Ну и для идеи уложить все виды мышления в концептуальное с существенным их урезанием тоже интересны основания.
🔥4👍31
Собрал заметки с #AnalystDays в общий отчет https://mtsepkov.org/AnalystDays-2024a Как всегда, на конференции были хорошие доклады и много интересного общения. А еще в Питере стояла замечательная погода! Надеюсь, она будет и в конце июня, когда я поеду на #Highload и #Teamlead. Кстати, я тогда буду долго, если у кого есть желание - можно будет встретиться.
👍10
В моей работе над моделью личности - важный этап: опубликована книга "Инженерная модель личности. Меняя себя и других – понимай устройство". Доступна на ридеро https://ridero.ru/books/inzhenernaya_model_lichnosti/ и других площадках. Можно не только читать электронно, но и заказать печать по требованию в бумажном виде, но я не дорабатывал презентации под черно-белый вариант. По сравнению с серией статей, которую я публиковал зимой, в книгу включен ряд моделей, доработана структура и отдельные разделы на основе обсуждения статей и докладов по теме. Читайте! Исходные статьи по-прежнему доступны на vc.ru, а оглавление здесь https://mtsepkov.org/Self-Det
🔥147👍4🏆2
Забавно. Практически сразу после публикации книги - на складчине появился сбор денег на мою книгу, чтобы получить ее по 35 рублей вместо 380. Те, кто откликаются - такие нищие или такие жадные?
😁14🤔11
При подготовке книги «Инженерная модель личности» я описал ряд моделей, на которые мне указали при обсуждении статьи «Спиральная динамика, Big Five и другие модели ценностей»: модели базовых ценностей Шолома Шварца и корпоративных культур Шнайдера, а также карты культур Хофстеде и Инглхарта-Венцеля. И сейчас опубликовал этот материал отдельной статьей с логичным названием «Модели ценностей – продолжение» https://vc.ru/hr/1228187, думаю этот материал интересен сам по себе. И хочу напомнить, что книга доступна на ридеро https://ridero.ru/books/inzhenernaya_model_lichnosti/ и других площадках, в ней статьи собраны, дополнены и несколько реструктурированы. А оглавление серии статей доступно на моем сайте https://mtsepkov.org/Self-Det
👍6
Сообщество аналитиков Петербурга летом традиционно проводит плов-пати. Я живу в Москва и обычно не попадаю, но в этом году дата оказалась рядом с конференциями Saint Highload и Saint Teamlead, так что у меня сегодня получилось съездить. Было замечательно: - весть день на природе, много общения и вкуснющий плов. Спасибо Владу за организацию.

P.S. Для тех кто не в курсе - ссылка на пост с приглашением на канале сообщества https://news.1rj.ru/str/spbcoa/79033 Оно, конечно, прошло, но в будущем году будет снова. И у сообщества много других активностей - вдруг кто-то о нем не знает.
🔥43🥰1
#Highload Олег Коровин. GraphQL: зачем на самом деле он нужен. Apollo Federation — дар бога. По этому докладу у меня возникла ассоциация с историей. Когда-то давно были базы данных без SQL, только работа с таблицами, и все join надо было вручную писать в коде. Z это еще застал. Потом пришел SQL и проблема была решена. Сейчас это повторяется: микросервисная аргиюетура разложила объекты о сервисами, для каждого есть свой набор API. GrapgQL позволяет объединять данные из разных узлов в единую схему и делать общие запросы. При этом тогда разработчики относились к появившемуся SQL настороженно: это же накладные расходы, сложно и непривычно. Так и сейчас к GraphQL относятся настороженно как к хипстерской поделке, которая не нужна "настоящим программистам" - OpenAPI достаточно. Докладчик показывал, как GraphQL решает проблемы, сокращает объем кода, делает его более компактным. А также - как решаются проблемы контроля доступа, единой точки отказа и безопасности. Решение GraphQL - легкое и масштабируемое, федерации - stateless, и можно поднимать разные федерации для разных клиентов, подключая только необходимые им сервисные данные. И страивать параллельный доступ для миграции, поднимая федерацию для доступа, но запуская через нее только новые запросы. Тут ситуация выгодно отличается от того, что было с миграцией на SQL-базы данных - там это можно было сделать только целиком. На мой взгляд, получился очень удачный доклад.
👍4🔥4
#Highload Роман Щербаков из Тинькофф. Пайплайны записи своими руками: думали — велосипед, оказалось — паттерны. Рассказ об организации высокой доступности для инфраструктурных потоков: логов, метрик, трейсов. 450 Мб/сек. Целевые хранилища там разные, а архитектура - общая. В докладе - много архитектурных схем, это надо смотреть презентацию. А тут мое краткое резюме принципов.
* Данные пишутся в том же дата-центре, в котором создаются, то есть в каждом - свой набор pipeline, и там же они остывают. А поиск - по всем датацентрам.
* Надо вести мониторинг обращений клиентов и уметь отделять тех, у кого особая нагрузка в отдельный pipeline, с которым отдельно разбираться.
* Worker записи от клиента пишет в Kafka, из которой читает Worker записи в хранилище. И worker записи работает в том темпе, в котором комфортно для БД. Kafka буферизует колебания нагрузки записи. А worker записи делает пакетную запись.
* Отказ операции - нормально. Особые случаи откидываем в отдельную retry-очередь, а если retry не проходит - в очередь ошибок, с которой разбираются вручную. Retry однократный, он на случай, если что-то моргнуло, а если что-то упало - то retry вреден. И такая схема обеспечивает оперативное поступление данных, с которыми все хорошо.
* Если база или узел деградировал - его надо отрубить, для этого фиксировать, что пошли массовые ошибки, для этого Circuit breaking pattern. Аналогично работает bulkhead pattern - ограничение на конкурентные обращения. Это бережет БД.
* Таймауты надо настраивать. Есть бюджет обработки от кафки - таймаут опроса очереди, при превышении которого она считает, что consumer отвалился, и в него надо укладываться, включая все таймауты. И для основного потока там жесткие настройки, а для retry и ошибок - свои.
* Для метрик основной поток пущен напрямую, без kafka, так как на стороне клиента обычно prometheus и у него есть свои буфера. И это экономит. Но при деградации - включается полная схема.
👍10
#Highload Николай Никитин из ИТМО. Как обеспечить воспроизводимость научных исследований в AI/ML с помощью Open Source? Основной тезис доклада, на мой взгляд, остался за рамкой: смысл научного исследования в том, что его результаты могут быть использованы другими в своих разработках. Именно это подразумевается под воспроизводимостью, не ограничиваясь просто проверкой результатов. Для Николая это тезис очевиден, в то время, как в социальных реалиях современной науки это далеко не так. Если же принять этот тезис, то для современных исследований, особенно в области AI/ML, просто публикации статьи недостаточно, к статье должен прилагаться код и наборы данных, которые обеспечат легкое использование результатов, включая его проверку, но не ограничиваясь ей. В open source есть площадки для этого. Но ученые - не программисты, разработка и создание open source для них - не профильная работа, получается довольно высокий порог входа, который полезно снизить. Они в 2020 годы в ИТМО начали это делать, и сейчас у них 10+ различных проектов. Был более подробный рассказ про фреймворк FEDOT. Тут есть особенности, связанные с тем, что есть 2-3 человека в ядре команды и ассоциированные стажры, которые делают студенческие работы. Но для успеха ядро должно быть увлеченным, в том числе проводить менторинг для студентов - и административно это не масштабируется. Такие проекты делают пиар, показывают что университет способен достигать серьезных результатов. Однако, несмотря на это уровень энтузиазма довольно велик. Тут есть вопрос финансирования, если на новые версии его еще можно получить, то на поддержку - не получается. Но сейчас есть возможность получить гранты, и то, что продуктом будет не просто публикация. а open source эксперты оценивают. И коммерческие компании тоже становятся толерантными к выкладке результатов в open source, хотя тут это каждый раз вопрос переговоров. Лично я желаю ИТМО всяческих успехов, и надеюсь, что этот опыт будет распространяться.
👍4
Максим Цепков pinned «Опубликовал на ridero книгу «Менеджмент цифрового мира» https://ridero.ru/books/menedzhment_cifrovogo_mira/ скоро появится и в других магазинах. Книга собрана на основе серии 50+ статей, опубликованных в 2020 на портале vc.ru. Идея сделать книгу возникла почти…»
Максим Цепков pinned «В моей работе над моделью личности - важный этап: опубликована книга "Инженерная модель личности. Меняя себя и других – понимай устройство". Доступна на ридеро https://ridero.ru/books/inzhenernaya_model_lichnosti/ и других площадках. Можно не только читать…»
#Highload Иван Чернов (Островок). Как работать с поставщиками на примере поиска доступных отелей. Чем отличается Островок от Букинга? В силу своей позиции на рынке букинг может от отелей потребовать работать в своей админке, описывать там условия отелей, и резервирование проводить внутри. А еще у него каждый отель представлен однократно. Хотя у каждого отеля есть своя система управления номерами, они очень разные, но проблемы интеграции их с букингом он отдает отелю. Островок сейчас работает как агрегатор, отели продаются через разные каналы, островок все это забирает и предлагает наиболее выгодные цены. В им надо при резервировании получать подтверждение отеля. А еще им важно кешировать запросы, чтобы сокращать число обращений к системам отелей. При этом учитывать, что данные устаревают. Динамика не столь высокая, как для динамического ценообразования в такси, но довольно высокая, при этом сильно различается в зависимости от спроса на конкретный период. При этом у отелей свое ценообразование, для раннего заказа могут быть скидки, для длинных сроков проживания тоже, плюс посредники, предлагающие отели, предлагают скидки по своим правилам. То есть ключ запроса - длинный, включает много данных. В докладе был рассказ про архитектуру решения для кеширования. Использовался redis, но там были сложности, связанные с большими ключами и большим объемом возвращаемых данных. Поэтому перешли на aerospike. В какой-то момент тоже отвалился, при разборе оказалось, что есть два вида ответов: описание доступных номеров и просто отказ, что номеров нет, без информации. И они разделили эти кэши, для кеширования отказов вернулись к redis, в котором использовали фильтр Блума. И тут сои хитрости, потому что некоторые поставщики, если у них проблемы, делают вид, что сервис работает, просто он перестает выдавать доступные номера, и эту ситуацию надо ловить, чтобы временно переставать обращаться. В целом - это был рассказ о решении задачи, в которой у авторов появилась довольно витиеватая схема. Ну и попробовали альтернативу redis.
🔥2
#Highload Максим Метальников, Максим Смоляков из SberDevices. Особенности и вызовы реализации технологии создания готовых музыкальных произведений с применением ИИ. Ребята рассказывали о том, как можно собрать pipeline синтеза песни из различных инструментов ИИ. Фазы pipeline: идея - текст <-> основная мелодия - аранжировка - запись вокала и инструментов - сведение и мастеринг. При этом основная мелодия тоже порождается в несколько тактов: ритм - ноты, и вокал тоже создается этапами. Для каждой фазы подробно рассказывали, какие инструменты использовали, какие там датасеты. И сопровождали это сквозным примером, придуманная на первом этапе ИИ песня в стиле киберпанка. Кроме того, человек может какие-то этапы взять на себя, например, исполнить текст или какую-то партию. Подробнее - смотрите презентацию и запись. По общему впечатлению от результата - нужны необходимые ручки для ручного вмешательства. Поэтапная технология это позволяет, в отличие от генерации готового аудио сразу. И, более того, на ряде этапов у авторов было многослойное представление, например, ритм - ноты - акценты исполнения, или для вокала - слоги, длительности, акценты. И, думаю, этим векторам можно прикрутить понятные ручки управления для снятия шероховатостей. Но пока не сделано.
👍1
#Highload Филипп Дельгядо. Enterprise deploy: почему это больно. Рассказ о технике повышения безопасности деплоя. Особенно важно это для enterprise-решений, которые разворачиваются у клиента: мы не контролируем процесс обновлений и их использование.

Когда-то были монолиты, которые для обновлений останавливали. Сейчас у нас много экземпляров серверов, которые работают с общей базой данных, которая тоже может быть в нескольких экземплярах, и остановить работу для изменения невозможно. Изменения правильно делить не на совместимые и несовместимые, а по безопасности: почти безопасные, возможно опасные и точно опасные. Создать новую таблицу - безопасно. Добавить поле - практически безопасно, но требует краткой блокировки таблицы, и на смеси olap и oltp транзакций под высокой нагрузкой это может выстрелить: oltp задержат дольше допустимого. А создание индекса во многих базах блокирует таблицу надолго, а в PostgreSQL есть специальные методы, как это сделать безопасно, ими надо владеть. Добавление нового значения в enum - опасность больше, надо разбираться с работой старых сервисов с объектами, у которых новое значение. Может быть, что такие записи в них в принципе не попадут, но это всегда не точно.

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

Теперь от базы данных к взаимодействию сервисов. В случае синхронного взаимодействия (http, grpc) применяем:
* Версионирование по методам, а не целиком.
* Изменения окружаем флагами для котроля нового поведения
* Используем тольо безопасные изменения внутри endpoint
* Маршрутизация запросов - чтобы метод получал только понятное
* Контроль жизненного цикла: состояния draft, unstable, deprecated. C разными обязательствами.
* Нужен инструмент управление фича-флагами: рассылка по сервисам, контроль зависимостей, канареечные флаги вместо разнесения по узлам сети, удаление неактуальных флагов

Асинхронные взаимодействия через очереди. Тут нет мгновенного изменения, в очереди живут необработанные события старых версий. И на них нельзя запустить обновление, они придут в виде, в котором посланы. Мы не всегда знаем участников взаимодействия - что читает, кто пишет. И делать версии событий базовые инструменты не позволяют. И тут хороших решений нет.
* Самое простое - новый топик для новых событий. Но при этом мы теряем порядок и партиционирование, нужно сложное переключение и администрирование.
* Сначала обновляем консьюмеров, потом продьюсера. Тогда сервисы перестали быть автономны по деплою, и пояляются проблемы с откатом консьюмеров - для этого надо отвалить продьюсер. Частичное решение - фича-флаг в продьюсере, но то, что в очереди - лежит.
* Отправка нескольких версий - и консьюмер выбирает нужную. Это сложно в реализации, потому что стандартные способы передачи и контроля перестают работать - у вас несколько схем на одно событие, например.
* Можно возложить маршрутизацию на service mesh - чтобы он отправлял на нужных консьюмеров.

А еще - можно не делать асинхронное. Вам нужно сглаживать пики - уберите этот буфер внутрь сервиса, а не располагайте между.
🔥3👍1👎1
Документация: политики совместимости, сценарии обновления, взаимодействия, особенно неформальные, поверх архитектуры.
Тесты: процесса миграции (непросто, это end2end с фоном), частичной работоспособности, откат обновлений
Инструменты: менеджер миграций, управление фича-флагми, управление выкладкой (подождать полчаса и посмотреть логи). Можно делать обновление поверх jenkins, но им пришлось сделать свое - они не могут потребовать от клиентов поставить и сопровождать Jenkins
🔥1
#Highload Чему нас учит черный квадрат и причем здесь программирование. Это была идея Олега Бунина: расширить сознание и посмотреть на другую область. Основной рассказ вел Александр Кибасов (Doctrina et Nobiles), а Олег и Вирна Штерн давали реплики и повросы. А тема Малевича была выбрана потому, что онтико использует стиль супрематизма в оформлении презентаций, а с этого года еще начала делать сувенирку - матрешки, расписанные в этом стиле как приз за лучшие вопросы, докладчикам и членам ПК.

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

Итак, тезисы Александра о Малевиче, супрематизме и искусстве в целом. Отмечу, что он в лекции не разделял явно то, что Малевич говорил явно от позднейших интерпретаций.
* До Малевича искусство - это голые или обнаженные женщины, пейзажи или сюжеты с пресонажами, и для понимания предполагалось знание контекста. Малевич черным квадратом сломал этот стереотип, и сделал искусство без явного смысла и контекста, а для прямого восприятия.
* Искусство предназначено для созерцания, а не для интерпретаций и смыслов. Оно не должно иметь смысла, и это - правильно. Идея бессмысленного жеста - спасительна. Потому что жизнь полна смысла. В чем смысл жизни? Конечно, чтобы ходить к вам на работу. Искусство без смысла разрывает такую логику.
* Искусство без смысла, для созерцания - слом мира мещан, которые везде искали смысл, потому что так принято.
* Черный квадрат сломал элитарность художников: черный квадрат может нарисовать любой, он не требует мастерства. При том, что у Малевича мастерство - было.
* В те времена Петербургская и Московская академии каждый год выпускали художников с классическим подходом, их было много. Черный квадрат ломал традицию.
* Были последователи, ученики и те, кто тоже творил и творит в том стиле. Есть художник, который рисует синие картины, просто закрашивает одним цветом, есть - кто черные, устраивают выставки.
* Кандинский - как Малевич, но для тех, кто любит цвета. Вкусы различны, одним нравится кока, другим - пепси. У него еще была бредовая конструкция, как его картины работают и какие эмоции вызывают.
* После Малевича было еще три соразмерных события. Фонтан Мишеля Дюшана (1917) - нестандартно повешенный писсуар: главное, идея, а создавать предмет не обязательно, можно взять готовый, мастерство не нужно вообще. Один и три стула Джозева Кошута (1965) - инсталляция: стул, его описание и его фото; идея - язык - не рабочая структура, он не передает смыслы, провал коммуникации. И Дерьмо художника Пьетро Мандзони (1961) - вообще подвешивает сферу искусства как таковую.
👍1🔥1
Теперь мои комментарии, тоже в виде тезисов.
* У черного квадрата и последовавшего за ним направления супрематизма был вполне утилитарный смысл: для славы надо было отличаться от других, причем сильно. За счет мастерства это не получается, оно есть, но не экстра-уровня - значит делаем оригинально. Прием не новый, кто-то из скульпторов, творивших в Италии после возрождения ввел в моду барельефы, где фигуры едва намечены, почти рисунок на мраморе - чтобы отличаться от глубоких барельефов Возрожедния, которые уже у всех были. Здесь логика - та же.
* Как мне рассказали после лекции, первый черный квадрат был вполне утилитарной вещью - это часть декорации к спектаклю, где такая картина, наверное, была уместна по замыслу. А дальше - идея зацепила.
* Очень забавно: Чехов критикует мещан за отсутствие смысла, а Малевич - за то, что они везде ищут смысл. Хотя тут можно понять: у тех, кого называли мещанами, понятный смысл жизни из простых человеческих радостей. Они не ищут высокого предназначения, и не признают непонятное, художнику с ними сложно. Это целенаправлено разрушали, и в 1920-е, пока основным мотивом в СССР было низвержение старого супрематизм был в почете. А потом пошли эпоха, когда потребовалось конструирование нового.
* По сути, супрематизм - начало движение деконструкции смыслов. Тогда оно было в форме протестов против предписываемой традицией формы, которая застыла настолько, что тоже была лишена смысла. Но позднее, во второй половине 20 века у деконструкции появилось идеологическое обоснование, и объявлена долгом. И деконструкция искусства - часть этого мейнстрима. В этой концепции ценность искусства определяется замыслом автора и мерой его страдания, оцениваемой по его собственным заявлениям. За подробностями могут оправить в мой пост https://mtsepkov.org/Snowflake и пост https://ivanov-petrov.livejournal.com/2287616.html Это - гораздо более поздняя история, и отдельный вопрос - в каком объеме это было у Малевича, а насколько это - поздние интерпретации. Потому как сейчас любят говорить, что Достоевский воспевал страдающих, а он их не воспевал, он лишь показывал, что бедные - тоже люди, они живут и страдают также как остальные, сообщение было другим.

На этом все. В комментариях можно обсуждать подробнее. Или очно на конференциях.

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