文章主人公:小明,就職于某互聯(lián)網(wǎng)公司,從事后端開發(fā)工作。最近小明收到通知公司需要開發(fā)一款《證件照》應(yīng)用,需要征集架構(gòu)方案,主要功能包括:
小明雖然從事后端開發(fā)工作,但是一直很關(guān)注架構(gòu)這方面的知識,以往都是開發(fā)大佬們架構(gòu)好的應(yīng)用現(xiàn)在有機會自己去實踐下,打算把自己學(xué)到的知識應(yīng)用于實際案例中來。
小明的腦海里是回想了下架構(gòu)的基本三原則:
* 合適優(yōu)于業(yè)界領(lǐng)先
* 簡單優(yōu)于復(fù)雜
* 演化優(yōu)于一步到位
小明作為架構(gòu)新手,雖然干勁十足,但是也像大部分一樣開發(fā)人員一樣架構(gòu)經(jīng)驗較少,不知道如何下手去開始架構(gòu),萬事開頭難??!小明請教了下公司的西踢毆(CTO),給了一句25字的架構(gòu)真言:
架構(gòu)設(shè)計的主要目的是為了解決軟件系統(tǒng)復(fù)雜度帶來的問題
小明也算骨骼驚奇,久經(jīng)沙場(996沒少鍛煉人~~),思考了“架構(gòu)真言”既然是為了解決軟件系統(tǒng)繁雜度的問題,那不得先找出系統(tǒng)的復(fù)雜點在哪里嗎?
發(fā)現(xiàn)復(fù)雜點
小明根據(jù)“架構(gòu)真言”開始思考《證件照》應(yīng)用的復(fù)雜點,首先它是一款工具類應(yīng)用,主要功能是進行圖像處理:
小明發(fā)現(xiàn)圖像處理和圖像存儲可能比較復(fù)雜,公司現(xiàn)階段沒有專門做圖像處理團隊,也沒有大數(shù)據(jù)團隊,這兩個問題是要優(yōu)先解決的問題。
小明現(xiàn)在使用的手機是Galaxy s9
一張照片大概是6m,如果初期應(yīng)用日活1w,假設(shè)有20%的人會處理圖片,那一天的存儲量大約10g,運行一個月就需要300g的存儲空間,這個配置個幾T的磁盤可以跑個1年左右。不過這只是1w日活還要考慮到十萬、百萬級別的時候怎么辦。
經(jīng)過討論小明列出了一些復(fù)雜的地方并按優(yōu)先級做了排序:
* 圖像存儲
* 圖像處理
* 訂單處理
* 物流處理
設(shè)計架構(gòu)方案
對于圖像存儲復(fù)雜性,小明第一個想到的是一個分布式文件存儲方案,這樣數(shù)據(jù)容量、可用性都可以得到很好的保障。他首先將這個想法和西踢毆交流了下,西踢毆也沒有否認這個方案只是讓小明考慮下成本方面的因素,小明回頭一想確認引入"分布式文件存儲"首先會帶來以下幾點問題:
* 系統(tǒng)復(fù)雜性提高
* 運維成本提高
* 系統(tǒng)可用性降低
* ...
小明思考了下簡單優(yōu)于復(fù)雜原則,決定使用最簡單的本地磁盤存儲圖像文件,但是使用本地磁盤
的方案一定要考慮擴展性,將來隨時都可能擴容、遷移數(shù)據(jù),于是小明對圖像存儲做了個簡單的抽象層:
小明對于存儲復(fù)雜性應(yīng)用了架構(gòu)原則中的原則簡單優(yōu)于復(fù)雜、演化優(yōu)于一步到位,同時對于存儲的可變性,通過引入抽像層能夠有效合理的應(yīng)對未來的變化。
初步定下來圖像存儲后,小明開始對圖像處理復(fù)雜性的問題進行設(shè)計,一張證件照的制作流程大致如下:
* 用戶提交圖片
* 檢測人臉
* 人像與背景切割
* 將切割后的圖交給客戶處理
* 客戶端合成背影、正裝生成證件照
檢測人臉、頭像分割這類技術(shù)公司也沒有使用過,基本上自研是不可能的,再說人力成本也不夠,首先合適的方案就是用第三方的服務(wù),一番調(diào)研發(fā)現(xiàn)百度AI有人像處理的能力,小明開始考慮使用百度AI的服務(wù),于是引入百度AI的服務(wù):
對于圖像處理小明考慮合適優(yōu)于業(yè)界領(lǐng)先
原則,考慮人力、物力的成本選擇合適的方案,而不是一開始就說要自研一套圖像處理系統(tǒng),投入大量的時間和人力去做最后得不償失。經(jīng)過一番操作,小明最后整理出一張基礎(chǔ)架構(gòu)圖交給了西踢毆,等待西踢毆的轉(zhuǎn)身~~
總結(jié)
根據(jù)架構(gòu)設(shè)計的主要目的是為了解決軟件系統(tǒng)復(fù)雜度帶來的問題
的綜指,小明首先找出系統(tǒng)的復(fù)雜點,然后經(jīng)過優(yōu)先級排序,一步步的解決復(fù)雜性的問題,最后結(jié)合實際情況設(shè)計出一套可行的架構(gòu)方案。架構(gòu)設(shè)計也是有套路可尋的,雖然案例架構(gòu)比較簡單沒有大規(guī)模的分布式、高可用、高并發(fā)場景,再小的應(yīng)用也是有架構(gòu),也要經(jīng)過深思熟慮再去實行不然會是滿地的技術(shù)債,后期要花更多的成本去維護重構(gòu)。
《架構(gòu)文摘》每天一篇架構(gòu)領(lǐng)域重磅好文,涉及一線互聯(lián)網(wǎng)公司應(yīng)用架構(gòu)(高可用、高性 能、高穩(wěn)定)、大數(shù)據(jù)、機器學(xué)習(xí)等各個熱門領(lǐng)域。
熱門工具 換一換