




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、的十個學習步驟簡介 在需求、數(shù)據(jù)和軟件愈來愈碎片化的趨勢下,集裝箱(如Docker Container)包裝了微服務(Micro-Service)成為主流。這些微服務在運行時間(Run-time)經(jīng)常需要動態(tài)組合成為各式各樣的App來支撐企業(yè)多變的業(yè)務流程。簡介 這種集裝箱式架構設計,隨著近年來Docker集裝箱技術的流行,可說紅透半天邊,而且勢如破竹、蔚為風潮,正在強力改變終端與云平臺的整體設計理念和方法。簡介 本課程分為兩個階段,第一階段以個人的學習路徑為主軸,依循十個學習步驟,循序漸進建立扎實的根基。第二階段,則依據(jù)企業(yè)軟件開發(fā)流程里的先后環(huán)節(jié)來作教學。闡述各環(huán)節(jié)的思想、模式、技術和實踐
2、要點。并以的端云一體化架構設計為例,闡述企業(yè)邏輯分析、插件和集裝箱設計、實際開發(fā)愈部屬方法等?;谲浻舱嫌^點軟硬整合觀點碎片化潮流下的架構新思維- 變化、碎片與集裝箱Part-1高煥堂的著作基于軟硬整合觀點1.1 碎片(Fragment) 來自何處呢?碎片來自變化(Change)碎片或(表現(xiàn)為軟件的) 插件(Plug-in)的背后 都是變(化)沙灘沙灘沙灘變化變化變化變化面對環(huán)境變化分離出碎片!變化碎片碎片變化碎片變化碎片分離出變化碎片變化接口碎片接口變化接口變化碎片碎片變化接口碎片(變化)接口碎片(變化)接口碎片(變化)接口集裝箱接口內部(變化)集裝箱接口(序)內部(變化)接口(序)沙灘沙
3、灘 沙灘 (碎片) 沙灘(碎片)沙灘沙灘沙灘沙灘環(huán)境環(huán)境變因變因( (道路道路) )沙灘環(huán)境環(huán)境變因變因( (道路道路) )系統(tǒng)系統(tǒng)碎片碎片( (輪胎輪胎) )沙灘環(huán)境環(huán)境變因變因( (道路道路) )系統(tǒng)系統(tǒng)碎片碎片( (輪胎輪胎) )沙灘其他其他變因變因? ?其他其他碎片碎片? ?請您找找看!基于軟硬整合觀點1.2 軟件碎片(插件) 來自何處呢?插件(軟件碎片)來自變化(Change)碎片或插件(Plug-in)的 背后都是變(化)以SurfaceView + Camera(攝像頭像頭)為例 軟件SurfaceView代表手機屏幕 軟件Camera代表攝像頭SurfaceViewCamera
4、以SurfaceView + Camera(攝像頭像頭)為例 Camera攝像頭取得視像,然后將視像傳遞到SurfaceView屏幕上呈現(xiàn)出來。SurfaceViewCamera(視像)WebCameraSurfaceViewCamera(視像)WebCameraCameraMP4視頻PlayerSurfaceView變化SurfaceView變化變化SurfaceView變化變化變化SurfaceView變化SurfaceView面對環(huán)境變化分離出碎片!變化碎片-xSurfaceView變化SurfaceView碎片-x碎片-ySurfaceView變化碎片-x碎片-y碎片-zSurface
5、View變化碎片-x碎片-yApp-zSurfaceView變化App-y變化App-z碎片-xSurfaceView變化App-xApp-y變化App-z變化碎片SurfaceView變化App-z接口接口App-z變化接口(插件)變化變化EIT變化(01):屏幕顯示3D繪圖EIT變化變化(01):屏幕顯示3D繪圖變化(02):屏幕顯示2D繪圖變化EIT變化(02):屏幕顯示2D繪圖變化(03):屏幕顯示MP4視頻變化EIT1T2變化(03):屏幕顯示MP4視頻沙灘其他其他其他其他碎片碎片? ?請您找找看!變化例如: 將醫(yī)院加護(重癥)病房的儀器聯(lián)結到護士站的Android TV,讓患者的病
6、情及時傳送到TV上。 同時,TV也主動再將訊息及時傳送到醫(yī)生的手機或Pad上,讓醫(yī)生能進行實時性的決策,提供更高質量的服務。 變化基于軟硬整合觀點1.3 軟件碎片的組合 試想,在智慧城市里,有兩個系統(tǒng)模塊: 智能家庭和交通車聯(lián)網(wǎng)。 兩者之間通過網(wǎng)絡通信機制來互通。智慧家庭交通車聯(lián)網(wǎng)通信協(xié)議智慧家庭交通車聯(lián)網(wǎng)通信協(xié)議通信協(xié)議智慧家庭交通車聯(lián)網(wǎng)先搞定通信協(xié)議 傳統(tǒng)方法:兩個團隊先約定,商討一個雙方都接受的通信協(xié)議。 然后,雙方就依據(jù)這項通信協(xié)議,分別開發(fā)各自的模塊。智慧家庭交通車聯(lián)網(wǎng)通信協(xié)議 不良結果:各模塊都依賴于(Depend on)通信協(xié)議,導致兩個模塊也緊密相依了。 三個東西緊密相連在一起
7、的。一旦通信協(xié)議改變了,兩邊的模塊都必須改變。 產(chǎn)生的牽一發(fā)而動全身的漣漪效應。智慧家庭交通車聯(lián)網(wǎng)變化交通車聯(lián)網(wǎng)通信協(xié)議 父類子類子類變化碎片智慧家庭交通車聯(lián)網(wǎng)通信協(xié)議 變化智慧家庭EI碎片T智慧家庭交通車聯(lián)網(wǎng)變化通信協(xié)議父類子類子類智慧家庭變化碎片交通車聯(lián)網(wǎng)通信協(xié)議智慧家庭變化碎片交通車聯(lián)網(wǎng)ET通信協(xié)議I交通車聯(lián)網(wǎng)通信協(xié)議父類子類子類 父類子類子類智慧家庭變化變化碎片碎片交通車聯(lián)網(wǎng)通信協(xié)議父類子類子類 父類子類子類智慧家庭變化碎片碎片交通車聯(lián)網(wǎng)通信協(xié)議E&IT E&I T智慧家庭碎片的碎片的組合 碎片的組合 變化碎片的組合 E&I變化T碎片的組合 變化E&IT變化TE&IE&I變化變化變化碎
8、片的組合 TTTE&IE&I變化變化變化碎片的組合 TTT基于軟硬整合觀點1.4 軟件的序中有亂 (集裝箱特性)變化ITxITy變化IT1T2變化亂(變化)I(序)TI(序)亂TI(序)亂TI(序)亂T亂序中有亂 外形簡單 內容多變 無限組合集裝箱特性:例如:原子 化學元素由原子構成道爾頓例如:原子(摘自百度文庫摘自百度文庫) 不同元素原子的性質 各不相同道爾頓(摘自百度文庫摘自百度文庫)道爾頓序中有亂序中有亂 不同元素化合時,原子 以簡單整數(shù)比結合。道爾頓道爾頓水分子序中有亂道爾頓序中有亂序中有亂Q&A基于軟硬整合觀點軟硬整合觀點Part-2的趨勢、技術與架構高煥堂的著作Docker: Do
9、cker: 碼頭工人碼頭工人 ( (集裝箱搬運工集裝箱搬運工) )基于軟硬整合觀點Docker集裝箱 自從2014年以來,Docker 的集裝箱(container)技術,可說是紅透半天邊,而且勢如破竹、蔚為風潮,正在強力改變云(cloud)服務的世界。 這跟半世紀前,海上船運業(yè)的集裝箱風潮,對整個產(chǎn)業(yè)的革命性改變,其力道來源和產(chǎn)生經(jīng)濟效益,可說具有異曲同工之妙。 為了配合集裝箱化運輸時代的來臨,海運事業(yè)的整體運作型態(tài)也產(chǎn)生了重大的轉變,無論在海上運送、碼頭作業(yè)以及陸運轉接上,都有革命性的改變。 陸上拖車運輸業(yè)應時而興,扮演極為重要的角色,以集裝箱拖車配合集裝箱船運輸,具有簡化包裝、防止竊盜、
10、加速貨物搬運及便利關務檢驗等優(yōu)點,使集裝箱運輸作業(yè)更加靈活。 集裝箱帶來的商業(yè)利益,其直接受惠是運輸業(yè)者,并不是貨物制造者。 所以集裝箱內部的包裝業(yè),如紙盒制造業(yè)、打包工人等;拖車汽車廠、拖車行、拖車司機;還有造船廠、海運公司、碼頭工人等都會迅速蓬勃發(fā)展起來。 將之對應到Docker風潮,可知道Docker集裝箱的效益在于:讓所有云服務都有一致的操作(operation)界面,包括部署、管理等方式。 Docker集裝箱帶來的商業(yè)利益,直接受惠是軟件管理者或稱維運者(operator),例如軟件測試工具業(yè)者、測試人員等。 在這新世代里,除了拿Docker集裝箱來打包微服務(micro-servi
11、ce)來滿足需求碎片之外。我們還要以廣大的視野、創(chuàng)新的思維,將碎片組合出各式各樣、氣象萬千的商業(yè)服務。 就像飛機設計師一樣,把一群各自的模塊(如輪胎、引擎、機翼、油箱等),以創(chuàng)新模式將它們組合起來,竟然整體就能飛上天空了。 在許多革命性轉折里,經(jīng)常出現(xiàn)集裝箱的身影;它就像幸運草一般,總是帶來許多幸福和財運。 現(xiàn)在Docker風起云涌,再現(xiàn)集裝箱身影,如果開放視野、大力支持它,持續(xù)發(fā)揮它的潛能和力量,則幸運草就會出現(xiàn)在我們身旁了?;谲浻舱嫌^點國王的皮鞋 與Docker集裝箱 古代有一位國王在它的國境里視察,因為路面崎嶇不平,還有很多碎石頭,刺得國王的腳又痛又麻。(摘自百度文庫) 回到了王宮后
12、,他下了一道命令,要將國內所有的道路都鋪上一層牛皮。讓他自己和全國的人走路不再受刺痛之苦。 然而,即便殺盡國內所有的牛,也湊不到足夠的牛皮來鋪路,而且花費昂貴。 這時,一個仆人向國王建言:可以用牛皮將腳包起來,大王的腳就不會忍受痛苦了。 國王聽道而頓悟了,便收回命令,采納了建議,于是,皮鞋就這樣發(fā)明了出來了。(摘自百度文庫) 從上述皮鞋故事的比喻,可知道傳統(tǒng)的虛擬化(virtualization)技術就相當于在各道路(實體機器)上鋪一層牛皮(VM, 虛擬機),然后讓國王的腳(App)在牛皮(VM)上走路(執(zhí)行)。 傳統(tǒng)上云平臺采取虛擬化手段來滿足用戶個別的資源需求分配,以及確保其可用性和隔離性
13、。 然而無論是KVM還是Xen等Guest OS都很浪費資源又難于管理, 都不如Docker集裝箱(皮鞋)來的更加靈活、快速和節(jié)省資源。傳統(tǒng)鋪牛皮(虛擬層)Docker皮鞋(集裝箱) Docker的焦點在于而不是像傳統(tǒng)虛擬化思維的焦點在于讓國王腳疼的。 為什么Docker集裝箱能提升App的執(zhí)行效能呢? 因為Docker屬于OS層級的虛擬化。 在傳統(tǒng)hypervisor虛擬化技術哩,VM透過一個中介層,間接執(zhí)行于Host OS上。 而Docker集裝箱(也是一個小VM)則執(zhí)行于Host-OS的用戶空間,直接執(zhí)行于Host OS上。所以效率提高了。 Docker讓開發(fā)者可以打包他們的應用以及依賴
14、包到一個可移植的容器中,然后發(fā)布到主流的 Linux 機器上。 這些分布式應用程序具可攜特性,由各個不同但可互通的Docker容器所組成,具備動態(tài)的生命周期,而且不論是在筆電或是云端上皆可執(zhí)行?;谲浻舱嫌^點Docker集裝箱的基礎- LXC 用戶空間Linux 內核 用戶空間Linux 內核進程進程 用戶空間Linux 內核進程LXCnamespace LXC在目前的進程管理框架上增加資源的管理和隔離機制。 LXC包集成這些linux內核機制提供一個用戶空間容器對象, 即是針對某一應用提供資源隔離和控制的輕量虛擬系統(tǒng)。 Docker對container的使用基本是建立唉LXC基礎之上的,然
15、而LXC存在的問題是難以移動 - 難以通過標準化的模板制作、重建、復制和移動 container。 LXC仰賴namespace來實現(xiàn)隔離性。讓每個容器都有自己的命名空間,確保不同容器之間不會相互影響,讓每個容器成為擁有自己進程和網(wǎng)絡空間的虛擬環(huán)境,都成為一個獨立運行的單位。 此外,LXC藉由內核的cgroup來對各個容器(的進程)使用的系統(tǒng)資源做嚴格的限制。 例如可建立一個cgroup來限制某個(容器)進程對CPU的占用率不能超過50%。而Docker則在LXC基礎上,加上Docker 境像管理方式,就成為Docker集裝箱了。 LXCLinux 內核namespace Docker集裝箱L
16、inux 內核namespaceApp ImageBins/Libs Image Docker集裝箱Linux 內核namespaceDockerImage Docker借鑒了虛擬機(VM)的模式,讓用戶像管理VM一樣的管理他們的集裝箱鏡像。基于軟硬整合觀點 簡而言之,LXC基于namespace的隔離機制和cgroup的資源控制功能,來管理容器。 隔離性 LXC運行于一個用戶空間進程里,在既有的進程管理架構上,增添了資源管理和隔離機制。 所以LXC是針對某一App提供資源隔離和控制的輕量型虛擬系統(tǒng)。LXC仰賴namespace來實現(xiàn)隔離性。 隔離性 讓每個容器都有自己的命名空間,比如pid/
17、net/ipc/mnt/uts等命名空間,以及不同的 user id和group id。 有了namespace從進程、網(wǎng)絡、IPC、檔系統(tǒng)、UTS和用戶角度進行隔離,我們就能e確保在不同容器之間不會相互影響,每個容器都成為一個獨立運行的單位。 隔離性 從容器里而觀之,它是一個完整的Linux的世界。在整個平臺而觀之,容器運行于一個普通的用戶空間進程,namespace創(chuàng)造了這種映射和隔離效果,云平臺承載著一個個容器,就如同造物者創(chuàng)造了許多世外桃源一般。 資源控制 LXC仰賴cgroup來限制各個進程對系統(tǒng)資源的使用能力。通常會創(chuàng)建多個cgroup,形成一個樹狀結構(hierarchy)。 然
18、后subsystem會關聯(lián)連接到這個樹狀結構上。一個subsystem代表著一項資源,例如CPU、Memory或 I/O等。/cpu_mem_cg/cg1/cg2/cg3Cgroup Hierarchymemory CPUSubsystems cgroup組織形式是樹狀結構的,包含一個父cgroup和三個子cgroup,其關聯(lián)到兩個subsystem(即CPU和memory)。 這subsystem是經(jīng)由cgroup來與task(典型的就是進程)連結,以便實現(xiàn)對task的資源管理與控制。 一個task可加入到樹狀結構上的一個cgroup,由此cgroup來限制該task的資源使用。 一個cgr
19、oup可以連結到多個task。而一個task也可連結到多個cgroup。 例如,針對一個容器進程,先創(chuàng)建名為“cpuset”的cgroup,然后將一個mytask的PID寫入/sys/fs/cgroup/cpuset/tasks文件里,就把這個mytask加入到該cgroup了。/a_cg/cg-1/cg-N/b_cg/ioset/cg_y/task_1hierarchyhierarchy/mytask/task_N I/O CPU/cpuset 這個mytask連結到兩個cgroup:即“cpuset”和“ioset”,各連結到一個subsystem(即CPU和I/O資源)?;谲浻舱嫌^點
20、Docker集裝箱 和它的鏡像 制作Docker鏡像文件的途徑有二:1)從現(xiàn)有集裝箱生成,或從Dockerfile生成。 亦即,集裝箱是一個基于Docker鏡像創(chuàng)建、包含為了運行某一特定程序的所有需要的OS、軟件、配置文件和數(shù)據(jù),是一個可移植的運行單元。 在Host機器來看,它只是一個簡單的用戶進程而已?!迸e例:在Ubuntu機器上建立Docker集裝箱首先安裝Docker $ sudo apt-get install docker.io安裝好了,就可啟動Docker服務 $ sudo service docker.io restart接著載入一個ubuntu(的Docker)鏡像 $ sud
21、o docker pull ubuntu (這創(chuàng)建一個集裝箱,內含ubuntu鏡像) ubuntu imageDocker集裝箱Linux 內核 執(zhí)行集裝箱內Ubuntu交互式命令(如shell) $sudo dockerrunubuntu /bin/echoHello! Hello! 在此集裝箱里,增添一個example鏡像 $sudo docker run ubuntu apt-get install -y example ubuntu imageexample imageDocker集裝箱Linux 內核 取得此集裝箱的ID $sudo docker ps l (得到ID值,如:6966
22、a3b96484) 從這個集裝箱產(chǎn)生出它的鏡像 $sudo docker commit 6982 mis/exam mis/exam鏡像ubuntu imageexample imageLinux 內核 載入剛才產(chǎn)生的鏡像 $sudo docker pull mis/exam (這創(chuàng)建一個新集裝箱,內含mis/exam鏡像) 執(zhí)行集裝箱內mis/exam鏡像 $sudo dockerrunmis/exam echo Happy! Happy! 集裝箱 集裝箱ubuntu imageexample imagemis/exam imageLinux 內核 執(zhí)行集裝箱內mis/example鏡像 $
23、sudo dockerrunmis/exam echo Happy! Happy!基于軟硬整合觀點Docker園丁 (Docker Runtime) 我們在運輸(ship)或移植一個Docker集裝箱時,就像移植一棵樹一樣, 但是移植樹的種子(seed)到另一個花園(平臺)里,重新打造出一樣的(identical)環(huán)境(花盆)并重新長出一樣的樹。 那么,我們在電腦上,需要有位園丁來打造花盆、準備資源(如水、泥土)等工作。這位園丁就是:Docker Runtime。它是由三個模塊所組成,包括:Docker Server、Docker Engine和Docker Daemon三部分。Docker
24、ClientServerRMIEngineDaemonJobHandlerExecDriverNetworkDriverGraphDriver 通常,人們是透過Docker Client來與Docker Server建立通信(兩者是C/S架構)。 例如,我們可以將docker build命令傳送給Docker Server來依據(jù)指定的dockerfile來創(chuàng)建一個Docker鏡像。 Docker Server接受Docker Client所傳送來的請求,然后轉給Docker Engine去轉換出一連串的工作(job)來管理集裝箱。 例如,向Docker Registry獲取鏡像、通過Graph
25、Driver執(zhí)行集裝箱鏡像的建立、通過NetworkDriver執(zhí)行容器網(wǎng)絡環(huán)境的配置、通過ExecDriver執(zhí)行集裝箱內部的軟件等?;谲浻舱嫌^點Docker集裝箱集散地 (Docker Hub) Docker公司不僅僅提供上述的Docker園丁來幫你搬運集裝箱,還提供Docker Hub來做為集裝箱的共享平臺。 Docker公司提供的開放平臺,主要包括:Platform = Docker Engine + Docker Hub + APIs + Ecosystem 我們在開發(fā)平臺上,使用Docker引擎來將App打包到集裝箱里,然后透過Docker Hub API來將集裝箱(的鏡像)放
26、到Docker Hub上。 于是,Docker Hub成為一個集裝箱集散地,也就是一個共享的集裝箱平臺。需要時,可從這Hub尋找到集裝箱,并下載到云服務平臺(如阿里云或Google云)上去運行。 所以,Docker Engine和Docker Hub兩者聯(lián)手,為開發(fā)者和系統(tǒng)管理員設計出一個易于發(fā)布和運行分布式App的開放性平臺。Q&A基于軟硬整合觀點軟硬整合觀點Part-3(a)的十個學習步驟(步驟15)高煥堂的著作第第1 1步:步:學習兩種抽象視角學習兩種抽象視角第第2 2步:步:關心下層的變動自由度關心下層的變動自由度第第3 3步:步:系統(tǒng)架構控制力支撐商業(yè)競爭話語權系統(tǒng)架構控制力支撐商業(yè)
27、競爭話語權第第4 4步:步: 是用戶從簡單中叫出復雜是用戶從簡單中叫出復雜 的滿足感的滿足感第第5 5步:步:創(chuàng)意愛上限制,即需求檢驗設計創(chuàng)意愛上限制,即需求檢驗設計基于軟硬整軟硬整合觀點合觀點 視角1. 歸納抽象: 從一群的業(yè)務或系統(tǒng)模塊(Module)中,觀察其相同的部分,然后歸納抽象(分析視角)出來,成為可復用(Reuse)共同部分。這稱為視角。視角1. 歸納抽象:變與不變分離視角1. 歸納抽象:Credit Card(信用卡)不變部部分視角1. 歸納抽象:抽象類不變部部分具象類-1具象類-2具象類-n除了分析業(yè)務之外,還要組合創(chuàng)新歸納抽象除了分析業(yè)務之外,還要組合創(chuàng)新分析師視角除了分析
28、業(yè)務之外,還要組合創(chuàng)新設計師視角分析師視角視角2. 組合創(chuàng)新: 引進或創(chuàng)造一個新模式(Pattern),將一群模塊組合成一個和諧的整體。這模式是形式(Form),各模塊是內容(Content);通稱為視角。視角2. 組合創(chuàng)新: 引進或創(chuàng)造一個新模式(Pattern),將一群模塊組合成一個和諧的整體。這模式是形式(Form),各模塊是內容(Content);通稱為視角。視角2. 組合創(chuàng)新: 引進或創(chuàng)造一個新模式(Pattern),將一群模塊組合成一個和諧的整體。這模式是形式(Form),各模塊是內容(Content);通稱為視角。例如,例如,汽車汽車和和行人行人是兩種個體是兩種個體( (模模塊塊
29、) ),經(jīng)常在路上發(fā)生沖突,導致社,經(jīng)常在路上發(fā)生沖突,導致社會會( (整體整體) )不和諧了。不和諧了。因而創(chuàng)新設計了一個因而創(chuàng)新設計了一個新模式:新模式:紅紅綠綠燈燈+ +斑斑馬馬線。成為汽車與行人的接口線。成為汽車與行人的接口(Interface)(Interface),整體就和諧了。,整體就和諧了。例如,一群零組件例如,一群零組件( (如輪胎、引擎、如輪胎、引擎、機翼、機尾、油箱等機翼、機尾、油箱等) )都都 ;但是我想飛。但是我想飛。除了分析業(yè)務之外,還要組合創(chuàng)新設計師視角把一群把一群 的模塊的模塊( (如輪胎、引擎、機翼如輪胎、引擎、機翼) ),巧妙地組合起來,竟然巧妙地組合起來,
30、竟然就就 上天。上天。設計師視角把一群把一群 的模塊的模塊( (如輪胎、引擎、機翼如輪胎、引擎、機翼) ),巧妙地組合起來,竟然巧妙地組合起來,竟然就就 上天。上天。架構師的職責把一群把一群 的模塊的模塊( (如輪胎、引擎、機翼如輪胎、引擎、機翼) ),巧妙地組合起來,竟然巧妙地組合起來,竟然就就 上天。上天。架構師的職責基于軟硬整軟硬整合觀點合觀點除了關心上層應用,還要關心底層模塊。除了關心上層應用,還要關心底層模塊。萬里長城設計師用心于關外還是關內萬里長城設計師用心于關內限制塞外保護關內關心底層模塊廠商(沒錢就改版, 改版就有錢)。架構師用心 于底層重構底層接口底層模塊上層模塊底層接口底層
31、模塊上層模塊Server 接口Server模塊f1()OpenGL_CAppp1()SQLiteDBf1()OpenGL_Cp1()SQLiteDBApp代碼Callf1(“init”)Callp1(factor(f1() f1()OpenGL_Cp1()SQLiteDBApp代碼Callf1(“init”)Callp1(factor(f1() f1()和p1()函數(shù)是誰定義的?f1()OpenGL_Cp1()SQLiteDBApp代碼Callf1(“init”)Callp1(factor(f1() f1()是設計者定義的f1()OpenGL_Cp1()SQLiteDBApp代碼Callf1(
32、“init”)Callp1(factor(f1() 和字眼被寫在App模塊代碼里!f1()OpenGL_Cp1()SQLiteDBApp代碼Callf1(“init”)Callp1(factor(f1() App代碼綁住了接口!代碼必須同步修改f1()p1()代碼必須同步修改App代碼Callf1(“init”)Callp1(factor(f1() f1()p1()代碼必須同步修改App代碼Callf1(“init”)Callp1(factor(f1() f1()p1()修改需x元代碼必須同步修改App代碼Callf1(“init”)Callp1(factor(f1() 修改需y元f1()p1
33、()OpenGL_C變更成本= x + y元App代碼Callf1(“init”)Callp1(factor(f1() 這就是所謂的的漣漪效應。例如,Android的Camera模塊Server模塊模塊Client模塊模塊例如Android的3D繪圖抽換Server模塊引擎輪胎接口接口引擎輪胎著名的EITEIT設計模式 碎片:碎片: 可變可變抽換輪胎抽換輪胎基于軟硬整軟硬整合觀點合觀點 除了結構(設計自己),還要有策略(設計別人)。依據(jù)企業(yè)的定位,設計有利于自己的軟件接口給別人實現(xiàn)。除了結構(設計自己),還要有策略(設計別人)。掌握接口,擁有系統(tǒng)控制權,支撐商業(yè)話語權,鞏固地位。除了結構(設計
34、自己),還要有策略(設計別人)。 認識自己企業(yè)的商業(yè)模式商業(yè)模式,厘清自己企業(yè)在商業(yè)合作策略上能夠(或想要)取得什么話語權話語權? 取得接口接口(API)(API)定義權定義權,掌握系統(tǒng)系統(tǒng)控制點。控制點。 強化自己商業(yè)策略的話語權。Server端廠商的商業(yè)策略? 沒錢就改版, 改版就有錢。Server端廠商的商業(yè)策略? 系統(tǒng)控制權, 支持商業(yè)話語權Server端廠商的商業(yè)策略? Client/Server架構 Client/Server架構沒錢就改版, 改版就有錢。 Client/Server架構掌握掌握強勢接口強勢接口創(chuàng)造創(chuàng)造強龍地位強龍地位Client端廠商的商業(yè)策略? Client端廠
35、商的商業(yè)策略? 隨時抽換ServerServer模塊Client端端廠商廠商掌握掌握接口接口創(chuàng)造創(chuàng)造地位地位AndroidAndroid架構師如何支撐GoogleGoogle的商業(yè)策略? ? AndroidAndroid底層是LinuxLinux,它屬于Linux Linux 基金會 AndroidAndroid底層是LinuxLinux,它屬于Linux Linux 基金會 Android Linux 驅動(Driver) 驅動LinuxGPL開源協(xié)議擺在擺在LinuxLinux內核里內核里( (硬件廠商硬件廠商) )開源之后,我的開源之后,我的硬件創(chuàng)新就曝光了硬件創(chuàng)新就曝光了! !( (硬
36、件廠商硬件廠商) ) 驅動Linux還可以擺在哪里呢還可以擺在哪里呢? ?( (硬件廠商硬件廠商) ) 驅動Linux設計框架,定義接口,拉攏硬件廠,架空Linux Linux 基金會 Android Linux 驅動(Driver)設計HALHAL框架 Android Linux 驅動(Driver)HAL HAL的設計吸引硬件廠商,削弱Linux對硬件廠商的約束力,架空Linux基金會。 提高Google的商業(yè)話語權?;谲浻舱浻舱嫌^點合觀點 除了加法設計, 還要先減法設計。除了加法設計, 還要先減法設計。好玩好摸好抱除了加法設計, 還要先減法設計。好玩好摸好抱除了加法設計, 還要先減
37、法設計。 設計就是從復雜中找出簡單的過程。設計就是從復雜中找出簡單的過程。 讓開發(fā)者從簡單中反過來掌握復雜。讓開發(fā)者從簡單中反過來掌握復雜。 讓用戶能從簡單中叫出復雜,并獲得其讓用戶能從簡單中叫出復雜,并獲得其中的滿足感。中的滿足感。 減法設計思維,古代的容易是包容改變的意思,并非舍棄改變之意。如此,化繁為簡,提升人們掌握復雜的能力。 後來,許多人喜歡抽象(Abstraction),抽出萬變不離其宗的不變,來掌握簡單。這就違背了容易的標的了。蘋果很擅長蘋果很擅長減法設計減法設計 舉例(一) :2000年代初期,Sony隨身聽是蘋果公司的競品之一。隨身聽(競品)如何刪除刪除呢?(減法設計) 舉例
38、(一) :2000年代初期,Sony隨身聽是蘋果公司的競品之一。 iPod 減法設計減法設計 舉例(一) :2000年代初期,Sony隨身聽是蘋果公司的競品之一。 舉例(二) :之后,黑梅手機是蘋果公司的競品之一。黑梅手機 舉例(二) :之后,黑梅手機是蘋果公司的競品之一。如何減法設計呢?黑梅手機 舉例(二) :之后,黑梅手機是蘋果公司的競品之一。減法設計減法設計iPhone手機 舉例(三) :還有,微軟平板也是蘋果公司的競品之一。微軟平板 舉例(三) :還有,微軟平板也是蘋果公司的競品之一。如何刪除刪除呢?(減法設計)微軟平板 舉例(三) :還有,微軟平板也是蘋果公司的競品之一。減法設計減法
39、設計iPad 基于軟硬整軟硬整合觀點合觀點 除了滿足(外在)需求, 還要追求(內心)愿景。需求圍繞設計需求圍繞設計除了滿足(外在), 還要追求(內心)愿景。 谷歌公司副總谷歌公司副總Marissa MayerMarissa Mayer所提倡的:所提倡的: “創(chuàng)意愛上限制(Creativity loves(Creativity loves Constraint)Constraint)。 她說:她說: 創(chuàng)新來自創(chuàng)新來自愿景與限制的互動愿景與限制的互動 (Innovation is born from the (Innovation is born from the interactionbetwe
40、en constraint and vision)interactionbetween constraint and vision)。 限制迫使架構師重新審視愿景,從不同觀點切入,限制迫使架構師重新審視愿景,從不同觀點切入,尋找新事物;同時也讓其聚精會神、厘清思路;非尋找新事物;同時也讓其聚精會神、厘清思路;非常具有創(chuàng)新性。常具有創(chuàng)新性。愿景限制信用卡(Credit)聯(lián)盟的組織架構 愿景限制 銀行不吃虧:沒向銀行拿錢 消費者不吃虧:刷卡與不刷卡,價錢一樣 店家不吃虧:隨然每筆交易收了3%,但每天交易總額提升30%愿景限制= 創(chuàng)新Vision=沒向銀行收錢讓顧客占便宜提高店家收入 心境:不讓任何
41、合作者受傷害(吃虧)。愿景限制 消費者刷卡,延后付款 這利息誰支付?愿景限制 把利息轉嫁給有錢人(如貴婦) 19.8%循環(huán)利息Q&A基于軟硬整合觀點軟硬整合觀點Part-3(b)的十個學習步驟(步驟610)高煥堂的著作第第6 6步:步: 假設性思維和假設性思維和Mapping from visionMapping from vision to reality to reality第第7 7步:步: 清晰而明確表述接口清晰而明確表述接口第第8 8步:步: 盡快對接口進行檢驗和測試盡快對接口進行檢驗和測試第第9 9步:步: 設計通用性接口設計通用性接口第第1010步:步:有效減法設計,才能開放加法
42、有效減法設計,才能開放加法基于軟硬整軟硬整合觀點合觀點 除了眺望未來, 還要Look back。(從未來回顧今日)“你不可能在眺望未來時把生活中的每個點連接起來,只有回顧時能才連點成線。所以你必須相信今日所做的會影響你的未來?!碧O果.喬布斯說。 Look back(現(xiàn)實,Reality)Prob. X.許多Manager 都關注現(xiàn)實問題(現(xiàn)實,Reality)Prob. X.(現(xiàn)實,Reality)Prob. X.(現(xiàn)實,Reality)Prob. X.Look Back(現(xiàn)實,Reality)其它問題Ex. 國王與皮鞋的故事 古代有一位國王在它的國境里視察,因為路面崎嶇不平,還有很多碎石頭,
43、刺得國王的腳又痛又麻。 回到王宮后,他下了一道命令,要將國內所有的道路都鋪上一層牛皮。 于是,讓他自己和全國的人走路不再受刺痛之苦 眾大臣聽了國王的話都一籌莫展,知道這很難。即便殺盡國內所有的牛,也湊不到足夠的牛皮來鋪路,而且花費昂貴。 這時,一個聰明的仆人向國王建言:可以試著用牛皮將腳包起來,大王的腳就不會忍受痛苦了。國王聽道而采納了建議,于是,皮鞋就這樣發(fā)明了出來了。殺牛、鋪牛皮Prob. X.國王&大臣們 都關注現(xiàn)實問題殺牛、鋪牛皮Prob. X.Solve Problem X 殺牛、鋪牛皮Prob. X.仆人X is Not Right Problem to solve Look Ba
44、ck(現(xiàn)實,Reality)其它問題VisionMapping from vision to realityVision創(chuàng)新: 皮鞋VisionEx. 紅綠燈與斑馬線Ex. 紅綠燈與斑馬線汽車和行人經(jīng)常在路上發(fā)生沖突、混亂。Reality:沖突混亂Prob. X.Prob. X.VisionVisionMapping from vision to realityVisionProb. Y.Ex. 集裝箱的故事Vision-1Vision-2Vision-3Mapping from vision to realityMapping from vision to reality序中有亂 Visio
45、n:和諧整體Reality:碎片多變 Vision:和諧整體Reality:碎片多變序中有亂Ex. Docker軟件集裝箱 Vision:創(chuàng)新組合Reality:碎片多變Reality:碎片多變 Vision:創(chuàng)新組合 Vision是夢想、假設出來的想象力比知識更重要 愛因斯坦 Vision是夢想、假設出來的Reality是現(xiàn)實條件Mapping from vision to reality Vision是夢想、假設出來的Reality是現(xiàn)實條件Mapping from vision to realityReality是現(xiàn)實條件Mapping from vision to reality Vi
46、sion是北極星: 是夢想、不一定可實現(xiàn)基于軟硬整軟硬整合觀點合觀點 愿景現(xiàn)實Mapping from vision to reality 愿景現(xiàn)實 新事物新事物發(fā)現(xiàn)(或想象)了新事物, 還要描述它。先關注它的 組合接口要有明確的接口定義, 才知道如何整合到整體, 并且和諧(如能飛)依據(jù)接口去 生產(chǎn)與組合Program to interface舉例:Docker + EIT造形一項游戲軟件有多個模塊,打包成為Docker集裝箱。Docker Container攝像頭Docker Container港口3D圖Docker Container無人飛機Docker Container攝像頭Docke
47、r Container港口3D圖Docker Container無人飛機在這個游戲里,玩家操控飛機,攜帶攝像頭(Camera)飛越港口上空,游戲畫面會出現(xiàn)攝像頭所拍到的景象。如下圖:(取自千圖網(wǎng))動態(tài)組合動態(tài)組合 首先,來看看如何將和兩個Docker集裝箱組合起來。Docker Container攝像頭Docker Container無人飛機組合組合這如何設計、 敘述接口呢?心懷EIT造形 此時,EIT造形就浮上心頭,設計一個EIT集裝箱來組合。Docker Container無人飛機Docker Container攝像頭EIT集裝箱集裝箱 心中當然很清楚,這EIT集裝箱里含有一個單純的EIT
48、造形。Docker Container無人飛機Docker Container攝像頭EIT集裝箱集裝箱 一旦能夠組合了兩個,只要變化EIT造形,就能組合三個集裝箱了。瞬間改變EIT集裝箱里的EIT造形,展現(xiàn)出新奇組合。Docker Container無人飛機Docker Container攝像頭EIT集裝箱集裝箱Docker Container港口3D圖舉例:Android 的EIT造形 組合 攝像頭(Camera)拍攝到視像,然后傳遞到顯示屏。 SurfaceView和Camera兩個類控制設備。集裝箱集裝箱 集裝箱集裝箱 此時,EIT造形就浮上心頭,設計一個EIT集裝箱來組合。EIT集裝箱
49、集裝箱 心中當然很清楚,這EIT集裝箱里含有一個單純的EIT造形。 集裝箱的特性:。 EIT造形可以彈性變化。 這是Android的典型結構。 Continued 基于軟硬整軟硬整合觀點合觀點 愿景現(xiàn)實Mapping from vision to reality 愿景現(xiàn)實Mapping from vision to reality 愿景現(xiàn)實Mapping from vision to reality接口支持組合 愿景現(xiàn)實Mapping from vision to reality接口支持組合檢驗除了設計接口支持組合, 還要檢驗、接地氣。除了設計接口支持組合, 還要檢驗、接地氣。接口決定整合接口
50、決定整合開發(fā)前先開發(fā)前先 檢驗接口檢驗接口Docker Container攝像頭Docker Container港口3D圖Docker Container無人飛機設計接口,先進行接口測試,然后才花錢去購買、委托或自行開發(fā)生產(chǎn)。尚未開發(fā)委托開發(fā)攝像頭先做個Mock(贗品),只做I/O,細節(jié)邏輯還不寫,然后設計EIT來定義組合接口。MockDocker Container無人飛機EIT集裝箱集裝箱 先檢測Mock能否與整合,才決定是否花錢開發(fā)這種攝像頭。Docker Container無人飛機EIT集裝箱集裝箱攝像頭Mock 隨著系統(tǒng)的擴大,更多模塊的整合,對接口設計的完整性、未來性等進行檢驗。D
51、ocker Container無人飛機Mock攝像頭EIT集裝箱集裝箱Mock港口3D圖MockCamera 集裝箱內部也能建立Mock來檢驗接口。 Continued 基于軟硬整軟硬整合觀點合觀點除了設計接口之外, 還要抽象出更通用接口。通用性接口設計支持 集裝箱一致造形支持一致造形支持 無限組合無限組合 集裝箱里各模塊有各自的對外接口,傷害集裝箱的了。Docker Container無人飛機Docker Container攝像頭Docker ContainerDocker Container港口3D圖I1I2 采用EIT造形,設計出一致的接口。Docker Container無人飛機Doc
52、ker Container攝像頭Docker Container港口3D圖I1I2 采用EIT造形,設計出一致的接口。Docker Container無人飛機Docker Container攝像頭I1Docker Container港口3D圖I2ClientServer通用性接口設計Is 如何設計一致的接口?Docker ContainerDocker Container能否能否單一接口呢單一接口呢?有什么妙招呢有什么妙招呢?將多態(tài)將多態(tài)組合進去!組合進去!多態(tài)結構多態(tài)結構多態(tài)結構多態(tài)結構建立建立繼承關系繼承關系特殊性特殊性 接口接口通用性通用性 接口接口特殊性特殊性 接口接口Docker C
53、ontainer通用性通用性 接口接口Docker Container一致化一致化接口設計接口設計IGeneralIGeneral Continued 基于軟硬整軟硬整合觀點合觀點集裝箱的特性: 一致造形一致造形 包容包容變變化化 無限組合無限組合集裝箱的特性:序中有亂 一致造形一致造形 包容包容變變化化 無限組合無限組合 一致造形 包容變化 無限組合序中有亂 一致造形 包容變化 無限組合(內部)(外部)Docker Container無人飛機Docker Container攝像頭Docker Container港口3D圖I1I2減法設計加法設計 減法設計減法設計減法設計Q&A基于軟硬整合觀點
54、軟硬整合觀點Part-4Android+Docker 的一體化設計高煥堂的著作基于軟硬整合觀點復習:序中有亂 - - 集裝箱的內容可復雜多變集裝箱的內容可復雜多變 前言: 談到Docker,許多人會聯(lián)想到集裝箱的可移植性,進而聯(lián)想到集裝箱內容的不變性,(跨平臺性)。 其實,集裝箱的內容是復雜多變的。變易變易基于軟硬整合觀點企業(yè)邏輯 -Docker-Docker集裝箱適合容納集裝箱適合容納 善變的企業(yè)邏輯善變的企業(yè)邏輯 Docker集裝箱內容也是千變萬化 大家都知道,企業(yè)邏輯(Business Logics)是善變的。 所以把善變的企業(yè)邏輯,加以打包放進Docker集裝箱,是有效的作法。基于軟硬整合觀點軟件插件 -用來用來表現(xiàn)表現(xiàn)企企業(yè)邏輯業(yè)邏輯企業(yè)邏輯Docker Image軟件插件 經(jīng)常與并存。企業(yè)邏輯插件插件插件Docker Image 經(jīng)常與并存。企業(yè)邏輯插件框架(Framework)插件插件D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年棗莊c1貨運從業(yè)資格證模擬考試
- 視網(wǎng)膜分支靜脈阻塞的健康宣教
- 亞急性心內膜炎的健康宣教
- 2025年阜陽駕??荚囏涍\從業(yè)資格證考試題庫
- 后廚安全生產(chǎn)培訓
- 消毒滅菌方法原則及規(guī)范
- 2025年洋蔥訂購合同范本
- 特種設備知識
- 2025房屋買賣合同 標準版模板全
- 提升工作滿意度的年度措施計劃
- 自動轉運小車結構及控制系統(tǒng)設計說明書
- 《醫(yī)學心理學》課件:第11章 醫(yī)患關系
- 飲水設備巡查維護記錄表
- 洛陽十三朝古都課件
- RomaxDesigner 培訓教程(合)教學提綱
- 《中國傳統(tǒng)服飾——漢服》PPT課件
- 顧潔Storytime
- 小學信息技術認識《畫圖》
- 【精品】宇通客車涂裝車間實習報告
- 冷凍機的制冷效率與運行電費
- 物業(yè)服務流程圖
評論
0/150
提交評論