质量度量平台性能优化-4

在质量度量平台中,有少数几个页面打开速度是很慢的(不过由于用户量不大,以前也没关注),原因是需要对大量的数据做运算分析才展现出结果,这几天做了一下优化。方法很简单,这几个很慢的页面都是只读的数据,使用memcached缓存一下数据,效果会非常的好。

Django中很方便使用Cache,先需要安装python-memcached这个python包,在settings.py文件中添加如下内容:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '192.168.1.2:11211',
    }
}

其中192.168.1.2:11211就是搭建的memcached服务(搭建方法也比较简单)。

然后在代码中,先去cache中取一下,如果没有取到,就重新从原始取到获取数据即可。例如下面的代码片段:

from django.core.cache import cache

def get_web_status(start, end):
    '''
    @summary: get the web HTTP status data.
              it will call the remote AEW (in product env).
    @param start: the start date.  Not used yet.
    @param end: the end date.  Not used yet.
    @return: a list of the web HTTP status count data.
    '''
    key = 'weekly_web_status'
    ret = cache.get(key)
    if not ret:
        try:
            remote_api = 'http://10.1.1.2:8080/api/remote/weekly_web_status'
            days = 7
            remote_url = '%s?days=%s' % (remote_api, days)
            doc = urllib.urlopen(remote_url)
            ret = json.loads(doc.read())['detail']
            cache.set(key, ret, 1*3600)
        except:
            pass
    return ret

由于我的数据是从DW部门来过来的,这部分是每天更新一次的数据,对稍微的延迟不敏感,cache设置的过期时间是1小时。

另外,还在后台有个job在每天凌晨就去获取最新的数据并set到memcached中,这样每天第一个人访问时也不会太慢。

使用了Cache效果非常明显,以其中一个API为例,测试数据如下:
memcached_comparison
在没有使用cache时,这个页面去调用外部的API(进行的是实时计算统计分析),响应时间在30s左右(⊙﹏⊙b汗),使用cache后缩短为6ms;在使用1个并发压测的情况下,TPS提升300倍。100并发时,使用memcached的API的TPS达到866,还不错的~ (服务跑在4核4GB内存的虚拟机上)。

master

Stay hungry, stay foolish.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

*