在后端開發方面,Java的使用呢要遠比Python廣泛,所以Java的微服務框架非常流行,但Python的微服務框架卻很少有人問津。在大多數需要微服務的場合下直接用Java的各種工具就可以解決問題,但如果業務代碼使用Python寫的,那么使用Java工具就不太方便了。
其實Python也有自己的微服務框架,其中用的最多的就是nameko,nameko框架輕便,使用簡單,易上手,是一個很不錯的微服務框架
一.微服務框架原理
微服務架構的實現方式
微服務架構最重要的就是使用什么方式進行服務間通信(也稱作服務調用),按照通信方式的不同,主要可以分為同步通信和異步通信兩種方式:
同步通信
同步調用比較簡單,一致性強,但是容易出調用問題,性能體驗上也會差些。同步通信最常用的兩種協議是RESTful和RPC,而目前使用最廣泛,最有名的兩種微服務框架Spring Cloud和Dubbo分別使用了RESTful和RPC協議。RESTful和RPC兩種協議各有優勢,具體使用要看業務場景。
Dubbo框架是一個非常流行的采用同步通信的分布式微服務框架,下圖就是Dubbo框架的工作原理圖:
首先一個微服務應用程序需要有服務的生產者和服務的消費者,另外還需要一個注冊中心(常見的有zookeeper和rabbitmq等)來管理和調度服務。微服務架構的程序運行的一般步驟為:
- 服務提供方,即生產者啟動服務,並將服務提交到注冊中心注冊服務
- 服務需求方,即消費者連接到注冊中心,向注冊中心發出請求,申請需要的服務
- 注冊中心根據消費者發出的請求來調度服務,將對應的服務提供者(生產者)的信息發送給消費者
- 消費者和生產者之間建立連接,消費者調用服務
- 記錄服務調用過程中的信息
異步通信
異步通信一般通過消息中間件來進行服務間通信,消息中間件能為調用之間提供的緩沖,確保消息積壓不會沖垮被調用方,同時能保證調用方的服務體驗,繼續干自己該干的活,不至於被后台性能拖慢。不過需要付出的代價是一致性的減弱。
nameko框架就是一個采用異步通信方式的微服務框架,采用RabbitMQ消息隊列作為消息中間件,原理非常簡單,使用起來也很方便。
二.入門案例–使用nameko框架實現微服務程序
2.1 安裝注冊中心
nameko采用RabbitMQ作為注冊中心,所以使用nameko必須要先安裝RabbitMQ
以docker容器的方式運行RabbitMQ是最為簡便快捷的方式,兩行命令就搞定了,這里介紹如何使用docker運行RabbitMQ。
第一步:從DockerHub拉取rabbitmq鏡像
- 1
第二部:運行RabbitMQ容器
- 1
如果需要設置用戶名和密碼,則使用這條命令
- 1
我運行容器時沒有設置用戶名和密碼,所以使用用戶名guest,密碼guest登錄。http://localhost:15672/
登錄成功界面
2.2 服務生產者和服務消費者
演示程序的項目結構(沒有用到app.py,忽略該文件)
hello_service.py發布服務,服務名稱為“hello_service”
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
service.py調用服務
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2.3 啟動微服務
使用nameko框架的run命令啟動微服務
- 1
如果注冊中心rabbitmq沒有成功啟動,會顯示如下信息
如果現實信息如下則表示服務成功啟動
運行service.py調用服務后在命令行打印出“hello world”,服務被成功調用