Анализ проблемы

После нескольких лет быстрого развития ShardingSphere значительно выросла, предлагая шесть основных функциональных модулей, отвечающих различным потребностям. Он также совместим с различными реестрами, такими как ZooKeeper и Nacos, что обеспечивает бесшовную интеграцию. Кроме того, он поддерживает распределенные транзакции и различные среды разработки, обеспечивая гибкость и удобство.

Чтобы обеспечить удобство использования, мы создали пример модуля, демонстрирующий разнообразные функции, реестры и сервисные платформы ShardingSphere.

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

Улучшение примера модуля для улучшения взаимодействия с пользователем

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

После обширных обсуждений в сообществе мы определили несколько ключевых проблем с текущими примерами:

  1. Недостаточное представление:Модули-примеры не могут четко представить функции и структуру ShardingSphere, поскольку они используют другой уровень абстракции, чем иерархия модулей ShardingSphere. Это несоответствие вызывает недоумение у пользователей.
  2. Сложность бизнес-кода. Зависимость от сложного, универсального и абстрактного общедоступного бизнес-кода создает значительные препятствия для обучения пользователей. Обилие такого кода затрудняет эффективное понимание основных концепций.
  3. Нестандартная конфигурация.Подход к настройке, используемый в текущих примерах, не стандартизирован и в основном ориентирован на обработку логики, а не на использование собственных возможностей ShardingSphere. Это ограничение ограничивает способность системы поддерживать широкий спектр сценариев.
  4. Ограниченный примерный портфель. Существующий примерный портфель относительно невелик и не обладает необходимой гибкостью для работы с различными сервисными платформами и модулями, такими как JDBC и spring boot + JDBC. Это ограничение ограничивает универсальность и применимость ShardingSphere.
  5. Фокус на примере прокси-сервера: пример прокси-сервера ShardingSphere должен отдавать предпочтение руководству по настройке, а не многочисленным логическим примерам. Этот сдвиг позволит пользователям лучше понять и эффективно использовать пример прокси.

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

  1. Гибкость и комбинируемость. Наша цель — предоставить пользователям возможность свободно комбинировать и выбирать модули и функции, необходимые для ShardingSphere, допуская различные комбинации.
  2. Модулизация и предварительное форматирование: благодаря тщательному анализу и исследованиям мы разобрали модули ShardingSphere на минимальные комбинируемые единицы. Эти блоки были предварительно отформатированы в различных сценариях с использованием движка шаблонов FreeMarker. Когда пользователи выбирают определенную комбинацию сценариев, автоматически создается соответствующий пример проекта путем извлечения соответствующих логических единиц.

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

Повышенная гибкость и снижение затрат на обучение

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

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

На рис. 3 показано, как были реализованы эти улучшения:

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

Кроме того, абстрактная логика бизнес-кода была упрощена за счет использования шаблонов. Такой подход значительно снижает сложность и время обучения для пользователей, обеспечивая более плавный процесс адаптации.

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

Кроме того, мы разделили функциональные возможности на категории, такие как шифрование и дешифрование, разделение чтения/записи и разделение базы данных и таблиц. Поддерживаемые типы конфигурации подробно описаны в таблице 1.

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

shardingsphere-${product}-sample/${feature}--${framework}--${mode}--${transaction}

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

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

Использование модуля генерации примеров

Чтобы эффективно использовать новый модуль генерации примеров, выполните шаги, описанные ниже:

  1. Найдите модуль генерации примеров

Перейдите в каталог проекта ShardingSphere и найдите модуль shardingsphere-example-generator в соответствующем модуле-примере. Этот модуль содержит все файлы шаблонов и логику генерации, необходимые для создания примеров.

2. Настройте параметры механизма генерации

Модуль shardingsphere-example-generator — это стандартный проект Java. Файл конфигурации проекта можно найти по адресу resources/config.yaml. Этот файл позволяет пользователям объявлять различные параметры, поддерживаемые механизмом генерации. В дополнение к параметрам шаблона для конкретных функций мы также предоставили удобные конфигурации, которые пользователи могут настроить в соответствии со своими потребностями. Конкретные параметры и их значения приведены в Таблице 2:

3. Создайте модуль конфигурации

После настройки параметров пришло время сгенерировать соответствующий модуль конфигурации. Это можно сделать двумя способами:

  • Запуск основного класса. Найдите класс ExampleGeneratorMain в модуле shardingsphere-example-generator и запустите основной метод. Это создаст пример в настроенном выходном каталоге.
  • Использование командной строки Maven. Кроме того, вы можете использовать командную строку Maven для запуска процесса генерации. Команду следует выполнить следующим образом:
// generate configuration based on config.yaml
./mvnw -B clean install -f examples/shardingsphere-example-generator/pom.xml -Pexample-generator

// generation configuration based on command parameters
./mvnw -B clean install -f examples/shardingsphere-example-generator/pom.xml -Pexample-generator -Dproducts=jdbc -Dmodes=cluster-zookeeper -Dtransactions=local -Dfeatures=shadow -Dframeworks=jdbc

4. Просмотрите и используйте примеры

После запуска процесса генерации соответствующий пример кода будет сгенерирован в сконфигурированном выходном каталоге. Как правило, это будет в файле shardingsphere-example-generator/target/generated-sources/ directory. Сгенерированную структуру каталогов можно увидеть на рисунке 6 ниже:

В сгенерированном каталоге каждый модуль проекта является стандартным проектом Maven. Вы можете напрямую открыть его с помощью IDE, такой как IntelliJ IDEA, и запустить проект. Это приведет к структуре проекта, как показано на рисунке 7:

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

Представляем пример JDBC и будущие улучшения

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

Наши планы на будущее включают:

  1. Расширение минимальной логической единицы: мы стремимся разбить код на более мелкие и более детализированные логические единицы. Это предоставит пользователям большую гибкость для комбинирования и настройки желаемой функциональности в соответствии с их конкретными требованиями.
  2. Добавление дополнительных конфигураций. Мы осознаем необходимость добавления дополнительных конфигураций для более широкого спектра вариантов использования. Расширив доступные параметры конфигурации, пользователи получат в свое распоряжение более полный набор инструментов.
  3. Улучшение документации по использованию. Мы понимаем важность четкой и лаконичной документации. Мы сосредоточимся на улучшении документации, чтобы пользователи могли легко понять и использовать функции ShardingSphere.

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