tornado併發性能測試

 

1.帶server2.0裝飾器

接口訪問數據庫查詢

併發100 平均每秒處理11.8次請求 平均響應時間6944msmysql

 

接口不作任何處理

 

併發100 平均每秒處理99.9次請求 平均響應時間3mses6

 

併發500 平均每秒處理467.9次請求 平均響應時間4msweb

 

併發1000 平均每秒處理936.8次請求 平均響應時間6mssql

再提升併發 並不能再提升處理速度了mongodb

 

小法目前接口

併發100 平均每秒處理11次請求 平均響應時間6647ms數據庫

 

2.接口不使用任何裝飾器

接口不作任何處理

併發100 平均每秒處理100.2次請求 平均響應時間3ms併發

 

併發1000 平均每秒處理949.2次請求 平均響應時間4ms異步

併發2000 平均每秒處理1500.4次請求 平均響應時間16msasync

 

接口訪問數據庫

併發100 平均每秒處理16.2次請求 平均響應時間4086mselasticsearch

 

 

小結

加server2.0裝飾器後出錯率上升,不加裝飾器運行穩定。

併發數主要限制於數據庫的訪問速度。

server2.0並無提升併發

 

3.使用異步裝飾器

接口不作任何處理

@gen.coroutine

併發1500 平均每秒處理1296.5次請求 平均響應時間8ms

 

使用異步訪問數據庫

併發100 平均每秒處理96.1次請求 平均響應時間39ms

 

from elasticsearch_async import AsyncElasticsearch
es = AsyncElasticsearch(
        hosts = [
            "117.78.26.××:××××",
            "117.78.26.××:××××"
        ],
        type = "es",
        http_auth = ("×××××","×××××"),
        timeout = 60
)
@web.asynchronous
@gen.engine
def post(self, *args, **kwargs):
    result = {'code': 200, 'msg': '返回成功','data':{}}
    body = {"size": 10, "_source": ["id","name"],
            "query":
                {"bool": {"must": [
                    {"match":{"name":{"query":"婚姻法"}}},
                    {"match": {"law_type": {"query": "法律"}}},
                ]}}}
    laws = yield self.es.search("law_search_v2","_doc",body)
    # laws = "測試"
    result['data']['laws'] = laws
    self.finish(result)

 

 

併發600 平均每秒處理550次請求 平均響應時間75ms

再增長併發請求數量併發量反而會下降

 

 

總結

異步請求數據庫穩定性好,速度快,併發量大

目前數據庫異步支持

es : elasticsearch-async 支持es6.0

mongodb : motor

mysql : tornado_mysql

 

接口訪問使用tornado.httpclient.AsyncHTTPClient

 

4.不一樣異步方式之間的區別

使用@gen.coroutine

代碼難度大

 

使用ThreadPoolExecutor

便與開發

相關文章
相關標籤/搜索