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

OSCHINA-MIRROR/darkranger-id-generator

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

Распределённый генератор идентификаторов (алгоритм «снежинка» в версии SpringBoot)

Введение

Генератор распределённых идентификаторов:

Глобальный уникальный идентификатор используется как уникальный признак для различения данных. Он может быть использован в качестве номера заказа, идентификатора пользователя и т. д. Генератор идентификаторов — это инструмент для создания глобальных уникальных идентификаторов, который можно инкапсулировать в базовую службу для предоставления услуг другим бизнес-системам. Таким образом, этот проект представляет собой реализацию генератора идентификаторов на основе Springboot, позволяющую различным бизнес-системам вызывать его.

Алгоритм «снежинки»

Существует множество алгоритмов генерации идентификаторов. В этом проекте строго соблюдается алгоритм «снежинки», открытый Twitter. Он представляет собой глобальный уникальный алгоритм идентификации с временной меткой. Существует фиксированный формат идентификатора, который выглядит следующим образом:

  • 41-битная временная метка (с точностью до миллисекунды, 41 бит позволяет использовать 69 лет);
  • 10-битный идентификатор машины (10 бит позволяют поддерживать до 1024 узлов сервера);
  • 12-битный порядковый номер (12 бит позволяют генерировать до 4096 номеров последовательностей на каждый узел каждую миллисекунду).

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

Запуск проекта

В корневом каталоге выполните команду maven:

mvn clean install -DskipTests -Dmaven.test.skip=true 

В каталоге id-generate-rest/target вы найдёте заархивированный пакет, созданный после сборки, как показано на рисунке ниже:

![Snip20170901_21.png-69.6kB][1]

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

![Snip20170901_22.png-14.4kB][2]

Перейдите в окно терминала, перейдите в каталог bin и выполните скрипт запуска start.sh: команда выглядит следующим образом:

./start.sh
ps -ef |grep restApplication

Если появится следующее изображение, это означает, что запуск проекта прошёл успешно:

![Snip20170901_24.png-288.7kB][3]

Я установил порт запуска равным 10010, а контекстное имя — myID.

Введите в браузере http://localhost:10010/myID/swagger-ui.html, и вы увидите интерфейс:

![Snip20170901_19.png-121kB][4]

Используйте Swagger для просмотра и тестирования четырёх API-интерфейсов springboot, которые будут подробно описаны ниже.

Описание использования API

Четыре API:

Генерация идентификатора в реальном времени

Как показано на рисунке, просто нажмите кнопку «try it out», не вводя никаких параметров, и верните длинный идентификатор.

![Snip20170901_25.png-159.2kB][5]

Анализ идентификатора

Как показано на рисунке, вы можете использовать идентификатор, сгенерированный предыдущим API, скопировать его в поле ввода, а затем напрямую нажать кнопку «try it out». Возвращается строка json, включая временную метку, идентификатор машины и порядковый номер.

![Snip20170901_26.png-155.5kB][6] ![Snip20170901_27.png-74.3kB][7]

Ввод параметров для генерации идентификатора

Введите строку json, содержащую временную метку, идентификатор машины и порядковый номер, и верните длинный идентификатор. Как и предыдущий API, он является обратной операцией.

![Snip20170901_28.png-171kB][8] ![Snip20170901_29.png-78.2kB][9]

Разбор временной метки

Введите значение временной метки, чтобы вернуть конкретное значение даты в формате гггг-ММ-дд ЧЧ:мм:сс. Рекомендуется ввести значение временной метки из строки json, возвращаемой предыдущим API.

![Snip20170901_30.png-165.5kB][10]

Обзор сценария

start.sh

Содержимое скрипта запуска:

#!/bin/sh
echo -------------------------------------------
echo start server
echo -------------------------------------------
# Устанавливаем путь к коду проекта
export CODE_HOME="/id-generate-rest"
# Путь к журналу
export LOG_PATH="/Users/wujunshen/Downloads/id-generator"
mkdir -p $LOG_PATH
# Устанавливаем путь зависимости
export CLASSPATH="$CODE_HOME/classes:$CODE_HOME/lib/*"
# Исполняемый файл java
export _EXECJAVA="$JAVA_HOME/bin/java"
# Параметры запуска JVM
export JAVA_OPTS="-server -Xms8m -Xmx2048m "
# Информация о сервере
export SERVER_INFO="-Dserver.port=10010 -Dserver.contextPath=/myID -Dserver.docBase=$CODE_HOME"
# Класс запуска
export MAIN_CLASS=com.wujunshen.rest.RestApplication

nohup $_EXECJAVA $JAVA_OPTS -classpath $CLASSPATH $SERVER_INFO $MAIN_CLASS >$LOG_PATH/id-generator.log  2>&1 &

Код CODE_HOME и LOG_PATH можно настроить в соответствии с путём распаковки zip-файла. Включая последнюю строку имени файла журнала, все они могут быть настроены. Класс запуска — это класс запуска springboot, и соответствующие параметры JVM также могут быть изменены в соответствии с конфигурацией оборудования вашего компьютера. Кроме того, в сценарии есть порт и контекст, которые необходимо согласовать со значениями server.port и server.context-path в файле /id-generate-rest/src/main/resources/application.properties проекта.

stop.sh

Содержание сценария остановки:

#Путь к журналу
export LOG_PATH="/Users/wujunshen/Downloads/id-generator"
mkdir -p $LOG_PATH
# Класс запуска
export MAIN_CLASS=com.wujunshen.rest.RestApplication

echo -------------------------------------------
echo stop server

#Все связанные процессы
PIDs=`jps -l | grep $MAIN_CLASS | awk '{print $1}'`
#Остановка процесса
if [ -n "$PIDS" ]; then
for PID in $PIDS; do
kill $PID
echo "kill $PID"
done
fi

#Подождите 50 секунд
for i in 1 10; do
PIDS=`jps -l | grep $MAIN_CLASS | awk '{print $1}'`
if [ ! -n "$PIDS" ]; then
echo "stop server success"
echo -------------------------------------------
break
fi
echo "sleep 5s"
sleep 5
done

#Если ожидание в течение 50 секунд всё ещё не остановлено, убейте напрямую
PIDs=`jps -l | grep $MAIN_CLASS | awk '{print $1}'`
if [ -n "$PIDs" ]; then
for PID in $PIDs; do
kill -9 $PID
echo "kill -9 $PID"
done
fi

LOG_PATH и MAIN_CLASS и start.sh можно настроить согласованно. Другие настройки не требуются. [8]: http://static.zybuluo.com/coderush/r400llmy4tm7kbdm5l099vgg/Snip20170901_28.png [9]: http://static.zybuluo.com/coderush/wykjq1qbxxxxurwi0llxpyr3/Snip20170901_29.png [10]: http://static.zybuluo.com/coderush/9r4o7hqt4a364hehknlgiix0/Snip20170901_30.png

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

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

Введение

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

Обновления

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

Участники

все

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

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