Dora可以分為兩個(gè)部分:官方數(shù)據(jù)處理主要包括圖片基礎(chǔ)處理,此外包括智能審核和智能識(shí)別,如果上面的技術(shù)應(yīng)用不能滿足需求,可以自己編寫應(yīng)用,也就是自定義處理,第三方平臺(tái)也可以在上面部署應(yīng)用服務(wù)七牛的客戶。支撐海量應(yīng)用需要多集群的管理平臺(tái),需要管理物理資源和海量應(yīng)用,包括數(shù)十個(gè)機(jī)房、數(shù)千個(gè)容器應(yīng)用、海量圖片和視頻計(jì)算。
1.0階段就是從零到一的過程,最開始的架構(gòu)就是物理機(jī)型對應(yīng)部署規(guī)格,但是第三方就要給終端用戶提供硬件隔離,所以基于容器架構(gòu),當(dāng)時(shí)也是我們自研的容器平臺(tái),國內(nèi)服務(wù)器租用服務(wù)器托管,我們當(dāng)時(shí)會(huì)有各種各樣的物理機(jī)型,但是都有不一樣的Disk,為了讓每個(gè)機(jī)器盡量脫離我們可能就會(huì)考慮這個(gè)機(jī)器上部署多少A端應(yīng)用和多少B端應(yīng)用,所以我們都會(huì)有這種部署規(guī)格對應(yīng)。
可以清晰地看到1.0架構(gòu)的痛點(diǎn)非常明顯,每個(gè)架構(gòu)都是物理機(jī)部署,配置多種多樣、調(diào)整非常麻煩,所以需要很多人進(jìn)行相應(yīng)的維護(hù),需要準(zhǔn)備機(jī)器配置調(diào)整,整個(gè)過程可能需要半天或者一天,整個(gè)機(jī)器配置也是相對固定的,要么出現(xiàn)分配不合理,要么出現(xiàn)機(jī)器過度競爭。
為了解決1.0的問題我們開發(fā)網(wǎng)站運(yùn)營系統(tǒng),也有很多集群的方式,我們希望通過統(tǒng)一管理、統(tǒng)一配置應(yīng)用在某個(gè)地區(qū)需要多少個(gè),這樣便于我們管理每個(gè)應(yīng)用,2.0就是針對就是開發(fā)者,包括七牛的開發(fā)人員,就是官方應(yīng)用的提供者,還有就是自定義或者第三方,也會(huì)通過這種平臺(tái)發(fā)布應(yīng)用提供服務(wù)。
Dora3.0可以歸結(jié)為一種愿景,就是開發(fā)者關(guān)注功能開發(fā),不需要關(guān)心可用性,包括分布式的各種痛點(diǎn)都不需要關(guān)心,包括自己開發(fā)當(dāng)中遇到的問題我們也會(huì)幫助解決。有的開發(fā)者是機(jī)器識(shí)別專家,開發(fā)出了固體識(shí)別應(yīng)用,作為一個(gè)很厲害的角色,建立一個(gè)很厲害的模型,請求當(dāng)中可能包含圖片,最終應(yīng)用會(huì)有識(shí)別結(jié)果,然后直接上線。
我們可以調(diào)用圖片格式來轉(zhuǎn)換,如果作為標(biāo)識(shí)的話可以調(diào)用,進(jìn)行圖片編輯達(dá)到客戶需求,有的客戶可能覺得圖片信息非常多,這些都會(huì)大家增加處理的時(shí)間,但是時(shí)間太長不能同步完成,因?yàn)樽鳛闄C(jī)器學(xué)習(xí)專家也不了解,我們的方案就是平臺(tái)系統(tǒng)提供統(tǒng)一的用戶接口,收到客戶消息的時(shí)候會(huì)轉(zhuǎn)化為請求處理調(diào)用應(yīng)用,反饋結(jié)果以后我們可以呈現(xiàn)到異步系統(tǒng)當(dāng)中,通過這種方式開發(fā)者對這樣的異步請求就不用自己實(shí)現(xiàn),可以通過我們的平臺(tái)實(shí)現(xiàn)。
現(xiàn)在開發(fā)者也會(huì)遇到一些問題,比如B服務(wù)的處理結(jié)果是A服務(wù)的臨時(shí)結(jié)果,可能需要多個(gè)應(yīng)用通過數(shù)據(jù)之間傳遞,如果是異步結(jié)果,圖片最終也是標(biāo)識(shí),實(shí)際上最終可能反饋圖片地址,也就是異步處理結(jié)果的存儲(chǔ),今天這些存儲(chǔ)需求我們提供統(tǒng)一存儲(chǔ)接口和服務(wù),可以提供簡單的需求劃分服務(wù),開發(fā)者可以通過調(diào)用服務(wù)接口滿足存儲(chǔ)需求,整個(gè)存儲(chǔ)和計(jì)算也是解耦的,意味著我們的計(jì)算系統(tǒng)可以和任何存儲(chǔ)系統(tǒng)結(jié)合。
前面說過我們會(huì)提供更多的基礎(chǔ)服務(wù)給開發(fā)者,也會(huì)提供存儲(chǔ)服務(wù),就會(huì)發(fā)現(xiàn)今天的應(yīng)用關(guān)系會(huì)越來越復(fù)雜,比如網(wǎng)格狀態(tài)的關(guān)系,具體調(diào)用哪個(gè)服務(wù),服務(wù)的地址是在哪里,如果出現(xiàn)問題我們會(huì)怎么覆蓋,這些都是我們分布式網(wǎng)格應(yīng)用面對的問題,所以我們提供智能化調(diào)度,能夠做到通用化的解決,每個(gè)應(yīng)用都有自己的特例,所以調(diào)度都有自己的特殊需求,我們可以對每個(gè)應(yīng)用定義操作策略,通過這些操作策略,至于這個(gè)服務(wù)在哪里完全是由平臺(tái)決定。
現(xiàn)在假定我們服務(wù)一個(gè)外賣廠商,每天到十一點(diǎn)鐘就是波峰,但是一般來說到深夜的話請求量就會(huì)少很多,所以這樣外賣廠商的需求就會(huì)有很明顯的時(shí)間性。過去遇到這樣的問題,如果是開發(fā)者的話可能需要調(diào)整,到了高峰的時(shí)候調(diào)整到可滿足的狀態(tài),高峰過去的時(shí)候?yàn)榱斯?jié)約成本就需要持續(xù)縮減,調(diào)整不好的話就會(huì)影響到SLA。按照這個(gè)角度來看,云服務(wù)器租用,我們需要一個(gè)自研的方案,現(xiàn)在方案還是相對比較基礎(chǔ),開發(fā)者可以根據(jù)自己的應(yīng)用狀況。
由于數(shù)據(jù)開放驅(qū)動(dòng)的需求,我們的方案就是收集應(yīng)用協(xié)議,就是將應(yīng)用數(shù)據(jù)反饋給我們的整體途徑,我們搜集這些應(yīng)用然后找到大數(shù)據(jù)系統(tǒng),應(yīng)用開發(fā)者可以通過比較常見的大數(shù)據(jù)方式搜索分析應(yīng)用,然后來做持續(xù)迭代和改進(jìn)。今天我們對每個(gè)應(yīng)用都有基礎(chǔ)監(jiān)控日志的能力,一般來說常見應(yīng)用尺度包括請求時(shí)延,然后在日志平臺(tái)當(dāng)中展示,客戶可以搜索日志來做改進(jìn)。通過集群多活的方式,某個(gè)機(jī)制出現(xiàn)問題的時(shí)候,應(yīng)用開發(fā)者不用關(guān)注,我們可以自動(dòng)調(diào)度,就是將有問題的集群流量進(jìn)行調(diào)度,也可以繼續(xù)服務(wù)客戶。
我們最終的愿景還是希望開發(fā)出來一個(gè)系統(tǒng),能夠大大簡化應(yīng)用開發(fā)。