Pandas Getting Performance

http://pandas.pydata.org/pandas-docs/version/0.24/user_guide/enhancingperf.html?highlight=performance

For intensive ndarray computing (loops): - use cython with numpy - use numba with numpy

在引入更复杂的基础设施(如k8s、多进程)等方式之前,先使用算法、语言级别的性能优化。而在执行优化之前,先应该找到瓶颈。既可以使用小代码片段和模拟数据来验证代码(或算法)的性能,或小规模数据使用profile来看,也可以往代码中加入时间开销打印输出等方式来寻找(尤其是在函数体内)。

比如,我在做MCS的统计分析时,一开始猜测是df的loop开销大,花了力气优化。但后来按步骤,先加入时间开销打印语句,找出来时间开销是在df.loc[i,j …

Continue Reading

Keystone Token revocation issues

Keystone的Token Revocation的实现方式是导致Keystone Token Validation变慢的根源。 由于所有的OpenStack API调用均需要Validate Token,这也将该问题扩大成整个OpenStack云平台的性能瓶颈之一。

在2016年7月22日的Openstack Digest, Vol 37, Issue 22中,来自Redhat的Luke Hinds提到了该问题可被利用来进行拒绝服务攻击(DoS)。 Revocation Event记录的保存时间是Token Expiration 加上Expiration Buffer。在默认配置下,其值为1.5小时。在这个时间段内, 一个合法的普通OpenStack用户可以不停地生成Token,然后revoke Token,从而生成大量的Revocation Event记录,拖慢Token Validation。

在Validate Token时对Revocation Event表的查询语句是:

Select <Column List> from Revocation_Event Order By Revoked_at

在用户不停地调用revoke Token的情况下,这样一个语句的结果是变化的,导致在数据库端和Keystone端的缓存都是会失效的。 当结果集足够大时,这一查询过程和结果数据传输过程都会变得很费时 …

Continue Reading