Сравнение шлюзов API микросервисов

Микросервисы

предисловие

Микросервисы — основная современная тенденция. Шлюзы API уступают только реестру (в предыдущей статье уже упоминался реестр). Шлюзы API могут уменьшить управление доменными именами, унифицированную аутентификацию служб, служебный журнал traceId и т. д. Большинство задач были предварительно распределены в группу, поэтому результаты были разделены.

текст

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

Введение компонента

  1. springcloudgateway, официальный API-шлюз Springcloud, основан на springboot2.0 и springcloud2.0 и интегрирован в компоненты springcloud;
  2. Zuul, шлюз API, созданный netflex, springcloud интегрирует zuul1.x, а 1.x больше не поддерживает обновления, а springcloud больше не интегрирует zuul2.

Использование компонентов

1. springcloudgateway

       

pom引用

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

yml配置路由转发
spring:
 application:
 name: gateway-demo
  cloud:
 gateway:
 routes:
   - id: path_route
     uri: lb://demo(业务路径)
     order: 0
     predicates:
  - Path=/exercise/**
     filters:
  - StripPrefix=1
     - TokenCheck
配置局部过滤器
public class TokenCheckGatewayFilterFactory extends AbstractGatewayFilterFactory<TokenCheckGatewayFilterFactory.Config> {

    public TokenCheckGatewayFilterFactory() {
        super(Config.class);
 }

@Override
 public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            System.out.println("Welcome to AuthFilter.");
 String token = exchange.getRequest().getHeaders().getFirst("token");
 if (Config.authToken.equals(token)) {
                return chain.filter(exchange);
 }
            ServerHttpResponse response = exchange.getResponse();
 response.setStatusCode(HttpStatus.UNAUTHORIZED);
 return response.setComplete();
 };
 }

    static class Config {
        static String authToken = "12345";
 }
}

2. zuul

pom引用

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>

配置路由转发
zuul:
  routes:
    api-a:
      path: /gate/**
      serviceId: service-demo1
      #具体注册到注册中心的服务如service2
    service2:
      path: /service2/**
      serviceId: service2

配置全局过滤器(zuul只有全局过滤器)
@Component
public class PreFilter extends ZuulFilter {

    Logger logger = LoggerFactory.getLogger(PreFilter.class);

 @Override
 public String filterType() {
        return "pre";
 }

    @Override
 public int filterOrder() {
        return 0;
 }

    @Override
 public boolean shouldFilter() {
        return true;
 }

    @Override
    public Object run() {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        HttpServletResponse response = requestContext.getResponse();
        String requestURI = request.getRequestURI();
        logger.info("[ValidateConfigurerAdapter.preHandle] request handle uri is {}", requestURI);
        response.setCharacterEncoding("utf-8");
        String token = request.getHeader("token");

        if (!StringUtils.isEmpty(token) && token.equals("123456")) {
            return null;
        }
        requestContext.setSendZuulResponse(false);
        requestContext.setResponseStatusCode(401);
        return null;
    }
}

использовать контраст

измерение springcloudgateway zuul
Экология сообщества высокая популярность сообщества Низкая популярность в сообществе и много китайских документов
Простота использования Интеграция облачных компонентов Spring, основанная на springboot 2.0, необходимо обновить проект до springboot2.X Компонент Spring Cloud netflix интегрирует версию zuul1.x, версия 1.x основана на блокировке ввода-вывода, версия 2.X — это netty, асинхронный неблокирующий ввод-вывод, поддерживает длительное соединение, но Springcloud пока не интегрирован. Версия zuul 1.x основана на springboot1.x.
представление nacos+весенний облачный шлюз+сервис; персональный локальный стресс-тест; параллелизм 100: 3 мс; параллелизм 500: 3 мс; параллелизм 5000: 320 мс. Информация, связанная с данной: В случае с низким уровнем параллелизма они одинаковы, а для Springcloudgateway с высоким уровнем параллелизма в 1,6 раза больше, чем для zuul1.x. эврика+зуул+сервис. Персональный локальный стресс-тест: 100 параллельных операций: 3 мс, 500 параллельных операций: 5 мс, 5000 параллельных операций: 267 мс
состояние обслуживания Компонент springcloud, постоянно обновляемый, версия начинается с 2.0.0 Компонент springcloud поддерживает только 1.X, а ядро ​​zuul продолжает поддерживать 2.1.4 до сих пор.
Ключевые особенности, особенности Фильтры включают в себя глобальный фильтр и фильтр шлюза, которые делятся на глобальные и локальные на основе сетевой переадресации. Фильтры — это только глобальные фильтры; синхронная блокировка пересылки на основе сервлета.

разное

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

zuul1.X использует переадресацию сервлетов, не поддерживает длинные соединения и не может пересылать веб-сокеты;

Springcloudgateway основан на неблокирующем вводе-выводе netty и поддерживает длинные соединения.

резюме

По сравнению с zuul1.X, springcloudgateway лидирует по ключевым функциям, состоянию обслуживания, производительности и т. д. В настоящее время существует только проблема обновления совместимости проекта springboot2.0.Если вы можете напрямую обновиться до springboot2.0 или в настоящее время используйте springboot2.0, рекомендуется использовать springcloudgateway.