增加 roles_validity_in_ms & permissions_validity_in_ms 的影响
Impact of increasing roles_validity_in_ms & permissions_validity_in_ms
我们在 3 节点 Cassandra 集群中发现了很多操作超时异常。以下是错误堆栈的一部分。
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 相关。经过一些研究,我找到了增加 roles_validity_in_ms & permissions_validity_in_ms 的解决方案。感谢
这里的问题是增加这个值有什么影响?Datastax 文档说缓存在短时间内有效。
How long permissions in cache remain valid to manage performance
impact of permissions queries. Fetching permissions can be resource
intensive. Set the cache validity period to your security tolerances.
The cache is used for the standard authentication and the row-level
access control (RLAC) cache. The cache is quite effective at small
durations.
这些参数控制权限和角色列表在当前会话期间保持有效的时间。它在很大程度上取决于您的业务需求 - 如果您的应用程序需要在工作期间可以更改角色和权限 "online",那么您需要具有较低的值,如果可以在下一个 [=24] 之前拥有相同的角色和权限=] 的应用程序,那么你可以转到更高的值。
但您也可以将两者结合使用,如果您使用 roles_update_interval_in_ms
、credentials_update_interval_in_ms
和 permissions_update_interval_in_ms
来降低低于 roles_validity_in_ms
、[=14 的值=],以及 permissions_interval_in_ms
(参见 doc)。如果指定了这些值,那么将在给定的时间间隔内在后台检查角色、权限和凭据,如果请求成功,则将更新缓存,如果失败,则仍将使用缓存值。例如,您可以将 roles_validity_in_ms
设置为 1 天,将 roles_update_interval_in_ms
设置为 10 分钟,这样您就能够相对快速地对给定用户的角色变化做出反应。
我们在 3 节点 Cassandra 集群中发现了很多操作超时异常。以下是错误堆栈的一部分。
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 相关。经过一些研究,我找到了增加 roles_validity_in_ms & permissions_validity_in_ms 的解决方案。感谢
这里的问题是增加这个值有什么影响?Datastax 文档说缓存在短时间内有效。
How long permissions in cache remain valid to manage performance impact of permissions queries. Fetching permissions can be resource intensive. Set the cache validity period to your security tolerances. The cache is used for the standard authentication and the row-level access control (RLAC) cache. The cache is quite effective at small durations.
这些参数控制权限和角色列表在当前会话期间保持有效的时间。它在很大程度上取决于您的业务需求 - 如果您的应用程序需要在工作期间可以更改角色和权限 "online",那么您需要具有较低的值,如果可以在下一个 [=24] 之前拥有相同的角色和权限=] 的应用程序,那么你可以转到更高的值。
但您也可以将两者结合使用,如果您使用 roles_update_interval_in_ms
、credentials_update_interval_in_ms
和 permissions_update_interval_in_ms
来降低低于 roles_validity_in_ms
、[=14 的值=],以及 permissions_interval_in_ms
(参见 doc)。如果指定了这些值,那么将在给定的时间间隔内在后台检查角色、权限和凭据,如果请求成功,则将更新缓存,如果失败,则仍将使用缓存值。例如,您可以将 roles_validity_in_ms
设置为 1 天,将 roles_update_interval_in_ms
设置为 10 分钟,这样您就能够相对快速地对给定用户的角色变化做出反应。