Это серия постов в блоге о нашем стремлении повысить производительность нашего приложения за счет использования реплик чтения.
Для этого проекта наша цель состоит в том, чтобы настроить наше весеннее приложение данных и использовать репозитории чтения для записей и репозитории на основе реплик чтения для чтения.
Чтобы смоделировать эту среду, мы будем использовать экземпляры PostgreSQL через Docker.
Мотивы просты. Ваше приложение Spring становится все более популярным, и вы хотите, чтобы оно обрабатывало больше запросов. Большинство приложений там имеют более высокий спрос на операции чтения, чем на операции записи. Таким образом, я предполагаю, что ваше приложение относится к той же категории.
Хотя базы данных SQL сами по себе не масштабируются по горизонтали, вы можете работать с ними, используя реплики чтения.
Наша цель — не создавать реальную репликацию чтения в PostgreSQL.
поэтому вместо настройки любой репликации
мы просто скопируем некоторые данные из обеих баз данных
Это сценарий, который мы будем использовать для заполнения баз данных.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#!/bin/bash set -e psql -v ON_ERROR_STOP= 1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL create schema spring_data_jpa_example; create table spring_data_jpa_example.employee( id SERIAL PRIMARY KEY, firstname TEXT NOT NULL, lastname TEXT NOT NULL, email TEXT not null , age INT NOT NULL, salary real, unique(email) ); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) EOSQL |
Поскольку мы будем использовать Docker и Docker Compose, сценарий выше будет использоваться для инициализации базы данных. Теперь приступим к созданию стека Docker Compose.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
version: '3.5' services: write-db: image: postgres restart: always environment: POSTGRES_USER: db-user POSTGRES_PASSWORD: your-password POSTGRES_DB: postgres networks: - postgresql-network ports: - "127.0.0.2:5432:5432" volumes: - $PWD/init-db-script.sh:/docker-entrypoint-initdb.d/init-db-script.sh read-db- 1 : image: postgres restart: always environment: POSTGRES_USER: db-user POSTGRES_PASSWORD: your-password POSTGRES_DB: postgres networks: - postgresql-network ports: - "127.0.0.3:5432:5432" volumes: - $PWD/init-db-script.sh:/docker-entrypoint-initdb.d/init-db-script.sh networks: postgresql-network: name: postgresql-network |
Как видите, наша конфигурация довольно проста. Если вы будете достаточно осторожны, вы увидите, что я дал номер один для чтения БД. Это потому, что в будущем мы добавим к нему больше реплик.
Я также привязал машины к различным локальным ips.
Если у вас есть проблемы с привязкой адресов, например 127.0.0. *: 5432
Тебе стоит попробовать
1
2
|
sudo ifconfig lo0 alias 127.0.0.2 up sudo ifconfig lo0 alias 127.0.0.3 up |
Если у вас ничего не получится, просто поменяйте порты и все заработает. Это может быть не так удобно, но все равно хорошо.
Итак, давайте запустим наш стек Docker Compose.
1
|
docker-compose -f . /postgresql-stack .yaml up |
Мы должны иметь возможность запрашивать данные в обоих экземплярах postgresql.
01
02
03
04
05
06
07
08
09
10
11
|
docker exec -it deploy_read-db-1_1 /bin/bash root@07c502968cb3:/ # psql -v --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" db-user= # select*from spring_data_jpa_example.employee; id | firstname | lastname | email | age | salary ----+-----------+----------+---------------+-----+--------- 1 | John | Doe 1 | [email protected] | 18 | 1234.23 2 | John | Doe 2 | [email protected] | 19 | 2234.23 3 | John | Doe 3 | [email protected] | 20 | 3234.23 4 | John | Doe 4 | [email protected] | 21 | 4234.23 5 | John | Doe 5 | [email protected] | 22 | 5234.23 (5 rows) |
Мы в значительной степени настроены на наш следующий шаг. У нас есть несколько запущенных баз данных, и мы собираемся ускорить запуск весеннего приложения на них. Следующий блог посвящен реализации приложения, работающего на нашей основной базе данных.
Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. См. Оригинальную статью здесь: чтение реплик и Spring Data. Часть 1. Настройка баз данных. Мнения, высказанные участниками Java Code Geeks, являются их собственными. |