Мир, Труд, Legacy!
Сегодня хотел бы поднять тему Legacy. Но не про то Legacy, которое человек получает по наследству от богатого родственника 😃, а про другое, с которым мы часто сталкиваемся в ИТ, и которое имеет негативную коннотацию.
Всё началось с того, что я наткнулся на текст Patterns of Legacy Displacement. С одной стороны, это статья, в которой в общих чертах и с разных сторон рассматриваются проблемы модернизации Legacy-решений. С другой стороны - это подборка вполне конкретных шаблонов модернизации, ссылки на описание которых приводятся по мере повествования. Авторы заверяют, что будут развивать и поддерживать этот материал в актуальном состоянии, поэтому ссылки на некоторые шаблоны, к сожалению, отсутствуют. В целом, рекомендую для ознакомления или добавления в закладки.
Между тем, хотелось бы определиться, что такое Legacy. Сталкиваясь с этим, в зависимости от ситуации могут возникать двоякие ощущения: страх или жажда всё переписать и сделать нечто совершенное. Первое, как правило, связано с боязнью нарушить работоспособность существующего решения; второе — с моральной усталостью его поддержки. И если нам предоставляется шанс пойти по пути модернизации, то вспомните, с каким опьяняющим азартом мы начинаем махать шашкой и развешивать ярлыки на авторов модернизируемого решения. Кого интересует предыстория?! Нам дали шанс уничтожить ненавистного врага! Знакомо? 😃 Получилось добиться желаемого успеха и прийти к желаемому совершенству? 😉
Прежде чем начинать модернизацию, нужно сделать шаг назад и ответить на вопрос, почему Legacy стал Legacy. Накопился слишком большой технический долг? Или дело в (устаревшем) технологическом стеке? Или просто не осталось специалистов, у которых есть нужные компетенции для поддержки? Конечно, это далеко не полный перечень вопросов, но их цель, я думаю, ясна: не повторить прошлый опыт.
🟢 Апеллируя к своему большому опыту, авторы вышеуказанного текста заключают, что корень проблемы появления Legacy находится всё-таки на уровне культуры организации, её структуры и принятых методов. Таким образом указывают на прямую связь с законом Конвея.
🟢 Вместе с этим отмечается, что нельзя рассматривать инициативу по замене Legacy в отрыве от текущих бизнес-целей. Иначе говоря, если вести разработку как обычно (Business As Usual), а замену Legacy рассматривать как параллельную инициативу без поправок на реалии, ничего не выйдет. В лучшем случае получится то же самое, в худшем — "новая версия", которая слишком сильно или ненужным образом будет отличаться от реалий и желаемого результата. Выражаясь техническим языком, не нужно делать долгоживущие fork-и проекта, они будут слишком сильно оторваны от целей.
🟢 Авторы также указали на острую необходимость декомпозиции. Большой и сложный проект крайне трудно заменить целиком. Любые попытки сделать это часто обречены на полный провал либо на появление еще одной, но новой неуклюжей системы, которая будет жить вечно рядом со старой. Чаще всего можно наблюдать второй вариант, так как бизнес всё равно будет требовать результатов и вывода новой разработки в промышленную эксплуатацию.
〰️ 〰️
Всех поздравляю с Майскими праздниками, желаю прорывных успехов и грандиозных побед!🚀 А в комментариях призываю делиться своим опытом работы с Legacy.😉
Сегодня хотел бы поднять тему Legacy. Но не про то Legacy, которое человек получает по наследству от богатого родственника 😃, а про другое, с которым мы часто сталкиваемся в ИТ, и которое имеет негативную коннотацию.
Всё началось с того, что я наткнулся на текст Patterns of Legacy Displacement. С одной стороны, это статья, в которой в общих чертах и с разных сторон рассматриваются проблемы модернизации Legacy-решений. С другой стороны - это подборка вполне конкретных шаблонов модернизации, ссылки на описание которых приводятся по мере повествования. Авторы заверяют, что будут развивать и поддерживать этот материал в актуальном состоянии, поэтому ссылки на некоторые шаблоны, к сожалению, отсутствуют. В целом, рекомендую для ознакомления или добавления в закладки.
Между тем, хотелось бы определиться, что такое Legacy. Сталкиваясь с этим, в зависимости от ситуации могут возникать двоякие ощущения: страх или жажда всё переписать и сделать нечто совершенное. Первое, как правило, связано с боязнью нарушить работоспособность существующего решения; второе — с моральной усталостью его поддержки. И если нам предоставляется шанс пойти по пути модернизации, то вспомните, с каким опьяняющим азартом мы начинаем махать шашкой и развешивать ярлыки на авторов модернизируемого решения. Кого интересует предыстория?! Нам дали шанс уничтожить ненавистного врага! Знакомо? 😃 Получилось добиться желаемого успеха и прийти к желаемому совершенству? 😉
Прежде чем начинать модернизацию, нужно сделать шаг назад и ответить на вопрос, почему Legacy стал Legacy. Накопился слишком большой технический долг? Или дело в (устаревшем) технологическом стеке? Или просто не осталось специалистов, у которых есть нужные компетенции для поддержки? Конечно, это далеко не полный перечень вопросов, но их цель, я думаю, ясна: не повторить прошлый опыт.
🗂 Посмею сделать небольшую ремарку. Я не могу согласиться с тем, что (устаревший) технологический стек может являться основной причиной получения метки "Legacy". Только если это приводит к серьезным временным/финансовым издержкам/рискам или обусловлено внешним фактором (например, импортозамещением). В остальных случаях это не Legacy. Даже на самой замшелой технологии и древнем языке код может быть написан аккуратно, выглядеть структурно и понятно и не иметь значимых технических долгов. Называя такой проект Legacy, мы просто выражаем своё нежелание работать с ним или указываем на трудность найма специалистов для его поддержки. Проект становится Legacy, когда он серьезно затрудняет развитие бизнеса. Только это может являться поводом внесения значительных изменений, модернизации или замены существующего решения.
Всех поздравляю с Майскими праздниками, желаю прорывных успехов и грандиозных побед!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4🤝1
Неизбежность эволюции (1/2)
Многие сходятся в том, что, начиная новый проект, нужно начать с чего-то простого, чтобы как можно быстрей сделать MVP и получить первую обратную связь. Вполне разумный и рациональный подход. Действительно, зачем собирать космический корабль, который, возможно, никогда не выйдет за пределы ангара или на содержание которого нет ни денег, ни людей.🚀 Тем не менее в душе каждого творца всегда искрится надежда создать нечто уникальное и неповторимое. Почему бы не поддаться этому порыву в новом/текущем проекте?! 😃 Как понять, что пришло время для особенных решений?!
На самом деле подобная постановка вопроса некорректна. Практически любое решение никогда не бывает финальным, тем более сразу. Об этом пишут многие заслуженные авторы, но самой яркой цитатой, пожалуй, является закон Голла.
Позволю себе внести важные уточнения.
🔘 Простота системы означает не примитивизм, а наличие ограниченного числа взаимодействующих между собой элементов с понятными и прослеживаемыми связями между ними.
🟢 Сложность системы означает не трудность организации самой системы, а её зрелость, точность модели предметной области.
Таким образом, если принять неизбежность эволюционного развития систем, тогда гораздо более важным аспектом является возможность самой эволюции. Для этого нужно обеспечить, как минимум, два условия. Во-первых, поскольку на начальных стадиях слишком много неопределенности, нужно как можно дольше сохранять свободу выбора направления развития. Во-вторых, принимаемые решения должны уточнять вектор движения для развития в желаемом направлении. Именно в этом контексте речь идет о гибкости архитектуры.
Гибкость архитектуры — понятие ортогональное к простоте и сложности, означающее степень готовности системы к изменениям. Простая не значит гибкая, обратное также справедливо. Гибкость становится возможной, в том числе, если система не зависит от специфических возможностей составляющих её элементов или особенностей взаимодействия между ними. Например, гибкость снижается, если появляется зависимость от уникальных особенностей определенной базы данных или зависимость этой базы данных от определённого окружения. Между тем, слишком гибкое решение — бесформенное, рыхлое, оно не может задавать структуру, следовательно, вектор развития, обрекая весь проект на провал.
➡️ Подобные умозаключения не являются каким-то открытием, об этом пишут и говорят многие. Я лишь хочу подчеркнуть, что для архитектора важно не только принять обоснованное решение, но и определить пути его дальнейшего развития. Нужно мыслить на несколько ходов вперед, как можно дольше сохраняя простоту и гибкость решения. Пожалуй, это лучший ответ на исходный вопрос о своевременности и возможности тех или иных решений. Каждый следующий шаг должен приближать нас к цели, формировать базу для следующего шага и уточнять направление развития. Если это так, то действуйте! 🚀
#arch #view
⬇️ ⬇️ ⬇️ ⬇️ ⬇️
Многие сходятся в том, что, начиная новый проект, нужно начать с чего-то простого, чтобы как можно быстрей сделать MVP и получить первую обратную связь. Вполне разумный и рациональный подход. Действительно, зачем собирать космический корабль, который, возможно, никогда не выйдет за пределы ангара или на содержание которого нет ни денег, ни людей.
На самом деле подобная постановка вопроса некорректна. Практически любое решение никогда не бывает финальным, тем более сразу. Об этом пишут многие заслуженные авторы, но самой яркой цитатой, пожалуй, является закон Голла.
🗂 A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system. — John Gall, Systemantics (1975)
Позволю себе внести важные уточнения.
Таким образом, если принять неизбежность эволюционного развития систем, тогда гораздо более важным аспектом является возможность самой эволюции. Для этого нужно обеспечить, как минимум, два условия. Во-первых, поскольку на начальных стадиях слишком много неопределенности, нужно как можно дольше сохранять свободу выбора направления развития. Во-вторых, принимаемые решения должны уточнять вектор движения для развития в желаемом направлении. Именно в этом контексте речь идет о гибкости архитектуры.
Гибкость архитектуры — понятие ортогональное к простоте и сложности, означающее степень готовности системы к изменениям. Простая не значит гибкая, обратное также справедливо. Гибкость становится возможной, в том числе, если система не зависит от специфических возможностей составляющих её элементов или особенностей взаимодействия между ними. Например, гибкость снижается, если появляется зависимость от уникальных особенностей определенной базы данных или зависимость этой базы данных от определённого окружения. Между тем, слишком гибкое решение — бесформенное, рыхлое, оно не может задавать структуру, следовательно, вектор развития, обрекая весь проект на провал.
#arch #view
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
Неизбежность эволюции (2/2)
Именно под таким углом нужно смотреть на обоснование очередного решения. По этой причине нужно сразу отбрасывать нижеследующие "обоснования", которые, несмотря на свою комичность, к сожалению, всё-таки встречаются.
Принимая неизбежность эволюционного развития систем, важность гибкости архитектуры на ранних стадиях, а также необходимость постоянной корректировки направления развития (стратегии), остаётся вопрос, почему кто-то начинает не с простых вещей. Почему кто-то сразу начинает с гексагональных архитектур или микросервисов? 😃
Согласен, что иногда это является преждевременным усложнением. Однако, если архитектор или разработчик достаточно опытный, он может позволить себе "срезать углы", действуя на опережение. В данном случае он должен осознавать и указывать на все риски подобных действий, в том числе понимать, кто будет поддерживать и сопровождать такой продукт. Тут можно вернуться к метафоре с "космическим кораблём": нужен ли он на старте, есть ли у вас подходящая команда, инфраструктура, ресурсы? 🤔
P.s. На самом деле я хотел написать пост про распределенные (реляционные) хранилища, но меня понесло немного в другую сторону, и я не стал сопротивляться этому потоку. Надеюсь, что не напрасно. Будем считать данный пост вступлением к следующему. 😃
#arch #view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2😁1
Распределенные SQL-базы
Данные — это фундамент большинства систем. Они эволюционируют вместе с кодом и архитектурой: происходит развитие способов хранения и работы с данными. Миграция данных всегда сопряжена с риском их потери и нарушения работоспособности системы. А если речь заходит о смене БД, риски и сложность миграции возрастают на несколько порядков. 🙈
В том числе по этой причине многие основательно подходят к выбору БД: фундамент должен быть прочным, его должно хватить надолго, он должен выдерживать нагрузку с хорошим запасом. Поскольку кривая эволюции может увести далеко от начальных архитектурных предположений, большинство делают выбор в пользу универсального и проверенного решения — реляционного хранилища. Чаще всего это монолитные реляционные базы вроде PostgreSQL или MySQL/MariaDB. Откровенно говоря, я не поддерживаю идею выбора хранилища на основе принципа "проверенное — значит подходящее". Выбор следует делать осознанно, учитывая требования к системе, возможности хранилища, результаты прикладных экспериментов и тестов.
Так или иначе, оказавшись в ситуации, когда хранилище перестает отвечать требованиям, начинается процесс усложнения решения. С одной стороны, это нормально. Усложнение можно списать на эволюцию и зрелость. 🆚 С другой стороны, усложнение может являться предвестником того, что достигнут некоторый предел возможностей, и его преодоление возможно лишь за счет "неестественных надстроек". 🩼 Например, недавно рассматривал, что может пойти не так с PostgreSQL и как можно с этим ужиться. Бесспорно, иногда это достойный компромисс вместо того, чтобы менять БД.
О каких усложнениях идет речь? Основные усилия направлены на обеспечение согласованности данных (saga, 2PC, inbox/outbox patterns), в том числе по той причине, что часть данных переносят в отдельное (NoSQL) хранилище и/или микросервис. В таких случаях инфраструктурного кода становится на порядок больше кода с бизнес-логикой. Возрастает вероятность возникновения ошибок, порог входа в проект и требования к специалистам для его поддержания и развития.
Чтобы однажды не дойти до предела возможностей БД и не начать городить огород раньше времени, лучше воспользоваться следующим чек-листом:
🔲 Предвидится большой размер базы данных.
🔲 Необходимо горизонтальное масштабирование.
🔲 Необходимы высокие гарантии отказоустойчивости.
🔲 Необходимы гарантии высокой доступности.
Если хотя бы на один вопрос ответ👍 , то следует смотреть в сторону распределенных (SQL-) баз данных. С одной стороны, это гораздо более сложное решение, чем какой-нибудь легковесный монолитный PostgreSQL, 🆚 с другой стороны, это позволит существенно упростить код приложения, оставив в нём место только для бизнес-логики. Все вопросы согласованности делегируются хранилищу, и кажется, что это очень хорошо и правильно. Может, действительно, не стоит изобретать велосипед?! 🚲
В качестве распределенных SQL-баз мне показались интересными следующие решения:
🔵 YDB
🔵 CockroachDB
🔵 YugabyteDB
🔵 TiDB
По активности развития и зрелости этих решений можно сказать, что они пользуются большим спросом. И не случайно, ведь можно получить лучшую версию удобного и универсального SQL-хранилища со всеми преимуществами масштабирования, которые многие почему-то до сих пор приписывают только NoSQL.
#db #arch
Данные — это фундамент большинства систем. Они эволюционируют вместе с кодом и архитектурой: происходит развитие способов хранения и работы с данными. Миграция данных всегда сопряжена с риском их потери и нарушения работоспособности системы. А если речь заходит о смене БД, риски и сложность миграции возрастают на несколько порядков. 🙈
В том числе по этой причине многие основательно подходят к выбору БД: фундамент должен быть прочным, его должно хватить надолго, он должен выдерживать нагрузку с хорошим запасом. Поскольку кривая эволюции может увести далеко от начальных архитектурных предположений, большинство делают выбор в пользу универсального и проверенного решения — реляционного хранилища. Чаще всего это монолитные реляционные базы вроде PostgreSQL или MySQL/MariaDB. Откровенно говоря, я не поддерживаю идею выбора хранилища на основе принципа "проверенное — значит подходящее". Выбор следует делать осознанно, учитывая требования к системе, возможности хранилища, результаты прикладных экспериментов и тестов.
Ясно, что принести на сопровождение подходящее, но никому неизвестное решение — это зачастую совсем не вариант, особенно на ранних этапах развития продукта. Но это один из возможных вариантов, который нужно отвергать обоснованно. Возможно, что миграция данных в будущем обойдётся дороже, чем освоение нового инструмента на старте.
Так или иначе, оказавшись в ситуации, когда хранилище перестает отвечать требованиям, начинается процесс усложнения решения. С одной стороны, это нормально. Усложнение можно списать на эволюцию и зрелость. 🆚 С другой стороны, усложнение может являться предвестником того, что достигнут некоторый предел возможностей, и его преодоление возможно лишь за счет "неестественных надстроек". 🩼 Например, недавно рассматривал, что может пойти не так с PostgreSQL и как можно с этим ужиться. Бесспорно, иногда это достойный компромисс вместо того, чтобы менять БД.
О каких усложнениях идет речь? Основные усилия направлены на обеспечение согласованности данных (saga, 2PC, inbox/outbox patterns), в том числе по той причине, что часть данных переносят в отдельное (NoSQL) хранилище и/или микросервис. В таких случаях инфраструктурного кода становится на порядок больше кода с бизнес-логикой. Возрастает вероятность возникновения ошибок, порог входа в проект и требования к специалистам для его поддержания и развития.
Чтобы однажды не дойти до предела возможностей БД и не начать городить огород раньше времени, лучше воспользоваться следующим чек-листом:
Если хотя бы на один вопрос ответ
В качестве распределенных SQL-баз мне показались интересными следующие решения:
По активности развития и зрелости этих решений можно сказать, что они пользуются большим спросом. И не случайно, ведь можно получить лучшую версию удобного и универсального SQL-хранилища со всеми преимуществами масштабирования, которые многие почему-то до сих пор приписывают только NoSQL.
#db #arch
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
TechLead Conf 2025
Сегодня я выступил с докладом на TechLeadConf 2025 с докладом "Безопасное исполнение ненадёжного кода". Спасибо всем, кто пришел и поддержал!❤️
Пока готовится видео, прикрепляю презентацию и чек-лист по мотивам доклада.🔽 В ближайшем времени, как обычно, более подробно раскрою основные тезисы в текстовом виде.
#conf #untrusted_code
Сегодня я выступил с докладом на TechLeadConf 2025 с докладом "Безопасное исполнение ненадёжного кода". Спасибо всем, кто пришел и поддержал!
Пока готовится видео, прикрепляю презентацию и чек-лист по мотивам доклада.
#conf #untrusted_code
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👏5⚡2🔥1
TechLeadConf X 2025
Прошедшие три недели у меня получились очень насыщенными. 🔥 Получился настоящий марафон. 🏃🏻♂️➡️ Сначала был отпуск в Нижнем Новгороде, затем в Москве, после чего началась стадия итоговой подготовки доклада, состоялся финальный прогон и, наконец, выступление.🎙 И, конечно, же работа. 😃
Нижний Новгород остался в моём сердце навсегда.❤️ Невероятно красивый, спокойный и комфортный город. Набережная, виды на Волгу и Оку, зеленые парки, храмы, фонтаны и, конечно, закаты. Если вы не были там, то посетите его при первой возможности.
По прошествии конференции отдельное спасибо хочется сказать программному комитету и организаторам.❤️ Всё было на высоте, как и всегда. Надеюсь, что участникам и слушателям моего доклада всё также понравилось. 🙈😃
Роль докладчика даёт классную возможность быть и участником конференции, слушать доклады лидеров индустрии. Мне удалось посмотреть несколько докладов очно и в записи. Сделал для себя небольшой конспект самых интересных, на мой взгляд, мыслей, которыми подробней поделюсь чуть позже. Пока отмечу, что много говорилось про необходимость и важность архитектурного контроля (AaC, ADR), про инженерные практики, способы борьбы с техдолгом и legacy. (Полагаю, что растущая популярность последнего напрямую связана с импортозамещением.)
Всем желаю короткой, но очень продуктивной рабочей недели!🚀
#conf
Прошедшие три недели у меня получились очень насыщенными. 🔥 Получился настоящий марафон. 🏃🏻♂️➡️ Сначала был отпуск в Нижнем Новгороде, затем в Москве, после чего началась стадия итоговой подготовки доклада, состоялся финальный прогон и, наконец, выступление.
Нижний Новгород остался в моём сердце навсегда.
По прошествии конференции отдельное спасибо хочется сказать программному комитету и организаторам.
Роль докладчика даёт классную возможность быть и участником конференции, слушать доклады лидеров индустрии. Мне удалось посмотреть несколько докладов очно и в записи. Сделал для себя небольшой конспект самых интересных, на мой взгляд, мыслей, которыми подробней поделюсь чуть позже. Пока отмечу, что много говорилось про необходимость и важность архитектурного контроля (AaC, ADR), про инженерные практики, способы борьбы с техдолгом и legacy. (Полагаю, что растущая популярность последнего напрямую связана с импортозамещением.)
Всем желаю короткой, но очень продуктивной рабочей недели!
#conf
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤1👍1👏1
Безопасное исполнение ненадёжного кода
Дал слово — держи!💪 Так я и сделал, оформив тезисы своего доклада в виде статьи на Дзен. 🚀 Да-да, после "марафона" я решил не останавливаться и еще немного прокатиться на волне вдохновения. 🏄🏻♂️ Чуть позже обещают выложить видео, а пока желаю приятного чтения всем интересующимся. 😉
#conf #dev #arch #untrusted_code
Дал слово — держи!
#conf #dev #arch #untrusted_code
Please open Telegram to view this post
VIEW IN TELEGRAM
Дзен | Статьи
Безопасное исполнение ненадёжного кода
Статья автора «Архитектоника в ИТ» в Дзене ✍: Мы привыкли к тому, что ведем разработку, используя лучшие инженерные практики, включая настройку CI/CD-конвейера.
🔥6
Борьба с техническим долгом и Legacy
Если 10-15 лет назад рассказывали, что такое технический долг, почему он возникает и как может повлиять на дальнейшую разработку, то сейчас начали рассказывать, как с ним бороться. Очевидно, за прошедшие годы многие сильно задолжали. 😂
Судите сами, на прошедшей конференции TechLeadConf 2025 около 30% докладов была посвящена борьбе с техническим долгом и замене Legacy.⚔️ ⚔️
Каждого волнует вопрос, как именно бороться с техдолгом, как его идентифицировать, оценить критичность, существующие и будущие издержки и риски, разработать план по его устранению, устранить и, наконец, убедиться в том, что проблема действительно ушла. У каждого своя тактика и стратегия, так как многое зависит от масштаба компании и её возможностей, но, к счастью, многие сходятся во мнении. Я бы сказал, что у более крупных компаний методы борьбы с техдолгом более системны и основательны.
Сегодня поделюсь заметками, сделанными во время докладов. Я обобщил и выделил наиболее примечательные и полезные идеи и советы, которые, по моему мнению, заслуживают внимания. В итоге получилось достаточно хорошая памятка, с которой рекомендую ознакомиться. 😉🔽
#conf #arch #dev #tip
Если 10-15 лет назад рассказывали, что такое технический долг, почему он возникает и как может повлиять на дальнейшую разработку, то сейчас начали рассказывать, как с ним бороться. Очевидно, за прошедшие годы многие сильно задолжали. 😂
Судите сами, на прошедшей конференции TechLeadConf 2025 около 30% докладов была посвящена борьбе с техническим долгом и замене Legacy.
Каждого волнует вопрос, как именно бороться с техдолгом, как его идентифицировать, оценить критичность, существующие и будущие издержки и риски, разработать план по его устранению, устранить и, наконец, убедиться в том, что проблема действительно ушла. У каждого своя тактика и стратегия, так как многое зависит от масштаба компании и её возможностей, но, к счастью, многие сходятся во мнении. Я бы сказал, что у более крупных компаний методы борьбы с техдолгом более системны и основательны.
Сегодня поделюсь заметками, сделанными во время докладов. Я обобщил и выделил наиболее примечательные и полезные идеи и советы, которые, по моему мнению, заслуживают внимания. В итоге получилось достаточно хорошая памятка, с которой рекомендую ознакомиться. 😉
#conf #arch #dev #tip
Please open Telegram to view this post
VIEW IN TELEGRAM
Дзен | Статьи
Борьба с техническим долгом и Legacy
Статья автора «Архитектоника в ИТ» в Дзене ✍: Если 10-15 лет назад рассказывали, что такое технический долг, почему он возникает и как может повлиять на дальнейшую разработку, то сейчас начали...
🔥5⚡1👍1
Конкурс авторских каналов
Сегодня ничего технического, но должно быть полезно. 😃
Я решил устроить себе встряску и найти дополнительную мотивации, поэтому подал заявку на конкурс авторских Telegram-каналов. 🙈 Как минимум, обещают дать обратную связь, что для меня очень ценно.
Зачем я вам про это рассказываю? Если вы автор, то приглашаю поучаствовать. 😉 Если вы читатель, то на канале конкурса @tg_contest_main можно будет найти для себя еще больше интересных новых авторов и подписаться на них. С началом конкурса начнётся публикация избранных авторских постов, и вы сможете поддержать своих фаворитов. Ну, и меня тоже. 😜
Сегодня ничего технического, но должно быть полезно. 😃
Я решил устроить себе встряску и найти дополнительную мотивации, поэтому подал заявку на конкурс авторских Telegram-каналов. 🙈 Как минимум, обещают дать обратную связь, что для меня очень ценно.
Зачем я вам про это рассказываю? Если вы автор, то приглашаю поучаствовать. 😉 Если вы читатель, то на канале конкурса @tg_contest_main можно будет найти для себя еще больше интересных новых авторов и подписаться на них. С началом конкурса начнётся публикация избранных авторских постов, и вы сможете поддержать своих фаворитов. Ну, и меня тоже. 😜
🔥6👏1
Ускорение интеграционных тестов
Недавно я узнал об инструменте Zonky, который на одном из проектов позволил ускорить выполнение интеграционных тестов в среднем в 3.5-4 раза.🚀 Делать практически ничего не пришлось: подключил зависимость и добавил аннотацию.
Об инструменте
Если вы испытываете проблемы с долгим выполнением интеграционных тестов, пишете на Java/Kotlin, используете Spring (не обязательно) и Testcontainers, то сможете за пару часов повторить мой опыт и проверить эффективность использования Zonky в своём проекте.
Перед запуском интеграционных тестов Zonky создаёт и настраивает указанную embedded-базу данных и регистрирует её в качестве источника. Заявлена поддержка PostgreSQL, MSSQL, MySQL, MariaDB, H2, HSQLDB и Derby. Библиотека интегрирована со Spring, генераторами схемы данных Liquibase и Flyway, может работать без Docker (проверено для PostgreSQL). В основе реализации два ключевых момента: использование embedded-базы данных и оптимизация процессов её инициализации и восстановления. Для базового использования достаточно пометить тестовый класс аннотацией
О тестировании
Долгое прохождение тестов — явный признак нарушения пирамиды тестирования.😏 Проект, где я ускорил тесты, имеет очень мало модульных и очень много интеграционных тестов. Это и стало причиной получения столь значительного эффекта.
Если с пирамидой тестирования всё нормально, то инструменты, подобные Zonky, скорей всего, не принесут желаемого ускорения. В этом случае лучше продолжать использовать популярный и проверенный временем Testcontainers. Если же тяжёлых интеграционных тестов с участием баз данных очень много, то Zonky поможет сэкономить время. Однако последнее я бы воспринимал как инвестицию: сэкономленное время лучше потратить на наведение порядка и выравнивание пирамиды тестирования. 😉
#dev #db #tip
Недавно я узнал об инструменте Zonky, который на одном из проектов позволил ускорить выполнение интеграционных тестов в среднем в 3.5-4 раза.
Об инструменте
Если вы испытываете проблемы с долгим выполнением интеграционных тестов, пишете на Java/Kotlin, используете Spring (не обязательно) и Testcontainers, то сможете за пару часов повторить мой опыт и проверить эффективность использования Zonky в своём проекте.
🗂 У меня есть страсть — узнавать происхождение необычных слов. Оказалось, что зонки — искусственно созданные виды непарнокопытных. Гибрид зебры и осла, выведенный в XIX веке. На вид они мультяшно-миловидные, но свободолюбивые и упрямые. Впрочем, это уже совсем другая история. 😃
Перед запуском интеграционных тестов Zonky создаёт и настраивает указанную embedded-базу данных и регистрирует её в качестве источника. Заявлена поддержка PostgreSQL, MSSQL, MySQL, MariaDB, H2, HSQLDB и Derby. Библиотека интегрирована со Spring, генераторами схемы данных Liquibase и Flyway, может работать без Docker (проверено для PostgreSQL). В основе реализации два ключевых момента: использование embedded-базы данных и оптимизация процессов её инициализации и восстановления. Для базового использования достаточно пометить тестовый класс аннотацией
@AutoConfigureEmbeddedDatabase(provider = ZONKY).О тестировании
Долгое прохождение тестов — явный признак нарушения пирамиды тестирования.
Если с пирамидой тестирования всё нормально, то инструменты, подобные Zonky, скорей всего, не принесут желаемого ускорения. В этом случае лучше продолжать использовать популярный и проверенный временем Testcontainers. Если же тяжёлых интеграционных тестов с участием баз данных очень много, то Zonky поможет сэкономить время. Однако последнее я бы воспринимал как инвестицию: сэкономленное время лучше потратить на наведение порядка и выравнивание пирамиды тестирования. 😉
#dev #db #tip
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5✍1⚡1
Для удобства навигации по каналу собрал подборку постов.
Потоки данных
Базы данных
Архитектура и разработка
Системное программирование
Алгоритмы и шаблоны
Безопасность
#pin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3
Архитектоника в ИТ pinned «📌 Подборка постов Для удобства навигации по каналу собрал подборку постов. 🚀 Потоки данных 🟡 Ускорение потоков данных 🟡 Log-based- и Queue-based-брокеры сообщений 🟡 Фэйл с RabbitMQ и Kubernetes API 🟡 Гарантированная отправка сообщений Базы данных 🟡 Что не так…»
Голосование за канал
Я уже говорил, что участвую в конкурсе авторских каналов. В минувшее воскресенье закончился приём заявок и началось голосование.🏆
Прежде всего, предлагаю пройтись по списку номинаций и выбрать для себя что-то интересненькое. 😉 Если после этого у вас останутся силы, проголосуйте за своих фаворитов, они этого ждут. 😃Однако есть нюанс: чтобы исключить вероятность накрутки, голосовать могут только подписчики @tg_contest_main . 🙈
Если что, мой канал находится в номинации "Разработка и управление командой" — список каналов и форма для голосования тут.😏
Помимо этого, участники нашей номинации сформировали подборку каналов и оформили её в виде Telegram-папки. Открывайте, смотрите, выбирайте, что по душе.🚀
Я уже говорил, что участвую в конкурсе авторских каналов. В минувшее воскресенье закончился приём заявок и началось голосование.
Прежде всего, предлагаю пройтись по списку номинаций и выбрать для себя что-то интересненькое. 😉 Если после этого у вас останутся силы, проголосуйте за своих фаворитов, они этого ждут. 😃
Если что, мой канал находится в номинации "Разработка и управление командой" — список каналов и форма для голосования тут.
Помимо этого, участники нашей номинации сформировали подборку каналов и оформили её в виде Telegram-папки. Открывайте, смотрите, выбирайте, что по душе.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Стала доступна 📱 видеозапись моего доклада "Безопасное исполнение ненадежного кода" с TechLead Conf X 2025. Также напомню, что ранее я выкладывал текстовый вариант и презентацию. 😉
📱 YouTube
📱 VK Video
Для тех, кто не в курсе истории появления и развития содержательной части доклада, можно воспользоваться хэш-кодом #untrusted_code. Всё началось с обещания рассказать, как справляться с потенциально вредоносным кодом. Чтобы не делать доклад слишком прикладным и скучным, привязанным к какому-то конкретному домену, я обобщил подход и выделил ключевые, повторно используемые приёмы.
〰️ 〰️ 〰️
Я рад, что в канале стало больше людей. Ваше внимание вдохновляет меня. Спасибо!❤️
#conf #untrusted_code
Для тех, кто не в курсе истории появления и развития содержательной части доклада, можно воспользоваться хэш-кодом #untrusted_code. Всё началось с обещания рассказать, как справляться с потенциально вредоносным кодом. Чтобы не делать доклад слишком прикладным и скучным, привязанным к какому-то конкретному домену, я обобщил подход и выделил ключевые, повторно используемые приёмы.
🗂 О чём доклад? Даю определение ненадёжного кода и рассматриваю различные способы его исполнения. Рассказываю про уровни изоляции кода, методы ограничения ресурсов процесса операционной системы, проблемы жёсткого лимитирования и техники их устранения. Сравниваю два архитектурных подхода управления песочницами. Затрагиваю вопросы использования инструментов контейнеризации.
Я рад, что в канале стало больше людей. Ваше внимание вдохновляет меня. Спасибо!
#conf #untrusted_code
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Безопасное исполнение ненадежного кода / Александр Межов
Профессиональная конференция, посвященная инженерным процессам и практикам TechLead Conf X 2025
Презентация и тезисы:
https://techleadconf.ru/2025/abstracts/14403
Рассмотрим тему безопасного исполнения ненадежного кода (untrusted code). Любого программного…
Презентация и тезисы:
https://techleadconf.ru/2025/abstracts/14403
Рассмотрим тему безопасного исполнения ненадежного кода (untrusted code). Любого программного…
🔥6👍2