Установка и использование платформы
Тонкая настройка платформы: настройка групп доступа к конфиденциальным данным¶
Если вы используете API-методы группы privacy для управления конфиденциальными данными, настройте параметры доступа к этим данным в конфигурационном файле ноды. Для этого предназначена секция privacy
.
gRPC API-методы группы privacy описаны в разделе gRPC: работа с конфиденциальными данными. REST API-методы группы privacy описаны в разделе REST API: обмен конфиденциальными данными и получение информации о группах доступа.
Важно
API-методы группы privacy допустимо использовать только в тестовом режиме функционирования блокчейн-платформы Конфидент, то есть, когда в конфигурационном файле ноды параметру node.crypto.pki.mode
присвоено значение TEST
. Подробнее об этом параметре см. раздел Общая настройка платформы: настройка режима работы.
Ниже представлен пример настройки с использованием БД PostgreSQL:
privacy {
replier {
parallelism = 10
stream-timeout = 1 minute
stream-chunk-size = 1MiB
}
synchronizer {
request-timeout = 2 minute
init-retry-delay = 5 seconds
inventory-stream-timeout = 15 seconds
inventory-request-delay = 3 seconds
inventory-timestamp-threshold = 10 minutes
crawling-parallelism = 100
max-attempt-count = 24
lost-data-processing-delay = 10 minutes
network-stream-buffer-size = 10
}
inventory-handler {
max-buffer-time = 500ms
max-buffer-size = 100
max-cache-size = 100000
expiration-time = 5m
replier-parallelism = 10
}
cache {
max-size = 100
expire-after = 10m
}
storage {
vendor = postgres
schema = "public"
migration-dir = "db/migration"
profile = "slick.jdbc.PostgresProfile$"
upload-chunk-size = 1MiB
jdbc-config {
url = "jdbc:postgresql://postgres:5432/node-1"
driver = "org.postgresql.Driver"
user = postgres
password = web3techru
connectionPool = HikariCP
connectionTimeout = 5000
connectionTestQuery = "SELECT 1"
queueSize = 10000
numThreads = 20
}
}
service {
request-buffer-size = 10MiB
meta-data-accumulation-timeout = 3s
}
}
Выбор базы данных¶
Перед изменением конфигурационного файла ноды выберите базу данных, которую планируете использовать для хранения конфиденциальных данных. Блокчейн-платформа Конфидент поддерживает взаимодействие с БД PostgreSQL и Amazon S3.
Важно
Выбор базы данных для хранения конфиденциальных данных доступен только в тестовом режиме функционирования блокчейн-платформы Конфидент, то есть, когда в конфигурационном файле ноды параметру node.crypto.pki.mode
присвоено значение TEST
. Подробнее об этом параметре см. раздел Общая настройка платформы: настройка режима работы.
PostgreSQL¶
Во время установки БД под управлением PostgreSQL вы создадите аккаунт для доступа к БД. Заданные при этом логин и пароль затем необходимо будет указать в конфигурационном файле ноды в полях user
и password
блока storage
секции privacy
; подробнее см. раздел vendor = postgres).
Для использования СУБД PostgreSQL потребуется установка JDBC-интерфейса (Java DataBase Connectivity). При установке JDBC задайте имя профиля. Это имя затем необходимо будет указать в конфигурационном файле ноды (в поле profile
блока storage
секции privacy
, подробнее см. раздел vendor = postgres).
В целях оптимизации подключение к PostgreSQL может осуществляться через инструмент pgBouncer. В этом случае pgBouncer требует особой настройки, которая описана ниже в разделе storage-pgBouncer.
Amazon S3¶
При использовании Amazon S3 информация должна храниться на сервере Minio. В процессе установки сервера Minio вам будет предложено задать логин и пароль для доступа к данным. Эти логин и пароль затем необходимо будет указать в конфигурационном файле ноды в полях access-key-id
и secret-access-key
; подробнее см. раздел vendor = s3).
После установки подходящей для вашего проекта СУБД измените блок storage
секции privacy
конфигурационного файла ноды, как описано ниже.
Блок storage
¶
В блоке storage
секции privacy
укажите используемую вами СУБД в параметре vendor
:
postgres
– для PostgreSQL;s3
– для Amazon S3.
Важно
Если вы не используете API-методы группы privacy, в параметре vendor
укажите значение none
и закомментируйте или удалите остальные параметры в секции privacy
. gRPC API-методы группы privacy описаны в разделе gRPC: работа с конфиденциальными данными. REST API-методы группы privacy описаны в разделе REST API: обмен конфиденциальными данными и получение информации о группах доступа.
vendor = postgres
¶
При использовании СУБД PostgreSQL блок storage
секции privacy
выглядит следующим образом:
storage {
vendor = postgres
schema = "public"
migration-dir = "db/migration"
profile = "slick.jdbc.PostgresProfile$"
upload-chunk-size = 1MiB
jdbc-config {
url = "jdbc:postgresql://postgres:5432/node-1"
driver = "org.postgresql.Driver"
user = postgres
password = web3techru
connectionPool = HikariCP
connectionTimeout = 5000
connectionTestQuery = "SELECT 1"
queueSize = 10000
numThreads = 20
}
}
В блоке должны быть указаны следующие параметры:
schema
– используемая схема взаимодействия между элементами в рамках БД; по умолчанию применяется схемаpublic
; если в вашей БД предусмотрена иная схема, то укажите ее название;migration-dir
– директория для миграции данных;profile
– имя профиля для доступа к JDBC, заданное при установке JDBC (см. раздел PostgreSQL);upload-chunk-size
– размер фрагмента данных, загружаемых с помощью REST API метода POST /privacy/sendLargeData или gRPC API метода SendLargeData;url
– адрес БД PostgreSQL; подробнее см. Поле url;driver
– имя драйвера JDBC, позволяющего Java-приложениям взаимодействовать с БД;user
– имя пользователя для доступа к БД; укажите логин созданного вами аккаунта для доступа к БД под управлением PostgreSQL;password
– пароль для доступа к БД; укажите пароль созданного вами аккаунта для доступа к БД под управлением PostgreSQL;connectionPool
– имя пула соединений, по умолчаниюHikariCP
;connectionTimeout
– время бездействия соединения до его разрыва (в миллисекундах);connectionTestQuery
– тестовый запрос для проверки соединения с БД; для PostgreSQL рекомендуется отправлять запросSELECT 1
;queueSize
– размер очереди запросов;numThreads
– количество одновременных подключений к БД.
Поле url
¶
В поле url
укажите адрес используемой БД в следующем формате:
jdbc:postgresql://<POSTGRES_ADDRESS>:<POSTGRES_PORT>/<POSTGRES_DB>
, где
POSTGRES_ADDRESS
– адрес хоста PostgreSQL;POSTGRES_PORT
– номер порта хоста PostgreSQL;POSTGRES_DB
– наименование БД PostgreSQL.
Можно указать адрес БД вместе с данными аккаунта, используя параметры user
и password
:
privacy {
storage {
...
url = "jdbc:postgresql://yourpostgres.com:5432/privacy_node_0?user=user_privacy_node_0@company&password=7nZL7Jr41qOWUHz5qKdypA&sslmode=require"
...
}
}
В этом примере user_privacy_node_0@company
– имя пользователя, 7nZL7Jr41qOWUHz5qKdypA
– его пароль.
Также вы можете использовать команду sslmode=require
для требования использования ssl при авторизации.
pgBouncer¶
Для оптимизации работы с базой данных PostgreSQL используется pgBouncer – инструмент, через который осуществляется подключение к базе данных PostgreSQL. pgBouncer настраивается в отдельном конфигурационном файле данного инструмента – pgbouncer.ini.
В связи с тем, что режим pool_mode = transaction
в настройке pgBouncer не поддерживает подготовленные операторы на стороне сервера, в целях предотвращения потери данных мы рекомендуем использовать pool_mode
с session
режимом в настройках файла pgbouncer.ini. При использовании сессионного режима следует задать параметру server_reset_query
значение DISCARD ALL
.
[pgbouncer]
pool_mode = session
server_reset_query = DISCARD ALL
Больше информации о работе сессионного режима с подготовленными операторами можно найти в официальной документации к pgBouncer.
vendor = s3
¶
При использовании СУБД Amazon S3, блок storage
секции privacy
выглядит следующим образом:
storage {
vendor = s3
url = "http://localhost:9000/"
bucket = "privacy"
region = "aws-global"
access-key-id = "minio"
secret-access-key = "minio123"
path-style-access-enabled = true
connection-timeout = 30s
connection-acquisition-timeout = 10s
max-concurrency = 200
read-timeout = 0s
upload-chunk-size = 5MiB
}
url
– адрес сервера Minio для хранения данных; по умолчанию, Minio использует порт 9000;bucket
– имя таблицы БД S3 для хранения данных;region
– название региона S3, значение параметра –aws-global
;access-key-id
– идентификатор ключа доступа к данным; укажите логин для доступа к данным, который вы задали в процессе установки сервера Minio (см. раздел Amazon S3);secret-access-key
– ключ доступа к данным в хранилище S3; укажите пароль для доступа к данным, который вы задали в процессе установки сервера Minio (см. раздел Amazon S3);path-style-access-enabled = true
– путь к таблице S3 – неизменяемый параметр;connection-timeout
– период бездействия до разрыва соединения (в секундах);connection-acquisition-timeout
– период бездействия при установлении соединения (в секундах);max-concurrency
– максимальное число параллельных обращений к хранилищу;read-timeout
– период бездействия при чтении данных (в секундах);upload-chunk-size
– размер фрагмента данных, загружаемых с помощью REST API метода POST /privacy/sendLargeData или gRPC API метода SendLargeData.
Блок replier
¶
В блоке replier
секции privacy
укажите параметры потоковой передачи конфиденциальных данных:
replier {
parallelism = 10
stream-timeout = 1 minute
stream-chunk-size = 1MiB
}
В блоке должны быть указаны следующие параметры:
parallelism
– максимальное количество параллельных задач обработки запросов конфиденциальных данных;stream-timeout
– максимальное время выполнения операции чтения потока данных (стрима);stream-chunk-size
– размер фрагмента данных при передаче данных в виде потока (стрима).
Блок inventory-handler
¶
В блоке inventory-handler
секции privacy
укажите параметры сбора инвентаризационной информации (privacy inventory) конфиденциальных данных:
inventory-handler {
max-buffer-time = 500ms
max-buffer-size = 100
max-cache-size = 100000
expiration-time = 5m
replier-parallelism = 10
}
В блоке должны быть указаны следующие параметры:
max-buffer-time
– максимальное время накопления данных в буфере; по истечении указанного времени нода пакетно обрабатывает всю инвентаризационную информацию (privacy inventory);
max-buffer-size
– максимальное количество инвентаризационной информации в буфере; когда лимит достигнут, нода пакетно обрабатывает всю инвентаризационную информацию;
max-cache-size
– максимальный размер кэша инвентаризационной информации; используя этот кэш, нода выбирает только новую инвентаризационную информацию;
expiration-time
– время, когда истекает срок действия элементов кэша (инвентаризационной информации);
replier-parallelism
– максимальное количество параллельно выполняемых задач обработки запросов инвентаризационной информации.
Блок cache
¶
В блоке cache
секции privacy
укажите параметры кэша ответов конфиденциальных данных:
cache {
max-size = 100
expire-after = 10m
}
Примечание
Большие файлы (файлы, загружаемые с помощью REST API метода POST /privacy/sendLargeData или gRPC API метода SendLargeData) не подлежат кешированию.
В блоке должны быть указаны следующие параметры кэша:
max-size
– максимальное количество элементов;
expire-after
– время, по истечении которого заканчивается срок действия элементов кэша, которые не получили доступ.
Блок synchronizer
¶
В блоке synchronizer
секции privacy
укажите параметры синхронизации конфиденциальных данных:
synchronizer {
request-timeout = 2 minute
init-retry-delay = 5 seconds
inventory-stream-timeout = 15 seconds
inventory-request-delay = 3 seconds
inventory-timestamp-threshold = 10 minutes
crawling-parallelism = 100
max-attempt-count = 24
lost-data-processing-delay = 10 minutes
network-stream-buffer-size = 10
}
В блоке должны быть указаны следующие параметры:
request-timeout
– максимальное время ожидания ответа после запроса данных; значение по умолчанию –2 minute
;init-retry-delay
– пауза после неудачной попытки; с каждой попыткой задержка увеличивается на 4/3; значение по умолчанию –5 seconds
;inventory-stream-timeout
– максимальное время ожидания сетевого сообщения с инвентаризационной информацией (privacy inventory), т.е. подтверждения от конкретной ноды, что у нее есть определенные данные, и она может их предоставить для загрузки. По истечении этого таймаута нода опрашивает всех пиров (рассылает inventory-request), есть ли у них необходимые для загрузки данные; значение по умолчанию –15 seconds
;inventory-request-delay
– задержка после запроса инвентарных данных у пиров (inventory-request); значение по умолчанию –3 seconds
;inventory-timestamp-threshold
– параметр используется для принятия решения, отправлять ли PrivacyInventory сообщение при успешной синхронизации (загрузке) данных; значение по умолчанию –10 minutes
;crawling-parallelism
– максимальное количество параллельно выполняемых задач краулера – компонента, который собирает конфиденциальные данные у пиров; значение по умолчанию –100
;max-attempt-count
– количество попыток, которые предпримет краулер, прежде чем данные будут помечены как потерянные; значение по умолчанию –24
;lost-data-processing-delay
– задержка между попытками обработки очереди потерянных данных; значение по умолчанию –10 minutes
;network-stream-buffer-size
– максимальное количество фрагментов данных в буфере; когда указанное количество достигнуто, активируется обратное давление; значение по умолчанию –10
.
Поле inventory-timestamp-threshold
¶
Нода отправляет пирам сообщение PrivacyInventory после того, как она загружает в своё приватное хранилище данные по определенному хэшу данных, то есть успешно проводит синхронизацию данных. Для хранения PrivacyInventory используется кэш, ограниченный по количеству объектов и времени их нахождения в кэше. В зависимости от значения параметра inventory-timestamp-threshold
обработчик событий вставки данных принимает решение, нужно ли отправлять сообщение PrivacyInventory при загрузке данных. Обработчик сравнивает время транзакции (timestamp), которая соответствует данному хэшу данных, и текущее время на ноде. Если разница превышает значение параметра inventory-timestamp-threshold
, то сообщения PrivacyIntentory не отправляются.
Подобрав значение параметра inventory-timestamp-threshold
можно избежать ситуации, когда нода, которая синхронизирует стейт с сетью, засоряет сеть лишними сообщениями PrivacyInventory.
Блок service
¶
В блоке service
секции privacy
укажите параметры gRPC метода SendLargeData и REST метода POST /privacy/sendLargeData для отправки потока конфиденциальных данных.
service {
request-buffer-size = 10MiB
meta-data-accumulation-timeout = 3s
}
В блоке должны быть указаны следующие параметры:
request-buffer-size
– максимальный размер буфера запроса; когда указанный размер достигнут, активируется обратное давление;meta-data-accumulation-timeout
– максимальное время, за которое должны быть обработаны метаданные при отправке данных через REST API метод POST /privacy/sendLargeData.