Две или три стратегии EDAS, позволяющие сделать продукцию Spring Cloud Gateway доступной

Автор: Кирито

Spring Cloud Gateway — это компонент шлюза в экосистеме микросервисов Spring Cloud. Он всегда привлекал внимание пользователей в сообществе Java. Многие компании предпочитают использовать его в качестве шлюза микросервисов или бизнес-шлюза. В Alibaba Cloud пользователи могут использовать множество продуктов типа шлюза, таких как API Gateway и MSE Higress, которые используют подход PaaS для предоставления возможностей шлюза.Пользователям больше не нужно обращать внимание на реализацию шлюза и напрямую получать нестандартные возможности. . Раньше пользователи могли выбирать только между созданием собственного Spring Cloud Gateway или приобретением облачных продуктов.Однако новый подход EDAS к усовершенствованию Spring Cloud Gateway, представленный сегодня, предоставляет пользователям новый выбор.

Подготовка Spring Cloud Gateway к работе

У Spring Cloud Gateway с открытым исходным кодом есть некоторые факторы, которые беспокоят корпоративных пользователей, в том числе утечки памяти и проблемы с проектированием маршрутизации. EDAS справился со многими существующими проблемами на основе опыта Spring Cloud Gateway, накопленного за многие годы шиной облачных служб CSB. Многие факторы риска также удалось избежать, что полностью исключило опасения пользователей по поводу использования технологии Spring Cloud Gateway.

  • Проблема утечки памяти, эта проблема возникает из-за производственной практики CSB.Нижний уровень Spring Cloud Gateway использует netty для связи ввода-вывода.Люди, знакомые с netty, должны знать, что он имеет конструкцию буфера чтения и записи.Если коммуникационный контент небольшой , фрагментированный буфер, как правило, будет задействован. Когда содержимое связи велико, например, загрузка файла, это приведет к новому выделению памяти. Однако Spring Cloud Gateway имеет логический недостаток при стыковке с netty, что приведет к тому, что вновь выделенный пул будет память не будет полностью переработана, что приведет к утечкам памяти вне кучи. Более того, эта память вне кучи выделяется netty с использованием unsafe и не может быть просмотрена с помощью обычных инструментов JVM, поэтому она очень скрыта.

EDAS рекомендует добавить параметр запуска -Dio.netty.allocator.type=unpooled в приложение Spring Cloud Gateway, чтобы, когда запрос не попадает в фрагментированный буфер, выделенная временная память не объединялась в пул во избежание утечек памяти.

-Dio.netty.allocator.type=unpooled не приведет к снижению производительности. Только большие пакеты будут инициировать выделение этой памяти. Рекомендуется, чтобы шлюз не разрешал загрузку файлов. Этот параметр добавлен для поведения сокрытия, чтобы иметь дело с неосновными сценами.

  • Spring Cloud Gateway с открытым исходным кодом не предоставляет возможности проверки конфигурации маршрутизации. При возникновении ошибок конфигурации маршрутизации это может иметь катастрофические последствия. Например, при настройке маршрутизации ошибочное написание POST вместо PEST: предикаты: Method=PEST может привести к тому, что все маршруты в шлюзы недействительны, а радиус взрыва чрезвычайно велик.

EDAS рекомендует настроить Spring.cloud.gateway.fail-on-route-definition-error: false для приложений Spring Cloud Gateway, чтобы уменьшить радиус взрыва. Маршруты, созданные с помощью EDAS, будут проверены, чтобы убедиться в правильности формата маршрута и заранее избежать проблем.

Выше приведены лишь некоторые примеры усовершенствования EDAS решения Spring Cloud Gateway.EDAS комплексно защищает шлюзы пользователей с точки зрения производительности, безопасности, стабильности и т. д., позволяя пользователям полностью вернуться к своему бизнесу.

Сосредоточив внимание на основной теме: сделать Spring Cloud Gateway доступным для производства и позволить пользователям с уверенностью использовать Spring Cloud Gateway в облаке, EDAS запустил новую функцию для ненавязчивого улучшения Spring Cloud Gateway.

Функции

Как мы все знаем, Java-приложения, развернутые в EDAS, монтируют Java-агент. Благодаря технологии Java-агента EDAS обеспечивает широкие возможности управления микросервисами и наблюдения. Расширенные возможности Spring Cloud Gateway, представленные на этот раз, также используют этот Java-агент. Реализация агента.

Самым интуитивно понятным изменением, внесенным усовершенствованием EDAS Spring Cloud Gateway, является предоставление консоли с белым экраном для облегчения операций пользователя и предоставления множества расширенных возможностей:

  • Динамическая конфигурация
  • Пользовательский плагин
  • Отладка маршрута
  • Текущее предельное понижение
  • Повышенная наблюдаемость

Чтобы облегчить пользователям интуитивное понимание, эта статья начинается с краткого описания.

Развертывание Spring Cloud Gateway

Пользователи могут упаковать существующий Spring Cloud Gateway в jar-пакет или образ и развернуть его в EDAS или использовать для развертывания демонстрационный пакет развертывания, предоставленный EDAS. Как показано на рисунке выше, EDAS недавно поддержал пакет демонстрационного развертывания приложения Spring Cloud Gateway. В этом пакете развертывания центр регистрации Nacos настроен заранее и автоматически подключается к развернутому в данный момент пространству микросервисов без какой-либо настройки маршрутизации. , поскольку далее будет продемонстрирована конфигурация динамической маршрутизации, нет необходимости заранее настраивать ее в файле конфигурации. Весь процесс развертывания ничем не отличается от развертывания обычного микросервисного приложения.

Создавайте маршруты и тестируйте

EDAS распознает характеристики приложения Spring Cloud Gateway и динамически добавит меню шлюза приложений в строку меню. В кратком руководстве в примере создаются два маршрута, а именно сценарий прямого запроса в формате http:// и сценарий обнаружения службы в формате lb://. Чтобы облегчить тестирование, вы можете настроить SLB общедоступной сети для приложения шлюза в обзоре приложения и протестировать его с помощью запросов на завихрение:

~ curl 121.xx.xx.xx/httpbin/get
{
  "args": {},
  "headers": {
    "Aaa": "ccc",
    "Accept": "*/*",
    "Content-Length": "0",
    "Eagleeye-Ip": "192.168.2.1",
    "Eagleeye-Pappname": "5ae05114-bc80-4a32-9048-209b3a93d723",
    "Eagleeye-Prpc": "/httpbin/get",
    "Eagleeye-Pspanid": "-7254661991881594415",
    "Eagleeye-Root-App": "5ae05114-bc80-4a32-9048-209b3a93d723",
    "Eagleeye-Rpcid": "0.2.1",
    "Eagleeye-Sampled": "s0",
    "Eagleeye-Spanid": "-1207596966212570593",
    "Eagleeye-Traceid": "eac0a8020116974429411421021d0001",
    "Eagleeye-Userdata": "__microservice_match_result__=[]",
    "Forwarded": "proto=http;host=121.xx.xx.xx;for=\"140.xx.xx.xx\"",
    "Gfs.Scg.Ip": "192.168.2.1",
    "Host": "httpbin.org",
    "Name": "kirito,kirito",
    "User-Agent": "curl/7.64.1",
    "X-Amzn-Trace-Id": "Root=1-652cec7d-50f852f622c546f20f8997fe",
    "X-Forwarded-Host": "121.xx.xx.xx",
    "X-Forwarded-Prefix": "/httpbin"
  },
  "origin": "121.xx.xx.xx, 47.xx.xx.xx",
  "url": "http://121.xx.xx.xx/get"
}

Шлюз успешно переправил запрос, и проверка маршрутизации завершена.

Преимущества решения

В следующих ситуациях вы можете рассмотреть возможность использования решения для улучшения EDAS Spring Cloud Gateway:

  • Уже использую Spring Cloud Gateway
  • Шлюз имеет серьезные потребности в настройке бизнеса, например, в стыковке системы пользователей и полномочий на уровне предприятия.
  • Доминирует стек технологий Java, надеясь на независимый контроль над компонентами шлюза.
  • Серверная служба шлюза использует стек технологий Spring Cloud.

Решение по усовершенствованию Spring Cloud Gateway, предоставляемое EDAS, разделяет бизнес-атрибуты и атрибуты промежуточного программного обеспечения шлюза. Пользователи могут сосредоточиться на вторичной разработке на основе Spring Cloud Gateway с открытым исходным кодом, внедрить сложную бизнес-логику и интегрировать функции шлюза (динамическая конфигурация). , понижение текущего лимита и т. д.), безопасность, производительность и другие атрибуты промежуточного программного обеспечения передаются в EDAS.

Для пользователей, которые уже используют Spring Cloud Gateway, когда приложение Spring Cloud Gateway размещается на EDAS, нет необходимости изменять какой-либо код, и они могут получить множество расширенных возможностей, сохраняя при этом исходные точки расширения. В будущем вторичная разработка по-прежнему может быть продолжена на основе приложения, чтобы приложение шлюза могло получить тот же опыт разработки, что и бизнес-приложение. Что касается поддержки пользовательских расширений, традиционные шлюзы PaaS обычно требуют от пользователей адаптации к собственным спецификациям шлюза и использования незнакомых языков или механизмов подключаемых модулей, что предполагает определенные затраты на обучение и риски.

Если у пользователя в настоящее время нет шлюза, он рассматривает возможность добавления нового шлюза и проводит исследование решений для шлюзов, ему/ей необходимо полностью рассмотреть свои бизнес-сценарии. Если оно соответствует таким ключевым словам, как стек технологий Java и система микросервисов Spring Cloud, вы также можете отдать приоритет этому решению.

По сравнению с аналогичными продуктами шлюзов PaaS в Alibaba Cloud, они также имеют свои собственные сценарии использования. Например, API Gateway может обеспечить усовершенствованное управление API, а MSE Higress можно использовать как шлюз «три в одном» или как реализацию. K8s Ingress. Вы можете выбрать решение шлюза в соответствии со своими потребностями. Усовершенствованное решение Spring Cloud Gateway EDAS добавляет новую опцию для пользователей.

По сравнению с Spring Cloud Gateway с открытым исходным кодом решение для улучшения агента EDAS имеет следующие улучшения возможностей на основе 100% совместимости с функциями с открытым исходным кодом.

Улучшение способностей

Возможность динамической конфигурации

EDAS предоставляет возможности динамической настройки маршрутизации Spring Cloud Gateway (Route) и плагинов (Gateway Filter), которые представлены на белом экране для облегчения пользовательской настройки.

Если маршруты были настроены в проекте Spring Cloud Gateway, например, настроены в application.yml и настроены в консоли EDAS одновременно, эти маршруты в конечном итоге будут объединены в набор маршрутов. Следует отметить, что консоль EDAS будет отображать только конфигурацию маршрутизации, опубликованную EDAS, и не будет отображать конфигурацию в application.yml, но фактически оба маршрута вступят в силу. При использовании этого решения пользователям рекомендуется перенести конфигурацию в консоль EDAS посредством импорта и экспорта конфигурации, чтобы облегчить унифицированное управление.

Импорт и экспорт конфигурации

И маршрутизация, и глобальные плагины поддерживают создание через Yaml. Формат Yaml соответствует спецификации схемы Spring Cloud Gateway с открытым исходным кодом. Ниже приведены два примера конфигурации:

spring:
  cloud:
    gateway:
      routes:
      # 1. 利用域名进行路由匹配,且后端是固定 HTTP URL 的场景
      - id: r-demo
        predicates:
        # 只有域名为 demo.com 的请求才会匹配上该路由
        - Host=demo.com
        filters:
        # 该插件在转发请求时,在请求头中添加 Header 键值对
        - AddRequestHeader=a,b
        # uri 里填写后端 HTTP URL
        uri: http://demo.com
        # order 代表路由的优先级,值越小,优先级越高
        order: 1000
      # 2. 利用路径前缀进行路由匹配,且后端是微服务的场景
      - id: r-demo-2
        predicates:
        # 请求路径以 /demo-2 开头,才会匹配上该路由
        - Path=/demo-2/**
        filters:
        # 该插件确保请求在转发至后端服务时,会移除掉 /demo-2 的前缀
        - StripPrefix=1
        # 后端为微服务时,uri应该以 lb:// 开头,并填写服务名
        uri: lb://service-provider
        # 可以为路由添加元数据,以在插件中使用
        metadata:
          ccc: ddd
          eee: 10
        order: 1000

Маршрутизация r-demo — это пример конфигурации для маршрутизации через доменные имена. Внутренняя служба соответствует непосредственно запрошенному адресу. Маршрутизация r-demo-2 — это пример конфигурации для маршрутизации по сопоставлению префикса пути. Плагин StripPrefix настроен таким образом, что при пересылке. При достижении серверной части удалите префикс, используемый для сопоставления, и внутренняя служба начинается с lb, что указывает на сценарий обнаружения службы.

Он также поддерживает пакетный просмотр определений маршрутизации Yaml:

Дизайн создания и просмотра Yaml должен максимально соответствовать спецификациям Spring Cloud Gateway с открытым исходным кодом. Если пользователь является опытным пользователем Spring Cloud Gateway с открытым исходным кодом, это сохранит исходный опыт пользователя.

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

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

Взаимодействие с плагином

Spring Cloud Gateway предоставляет очень богатый механизм подключаемых модулей (GatewayFilter), позволяющий осуществлять настройку на уровне маршрутизации и на глобальном уровне. На этой основе EDAS упрощает использование подключаемых модулей.

Собственная конфигурация подключаемого модуля Spring Cloud Gateway использует упрощенный метод настройки. Для некоторых менее часто используемых подключаемых модулей трудно интуитивно определить, как добавлять параметры. В EDAS такой проблемы нет. EDAS будет интерпретировать параметры подключаемого модуля. объяснение и параметры. Разложите, требуется ли это, значение параметров и количество параметров, чтобы избежать неправильного использования.

Ссылка на плагин:

Следует отметить, что эти плагины можно добавлять повторно, но некоторые плагины рекомендуется настраивать только один раз, например StripPrefix, SetPath и т. д., в противном случае произойдет неизвестное поведение.

Быстрый тест

Для приложений Spring Cloud Gateway EDAS будет перечислять пути маршрутизации в консоли, чтобы пользователи могли проводить тесты маршрутизации. С помощью функции быстрого тестирования вы можете быстро проверить конфигурацию маршрутизации после ее завершения, чтобы определить, правильна ли конфигурация.

наблюдаемый

Spring Cloud Gateway с открытым исходным кодом не оснащен журналом доступа, который должен иметь шлюз. EDAS завершает эту необходимую возможность. Любой запрос, проходящий через шлюз, будет распечатан в файле /home/admin/.opt/ArmsAgent/logs/scg-access. Путь .log. Ниже пользователи могут просмотреть его в центре журнала сведений о приложении:

Пользователи могут собирать эти данные в SLS или в специализированном центре журналов для мониторинга.

Описание формата журнала access.log:

серийный номер иллюстрировать Имя поля Пример контента
1 Время регистрации датавремя 2023-06-19 16:06:53 966
2 Запросить идентификатор трассировки идентификатор трассировки 0ab32f9f15293956139457176d485a
3 IP-адрес клиента IP-адрес клиента 127.0.0.1
4 Метод запроса метод ПОЛУЧАТЬ
5 Путь запроса путь /httpbin/получить
6 Запросить размер данных запросразмер 122
7 Запросить время начала время начала 1667381534546
8 Соответствующий идентификатор маршрутизации идентификатор маршрута sc-A
URI, соответствующий маршруту маршрутUri http://httpbin.org:80、lb://sc-A
9 Время начала серверного вызова серверная частьStartTime 1667381534546
10 Метод запроса серверной части бэкэндМетод ПОЛУЧАТЬ
11 URL-адрес серверного запроса внутренний URL-адрес httpbin.org/get
13 Размер тела серверного запроса серверная частьRequestSize 122
14 Код ответа серверной части бэкендстатускод 200
15 Размер тела ответа серверной части backendResponseSize 433
16 Время окончания серверного вызова серверная частьEndTIME 1667381534560
17 Время бэкэнд-звонка бэкэндRt 14
18 Код ответа запроса код статуса 200
19 Размер тела ответа запроса Размер ответа 433
20 Звонок успешен? положение дел УСПЕХ/НЕУДАЧА
21 сообщение об ошибке сообщение об ошибке В случае успеха: - Распечатайте конкретную информацию об ошибке, например: Служба недоступна.
22 Запросить время окончания время окончания 1667381534565
23 Общее время запроса рт 19

Последующее планирование

Усовершенствованное решение Spring Cloud Gateway EDAS в будущем предоставит больше возможностей для обогащения экосистемы шлюзов. В настоящее время запланированы следующие возможности:

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

Пользователи могут оставлять отзывы и общаться с нами. Группа связи DingTalk: 23197114.

Для получения опыта ознакомьтесь с пользовательской документацией: https://help.aliyun.com/zh/edas/user-guide/spring-cloud-gateway-application-routing.

Автор известного проекта с открытым исходным кодом потерял работу из-за мании - «Искать деньги в Интернете» No Star, No Fix 2023 Выпущена десятка лучших в мире инженерных достижений: ChatGPT, Hongmeng Operating System, China Space Station и другие избранные ByteDance были «запрещены» OpenAI Google анонсирует самое популярное расширение Chrome в 2023 году Академик Ни Гуаннань: Надеюсь, отечественный SSD заменит импортный HDD для разблокировки мобильного телефона Xiaomi BL? Сначала задайте вопрос на собеседовании с Java-программистом. Компания Arm уволила более 70 китайских инженеров и запланировала реорганизовать свой китайский бизнес по разработке программного обеспечения. OpenKylin 2.0 раскрывает | UKUI 4.10 дизайн с двойным ромбом, красивый и качественный! Выпущена версия Manjaro 23.1 под кодовым названием «Вулкан».
{{o.name}}
{{m.name}}

рекомендация

отmy.oschina.net/u/3874284/blog/10347977