如何让aFleX脚本性能更好

简介:

A10网络的的aFleX脚本可以对请求和响应数据包进行深度检测并进行灵活的重定向、丢弃、修改等操作,可以解决用户的一些特殊需求,因此深受一批技术型用户的钟爱。尽管AX平台凭借其杰出的架构设计使得aFleX带来的性能影响相对同类产品小很多,但根据aFleX的复杂度和编写质量不同,对应用整体性能的影响还是存在一些差别的。本文就如何编写更高效的aFleX进行简单阐述。

首先,哪些因素会影响aFleX性能? 有以下几点。

  • 做什么操作(使用什么aFleX/tcl命令)?  如对数据包内容进行操作要比对数据包头操作要耗费的资源要大很多。
  • 变量、条件判断、循环等的使用
  • 使用什么事件? 如RAM CACHE中,在CACHE_RESPONSE事件中处理(每次命中该缓存都需要处理)和在缓存前的HTTP_RESPONSE事件中处理(只在缓存前处理一次),资源使用差别巨大。

知道了影响aFleX性能的因素,如何编写高效的aFlex就又针对性了。基本原则如下。

1. 别使用aFlex!

不要因为好玩使用aFleX,除非必须。如果有相应的功能特性可以做到同样功能,使用设备自身的功能。AX的HTTP模板中提供插入客户端IP、URL 交换、HTTP头删除/插入/修改、HTTP重定向等丰富的功能,性能要比使用aFleX更好。

2. 避免没必要的变量

除非必须,否则尽可能不要使用变量。变量创建、赋值等都需要耗费CPU资源,同时也会占用内存资源(每个连接都会占用一定字节,在大并发用户时影响会放大)。诸如HTTP::host 和 IP::client_addr等命令的执行结果已经缓存在内存中,将这些常量结果保存到变量是典型的资源浪费。只有在使用变量可以减少重复计算该值时才使用变量。下面例子中,前者就使用了没有必要的变量。

未优化:

set ip_addr [IP::client_addr]

log “Client address=$ip_addr”

优化后:

log “Client address=[IP::client_addr]”

3. 使用{}括住expr表达式!

由于tcl语言的表达式有两次替代,一次tcl解释器替代和一次expr命令替代,尽可能使用{}括住表达式。这样可以使tcl对于没必要的二次替换的变量和命令结果只进行一次替代。

如set octet [expr 3 + [getfield [IP::client_addr] "." 4]] 中[getfield [IP::client_addr] "." 4]在tcl解释器中替代一次,在进行expr计算时还有一次替代。

而在使用{}后,set octet [expr {3 + [getfield [IP::client_addr] "." 4]}] 不需用第2次expr命令中的替代。

4. 条件判断时遵循以下原则

  • 尽可能使用if-elseif替代连续多个if。多个if时,即使匹配后仍然需要执行完所有if。if-elsif则会在首次匹配后退出条件判断。
  • if-elseif中尽量把最可能的条件放到最前面。
  • 尽可能使用switch替换if-elseif。switch可以让代码看起来简单,也更优化。

5. 数据查询时尽量使用tcl中的array替代list。多维矩阵的查询胶质多个list查询更高效。

6. 使用正确的操作符可以改善性能。如:

  • 字符串比较使用eq和ne
  • 数字比较使用 ==和 !=
  • 使用命令 [IP::addr] 比较地址

7. 尽可能避免使用正则表达式regex和正则表达式替代regsub。这两个命令功能强大,但耗费资源也更多。有些情况必须使用正则表达式就不得不牺牲一些性能。可能的情况下尽可能使用以下替代命令。

  • starts_with, ends_with等替代regexp
  • string map替代regsub

以上只是部分常见的可以优化aFleX的地方,可以满足大部分情况。针对非常复杂的aFleX优化,一方面需要非常熟悉tcl,另一方面需要熟悉aFleX命令工作机制,这时最好是借助于厂家技术支持中心进行优化。

R.S


本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/696728

相关文章
|
6天前
|
缓存 监控 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第23天】 在竞争激烈的移动市场中,一个高效的Android应用是吸引并保留用户的关键。本文将探讨如何通过一系列技术手段和最佳实践来优化Android应用的用户体验和性能表现。我们将深入分析响应式UI设计、内存管理、多线程处理以及最新的Android框架特性,揭示它们如何共同作用以减少应用延迟,提高响应速度,并最终提升整体用户满意度。
|
1月前
|
缓存 监控 Java
构建高效Android应用:从优化用户体验到提升性能
在竞争激烈的移动应用市场中,为用户提供流畅和高效的体验是至关重要的。本文深入探讨了如何通过多种技术手段来优化Android应用的性能,包括UI响应性、内存管理和多线程处理。同时,我们还将讨论如何利用最新的Android框架和工具来诊断和解决性能瓶颈。通过实例分析和最佳实践,读者将能够理解并实施必要的优化策略,以确保他们的应用在保持响应迅速的同时,还能够有效地利用系统资源。
|
1月前
|
存储 缓存 安全
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
65 0
|
1月前
|
算法 Java 测试技术
性能工具之代码级性能测试工具ContiPerf
【2月更文挑战第23天】性能工具之代码级性能测试工具ContiPerf
270 1
性能工具之代码级性能测试工具ContiPerf
|
缓存 网络协议 NoSQL
性能 - 浅谈性能优化办法
性能优化,反复被提起,想要做到性能优化,先要理解性能优化,知其然才知其所以然,所谓的高性能就是合理的运用服务器的硬件资源,主要是Cpu和内存,硬盘,用大量的测试和计算,合理的计算使用服务器的资源,提升响应速度,提高吞吐率,就是性能优化的知识点。
103 0
LanguageTool性能简单测试分析
LanguageTool性能简单测试分析
88 0
|
Kubernetes Java jenkins
K8S环境的Jenkin性能问题处理
通过helm部署的jenkins,在实际使用过程中时常出现响应变慢的问题,本文回顾了问题的分析和处理过程,希望能给您一些参考
275 1
K8S环境的Jenkin性能问题处理
|
存储 测试技术 Linux
服务器性能测试,你选哪种工具
 众所周知,服务器是整个网络系统和计算平台的核心,许多重要的数据都保存在服务器上,很多网络服务都在服务器上运行,因此服务器性能的好坏决定了整个应用系统的性能。
3266 0
|
存储 缓存 架构师
浅谈面向性能的开发
大部分者开发者入行都是功能实现角度入行,大部分测试人员也是相似的经历。一般项目都是最后时间跟性能较劲,由于系统的复杂性和变更的成本等导致性能工作多数是草草收尾。有没有更好的工程实践呢? 有! 感谢刚入行的几年的开发工作经历,养成了面向性能、面向稳定性、面向功能的持续开发实践的习惯。现在这里分享给大家!
531 0

热门文章

最新文章