Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
DevOps Engineer

HealthCare

Добавлено 03 мая 2023 в 16:40
Проект (.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 командой, о чём чуть-чуть жалею.
9c7352e5d9