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