Проект с открытым исходным кодом | Распределенная система генерации уникальных идентификаторов, разработанная Go

задняя часть Go открытый источник

Оригинальная ссылка: Проект с открытым исходным кодом | Распределенная система генерации уникальных идентификаторов, разработанная Go

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

У Meituan есть проект с открытым исходным кодом под названиемLeaf, разработанный на Java. На основе этой идеи разработан и реализован данный проект с помощью Go.

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

история проекта

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

Каковы требования к идентификационному номеру бизнес-системы?

  1. глобальная уникальность: Повторяющиеся идентификационные номера не могут отображаться.Поскольку это уникальная идентификация, это самое основное требование.
  2. возрастающая тенденция: Кластерные индексы используются в движке MySQL InnoDB.Поскольку большинство СУБД используют структуру данных B-дерева для хранения данных индекса, мы должны попытаться использовать упорядоченные первичные ключи, чтобы обеспечить производительность записи при выборе первичных ключей.
  3. Монотонно возрастающий: убедитесь, что следующий идентификатор должен быть больше предыдущего идентификатора, например, номер версии транзакции, добавочное сообщение IM, сортировка и другие специальные требования.
  4. информационной безопасности: Если идентификаторы являются непрерывными, злоумышленникам очень легко подобрать работу, просто загрузите указанный URL-адрес последовательно; если это номер заказа, это еще более опасно, и конкуренты могут напрямую узнать наш ежедневный заказ. объем. Поэтому в некоторых сценариях приложений идентификаторы должны быть нерегулярными и нерегулярными.

В этом контексте важно иметь высокодоступную систему генерации уникальных идентификаторов.

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

Существует два способа создания идентификаторов:

  1. Сгенерируйте идентификаторы из базы данных.
  2. Сгенерируйте идентификаторы в соответствии с алгоритмом снежинки.

Существует два способа вызова интерфейса:

  1. HTTP-метод
  2. метод gRPC

HTTP-метод

1. Проверка здоровья:

curl http://127.0.0.1:8080/ping

2. Получить идентификатор:

Получите идентификатор, чей тег является тестовым:

curl http://127.0.0.1:8080/v1/id/test

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

curl http://127.0.0.1:8080/v1/snowid

метод gRPC

1. Получить идентификатор:

grpcurl -plaintext -d '{"tag":"test"}' -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetId

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

grpcurl -plaintext -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetSnowId

местное развитие

# Run MySQL
$ make compose-up

# Run app with migrations
$ make run

Архитектура проекта

Использование проектаgo-clean-templateРазработка шаблона схемы, структура каталогов выглядит следующим образом:

id-maker.png

Ниже приведено краткое описание каждого каталога:

  • cmd: Запись программы
  • config: файл конфигурации
  • docs: Сгенерированная проектная документация
  • integration-test: Интеграционный тест
  • internal:Бизнес-код
  • pkg: какой-то пакет называется

Заимствуйте официальные две картинки:

go-clean-template-1.png

Общая иерархическая взаимосвязь выглядит следующим образом: самые внутренние — это модели, которые определяют структуру нашей таблицы, а средний — это уровень бизнес-логики. Уровень бизнес-логики предоставляет интерфейсы для вызова самого внешнего API. Самый внешний уровень — это некоторые инструменты и вызовы. , Вход.

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

Итак, вызывающие отношения между ними выглядят так:

go-clean-template-2.png

HTTP > usecase
       usecase > repository (Postgres)
       usecase < repository (Postgres)
HTTP < usecase

Выше приведено все содержание этого проекта.Если вы заинтересованы, пожалуйста, оставьте мне сообщение для обмена, если вы можете дать мнеstarЗамечательно.


адрес проекта::id-maker

Прошлые статьи:

Рекомендуемое чтение: