Как создать микросервис в ASP.NET Core

автор vadim


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

В этой статье рассматривается архитектура микросервисов, ее преимущества и недостатки, а затем показано, как можно реализовать простой микросервис в ASP.NET Core. В будущих статьях мы дополним наше приложение на основе микросервисов, реализовав шлюз API и взаимодействие между нашими микросервисами.

Чтобы использовать примеры кода, представленные в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Что такое микросервисная архитектура?

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

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

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

Преимущества и недостатки микросервисов

В этом разделе мы кратко рассмотрим ключевые преимущества и недостатки архитектуры микросервисов. Ключевые преимущества микросервисной архитектуры:

  • Масштабируемость. Позволяя отдельным сервисам масштабироваться независимо в зависимости от спроса, микросервисы улучшают общую масштабируемость системы.
  • Гибкая разработка: микросервисы позволяют командам самостоятельно разрабатывать и развертывать сервисы, ускоряя циклы разработки и обеспечивая непрерывную доставку и развертывание в соответствии с принципами и практиками DevOps.
  • Изоляция ошибок и устойчивость. Благодаря архитектуре микросервисов сбой одной из служб не повлияет на приложение в целом. Система более устойчива благодаря изоляции сбоев и способности корректно обрабатывать сбои.
  • Технологическая гибкость. Микросервисы позволяют каждому сервису использовать разные языки программирования, платформы и технологии. Это объясняет, почему команды могут выбирать желаемый стек технологий для каждого сервиса при работе с приложениями на основе микросервисов.
  • Автономные команды. Микросервисы предназначены для поддержки небольших межфункциональных команд, работающих над отдельными сервисами, что позволяет командам стать более автономными, эффективными и целенаправленными.

И потенциальные недостатки микросервисной архитектуры:

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

Теперь давайте рассмотрим, как можно создать простое приложение на основе микросервисов в ASP.NET Core. Мы начнем с создания проекта веб-API ASP.NET Core.

Создайте проект веб-API ASP.NET Core в Visual Studio 2022.

Чтобы создать проект веб-API ASP.NET Core 7 в Visual Studio 2022, выполните действия, описанные ниже.

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В следующем окне «Дополнительная информация» оставьте флажок «Использовать контроллеры (снимите флажок, чтобы использовать минимальные API)». В этом проекте мы не будем использовать минимальные API.
  9. В другом месте окна «Дополнительная информация» оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию) и убедитесь, что флажки «Включить поддержку Open API», «Настроить для HTTPS» и «Включить Docker» остаются снятыми. . Мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

Мы будем использовать этот проект веб-API ASP.NET Core для работы с примерами кода в разделах ниже.

Реализация микросервиса в ASP.NET Core.

Для простоты наше приложение на основе микросервисов будет состоять из трех сервисов: «Клиент», «Продукт» и «Поставщик». Для краткости я создам здесь микросервис «Клиент», и вы можете выполнить те же шаги для создания двух других микросервисов.

Микросервис «Клиент» будет включать в себя следующие типы:

  • Клиент – класс сущности
  • ICustomerRepository – интерфейс репозитория клиентов.
  • CustomerRepository — класс клиентского репозитория.
  • CustomerController — контроллер API, который предоставляет одну конечную точку для получения данных.

Для простоты наш микросервис будет иметь только один метод действия, то есть одну конечную точку. Чтобы создать наш класс сущности, в проекте CustomerAPI создайте файл с именем Customer и введите туда следующий код.

public class Customer
{
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
}

Чтобы создать репозиторий клиента, создайте интерфейс с именем ICustomerRepository в файле с тем же именем и введите следующий код.

public interface ICustomerRepository
 {
     public Customer GetById(int id); 
 }

Класс CustomerRepository реализует интерфейс ICustomerRepository и предоставляет реализацию метода GetById.

public class CustomerRepository : ICustomerRepository
 {
     private readonly List<Customer> _customers;
     public CustomerRepository()
     {
         _customers = new List<Customer>
         {
             new Customer
             {
                 Id = 1,
                 FirstName = "Joydip",
                LastName = "Kanjilal",
                 Address = "Hyderabad, India"
             },
             new Customer
             {
                 Id = 2,
                 FirstName = "Steve",
                 LastName = "Smith",
                 Address = "Chicago, USA"
            }
         };
     }
     public Customer GetById(int id)
     {
         return _customers.Find(x => x.Id == id);
     }
 }

Вам следует зарегистрировать экземпляр типа ICustomerRepository в файле Program.cs, используя следующий фрагмент кода.

builder.Services.AddScoped<ICustomerRepository, CustomerRepository>();

Это позволит вам использовать внедрение зависимостей для создания экземпляра типа ICustomerRepository в классе контроллера. Наконец, создайте новый контроллер API с именем Customer и замените сгенерированный по умолчанию код следующим кодом.

using Microsoft.AspNetCore.Mvc;
namespace CustomerAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CustomerController : ControllerBase
    {
        private readonly ICustomerRepository _customerRepository;
        public CustomerController(ICustomerRepository customerRepository)
        {
            _customerRepository = customerRepository;
        }
        [HttpGet("{id}")]
        public Customer Get(int id)
        {
            return _customerRepository.GetById(id);
        }
    }
}

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

Микросервисы против монолита

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

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

В этом посте мы продемонстрировали, как создать простой микросервис в ASP.NET Core. В следующей статье об архитектуре микросервисов мы рассмотрим, как мы можем использовать шлюз API с нашими микросервисами для обеспечения безопасности и предоставления единой точки доступа к серверным службам. Затем мы завершим наше приложение на основе микросервисов, реализовав взаимодействие между сервисами.

Related Posts

Оставить комментарий