1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/imethsoft-sentinel-dubbo

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Данный текст на русском языке:

Этот проект представляет собой модернизацию системы, объединяющей Sentinel и Dubbo.

Один: происхождение

Sentinel — это продукт с открытым исходным кодом от команды промежуточного программного обеспечения Alibaba, ориентированный на распределённую архитектуру сервисов. Он предлагает облегчённое решение для контроля трафика, которое помогает защитить стабильность сервисов, фокусируясь на таких аспектах, как контроль трафика, разрыв цепи и защита от перегрузки системы. Для получения дополнительной информации о Sentinel посетите следующий адрес: https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5.

Два: проблемы

  1. В Sentinel все исключения, кроме ограничения потока, считаются требующими разрыва цепи, включая пользовательские бизнес-исключения.
  2. Конфигурация запуска Sentinel слишком проста, и её необходимо указывать при запуске с помощью команды java -jar. Это затрудняет отладку.
  3. Панель управления Sentinel не поддерживает отправку конфигурации в источник данных, что требует модификации.

Три: реализация

  1. Новый фильтр Dubbo упаковывает исключения в унифицированный ответ и определяет состояние обычного исключения как >= 500. Состояние исключения ограничения потока BlockException устанавливается равным 429 (также соответствует HttpStatus).
  2. Во время реализации определяются соответствующие состояния кода, изменяется реализация SentinelResourceAspect, проверяется, является ли возвращённый статус 429, если да, выполняется обработка исключений блока; если >= 500, выполняется статистический анализ разрыва цепи.
  3. Добавлен sentinel-dubbo-starter для автоматической настройки.
  4. Модификация панели управления Sentinel: правила управления -> центр конфигурации -> клиент.

Четыре: модификация панели управления

Перед модификацией

Клиент использует модуль sentinel-transport-simple-http для предоставления определённого порта. Панель управления Sentinel отправляет данные через HTTP, а клиент сохраняет правила в локальной памяти после их получения.

После модификации

Клиенты регистрируются в соответствующем центре регистрации. Панель управления Sentinel направляет конфигурацию в центр конфигурации, такой как Nacos или Zookeeper, который затем распространяет конфигурацию.

Соглашение о пути Zookeeper

  • Правила контроля трафика: /sentinel/rules/{appName}/flow
  • Правила белого и чёрного списков: /sentinel/rules/{appName}/authority
  • Правила снижения нагрузки: /sentinel/rules/{appName}/degrade
  • Параметры горячих точек: /sentinel/rules/{appName}/param
  • Правила защиты системы: /sentinel/rules/{appName}/system

Соглашение о пути Nacos

  • Правила контроля трафика: {appName}_flow
  • Правила белых и чёрных списков: {appName}_authority
  • Правила снижения нагрузки: {appName}_degrade
  • Параметры горячих точек: {appName}_param
  • Правила защиты системы: {appName}_system

Поддержка модификаций

  1. После модификации панель управления Sentinel поддерживает отправку API и распространение через Zookeeper.
  2. Другие центры конфигурации, такие как Nacos, могут использовать следующие реализации для внесения изменений и добавления аннотации Configuration.
DynamicRuleZookeeperProvider
DynamicRuleZookeeperPublisher

Пять: использование

  1. Запустите sentinel-dubbo-dashboard
sentinel.application.name=sentinel-dashboard # Имя
sentinel.application.port=8719 # Порт доступа к sentinel через HTTP
sentinel.application.dashboard=localhost:8181 # Адрес панели управления

sentinel.api.enable=false # Включить отправку API, выберите false для распространения через Zookeeper или Nacos (выберите один из двух)

sentinel.zookeeper.enable=true # Включить Zookeeper в качестве источника данных
sentinel.zookeeper.address=localhost:2181 # Конфигурация Zookeeper

sentinel.nacos.enable=false # Включить Nacos в качестве источника данных
sentinel.nacos.server_addr=localhost:8888 # Адрес Nacos
sentinel.nacos.group_id=DEFAULT_GROUP # Группа разделения, по умолчанию SENTINEL_GROUP, если не задано

Настройте и запустите DashboardApplication.

  1. Добавьте соответствующие зависимости на стороне клиента
<dependency>
    <groupId>com.xmutca</groupId>
    <artifactId>sentinel-dubbo-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

Добавьте соответствующую конфигурацию на стороне клиента

sentinel:
  application:
    name: sentinel-provider # Имя сервиса
    port: 8719 # Доступ к порту sentinel через http
    dashboard: localhost:8080 # Адрес панели управления sentinel
  zookeeper:
    enable: true # Использовать zookeeper в качестве источника данных
    address: localhost:2181 # Конфигурация zookeeper
  nacos:
    enable: false # Включить nacos в качестве источника данных
    server_addr: localhost:8888 # Адрес nacos
    group_id: DEFAULT_GROUP # Разделительная группа, по умолчанию SENTINEL_GROUP

Шесть: обработка исключений

Проект использует рефлексию для получения всех зарегистрированных исключений и реализует обработку исключений аналогично SpringMVC.

/**
 * @version Revision: 0.0.1
 * @author: weihuang.peng
 * @Date: 2018-12-24
 */
public class ExceptionHandler {

    /**
     * Обработка по умолчанию
     * @param ex
     * @return
     */
    @ExceptionProcessor(Exception.class)
    public Result handleException(Exception ex) {
        return Result.DEFAULT_ERROR_RESULT;
    }

    /**
     * Бизнес-обработка исключений
     * @param ex
     * @return
     */
    @ExceptionProcessor({ServiceException.class})
    public Result handleServiceException(ServiceException ex) {
        Receipt result = ex.getExceptionResult();
        result.setMessage("Проектная реализация -》" + result.getMessage());
        return result;
    }
}

Затем зарегистрируйте исключения следующим образом:

ExceptionRegistry.updateForPackage("Имя пакета, где находятся исключения")

Обратите внимание, что обработчики исключений, зарегистрированные позже, будут переопределять обработчики, зарегистрированные ранее. Порядок переопределения определяется значением класса в аннотации ExceptionProcessor. Если исключение не найдено, будет выполнен поиск родительского исключения рекурсивно, и если родительское исключение также не найдено, будет использовано значение по умолчанию.

Семь: размышления

  1. На самом деле, в Sentinel можно было бы использовать метод прямого выброса исключений для решения проблемы 1, а затем исключить бизнес-исключения в реализации SentinelResourceAspect. Однако этот подход не был выбран, поскольку он может быть слишком грубым и недружелюбным, особенно учитывая, что Dubbo также может предоставлять услуги напрямую (например, dubbo2.js). Для работы с datasource в клиенте Sentinel требуется соответствующая поддержка в консоли. Например, чтобы получить нужную конфигурацию, необходимо однозначное соответствие пути zookeeper. В связи с этим была также обновлена версия dashboard.

  2. Обработка исключений во внешних сервисах проекта: если исключение выбрасывается при вызове через dubbo, то оно упаковывается с помощью фильтра dubbo. Если же проект был интегрирован с веб-сервисом и исключение возникает в http-сервисе, то для соответствующей обработки исключений можно использовать ControllerAdvice.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/imethsoft-sentinel-dubbo.git
git@api.gitlife.ru:oschina-mirror/imethsoft-sentinel-dubbo.git
oschina-mirror
imethsoft-sentinel-dubbo
imethsoft-sentinel-dubbo
master