Проект (.net core 3.1 api + mssql server + rabbitmq + reactJS + ffmpeg + ML) в сфере медицины по анализу медициннских материалов (видео и фото) на момент моего прихода хостился на Azure Cloud в Windows VM и не имел какой-то структурности (было три разных Azure аккаунта с хаотично создаными сервисами) и актуальной документации, ввиду отсутвия инженера на протяжении двух лет. Также не имел вменяемых pipeline и автоматизированных процессов по доставки кода в различные среды (sandbox, testing, production). И ввиду большого количества сервисов - переход на микросервисную архитектуру. Задачи которые мне удалось решить за 8 месяцев: 1. Аудит всех ресурсов и миграции их на один аккаунт. (помогло решить проблему с неиспользуемыми ресурсами и как следствия уменьшить стоимость) 2. Анализ кодовой базы и выделение сервисов по группам - frontend, web API, photo/video workers. 3. Миграция с Windows+IIS на Linux+Docker+NGINX Web API сервисов и Frontend. (решение принималось в ввиду ограниченности во времени и полученным ранее мною опытом в bare metal инфраструктуре. в течении двух недель сервисы с минимальным downtime переезжали в Docker, запущенный на Linux VM. В итоге удалось снизить стоимость обслуживания для данных сервисов в 2 раза) 4. Написание Gitlab pipeline для деплоя Docker Compose манифеста содержащего эти сервисы. 5. Доработка вместе с командой разработки worker сервисов для запуска их в Linux контейнере. 6. Перенос этих сервисов с Windows+IIS на Linux+Docker позволил автоматически задокументировать процесс сборки артефакта и увеличить скорость работы worker, ввиду более дешевой стоимость Linux VM. 7. Распиливание монолитной базы данных и миграция MSSQL Server + Windows VM на Azure SQL Managed Instance. 8. Доработка pipeline для deploy отдельных микросервисов и миграция с Linux VM на Azure Container Instance. 9. Доработка backend кода для работы с секретами в Azure Key Vault. 10. Миграция с RabbitMQ на Azure Service Bus (с небольшими правками в backend благо использовался MassTransit) 11. Написание worker (обработчик сообщение с Azure Service Bus и отправление запроса в Azure ML Studio), ответственного за выделение ресурсов Azure ML Studio c GPU для ускорения работы FFMpeg и избавления от простоев дорогостоящей инфрастуктуры с GPU.
Итого: В конце моей работы на проекте мы получили хорошо задокументированную CloudNative инфраструктуру почти на 90% описанную в ARM templates, которая в случая необходимости могла быть быстро развёрнута в ещё одном экземпляре. Решены проблемы с CI и CD процессами, что позволило минимизировать человеческое вмешательство. Большим плюсом я считаю отсутствие в проекте K8S, хотя со стороны заказчика было большое желание. Я же убедил его не переусложнять работающую инфраструктуру. Удалось снизить стоимость инфрастуктуры на 35-40%. Смогли вместе с командой разработки сделать решение позволяющее дать клиентам продукта быстрый отклик от обработки их мед.данных. Не удалось поработать с ML командой, о чём чуть-чуть жалею.