Представьте себе увеличение ролей_дальности_ин_мс & permissions_validity_in_ms - PullRequest
1 голос
/ 04 октября 2019

Мы видим много исключений времени ожидания операции в нашем кластере Cassandra с 3 узлами. Ниже приведена часть стека ошибок.

com.google.common.util.concurrent.UncheckedExecutionException: java.lang.RuntimeException: org.apache.cassandra.exceptions.ReadTimeoutException: Operation timed out - received only 0 responses.
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203) ~[guava-18.0.jar:na]
at com.google.common.cache.LocalCache.get(LocalCache.java:3937) ~[guava-18.0.jar:na]
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) ~[guava-18.0.jar:na]
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) ~[guava-18.0.jar:na]
at org.apache.cassandra.auth.PermissionsCache.getPermissions(PermissionsCache.java:72) ~[apache-cassandra-3.0.9.jar:3.0.9]

Caused by: java.lang.RuntimeException: org.apache.cassandra.exceptions.ReadTimeoutException: Operation timed out - received only 0 responses.
    at org.apache.cassandra.auth.CassandraRoleManager.getRole(CassandraRoleManager.java:489) ~[apache-cassandra-3.0.9.jar:3.0.9]
    at org.apache.cassandra.auth.CassandraRoleManager.isSuper(CassandraRoleManager.java:293) ~[apache-cassandra-3.0.9.jar:3.0.9]
    at org.apache.cassandra.auth.Roles.hasSuperuserStatus(Roles.java:52) ~[apache-cassandra-3.0.9.jar:3.0.9]
    at org.apache.cassandra.auth.AuthenticatedUser.isSuper(AuthenticatedUser.java:71) ~[apache-cassandra-3.0.9.jar:3.0.9]
    at org.apache.cassandra.auth.CassandraAuthorizer.authorize(CassandraAuthorizer.java:76) ~[apache-cassandra-3.0.9.jar:3.0.9]

Каждый раз, когда мы видим это исключение, связанное с PermissionsCache или CassandraRoleManager. После небольшого исследования я нашел решение, чтобы увеличить role_validity_in_ms & permissions_validity_in_ms. Благодаря Включите однократную проверку подлинности и авторизации Cassandra и сохраните ее в кэше навсегда

Вопрос в том, как повлияет увеличение этого значения? Документация Datastax говорит, что кэш эффективенпри небольшой продолжительности.

Как долго разрешения в кэше остаются в силе для управления влиянием на производительность запросов разрешений. Получение разрешений может быть ресурсоемким. Установите период действия кэша в соответствии с вашими допусками безопасности. Кеш используется для стандартной аутентификации и кеша контроля доступа на уровне строк (RLAC). Кеш довольно эффективен при небольшой длительности.

1 Ответ

1 голос
/ 04 октября 2019

Эти параметры определяют, как долго разрешения и список ролей остаются действительными в течение текущего сеанса. Это сильно зависит от ваших бизнес-требований - если вашему приложению необходимо, чтобы роли и разрешения могли быть изменены «онлайн» во время работы, тогда вам нужно иметь более низкие значения, если это нормально, чтобы иметь те же роли и разрешения до следующего повторного подключения / перезапуска приложения, тогда вы можете перейти к более высоким значениям.

Но вы также можете иметь комбинацию обоих, если вы будете использовать roles_update_interval_in_ms, credentials_update_interval_in_ms & permissions_update_interval_in_ms для более низких значений, чем roles_validity_in_ms, credentials_interval_in_ms и permissions_interval_in_ms (см. doc ). Если эти значения указаны, то роли, разрешения и учетные данные будут проверяться в фоновом режиме через заданные интервалы времени, а если запрос будет выполнен успешно, то кэш будет обновлен, а в случае сбоя кэшированное значение все равно будет использовано. Например, вы можете установить roles_validity_in_ms на 1 день и roles_update_interval_in_ms на 10 минут, чтобы вы могли относительно быстро реагировать на изменения ролей для данного пользователя.

...