Split records across many subtables for better distribution across TMMs
Problem this snippet solves:
This iRule demonstrates how to use multiple subtables to distribute session table entries. As a subtable is pinned to a specific TMM, using multiple subtables distributes the load more evenly across TMMs. We use CRC32 hashing of the key being stored to deterministically pick the subtable name to store a key in.
Code :
when RULE_INIT {
# Number of subtables to create (should be ~3+ x TMM count). Use 100 as a test.
set static::subtable_count 100
# Time to save subtable entries for
set static::lifetime 3600
# Prefix to keep these subtable names unique from other iRules
set static::prefix "mysubs"
}
when CLIENT_ACCEPTED {
# Pick some unique key for the subtable entries
set key [TCP::client_port]
# Look up the key in the subtable this key should be crc32 hashed to and save the value
set value [table lookup -subtable "${static::prefix}_[expr {[crc32 $key] % $static::subtable_count}]" $key]
log local0. "Looked up $key in ${static::prefix}_[expr {[crc32 $key] % $static::subtable_count}] subtable and found \"$value\""
# Check if there was a value for the given key
if {$value eq ""}{
# No value so add the key and value to the subtable determined by the crc32 hash of the key
table set -subtable "${static::prefix}_[expr {[crc32 $key] % $static::subtable_count}]" $key "some value" indef $static::lifetime
} else {
# Do something with the stored value for this key
}
}Published Mar 18, 2015
Version 1.0hoolio
Cirrostratus
VP of Solutions at WorldTech IThoolio
Cirrostratus
VP of Solutions at WorldTech ITNo CommentsBe the first to comment
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)