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

Чтобы смоделировать эту среду, мы будем использовать экземпляры 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/bashset -epsql -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) values ('John','Doe 1','john1@doe.com',18,1234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ('John','Doe 2','john2@doe.com',19,2234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ('John','Doe 3','john3@doe.com',20,3234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ('John','Doe 4','john4@doe.com',21,4234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ('John','Doe 5','john5@doe.com',22,5234.23);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.shnetworks: postgresql-network: name: postgresql-network |
Как видите, наша конфигурация довольно проста. Если вы будете достаточно осторожны, вы увидите, что я дал номер один для чтения БД. Это потому, что в будущем мы добавим к нему больше реплик.
Я также привязал машины к различным локальным ips.
Если у вас есть проблемы с привязкой адресов, например 127.0.0. *: 5432
Тебе стоит попробовать
|
1
2
|
sudo ifconfig lo0 alias 127.0.0.2 upsudo 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/bashroot@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 | john1@doe.com | 18 | 1234.23 2 | John | Doe 2 | john2@doe.com | 19 | 2234.23 3 | John | Doe 3 | john3@doe.com | 20 | 3234.23 4 | John | Doe 4 | john4@doe.com | 21 | 4234.23 5 | John | Doe 5 | john5@doe.com | 22 | 5234.23(5 rows) |
Мы в значительной степени настроены на наш следующий шаг. У нас есть несколько запущенных баз данных, и мы собираемся ускорить запуск весеннего приложения на них. Следующий блог посвящен реализации приложения, работающего на нашей основной базе данных.
|
Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. См. Оригинальную статью здесь: чтение реплик и Spring Data. Часть 1. Настройка баз данных. Мнения, высказанные участниками Java Code Geeks, являются их собственными. |