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,只能說一般般吧