使用nameko框架實現Python項目微服務化

一.微服務架構

微服務架構有衆多的優點,在現在的企業級項目中被廣泛的應用。本文主要討論如何使用Python相關技術實現微服務架構,不就微服務做過多的解釋,如果想要了解更多微服務概念相關的知識,可以移步理解微服務

微服務架構的實現方式

微服務架構最重要的就是使用什麼方式進行服務間通信(也稱作服務調用),按照通信方式的不同,主要可以分爲同步通信和異步通信兩種方式:

同步通信

同步調用比較簡單,一致性強,但是容易出調用問題,性能體驗上也會差些。同步通信最常用的兩種協議是RESTful和RPC,而目前使用最廣泛,最有名的兩種微服務框架Spring Cloud和Dubbo分別使用了RESTful和RPC協議。RESTful和RPC兩種協議各有優勢,具體使用要看業務場景。

異步通信

異步通信一般通過消息中間件來進行服務間通信,消息中間件能爲調用之間提供的緩衝,確保消息積壓不會沖垮被調用方,同時能保證調用方的服務體驗,繼續幹自己該乾的活,不至於被後臺性能拖慢。不過需要付出的代價是一致性的減弱。

二.nameko微服務框架

Python框架nameko就是一種採用了異步通信實現的微服務框架。它使用RabbitMQ消息隊列作爲消息中間件,實現服務遠程調用。

2.1 入門案例–使用nameko框架實現微服務程序

1 ) 安裝註冊中心

nameko採用RabbitMQ作爲註冊中心,所以使用nameko必須要先安裝RabbitMQ

以docker容器的方式運行RabbitMQ是最爲簡便快捷的方式,兩行命令就搞定了,這裏介紹如何使用docker運行RabbitMQ。

第一步:從DockerHub拉取rabbitmq鏡像

docker pull rabbitmq:management

第二部:運行RabbitMQ容器

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

如果需要設置用戶名和密碼,則使用這條命令

docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management

我運行容器時沒有設置用戶名和密碼,所以使用用戶名guest,密碼guest登錄。http://localhost:15672/

在這裏插入圖片描述
登錄成功界面

在這裏插入圖片描述

2 ) 服務生產者和服務消費者

演示程序的項目結構(沒有用到app.py,忽略該文件)
在這裏插入圖片描述

hello_service.py發佈服務,服務名稱爲“hello_service”

from nameko.rpc import rpc

class hello_service:
    name = "hello_service"

    @rpc
    def hello(self):
        print("hello world")

service.py調用服務

from nameko.standalone.rpc import ClusterRpcProxy

CONFIG = {'AMQP_URI': "amqp://guest:[email protected]"}


def compute():
    with ClusterRpcProxy(CONFIG) as rpc:
        rpc.hello_service.hello()


if __name__ == '__main__':
    compute()

3 ) 啓動微服務

使用nameko框架的run命令啓動微服務

nameko run hello_service --broker amqp://guest:[email protected]

如果註冊中心rabbitmq沒有成功啓動,會顯示如下信息
在這裏插入圖片描述
如果現實信息如下則表示服務成功啓動

在這裏插入圖片描述
運行service.py調用服務後在命令行打印出“hello world”,服務被成功調用
在這裏插入圖片描述

2.2 nameko框架實現原理

nameko框架主要是依靠RabbitMQ實現異步通信,遠程服務調用的,如果想要了解nameko的實現細節,則需要先了解RabbitMQ的工作原理,可以參考:消息隊列與RabbitMQ,或者直接去RabbitMQ官網看官方文檔,RabbitMQ官方文檔寫的非常的詳細

RabbitMQ主要有六種工作模式,而nameko默認情況下使用的就是第六種RPC模式
在這裏插入圖片描述

還是上面的例子,我在hello_service這個服務之後,又啓動了三個服務,在RabbitMQ的圖形化界面裏可以看到nameko是如何工作的(理解下面的內容要求讀者必須對RabbitMQ有一定的瞭解)

打開Exchanges交換機界面,可以看到有一個交換機,名爲nameko-rpc,可以看出,nameko框架發佈的服務都是通過這個名爲nameko-rpc的交換機進行消息轉發的

在這裏插入圖片描述
點擊nameko-rpc這個交換機,可以看到它的匹配規則,我們的hello_service服務的匹配規則是hello_service.*,這表明了以hello_service爲第一個字段的所有消息都可以被我們的hello_service服務接收

在這裏插入圖片描述
打開Queues隊列界面,可以看到hello_service服務有一個專門的隊列rpc-hello_service。除此之外還可以觀察到nameko已經幫我們做了消息持久化,Feature那一欄裏顯示的是D狀態

在這裏插入圖片描述

三.總結

以上只是nameko框架最簡單的一個使用的例子,使用者可以通過設置nameko框架的很多參數實現自己理想中的調用方式,具體可以看Nameko的文檔:Nameko中文文檔(翻譯)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章