F5 iRule для UIE — задержка при использовании команды persist uie

мы пытаемся внедрить в нашу службу балансировщик нагрузки F5, и для этого мы разрабатываем iRule, который сохраняет сеанс с функцией универсального сохранения.
но при попытке сохранить сеанс с помощью команды iRule «persist uie» мы возникают задержки.
задержка может превышать 1000 мс...
в чем проблема? как мы можем избавиться от этой задержки ??

пожалуйста, ознакомьтесь с нашим кодом iRule и журналами, которые мы записали.
заранее спасибо

вот наш код iRule:

when HTTP_REQUEST {
                if {[HTTP::host] equals "mpi-lb.creditguard.co.il" } {
                                set txID1 ""
                                set txID2 ""
                                set txID3 ""
                                set txID4 ""
                                set txID5 ""
                                set txID6 ""
                                set txID7 ""
                                set txID8 ""
                                # Log details for the request
                                regexp {(txId|token|mpiTransactionId|transactionID)[=>]([0-9a-z]{8}-([0-9a-z]{4}-){3}[0-9a-z]{12})([&< ]|$)} [HTTP::uri] => txID1 txID2 txID3 txID4
                                regexp {(txId|token|mpiTransactionId|transactionID)[=>]([0-9a-z]{8}-([0-9a-z]{4}-){3}[0-9a-z]{12})([&< ]|$)} [HTTP::payload] => txID5 txID6 txID7 txID8
                                log local0. "uri:[HTTP::uri]:payload: txID2:$txID2 txID6:$txID6"
                                if {$txID2 != ""} {
                                                log local0. "persist lookup uie:[persist lookup uie $txID2] $txID2 in uri"
                                                persist uie $txID2
                                } elseif {$txID6 != ""} {
                                                log local0. "persist lookup uie:[persist lookup uie $txID6] $txID6 in paylod"
                                                persist uie $txID6
                                }
                }
}

when HTTP_RESPONSE {
                if {([IP::server_addr] equals "172.16.100.16") || ([IP::server_addr] equals "172.16.100.17") } {
                                # Trigger collection for up to 1MB of data
                                if {[HTTP::header exists "Content-Length"] && [HTTP::header "Content-Length"] <= 1048576} {
                                                set content_length [HTTP::header "Content-Length"]
                                } else {
                                                set content_length 1048576
                                }
                                # Check if $content_length is not set to 0
                                if { ([HTTP::status] == 200) && ($content_length > 0)} {
                                                HTTP::collect $content_length
                                }
                }
}

when HTTP_RESPONSE_DATA {
                if {([IP::server_addr] equals "172.16.100.16") || ([IP::server_addr] equals "172.16.100.17") } {
                                # do stuff with the payload
                                #find the application unique identifier between <uid> and </uid> (5 is the length of <uid> string)
                                set txId [string trim [findstr [HTTP::payload] "<txId>" 5 "</txId>"] ">"]
                                if {$txId != ""} {
                                                log local0. "[IP::server_addr] : persist add uie #$txId#"
                                                persist add uie $txId 1800
                                }
                }
}

вот логи (вы можете увидеть задержку между 14:16:08 и 14:17:08)

Tue Jun 14 14:16:03 IDT 2016  info  cgwaf tmm3[10326]    Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/CreateTransactionExtended:payload: txID2: txID6:  
Tue Jun 14 14:16:04 IDT 2016 info cgwaf  tmm3[10326]     Rule /Common/mpi-lb-irule <HTTP_RESPONSE_DATA>: 172.16.100.16 : persist add uie #03f72209-754e-4bde-85f6-69cdf4d27526#  
Tue Jun 14 14:16:08 IDT 2016  info cgwaf tmm1[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/PerformTransaction? txId=03f72209-754e-4bde-85f6-69cdf4d27526:payload: txID2:03f72209-754e-4bde-85f6-69cdf4d27526 txID6:  
Tue Jun 14 14:16:08 IDT 2016  info cgwaf tmm1[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: persist lookup uie:/Common/mpi-lb 172.16.100.16 443 03f72209-754e-4bde-85f6-69cdf4d27526 in uri 
Tue Jun 14 14:17:08 IDT 2016  info cgwaf tmm2[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/merchantPages/ResponsiveWebSources/images/cvv.jpg:payload: txID2: txID6:  
Tue Jun 14 14:17:08 IDT 2016  info  cgwaf tmm[10326]    Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/merchantPages/ResponsiveWebSources/images/mastercard_slice.gif:payload: txID2: txID6:  
Tue Jun 14 14:17:08 IDT 2016  info cgwaf tmm[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/merchantPages/ResponsiveWebSources/images/pci_slice.gif:payload: txID2: txID6:  
Tue Jun 14 14:17:08 IDT 2016  info cgwaf tmm[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/merchantPages/ResponsiveWebSources/images/visa_slice.gif:payload: txID2: txID6:  
Tue Jun 14 14:17:08 IDT 2016  info cgwaf tmm[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/merchantPages/ResponsiveWebSources/images/Logo.gif:payload: txID2: txID6:  
Tue Jun 14 14:17:08 IDT 2016  info  cgwaf tmm3[10326]    Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/merchantPages/ResponsiveWebSources/images/qm.png:payload: txID2: txID6:  
Tue Jun 14 14:18:06 IDT 2016  info  cgwaf tmm2[10326]    Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri://CGMPI_Server/ProcessCreditCard:payload: txID2: txID6:03f72209-754e-4bde-85f6-69cdf4d27526  
Tue Jun 14 14:18:06 IDT 2016  info cgwaf tmm2[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: persist lookup uie:/Common/mpi-lb 172.16.100.16 443 03f72209-754e-4bde-85f6-69cdf4d27526 in paylod  
Tue Jun 14 14:18:07 IDT 2016  info cgwaf tmm2[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri:/CGMPI_Server/merchantPages/nlb/OK.jsp?uniqueID=697536646.622257&lang=EN&authNumber=9125242& responseMac=7e77d7fe857e707ddf1c8990c80da8373f716c79d0ee79b88 f3d898a9ff0afc0&cardToken=1051484189394580& cardExp=0217&personalId=88888888& cardMask=458045******4580& txId=03f72209-754e-4bde-85f6-69cdf4d27526& numberOfPayments=&firstPayment=&periodicalPayment=:payload: txID2:03f72209-754e-4bde-85f6-69cdf4d27526 txID6:  
Tue Jun 14 14:18:07 IDT 2016  info cgwaf tmm2[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: persist lookup uie:/Common/mpi-lb 172.16.100.16 443 03f72209-754e-4bde-85f6-69cdf4d27526 in uri 
Tue Jun 14 14:18:07 IDT 2016  info cgwaf tmm2[10326]     Rule /Common/mpi-lb-irule <HTTP_REQUEST>: uri:/CGMPI_Server/merchantPages/WebSources/images/ssl.png:payload: txID2: txID6:  

person Tzvika Velich    schedule 16.06.2016    source источник


Ответы (1)


Я вижу, что вы используете поиск регулярных выражений для входящих и исходящих потоков, это очень дорого и требует много времени. Имейте в виду, что F5 должен проксировать данные, хранить их, извлекать поток, выполнять манипуляции с регулярными выражениями, а затем передавать их обратно в исходящий стек. Если вы хотите оптимизировать время, попробуйте найти другой способ сохранения потоков данных.

Тем не менее, вы можете использовать команду синхронизации, чтобы увидеть, сколько циклов обработки каждого события использует iRule: https://devcentral.f5.com/wiki/iRules.timing.ashx

В зависимости от версии TMSH, которую вы используете, вы должны получить статистику в графическом интерфейсе или с помощью команды TMSH.

person kruczkowski    schedule 17.06.2016
comment
Спасибо @kruczkowski за быстрый ответ, и мы будем использовать команду синхронизации. также мы знаем о регулярном выражении и планируем переместить txId в заголовки. но если я не ошибаюсь, мы наблюдаем задержку после завершения команды regexp, а точнее задержку просматриваем при выполнении команды persist uie. Имеет ли это смысл...? - person Tzvika Velich; 19.06.2016