Установка и использование платформы
Тонкая настройка платформы: настройка групп доступа к конфиденциальным данным¶
Если вы используете 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.