亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享

OpenStack DBaaS組件Trove簡介

2023-06-03 03:44:16
135
0

Trove架構

Trove包含下面幾個主要組件:

  • API Server
  • Message Bus
  • Task Manager
  • Guest Agent
  • Conductor

API Server

API endpoint(trove-api)本質上是一個HTTP的Web服務,具備處理鑒權、授權、與數據存儲相關的基本命令和控制功能。根據數據庫不同,API還有一些不同的擴展。

API Server與兩個系統溝通——與Task Manager溝通,來處理復雜的異步任務;直接與Guest Agent溝通來處理簡單的任務比如獲取MySQL用戶列表等,這部分操作均是同步的。API Server不做任何重大/復雜的事情,它的任務就是接收請求,將其轉化為消息,校驗它們,并將這些消息轉發到任務管理器(Task Manager)和訪客代理(Guest Agent)。

  • 一個RESTful風格的組件
  • 入口 - Trove/bin/trove-api
  • 使用WSGI launcher,由Trove/etc/trove/api-paste.ini配置
    • 定義了過濾器管道、令牌認證、速率限制等
    • 定義了app_factory為trove.common.api:app_factory提供給trove應用
  • API 類(WSGI Router)將REST路徑連接到相應的Controller上
    • Controller的實現在相關的模塊下(如versions/instance/flavor/limits)的service.py
  • Controller通常將實現重定向到models.py中的一個類
  • 另一些組件(Task Manager,Guest Agent)的api模塊通過RabbitMQ發送請求

Message Bus

這部分組件仿照了Nova架構。Message Bus其實就是一個消息隊列。

一個典型的消息傳遞事件從API服務器接收到用戶的請求開始。API服務器認證用戶確保用戶具備執行響應命令的權限。對請求中涉及到的對象的可用性進行評估,如果可用,將請求路由到相關Worker的排隊引擎。Workers不斷根據自己的角色監聽消息隊列,當這種監聽產生一個工作請求時,Worker將對該任務進行任務分配并開始執行。完成任務后,Worker將響應發送到消息隊列,由API服務器接受并中繼到始發用戶的隊列。在整個過程中,數據庫記錄根據需要會被查詢、添加或者刪除。

Task Manager

Task Manager(trove-taskmanager)就是干粗活累活的家伙,比如配置一臺實例,管理實例生命周期和在實例上進行操作。任務管理器接收來自API Server的消息,通過同意消息進行響應,并開始執行任務。有幾個復雜的任務,比如重新分配數據庫規格和創建實例等,他們均需要通過HTTP請求調用OpenStack的服務,同時也需要輪詢服務,知道實例變為活動狀態,并且還向客戶代理發送消息。任務管理器處理在多個分布式系統中發生的進程流。

任務管理器是有狀態的,它在其系統內部運行復雜的流程。如果在狀態處理期間任務管理器節點脫機,則操作將失敗。任務流系統將最終實現為長時間運行運行的任務。(The Task Flow system will be eventually implemented for long running tasks.)

  • 這是一個監聽RabbitMQ topic的服務
  • 入口 - Trove/bin/trove-taskmanager
  • 作為一個RpcService運行,通過Trove/etc/trove/trove-taskmanager.conf.sample配置文件進行配置,定義了trove.taskmanager.manager.Manager作為manager,基本上這是通過隊列到達的請求的入口點
  • 如上所述,使用TaskManager的api模塊,使用_cast()或者_call()(同步/異步)將對該組件的請求從另一個組件推送到MQ中,并放置方法命作為一個參數
  • Trove/openstack/common/rpc/dispatcher.py 中的RpcDispatcher.dispatch()通過反射的方式調用Manager中合適的方法
  • 然后,Manager將該處理重定向到models.py模塊中的一個對象,它使用context和instance_id從相關類加載一個對象
  • 實際的處理一般在models.py中完成

Guest Agent

客戶代理(Guest Agent,trove-guestagent)運行在客戶實例內部,負責管理和執行數據存儲本身的操作。它負責使數據存儲在線,這可能是一個復雜的任務。熱支持(Heat support)將來將成為Trove的默認配置和儀器引擎,從而減少了將數據存儲庫聯機的任務。Guest Agent還通過Conductor(指揮器)向API Server發送心跳信息。

每個數據存儲器都實現有一個客戶端代理,負責為該數據存儲器執行特定人物。比如Redis的客戶代理行為與MySQL的客戶代理行為就會不同。不過他們必須履行諸如創建和調整規格的基礎操作。

  • 與Task Manager類似,服務運行起來監聽RabbitMQ topic
  • Guest Agent在每個數據庫實例中運行,所以使用專有的RabbitMQ topic(通過實例ID來標識)
  • 入口 - Trove/bin/trove-guestagent
  • 作為一個RpcService運行,通過Trove/etc/trove/trove-guestagent.conf.sample配置文件進行配置,定義了trove.guestagent.manager.Manager作為manager,基本上這是通過隊列到達的請求的入口點
  • 如上所述,使用Guest Agent的api模塊,使用_cast()或者_call()(同步/異步)將對該組件的請求從另一個組件推送到MQ中,并放置方法命作為一個參數
  • Trove/openstack/common/rpc/dispatcher.py 中的RpcDispatcher.dispatch()通過反射的方式調用Manager中合適的方法
  • 然后,Manager將對對象的處理重定向到dbaas.py
  • 實際處理一般在dbaas.py中完成

Conductor

指揮器(Conductor)是運行在宿主機上的餓一個服務,負責接收客戶實例中的消息,并在宿主機上更新信息,比如,實例的狀態和當前備份的狀態。有了指揮器,用戶的實例不需要直接連接到宿主機的數據庫。指揮器通過Message Bus監聽RPC消息,并執行相關的操作。指揮器與客戶代理有些類似,因為它是一個監聽RabbitMQ主題的服務,不同的是Conductor運行在宿主機上,而非客戶實例內部。客戶代理通過將消息放入配置的消息隊列——conductor_queue,默認為trove-conductor——來與指揮器進行信息交互。

  • 入口 - Trove/bin/trove-conductor
  • 作為一個RpcService運行,通過Trove/etc/trove/trove-conductor.conf.sample配置文件進行配置,定義了trove.conductor.manager.Manager作為Manager
  • 如上面的客戶代理類似,請求通過其他組件使用_cast()(異步的)推送到消息隊列。一般來講,消息格式為{"method": "<method_name>", "args": {<arguments>}}
  • 實際的數據庫更新操作由trove/conductor/manager.py完成
  • “heartbeat”操作更新實例的狀態,通常由Guest Agent來報告實例狀態,如從NEW到BUILDING到ACTIVE等等
  • “update_backup”方法修改備份的詳情,包括它的當前狀態、備份大小、類型和校驗碼(checksum)

代碼倉庫

安裝部署

說明

翻譯自Trove wiki

0條評論
0 / 1000
二柱
6文章數
4粉絲數
二柱
6 文章 | 4 粉絲

OpenStack DBaaS組件Trove簡介

2023-06-03 03:44:16
135
0

Trove架構

Trove包含下面幾個主要組件:

  • API Server
  • Message Bus
  • Task Manager
  • Guest Agent
  • Conductor

API Server

API endpoint(trove-api)本質上是一個HTTP的Web服務,具備處理鑒權、授權、與數據存儲相關的基本命令和控制功能。根據數據庫不同,API還有一些不同的擴展。

API Server與兩個系統溝通——與Task Manager溝通,來處理復雜的異步任務;直接與Guest Agent溝通來處理簡單的任務比如獲取MySQL用戶列表等,這部分操作均是同步的。API Server不做任何重大/復雜的事情,它的任務就是接收請求,將其轉化為消息,校驗它們,并將這些消息轉發到任務管理器(Task Manager)和訪客代理(Guest Agent)。

  • 一個RESTful風格的組件
  • 入口 - Trove/bin/trove-api
  • 使用WSGI launcher,由Trove/etc/trove/api-paste.ini配置
    • 定義了過濾器管道、令牌認證、速率限制等
    • 定義了app_factory為trove.common.api:app_factory提供給trove應用
  • API 類(WSGI Router)將REST路徑連接到相應的Controller上
    • Controller的實現在相關的模塊下(如versions/instance/flavor/limits)的service.py
  • Controller通常將實現重定向到models.py中的一個類
  • 另一些組件(Task Manager,Guest Agent)的api模塊通過RabbitMQ發送請求

Message Bus

這部分組件仿照了Nova架構。Message Bus其實就是一個消息隊列。

一個典型的消息傳遞事件從API服務器接收到用戶的請求開始。API服務器認證用戶確保用戶具備執行響應命令的權限。對請求中涉及到的對象的可用性進行評估,如果可用,將請求路由到相關Worker的排隊引擎。Workers不斷根據自己的角色監聽消息隊列,當這種監聽產生一個工作請求時,Worker將對該任務進行任務分配并開始執行。完成任務后,Worker將響應發送到消息隊列,由API服務器接受并中繼到始發用戶的隊列。在整個過程中,數據庫記錄根據需要會被查詢、添加或者刪除。

Task Manager

Task Manager(trove-taskmanager)就是干粗活累活的家伙,比如配置一臺實例,管理實例生命周期和在實例上進行操作。任務管理器接收來自API Server的消息,通過同意消息進行響應,并開始執行任務。有幾個復雜的任務,比如重新分配數據庫規格和創建實例等,他們均需要通過HTTP請求調用OpenStack的服務,同時也需要輪詢服務,知道實例變為活動狀態,并且還向客戶代理發送消息。任務管理器處理在多個分布式系統中發生的進程流。

任務管理器是有狀態的,它在其系統內部運行復雜的流程。如果在狀態處理期間任務管理器節點脫機,則操作將失敗。任務流系統將最終實現為長時間運行運行的任務。(The Task Flow system will be eventually implemented for long running tasks.)

  • 這是一個監聽RabbitMQ topic的服務
  • 入口 - Trove/bin/trove-taskmanager
  • 作為一個RpcService運行,通過Trove/etc/trove/trove-taskmanager.conf.sample配置文件進行配置,定義了trove.taskmanager.manager.Manager作為manager,基本上這是通過隊列到達的請求的入口點
  • 如上所述,使用TaskManager的api模塊,使用_cast()或者_call()(同步/異步)將對該組件的請求從另一個組件推送到MQ中,并放置方法命作為一個參數
  • Trove/openstack/common/rpc/dispatcher.py 中的RpcDispatcher.dispatch()通過反射的方式調用Manager中合適的方法
  • 然后,Manager將該處理重定向到models.py模塊中的一個對象,它使用context和instance_id從相關類加載一個對象
  • 實際的處理一般在models.py中完成

Guest Agent

客戶代理(Guest Agent,trove-guestagent)運行在客戶實例內部,負責管理和執行數據存儲本身的操作。它負責使數據存儲在線,這可能是一個復雜的任務。熱支持(Heat support)將來將成為Trove的默認配置和儀器引擎,從而減少了將數據存儲庫聯機的任務。Guest Agent還通過Conductor(指揮器)向API Server發送心跳信息。

每個數據存儲器都實現有一個客戶端代理,負責為該數據存儲器執行特定人物。比如Redis的客戶代理行為與MySQL的客戶代理行為就會不同。不過他們必須履行諸如創建和調整規格的基礎操作。

  • 與Task Manager類似,服務運行起來監聽RabbitMQ topic
  • Guest Agent在每個數據庫實例中運行,所以使用專有的RabbitMQ topic(通過實例ID來標識)
  • 入口 - Trove/bin/trove-guestagent
  • 作為一個RpcService運行,通過Trove/etc/trove/trove-guestagent.conf.sample配置文件進行配置,定義了trove.guestagent.manager.Manager作為manager,基本上這是通過隊列到達的請求的入口點
  • 如上所述,使用Guest Agent的api模塊,使用_cast()或者_call()(同步/異步)將對該組件的請求從另一個組件推送到MQ中,并放置方法命作為一個參數
  • Trove/openstack/common/rpc/dispatcher.py 中的RpcDispatcher.dispatch()通過反射的方式調用Manager中合適的方法
  • 然后,Manager將對對象的處理重定向到dbaas.py
  • 實際處理一般在dbaas.py中完成

Conductor

指揮器(Conductor)是運行在宿主機上的餓一個服務,負責接收客戶實例中的消息,并在宿主機上更新信息,比如,實例的狀態和當前備份的狀態。有了指揮器,用戶的實例不需要直接連接到宿主機的數據庫。指揮器通過Message Bus監聽RPC消息,并執行相關的操作。指揮器與客戶代理有些類似,因為它是一個監聽RabbitMQ主題的服務,不同的是Conductor運行在宿主機上,而非客戶實例內部。客戶代理通過將消息放入配置的消息隊列——conductor_queue,默認為trove-conductor——來與指揮器進行信息交互。

  • 入口 - Trove/bin/trove-conductor
  • 作為一個RpcService運行,通過Trove/etc/trove/trove-conductor.conf.sample配置文件進行配置,定義了trove.conductor.manager.Manager作為Manager
  • 如上面的客戶代理類似,請求通過其他組件使用_cast()(異步的)推送到消息隊列。一般來講,消息格式為{"method": "<method_name>", "args": {<arguments>}}
  • 實際的數據庫更新操作由trove/conductor/manager.py完成
  • “heartbeat”操作更新實例的狀態,通常由Guest Agent來報告實例狀態,如從NEW到BUILDING到ACTIVE等等
  • “update_backup”方法修改備份的詳情,包括它的當前狀態、備份大小、類型和校驗碼(checksum)

代碼倉庫

安裝部署

說明

翻譯自Trove wiki

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0