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

OSCHINA-MIRROR/tinyservices-tinyservices-id

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

非必填 | 8080 |

四、部署运行

1. 部絡运行

1.1 编译打包

  • Можно напрямую запустить изменённый файл scripts/build.sh, например:

    sh scripts/build.sh dev id-server
    
    sh scripts/build.sh dev id-portal

Необязательные параметры:

$1: dev/test/pre/prod, представляют собой среду разработки/тестирования/предварительную/производственную.

$2: id-server/id-portal, представляют два модуля moudle, то есть для какого модуля упаковывать, конфигурация — это значение, соответствующее введённому dev/test/pre/prod.

1.2 Запуск

  • После завершения компиляции и упаковки можно сразу выполнить скрипт запуска следующим образом:

    sh id-server/scripts/startup.sh
    
    sh id-portal/scripts/startup.sh
  • Проверьте, успешно ли запущен id-сервер (также можно проверить через журнал, расположение журнала соответствует значению id_server_log_dir).

    curl http(s)://ip:port/health/check

    Ответ должен быть таким:

    {
        "code": 0,
        "msg": "Processed successfully",
        "data": 666
    }
  • Убедитесь, что id-портал успешно запущен (также можно проверить через журнал, местоположение журнала соответствует значению id_portal_log_dir):

    Откройте http(s)://ip:port прямо в браузере, появится следующая страница:

    id-portal

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

1. Подготовка

  • Токен является единственным способом аутентификации. Поэтому необходимо создать токен и соответствующие бизнес-типы в id-portal.
  • Если используется режим сегмента, необходимо также создать сегмент в id-portal.
  • Эти две операции добавления не требуют перезапуска службы, будет выполняться периодическая задача, которая будет проверять базу данных каждую минуту и кэшировать её в памяти, поэтому её можно использовать непосредственно при получении идентификатора.

Существует два способа использования: Server и Sdk. Использование сервера очень просто, он предоставляет HTTP-интерфейс для получения идентификатора извне. Sdk требует, чтобы бизнес-система зависела от jar-пакета, а затем вызывала метод для получения идентификатора. Ниже подробно описаны два метода использования и различия.

2. Сервер

Независимо от того, какой алгоритм используется для получения идентификатора, необходимо добавить следующий заголовок, иначе будет сообщено об ошибке -4, указывающей на отсутствие разрешения:

tinyservice-id-token=token (токен получен из меню токенов в id-portal)

2.1 Получение идентификатора сегмента

# Получить один
GET http(s)://ip:port/segment/{бизнес-тип}

# Пакетное получение
GET http(s)://ip:port/segment/{бизнес-тип}/{количество полученных идентификаторов}

2.2 Получение идентификатора снежинки

# Получить один
GET http(s)://ip:port/snowflake/{бизнес-тип}

# Пакетное получение
GET http(s)://ip:port/snowflake/{бизнес-тип}/{полученное количество идентификаторов}

3. Sdk

3.1 Добавить зависимость

<dependency>
  <groupId>com.gitee.tinyservices</groupId>
  <artifactId>id-sdk</artifactId>
  <version>1.0.0</version>
</dependency>

3.2 Добавить конфигурацию

Добавьте файл конфигурации с именем tinyservices_id_sdk.properties в каталог classpath (обычно resources для проектов springboot), который содержит следующие настройки:

# Адрес id-сервера, несколько адресов разделяются запятыми, случайным образом выбирается один адрес для использования
tinyservices.id.server=http://localhost:9990
# Токен доступа к бизнес-типу. Можно настроить/просмотреть в id-portal
tinyservices.id.token=U2FsdGVkX18uip/K7pLiM4ZD5RKrHacD64eKWCNfmW4=

3.3 Получить идентификатор

// IdSdkTypeEnum.SEGMENT   режим сегмента
// IdSdkTypeEnum.SNOWFLAKE режим снежинки
AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SEGMENT).registerConfigSupport();
// Получить идентификатор
for (int i = 0; i < 10; i ++) {
    Long id = idSdk.getId("бизнес-тип");
}

3.4 Полная конфигурация

Настройка Значение настройки Требуется Значение по умолчанию
tinyservices.id.token токен, полученный из id-portal требуется нет
tinyservices.id.server список служб id, разделенных запятыми требуется нет
tinyservices.id.readTimeout время ожидания для sdk и сервера (мс) не требуется 5000 мс
tinyservices.id.connectTimeout время подключения для sdk и сервера (мс) не требуется 5000 мс
tinyservices.id.snowflake.epoch начало времени для алгоритма снежинки не требуется 1648742400000L (2022-04-01 00:00:00)

4. Рекомендации по использованию

Режим сегмента должен планировать размер шага в соответствии с собственным объёмом бизнеса, например, если объём бизнеса составляет 10 000 QPS, а размер шага установлен на 10, возможно, что при внезапном увеличении трафика часть идентификаторов будет нулевой, потому что размер шага слишком мал, и оба буфера заполнены мгновенным трафиком.

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

Если требования к производительности не слишком высоки, вы можете использовать способ сервера, напрямую запрашивая интерфейс HTTP, уменьшая зависимости системы. spring.datasource.driver=com.mysql.cj.jdbc.Driver;spring.datasource.url=jdbc:mysql://localhost:3306/ts_id?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT;spring.datasource.username=root;spring.datasource.password=12345678;spring.datasource.initial-size=;spring.datasource.min-idle=;spring.datasource.max-active=;spring.datasource.max-wait=;

id_server_log_dir=/data/logs/id-server;server_port=9990;id_server_snowflake_mode=MYSQL;id_server_snowflake_port=8888;id_server_snowflake_epoch=1648742400000;id_server_snowflake_zkConnectionAddr=localhost:2181

Параметры соединения с базой данных, имя пользователя, пароль, порт и т. д. должны быть изменены в соответствии с вашей собственной средой.

1.2 id-portal

Добавьте следующие переменные среды:

spring.datasource.driver=com.mysql.cj.jdbc.Driver;spring.datasource.url=jdbc:mysql://localhost:3306/ts_id?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT;spring.datasource.username=root;spring.datasource.password=12345678;spring.datasource.initial-size=;spring.datasource.min-idle=;spring.datasource.max-active=;spring.datasource.max-wait=;id_portal_log_dir=/data/logs/id-portal;server_port=9990

Параметры соединения с базой данных, имя пользователя, пароль, порт и т.д. должны быть изменены в соответствии с вашей собственной средой.

2. Когда изменения конфигурации id-portal вступят в силу?

Независимо от того, используете ли вы сегмент или токен, новые или изменённые конфигурации вступят в силу через одну минуту, то есть через одну минуту после этого конфигурация id-server станет доступной.

3. Как настроить центр регистрации для алгоритма снежинки?

В настоящее время существует четыре встроенных режима: LOCAL (локальный файл), MYSQL, ZOOKEEPER и RECYCLABLE_ZOOKEEPER (с возможностью повторного использования workerId). Если вы хотите использовать другое промежуточное ПО в качестве центра регистрации, выполните следующие действия:

— Сначала создайте класс, который наследуется от AbstractIdSnowflakeHolder и переопределяет соответствующие методы. Вы можете обратиться к другим подклассам, таким как ZookeeperIdSnowflakeHolder.

— Затем добавьте соответствующий тип в перечисление IdSnowflakeHolderTypeEnum. Этот тип должен соответствовать конфигурации tinyservices.id.snowflake.mode.

— Наконец, измените метод IdSnowflakeHolderFactory#getIdSnowflakeHolder, добавив раздел case для нового типа перечисления.

4. Почему режим RECYCLABLE_ZOOKEEPER запускается медленно?

Запуск режима RECYCLABLE_ZOOKEEPER занимает некоторое время. В этом режиме при запуске создаются 1023 постоянных узла в Zookeeper в качестве пула workerId для повторного использования. Поскольку это постоянные узлы, создание занимает много времени при первом запуске, но последующие запуски будут быстрее, поскольку узлы уже существуют.

5. Проблемы с ошибкой MySQL драйвера

Если во время запуска проекта возникает ошибка драйвера MySQL, вы можете изменить версию самостоятельно. В настоящее время встроенная версия — 8.0.21, которая находится в корневом файле pom.xml. Вот пример:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
    <scope>runtime</scope>
</dependency>

После изменения не забудьте также обновить конфигурацию id_server_config_db_driver в файле scripts/build.sh или в переменной среды id_server_config_db_driver.

6. Как изменить название файла конфигурации Sdk?

Если вы не хотите использовать стандартное имя файла конфигурации tinyservices_id_sdk.properties, можно выполнить следующие шаги:

AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SNOWFLAKE, "Пользовательское имя файла конфигурации.properties").registerConfigSupport();

// Получение идентификатора
for (int i = 0; i < 10; i ++) {
    Long id = idSdk.getId("Тип бизнеса");
}

7. Как поместить конфигурацию в центр регистрации в режиме Sdk?

Если вы не хотите использовать файл конфигурации, можно сделать следующее:

7.1 Создание пользовательского класса конфигурации

/**
 * Можно выбрать, чтобы переопределить следующие пять методов:
 * String getBizToken();
 * String getServerUrl();
 * int getReadTimeout();
 * int getConnectTimeout();
 * long getEpoch();
 */
public class CustomIdConfigSupport extends AbstractIdConfigSupport {
    @Override
    public String getServerUrl() {
        // Получить через центр конфигурации
        return null;
    }

    @Override
    public String getBizToken() {
        // Получить через центр конфигурации
        return null;
    }
    
    // ... Опустить другие необязательные методы для переопределения
}

7.2 Регистрация класса конфигурации

AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SNOWFLAKE).registerConfigSupport(new CustomIdConfigSupport());

// Получение идентификатора
for (int i = 0; i < 10; i ++) {
    Long id = idSdk.getId("Тип бизнеса");
}

8. Как получить идентификатор для разных типов бизнеса в режиме Sdk?

Проблема: в режиме sdk один файл конфигурации позволяет настроить только один токен. Если проект хочет получить токены для разных типов бизнеса, как это сделать?

Решение: есть два способа решить эту проблему:

  1. Один тип бизнеса может поддерживать несколько токенов. Можно настроить несколько общих токенов для всех типов бизнеса. Однако бэкэнд в настоящее время позволяет только генерировать токены, а не настраивать их. Для этого можно разветвить id-portal и разрешить ввод токенов или вручную изменить данные таблицы ts_id_worker_id.

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

    Для первого типа бизнеса:

    AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SEGMENT, "sdk_1.properties").registerConfigSupport();
    
    idSdk.getId("test1");

    Для второго типа бизнеса:

    AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SEGMENT, "sdk_2.properties").registerConfigSupport();
    
    idSdk.getId("test2");
    ``` 8. Заключение
    
  • Если ваша компания присоединилась к tinyservices-id, буду рад получить от вас сообщение или комментарий с названием вашей компании, ваша поддержка — это моя вечная движущая сила.

  • При возникновении любых вопросов, пожалуйста, создайте issue.
    https://gitee.com/tinyservices/tinyservices-id/issues

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

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

Введение

Tinyservices-id — это сервис, который позволяет генерировать уникальные идентификаторы с высокой производительностью и возможностью расширения. В настоящее время он включает два алгоритма генерации: снежный алгоритм (снежинка) и инкрементный диапазон. Развёртывание и использование сервиса удобны, что позволяет быстро начать применять tinyserv... Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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