zoukankan      html  css  js  c++  java
  • tornado并发性能测试

    1.带server2.0装饰器

    接口访问数据库查询

    并发100 平均每秒处理11.8次请求 平均响应时间6944ms

    接口不做任何处理

    并发100 平均每秒处理99.9次请求 平均响应时间3ms

    并发500 平均每秒处理467.9次请求 平均响应时间4ms

    并发1000 平均每秒处理936.8次请求 平均响应时间6ms

    再提高并发 并不能再提高处理速度了

    小法目前接口

    并发100 平均每秒处理11次请求 平均响应时间6647ms

    2.接口不使用任何装饰器

    接口不做任何处理

    并发100 平均每秒处理100.2次请求 平均响应时间3ms

    并发1000 平均每秒处理949.2次请求 平均响应时间4ms

    并发2000 平均每秒处理1500.4次请求 平均响应时间16ms

    接口访问数据库

    并发100 平均每秒处理16.2次请求 平均响应时间4086ms

    小结

    加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

    便与开发

     

  • 相关阅读:
    hibernate中的所有属性
    新闻系统(3)内容保护的探索
    Hibernate常见问题集锦
    java对象序列化java.io.Serializable 接口实践
    读写属性文件
    Struts 中的自定义异常
    JAVA程序员看C#的精华与糟粕
    正确理解hibernate的inverse属性
    HTML5中的WebSocket
    【转载】 单元测试:是否针对非 public method 进行测试?
  • 原文地址:https://www.cnblogs.com/jiaojianglong/p/11260274.html
Copyright © 2011-2022 走看看