Comments 17
Как тестировать микросервисы?
А то я написал сервис авторизации на c#, запускается и не работает.
Простые случаи видимо можно тестировать через open API/swagger. А сложнее?
В случае ручного тестирования можно пользоваться swagger, при автотестах использую postman или, например, python. Это все делают QA-инженеры.
Backend разработчики обычно пишут Unit тест на свой код, возможно я еще напишу статью об этом, пока можете посмотреть в сторону вот этого шаблона для NUnit https://github.com/Pepegov/Template.Net.NUnit. Тут используются библиотеки NSubstitute, AutoFixture и Bogus
Руками тестировать можно прямо из IDE через http-файлы. Для написания интеграционных тестов есть WebApplicationFactory, есть Aspire.
Упаковка микросервисов в Docker-контейнеры ...
Подскажите, а как лицензируются контейнеры? С виртуалками вроде +- все понятно, а вот контейнеры...
Второе, пытался на 2022 сервере использовать докер, на windows контейренах, после каждой перезагрузки ломались права на volume. Пока own'ера заново не переназначишь доступа нет. Причем что под Администратором, что под пользователем. И почему-то всегда после ребута. Не сталкивались?
Не очень понял первый вопрос. Если вы имеете ввиду юридическую сторону, то лецензии в контейнере, скорее всего, будут теже что и у системы, которая используется за основу. Например, Alpine Linux распространяется по лецензии MIT (на основе этого дистрибутива базируются большая часть контейнеров). Проще всего будет зайти на официаьный сайт и посмотреть там https://mcr.microsoft.com/en-us/artifact/mar/dotnet/aspnet/about, тут видно, что у linux контейнера лецензия MIT. Если говорить о лецензии на windows контейнере, то тут скорее всего будет MICROSOFT SOFTWARE LICENSE TERMS.
Насчет контейнеров. Я бы не рекомендовал использовать windows контейнеры впринципе. По большей части компании используют linux на своих сервер и, тем более, вы скорее столкнетесь с iis на windows серверах чем с docker. Даже если вы используете windows, то можно рассмотреть вариант с WSL.
Насчет прав в контейнере. Возможно тут просто системы по разному монтируют volume. Если проблема происходит после перезапуска сервера, то проблема может быть связанна с Hyper-V (если используется) так как файлы монтируются через виртуальный слой. Вы можите попробовать явное указание владельца Volume при монтировании или изменить права на нужную директорию непосредственно внутри Dockerfile
Я бы не рекомендовал использовать windows контейнеры впринципе...если вы используете windows, то можно рассмотреть вариант с WSL.
С WSL то все понятно. Но не все можно собрать\запустить под Linux'ом. У меня были (есть) две задачи:
Сборка\компиляция python приложения в exe. Все хорошо, но pywin32 ставится только под windows (да-да, работа с COMом через python). Так вот для CI\CD есть ровно два варианта или windows контейнер, что как бы правильно, или делать отдельную ноду\виртуалку, а ее как бы купить надо (ну, по правильному), ресурсы выделить и держать включенной + безопасность настроить.
Мне надо запускать приложение как раннер. Т.е. сервис смотрит в очередь брокера сообщений, если чет появилось, то запускает win32-приложение, через COM работает с данными и возвращает ответ. Это тоже очень хорошо ложится в контейнеры и CI\CD
Обе эти задачи неплохо реализуются через win-контейнеры.
Первый вопрос, связанный с лицензиями, заключается в том что у MS все лицензируется за отдельные деньги. Если брать Server, то мы сначала лицензируемся по количеству ядер - больше 16 ядер? покупай доп. лицензию. Потом по количеству виртуалок - Standart позволяет запускать 2 версии себя бесплатно. Но! Условно, если вы хотите дополнительно запустить 5 шт. win11, то должны купить эти самые win11 в количестве 5 шт.. Соответственно, мой вопрос и был как лицензируются windows-контейнеры. Пока, все что нашел, это то что у Server нет лимита на win-server-контейнеры, но вот если в контейнере не server или сервер другой версии:

Винда клиент бесплатная если сервер тоже винда.
Но это не точно...
Пример Dockerfile для микросервиса
Сейчас для создания образа достаточно одной таблэт... команды:
dotnet publish -t:PublishContainer
Хорошая статья, спасибо. Неплохо бы ещё описать поддержку распределённых транзакций для микросервисов, а то вручную чистить то ещё веселье...
Проект не особо соответствует чистой архитектуре. Интрефейсы не выделены, сервисы и код связанный с БД в одном проекте.
От чистой архитектуры только пара названий.
Введение в микросервисы C# + шаблон