Русский
Русский
English
Статистика
Реклама

Чеклист

Скрытые расходы при переходе на микросервисы

03.12.2020 12:07:50 | Автор: admin

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

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

С этой темой я выступал на ArchDays 2020. По ссылке вы найдете слайды и видео (скоро будет опубликовано) выступления https://blog.byndyu.ru/2020/12/archdays-2020.html.

1 Изменение подхода к работе с мастер-данными

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

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

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

  1. анализ схемы данных монолита,

  2. анализ потоков обработки данных,

  3. анализ использования данных сторонними системами,

  4. бизнес-цели компании по работе с данными,

  5. "нарезка" данных по новым базам,

  6. миграция данных в новые базы микросервисов,

  7. тестирование миграции.

Четыре основные стратегии работы с мастер-данными описаны в статье Управления мастер-данными в микросервисной архитектуре.

Как и остальные 9 факторов, переработку мастер-данных нужно оценивать и учитывать в бюджете перехода на микросервисы еще до старта перехода.

2 Невозможность переиспользования исходного кода монолита

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

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

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

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

3 Проектирование системы заново

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

Запланируйте время IT-архитектора, бизнес-аналитиков и стейкхолдеров на анализ бизнес-требований. Кроме этого, запланируйте время на проектирование API будущей системы.

4 Создание нового подхода к управлению инфраструктурой

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

Что нужно учесть в оценке:

  1. Создание инфраструктуры для управления API: анализ вызовов, система прав, публикация API и т.д. Для примера рекомендую посмотреть функциональность Apigee.

  2. Переход DevOps-инженеров на работу только в концепции IaC и контейнеризацию.

  3. Реализовать тотальное логирование и мониторинг микросервисной архитектуры.

5 Измерение и проверка SLA каждого микросервиса

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

Для любителей SRE уточню, что здесь было бы правильнее использовать термин SLO, потому что SLA = SLO + санкции за нарушение договоренностей.

Другими словами, ранее неявный SLA становятся явными и требует проработки:

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

6 Микросервисы добавят на порядок больше точек отказа

Вместе со значительным увеличением числа сервисов по сравнению с монолитом, вы получаете рост точек интеграции, усложнение процесса CI/CD и распределение мастер-данных, что значительно усложнит всю инфраструктуру. Шанс получить проблему на проде будет очень высоким, если целенаправлено не вкладываться в fault tolerance на всех уровнях: проектирование архитектуры, разработка и тестирование.

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

  1. Нагрузочное и стресс-тестирование, и, в идеале, применение chaos engineering.

  2. Применение шаблонов проектирования, таких как Circuit Breaker и Tolerant Reader.

  3. Настройка инфраструктуры: service discovery, health-check,...

7 Реорганизация команд

Когда монолит распадется на много маленьких независимых микро-систем, то встанет вопрос, как теперь организоваться людей вокруг этого "роя"?

Общее решение звучит так: создавайте кросс-функциональные команды (build-and-run team) под каждый микросервис. Но есть нюансы. До старта работ обсудите и выберете какая оргструктура подойдет под ваши задачи и ваш бизнес. Обратите внимание на следующее:

  1. Выберите подход к распределению ответственности команд между микросервисами. Например, возьмите вот такой Service per team.

  2. Примерьте на себя InnerSource, чтобы разгрузить команды микросервисов от входящих запросов. InnerSource и микросервисы хорошо работаю вместе.

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

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

Ремарка о постепенности перехода

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

Самое важно на схеме то, что системы долгое время живут вместе. Даже функциональность, которая уже реализована на микросервисах, не сразу отключается в монолите. Это важно для следующих трех факторов.

8 Обратная совместимость с монолитом

Бизнесу захочется снизить свои риски и не выключать монолит сразу, а переходить на микросервисы постепенно. Функциональность, реализованная в микросервисах, будет работать параллельно с той же функциональностью в монолите. Поэтому вам придется реализовывать обратную совместимость микросервисов с монолитом. Это первая часть работы, которую нужно закладывать в оценку.

Вторая часть работы связана с тем, что монолит не всегда готов принимать потоки данных в протоколах и форматах удобных для микросервисов. Например, монолит работает с SOAP, а вы всё реализовываете на protobuf, или монолит знает WCF, а вы пишите на .NET Core, где WCF реализован частично. Поэтому часто приходится доделывать функции в монолите, чтобы микросервисы могли отсылать в него данные. Чтобы эти задачи были сделаны, нужно заранее договориться с командой монолита с каким приоритетом и по какому процессу они будут принимать задачи от команды микросервисов.

В оценке вам нужно учесть доработки в микросервисах и в монолите для создания обратной совместимости, а также совместное тестирование.

9 Интеграция и обучение служб поддержки

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

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

10 Догоняющий поток фич от бизнеса

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

Чтобы догоняющий поток фич от бизнеса не стал для вас сюрпризом, нужно:

  1. Заранее договориться с командой, разрабатывающей монолит о правилах совместной работы.

  2. Договориться с бизнесом о процессе внесения новых фич в период жизни обеих систем.

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

Чеклист

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

  1. Мастер-данные

  2. Написание кода по-новому

  3. Проектирование IT-продукта заново

  4. Создание новой инфраструктуры

  5. Измерение и проверка SLA

  6. Вклад в fault tolerance на всех уровнях

  7. Реорганизация команд

  8. Работы по обратной совместимости

  9. Интеграция служб поддержки

  10. Догоняющий поток фич

Если в плане перехода вы учли все пункты, то скорее всего довольно точно попадете в оценку.

После всего описанного выше вы могли задуматься, зачем вообще переходить на микросервисы, если это так долго и дорого? Ответ на этот вопрос есть, например, в моем выступлении на AgileDays 2017 и в описании на microservices.io. Чтобы принять взвешенное решение о переходе, а не просто пойти за модой, желательно оценить плюсы и минусы для вашей конкретной ситуации.


Ссылки для погружения:

  1. The Death of Microservice Madness in 2018, Dave Kerr

  2. The hidden costs of microservices, Wayne Geils, Mike Hostetler

  3. Microservice Trade-Offs, Martin Fowler

  4. Pattern: Microservice Architecture, Chris Richardson

  5. The Hidden Costs of Microservices, Justin Leitgeb

  6. Challenges and benefits of the microservice architectural style Part 1 + Part 2, Andr Fachat

Подробнее..

Чек-лист перед калибровкой модели машинного обучения

04.08.2020 18:23:50 | Автор: admin
Часто в теории работа модели выглядит просто и складно, но когда вы получаете набор реальных данных и задачу их посчитать, это может вызвать ступор. Даем 7 полезных советов от Петра Лукьянченко, ex-Team Lead Analytics в Lamoda и руководителя онлайн-курса Математика для Data Science. Продвинутый уровень.



Привет! Это Петр Лукьянченко (PetrPavlovich). Мой чек-лист подборка мыслей, которые выработались за годы набитых шишек и допущенных ошибок.

1. Постановка задачи


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

2. Данные (Garbage In = Garbage Out)


Всегда убеждайтесь, чтобы в данных не было задвоений. Фраза Garbage In = Garbage Out означает, что если данные собраны кое-как, то и результат получится кое-как. Кстати, именно поэтому есть отдельная профессия Data Engineer специалисты, которые вычищают зачастую героическим трудом просто отвратительнейшие данные. Они умеют в них выявлять отклонения outliers, убирают их, исправляют, чтобы потом аналитики могли работать с качественными дата сетами.

3. Предметная область


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

4. Логика модели


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

5. Метрика на тесте важнее метрики на обучении


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

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

6.Чем проще регрессия, тем она будет лучше работать


И чем тяжелее регрессия, тем больше вероятность, что что-то пойдет не так.

7. Лучше хорошая регрессия сейчас, чем идеальная через час


Если вам удалось придумать хорошую регрессию, то лучше на этом остановиться. Не пытайтесь сделать что-то идеальное, сверхточное. Порой в попытках улучшить можно на самом деле ухудшить. Да, хочется достичь 100 прогнозирования, но не бывает в реальной жизни 100%-го качества. Даже самые лучшие метрики по качеству на Kaggle имеют 96-98%.

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



На таком дата сете можно построить большое множество различных регрессий, где каждая будет давать свой прогноз. Вот как раз, как выбрать лучший прогноз, как выявлять отклонения outliers в данных и многие другие практические вещи мы проходим на продвинутом курсе Математика для Data Science.

Поэтому если вы уже работаете или только собираетесь перейти в сферу Data Science, но математику знаете на уровне проходил что-то в институте, у нас вы получите все недостающие навыки.

Еще больше полезной информации можно найти в авторском telegram-канале Петра.



Читать ещё:


Подробнее..

Чеклисты в помощь QA

15.10.2020 18:13:18 | Автор: admin

Привет, Хабр!Анастасия Асеева-Нгуен (эксперт по инженерным практикам в Tinkoff Group) приглашает специалистов по тестированию на бесплатный Demo-урок Метрики, который пройдёт в рамках нового профессионального курса OTUS QA Lead. А мы публикуем статью Анастасии Шариковой руководителя отделом тестирования в Bookmate.

Всем привет! Меня зовут Анастасия Шарикова, я руковожу отделом тестирования в Bookmate и веду телеграм канал Yet another QA.

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

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

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

Варианты использования чек-листов

Как верно было написано у С. Куликова в Тестирование программного обеспечения. Базовый курс

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

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

  • Ad-hoc/Исследовательское тестирование структуризация идей и задач в случае проведения таких видов тестирования+ отметка для себя о том, что уже проверено.

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

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

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

  • Приемка задач и в этом контексте мы можем говорить и про визуализацию стадий тестирования, и про визуализацию готовности взятия задачи в работу. В первом случае мы можем составить список, пример которого можно найти, например, тут . Во втором случае мы можем создать, например, чек-лист в таске в Jira, который будет требовать наличие документации, макетов, информации об окружении и прочей важной информации для перевода задачи в статус Testing.

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

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

  • Матрицы трассируемости - по сути основой этой матрицы и будет служить чек-лист. Подробнее о примере, можно почитать, например, тут.

  • Планирование тестирования - один из вариантов составления тест-планов, который вполне имеет место.

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

Способы составления чек-листов

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

Преимущества и сложности в использовании

Рассмотрим основные преимущества и сложности, которые могут появиться при использовании чек-листов для различных кейсов и задач:

Плюсы:

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

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

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

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

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

Минусы:

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

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

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

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

Инструменты

Как итог, перечислю одни из самых популярных инструментов для составления чек-листов:

  • TestRail, TestLink и прочие системы тест-менеджмента.

  • Trello тоже имеет функционал составления чек-листов в рамках задач.

  • Google.Sheets этот инструмент в представлении не нуждается. Тем не менее это, конечно, не единственное решение с таблицами, Exсel тоже подойдет!

  • To Do перерождение Wunderlist и отличное решение для чек-листов, особенно для личного использования.

  • Miro а вот тут будет удобно создавать уже Mind Maps.

  • Jira в этом случае есть много вариантов встраивания под разные задачи + доп. Инструменты, такие как этот.

Знаете еще крутые инструменты и кейсы использования? Пишите в комментариях!


Интересно развиваться в данном направлении? Запишитесь на бесплатный Demo-урок Метрики, а также приходите на другие Demo-уроки для QA-специалистов:

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru