深度剖析CloudFoundry的架構設計(5) |
發布時間: 2012/7/22 16:08:00 |
第三方如果需要自己開發CloudFoundry的服務,需要繼承改寫它里面的兩個基礎類:Node和Gateway;而里面一些操作,如:Provision,可以在base的provisioner.rb基礎上加入自己的邏輯,同樣的還有Service_Error和Service_Message等。關于如何寫自己的Service,ELC的博客會推出相應文章詳細論述,并不在本文的討論范圍里面,從架構了解上來說,只要知道服務間的關系,知道個服務與base間透過繼承關系來橫向擴充,而CloudFoundry與apps調用Service是通過base來完成這一簡單的架構方法即可。 6、NATS(Message bus): 從CloudFoundry的總架構圖看,位于各模塊中心位置的是一個叫nats的組件。NATS是由CloudFoundry的架構師Derek開發的一個輕量級的,支持發布、訂閱機制的消息系統。Github開源地址是:https://github.com/derekcollison/nats。其核心基于EventMachine開發,代碼量不多,可以下載下來慢慢研究。 CloudFoundry是一個多模塊的分布式系統,支持模塊自發現,錯誤自檢,且模塊間低耦合。其核心原理就是基于消息發布訂閱機制。每個臺服務器上的每個模塊會根據自己的消息類別,向MessageBus發布多個消息主題;而同時也向自己需要交互的模塊,按照需要的信息內容的消息主題訂閱消息。譬如:一個DEA被加入CloudFoundry集群中,它需要向大家吼一下,以表明它已經準備好服務了,它會發布一個主題是”dea.start”的消息: @ hello_message_json中包括DEA的UUID,ip, port, 版本信息等內容。 再例如,CloudController需要啟動一個Droplet的instance: a)首先一個DEA在啟動的時候,會首先會對自己UUID的消息主題進行訂閱。 其他模塊需要通過’’dea.#{uuid}.start”這個主題發送消息來使它啟動,一旦這個DEA接收到消息,就會觸發process_dea_start(msg)這個方法來處理啟動所需要的工作。 b)Cloud Controller或者其他模塊發送消息,讓UUID為xxx的DEA啟動。 c)DEA模塊接收到消息后,就會觸發process_dea_start(msg)方法。msg是由其他模塊發送過來的消息內容,包括:droplet_id,instance_index, service, runtime等內容,process_dea_start會取得這些啟動DEA必須的信息,然后進行一系列操作,例如從NFS中取得Droplet,解壓,修改必要環境配置,運行啟動腳本等等。等一切都準備好后,然后需要給Router發個消息,告訴它這個Droplet已經隨時準備好報效國家,以后有相應的request記得讓它來處理。
d)Router模塊在啟動時就已經訂閱”router.register”消息主題。
收到前面DEA發出的信息后,會觸發register_droplet方法,去綁定Droplet。到此啟動一個Droplet的instance工作完成。億恩科技石頭 負責服務器租用和托管業務 本文出自:億恩科技【www.vbseamall.com】 |