Фон

Apache ShardingSphere — это проект верхнего уровня Apache и один из самых популярных проектов больших данных с открытым исходным кодом. Он был запущен около 5 лет назад, и сейчас ShardingSphere насчитывает более 14 тысяч звезд и более 270 участников в своем сообществе.

Успешный проект уже запущен и обновлен во многих версиях. Apache ShardingSphere теперь поддерживает множество мощных функций и продолжает оптимизировать свои правила конфигурации. Мы хотим помочь пользователям понять все функции и правила конфигурации, помочь им быстро протестировать и запустить компоненты и, в конечном итоге, помочь им достичь максимальной производительности, поэтому мы решили запустить проект shardingsphere-example.

shardingsphere-example — это независимый проект Maven. Он сохраняется в файле «примеров» Apache ShardingSphere. Ссылка на сайт:

https://github.com/apache/shardingsphere/tree/master/examples

Модули и пояснения

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

Он также включает в себя общие инструменты, такие как Java API, YAML, Spring Boot, Spring Namespace. В дополнение к ShardingSphere-JDBC теперь мы добавляем примеры использования ShardingSphere-Proxy и ShardingSphere-Parser в shardingsphere-example. Вы можете легко найти все функции Apache ShardingSphere, а также их сценарии и их гибкие конфигурации в нашем официальном репозитории. В таблице ниже показано, как распределяются модули в shardingsphere-example.

shardingsphere-example
├── example-core
│ ├── config-utility
│ ├── example-api
│ ├── example-raw-jdbc
│ ├── example-spring-jpa
│ └── example-spring-mybatis
├── shardingsphere-jdbc-example
│ ├── sharding-example
│ │ ├── sharding-raw-jdbc-example
│ │ ├── sharding-spring-boot-jpa-example
│ │ ├── sharding-spring-boot-mybatis-example
│ │ ├── sharding-spring-namespace-jpa-example
│ │ └── sharding-spring-namespace-mybatis-example
│ ├── governance-example
│ │ ├── governance-raw-jdbc-example
│ │ ├── governance-spring-boot-mybatis-example
│ │ └── governance-spring-namespace-mybatis-example
│ ├── transaction-example
│ │ ├── transaction-2pc-xa-atomikos-raw-jdbc-example
│ │ ├── transaction-2pc-xa-bitronix-raw-jdbc-example
│ │ ├── transaction-2pc-xa-narayana-raw-jdbc-example
│ │ ├── transaction-2pc-xa-spring-boot-example
│ │ ├── transaction-2pc-xa-spring-namespace-example
│ │ ├── transaction-base-seata-raw-jdbc-example
│ │ └── transaction-base-seata-spring-boot-example
│ ├── other-feature-example
│ │ ├── encrypt-example
│ │ │ ├── encrypt-raw-jdbc-example
│ │ │ ├── encrypt-spring-boot-mybatis-example
│ │ │ └── encrypt-spring-namespace-mybatis-example
│ │ ├── hint-example
│ │ │ └── hint-raw-jdbc-example
│ │ └── shadow-example
│ │ │ ├── shadow-raw-jdbc-example
│ │ │ ├── shadow-spring-boot-mybatis-example
│ │ │ └── shadow-spring-namespace-mybatis-example
│ ├── extension-example
│ │ └── custom-sharding-algortihm-example
├── shardingsphere-parser-example
├── shardingsphere-proxy-example
│ ├── shardingsphere-proxy-boot-mybatis-example
│ └── shardingsphere-proxy-hint-example
└── src/resources
└── manual_schema.sql

пример ядра

Пример ядра модуля содержит сущность, определение интерфейса и другие общедоступные коды.

пример шардингсферы-jdbc

В примере модуля ShardingSphere-JDBC показаны функции ShardingSphere-JDBC и способы их использования.

пример сегментирования

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

Что касается интеграции с ORM, этот модуль также предоставляет пользователям примеры интеграции MyBatis и JPA.

пример управления

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

Примечание. Пример распределенного управления зависит от Apache Zookeeper. Пожалуйста, примите самоотверженность.

пример транзакции

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

Примечание. Если вы используете Seata, используйте самостоятельное развертывание.

пример другой функции

В этом модуле приведены примеры некоторых функций ShardingSphere-JDBC, например, шифрование (шифрование данных), подсказка (менеджер подсказок), тень (теневая база данных).

пример шифрования

Этот модуль отображает примеры шифрования данных. Он также сообщает пользователям, как использовать и получать доступ к Java API, YAML, Spring Boot, Spring Namespace.

пример подсказки

Это показывает примеры менеджера подсказок. Однако на данный момент есть только пример конфигурации YAML. Мы приветствуем больше сценариев.

пример тени

Это дает примеры теневой базы данных, включая ее применение в сочетании с шифрованием данных, сегментированием и разделением чтения/записи.

пример расширения

Модуль сообщает пользователям, как использовать пользовательское расширение ShardingSphere-JDBC. Пользователи могут использовать SPI или другие способы, предоставляемые ShardingSphere, для расширения возможностей.

пример пользовательского алгоритма сегментирования

Модуль показывает, как пользователь может использовать «CLASS_BASED» и настраивать свой алгоритм сегментирования.

пример парсера-шардингсферы

SQLParserEngine — это механизм синтаксического анализа SQL в Apache ShardingSphere. Он также является основой для ShardingSphere-JDBC и ShardingSphere-Proxy. Когда пользователь вводит текст SQL, SQLParserEngine анализирует его и превращает в распознаваемые выражения. Тогда хорошо иметь улучшения, такие как маршрутизация или перезапись.

После выпуска альфа-версии 5.0.0 основная функция Apache ShardingSphere SQL Parser полностью открыта для пользователей. Они могут использовать API и вызывать SQLParserEngin. Таким образом, они могут удовлетворить больше потребностей своего бизнеса, имея в своих системах такой эффективный анализ SQL.

В модуле пользователи могут узнать, как использовать SQLParserEngine API. Он предоставляет различные синтаксические правила языков, таких как MySQL, PostgreSQL, Oracle, SQL Server и SQL 92.

пример прокси-сервера shardingsphere

Пример модуля ShardingSphere-Proxy включает в себя примеры конфигурации распространенных сценариев, таких как сегментирование, разделение чтения и записи и менеджер подсказок. Поскольку функции ShardingSphere-Proxy почти такие же, как и у ShardingSphere-JDBC, пользователи могут обратиться к shardingsphere-jdbc-example, если им не удастся найти нужный пример в shardingsphere-proxy-example.

пример shardingsphere-proxy-boot-mybatis

В модуле пользователи могут узнать, как использовать прокси для настройки сегментирования и как использовать SpringBoot + MyBatis для доступа к данным.

shardingsphere-proxy-hint-example

В этом модуле пользователь может узнать, как использовать прокси для настройки менеджера подсказок и как использовать клиентскую часть Java для доступа к данным.

Новая оптимизация

Скоро появится бета-версия Apache ShardingSphere 5.0.0, поэтому участники сообщества также обновили пример shardingsphere. Они оптимизировали следующее:

  • JDK-версия
  • Версия компонента
  • имя класса
  • Профили конфигурации
  • SQL-скрипт

Связанные детали следующие:

Обновление версии JDK

Согласно отчету JetBrains «A Picture of Java in 2020», Java8 LTS является самой популярной версией среди разработчиков Java.

После этого обновления shardingsphere-example использует Java 8 и более новые версии. Если вы используете Java 7 или более ранние версии, сначала обновите версию JDK.

Обновление зависимостей строк

В shardingsphere-example мы обновляем компоненты строковых зависимостей.

• версия spring-boot с 1.5.17 по 2.0.9.RELEASE

• версия springframework с 4.3.20.RELEASE до 5.0.13.RELEASE

• версия mybatis-spring-boot-start с 1.3.0 на 2.0.1

• версия mybatis-spring с 1.3.0 на 2.0.1

Обновление инфраструктуры сохраняемости

В sharding-sphere-example мы обновляем фреймворки сохранения MyBatis и Hibernate.

• версия mybatis с 3.4.2 на 3.5.1

• версия спящего режима с 4.3.11.Final до 5.2.18.Final

Обновление пула соединений

В примере sharding-sphere мы обновляем пул соединений с базой данных HikariCP.

• ArtifactId HikariCP с HikariCP-java7 на HikariCP

• Версия HikariCP с 2.4.11 по 3.4.2

Обновление драйвера базы данных

В sharding-sphere-example мы обновляем драйверы подключения к базе данных MySQL и PostgreSQL.

• версия mysql-connector-java с 5.1.42 по 5.1.47

• версия postgresql с 42.2.5.jre7 до 42.2.5

Пример

В этом разделе мы приведем несколько типичных примеров и покажем, как настроить и запустить shardingsphere-example.

В проекте shardingsphere-example много модулей. Но пока мы выбираем только несколько популярных сценариев применения ShardingSphere-JDBC.

Подготовка

1. Maven — это инструмент сборки проекта на примере shardingsphere. Пожалуйста, подготовьтесь к этому в первую очередь;

2. Подготовьте Apache ShardingSphere. Если вы еще не загрузили Apache ShardingSphere, сначала загрузите и скомпилируйте его. Вы можете использовать ссылку ниже:

git clone https://github.com/apache/shardingsphere.git
cd shardingsphere
mvn clean install -Prelease

3. Импортируйте проект shardingsphere-example в вашу IDE;

4. Подготовьте управляемую среду базы данных, например локальные примеры MySQL;

5. Если вам нужно проверить разделение чтения и записи, убедитесь, что ваша синхронизация master-slave в порядке;

6. Выполните сценарий инициализации БД: примеры/src/resources/manual_schema.sql

Сценарии и примеры

sharding-spring-boot-mybatis-example: Шардинг

  1. Путь

примеры/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example

2. Цель

В этом примере показано применение ShardingSphere-JDBC в сочетании с SpringBoot и MyBatis для реализации сегментирования. Цель сегментирования состоит в том, чтобы разделить одну таблицу на четыре, равномерно сохраненных в двух разных базах данных.

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

  • Настроить application.properties
  • установить spring.profiles.active как таблицы баз данных осколков
  • Настройте приложения-шардинг-базы-данных-таблиц.
  • Измените jdbc-url на местоположение вашей базы данных и настройте свой идентификатор пользователя, пароль и т. д.
  • Установите атрибут spring.shardingsphere.props.sql-show как true

Подробнее см. в Руководстве по настройке

4. Бежать

Запустить при запуске: ShardingSpringBootMybatisExample.java

Теперь вы можете наблюдать маршрутизацию всех выражений SQL в Logic SQL и Actual SQL журналов и понимать, как работает сегментация.

Sharding-raw-jdbc-example: разделение чтения и записи

1. Путь

примеры/shardingsphere-jdbc-пример/sharding-пример/sharding-raw-jdbc-пример

2. Цель

В примере показано, как пользователи могут использовать YAML и настроить функцию разделения чтения и записи ShardingSphere-JDBC. Цель состоит в том, чтобы разделить одну базу данных для записи и две базы данных для чтения.

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

  • Настройте META-INF/readwrite-splitting.yaml
  • Измените jdbc-url на местоположение вашей базы данных и настройте свой идентификатор пользователя, пароль и т. д.
  • Установите props.sql-show как true

Подробнее см. в Руководстве по настройке.

4. Бежать

Откройте файл запуска: ShardingRawYamlConfigurationExample.java и установите shardingType как ShardingType.READWRITE_SPLITTING. Запустите автозагрузку.

Теперь вы можете наблюдать маршрутизацию всех выражений SQL в журналах Logic SQL и Actual SQL и понимать, как работает разделение чтения и записи.

Примечание. При сбое синхронизации базы данных master-slave будут возникать ошибки запроса.

Пример пользовательского алгоритма сегментирования: Пользовательский алгоритм

1. Путь

примеры/shardingsphere-jdbc-пример/пример-расширения/пример пользовательского алгоритма сегментирования/пример алгоритма сегментирования на основе классов

2. Цель

В примере показано, как пользователи могут использовать CLASS_BASED и расширять свой собственный алгоритм. Таким образом, ShardingSphere-JDBC может основываться на пользовательском алгоритме и вычислять результаты сегментирования во время маршрутизации сегментирования. Сценарий заключается в том, как использовать собственный алгоритм сегментирования для масштабирования.

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

○ Подготовьте свой алгоритм сегментирования, который должен основываться на бизнес-потребностях и использовать любые интерфейсы StandardShardingAlgorithm, ComplexKeysShardingAlgorithm или HintShardingAlgorithm. В примере показано, как использовать ClassBasedStandardShardingAlgorithmFixture.

  • Настройте META-INF/sharding-databases.yaml
  • Измените jdbc-url на местоположение вашей базы данных и настройте свой идентификатор пользователя, пароль и т. д.
  • Установите props.sql-show как true.

Примечание. Для shardingAlgorithms, когда тип CLASS_BASED, вы можете использовать реквизиты и назначать класс и абсолютный путь пользовательского алгоритма. Итак, настройка выполнена.

Подробнее см. в Руководстве по настройке.

4. Бежать

Запустите запуск: YamlClassBasedShardingAlgorithmExample.java.

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

Сводка

На этом наш брифинг заканчивается. В будущем мы поделимся с вами другими примерами ShardingSphere-JDBC, ShardingSphere-Proxy и ShardingSphere-Parser.

Если у вас есть какие-либо вопросы или вы обнаружили какие-либо проблемы, мы с нетерпением ждем ваших комментариев по нашей проблеме GitHub, или вы можете отправить запрос на включение и присоединиться к нам или присоединиться к нашему сообществу Slack. Мы приветствуем всех, кто хотел бы стать частью этого проекта высшего уровня и внести свой вклад. Для получения дополнительной информации посетите наш Руководство для авторов.

Авторы

Я Цзян Лунтао, инженер промежуточного программного обеспечения SphereEx и участник Apache ShardingSphere. В настоящее время я сосредоточен на промежуточном программном обеспечении базы данных ShardingSphere и его сообществе с открытым исходным кодом.

Меня зовут Хоу Ян, я инженер промежуточного программного обеспечения в SphereEx. Я люблю открытый исходный код и хочу внести свой вклад в создание лучшего сообщества со всеми.

Сообщество ShardingSphere:

ShardingSphere Github: https://github.com/apache/shardingsphere

ShardingSphere Твиттер: https://twitter.com/ShardingSphere

Slack-канал ShardingSphere: apacheshardingsphere.slack.com