python 微服務 python微服務方案

2021-10-12 19:00:02 字數 3057 閱讀 7921

使用python做web開發面臨的乙個最大的問題就是效能,在解決c10k問題上顯的有點吃力。有些非同步框架tornado、twisted、gevent 等就是為了解決效能問題。這些框架在效能上有些提公升,但是也出現了各種古怪的問題難以解決。

在python3.6中,官方的非同步協程庫asyncio正式成為標準。在保留便捷性的同時對效能有了很大的提公升,已經出現許多的非同步框架使用asyncio。

使用較早的非同步框架是aiohttp,它提供了server端和client端,對asyncio做了很好的封裝。但是開發方式和最流行的微框架flask不同,flask開發簡單,輕量,高效。正是結合這些優點, 以sanic為基礎,整合多個流行的庫來搭建微服務。 sanic框架是和flask相似的非同步協程框架,簡單輕量,並且效能很高。本專案就是以sanic為基礎搭建的python微服務框架。(思想適用於其他語言)

微服務設計原則個人總結:

微服務總體架構:

使用sanic非同步框架,有較高的效能,但是使用不當會造成blocking, 對於有io請求的都要選用非同步庫。新增庫要慎重。sanic使用uvloop非同步驅動,uvloop基於libuv使用cython編寫,效能比nodejs還要高。
功能說明:

啟動前

queue = asyncio.queue()

reporter = aioreporter(queue=queue)

tracer = basictracer(recorder=reporter)

tracer.register_required_propagators()

opentracing.tracer = tracer

中介軟體

異常處理

對丟擲的異常進行處理,返回統一格式

任務

建立task消費queue中對span,用於日誌追蹤

非同步處理

由於使用的是非同步框架,可以將一些io請求並行處理

example:

asyncdefasync_request(datas):

# async handler request

results =awaitasyncio.gather(*[data[2]fordataindatas])

forindex, objinenumerate(results):

data = datas[index]

data[0][data[1]] = results[index]

@user_bp.get('/')@doc.summary("get user info")@doc.description("get user info by id")@doc.produces(users)asyncdefget_users_list(request, id):

asyncrecord =awaitcur.fetch(

""" select * from users where id = $1

python 微服務熔斷工具 分布式微服務監控工具

看看森蘇。sensu是乙個非常先進的監控工具。把它想象成分布式nagios。因此,在每台機器上安裝乙個sensu 它有大量的外掛程式可用於上面提到的每個程序。您也可以用自己選擇的語言編寫自己的外掛程式,只要它們是有效的可執行檔案。bash perl python ruby任何東西都可以。將資料發布到...

python微服務框架nameko入門案例

1.安裝註冊中心 nameko採用rabbitmq作為註冊中心,所以使用nameko必須要先安裝rabbitmq 以docker容器的方式執行rabbitmq是最為簡便快捷的方式,兩行命令就搞定了,這裡介紹如何使用docker執行rabbitmq。第一步 從dockerhub拉取rabbitmq映象...

微服務 微服務簡介

什麼是微服務 顧名思義,就是粒度較小的服務,不再侷限於系統與系統之間的藉口呼叫,也不侷限於某種具體的服務形式。系統中凡是可被復用的功能模組都可以被 服務化 轉變為 服務 這些服務可以對外暴露,也可能僅限於再系統內部使用。由於服務數量更多,粒度更小,因此管控難度會更大,對效能的要求也更高。微服務的好處...