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