当前位置: 首页 > 工具软件 > Nameko > 使用案例 >

python nameko连接池_Python微服务框架NameKo 性能体验

漆雕奇
2023-12-01

Nameko是Python下的一个微服务框架,小巧简洁,通过RabbitMq消息组件来实现RPC服务

Github:NameKo

一、准备工作

1.RabbitMq 使用docker安装

docker pull rabbitmq:3.7-management

docker run --hostname my-rabbit --name rabbitmq-borg -p 15672:15672 -p 25672:25672 -p 5672:5672 -d rabbitmq:3.7-management

docker 管理页面为 localhost:15672,默认用户名密码 guest、 guest。

2.Nameko安装,直接使用pip3 install nameko安装即可

二、测试代码

1、服务端 service

from nameko.rpc import rpc

class GreetingService:

name="greeting_service"

@rpc

def hello(self,name):

return name

使用@rpc 装饰器定义RPC服务

2、配置文件 config.yml

AMQP_URI: 'pyamqp://guest:guest@localhost'

WEB_SERVER_ADDRESS: '0.0.0.0:8000'

rpc_exchange: 'nameko-rpc'

max_workers: 10

parent_calls_tracked: 10

LOGGING:

version: 1

handlers:

console:

class: logging.StreamHandler

root:

level: DEBUG

handlers: [console]

运行服务 nameko run --config config.yml service1

3、客户端 使用

import cProfile

from nameko.standalone.rpc import ClusterRpcProxy

config = {

'AMQP_URI': "pyamqp://guest:guest@localhost"

}

def test():

with ClusterRpcProxy(config) as cluster_rpc:

rs=cluster_rpc.greeting_service.hello("hellø")

if __name__ == '__main__':

cProfile.run('test()')

4、上面使用cProfile测试性能

5914 function calls (5783 primitive calls) in 0.076 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)

27/12 0.000 0.000 0.002 0.000 :1009(_handle_fromlist)

1次调用RPC开销在76毫秒

5、封装成http

import json

from nameko.web.handlers import http

class HttpService:

name = "http_service"

@http('GET', '/get/')

def get_method(self, request, value):

return json.dumps({'value': value})

@http('POST', '/post')

def do_post(self, request):

return u"received:{}".format(request.get_data(as_text=True))

6、使用wrt测试,mac使用brew install wrt 安装即可

wrk -t1 -d20s -c100 http://127.0.0.1:8000/get/42

1个线程,持续20秒100个连接

Running 20s test @ http://127.0.0.1:8000/get/42

1 threads and 100 connections

Thread Stats Avg Stdev Max +/- Stdev

Latency 74.17ms 11.06ms 141.23ms 63.00%

Req/Sec 1.35k 204.27 1.72k 62.50%

26934 requests in 20.03s, 3.34MB read

Requests/sec: 1344.62

Transfer/sec: 170.70KB

响应时间和直接RPC请求差不多

QPS并发量1344/sec,只能说一般般吧

 类似资料: