文章主人公:小明,就職于某互聯網公司,從事后端開發作業,最近小明收到通知公司需要開發一款《證件照》應用,需要征集架構方案,主要功能包括:

小明雖然從事后端開發作業,但是一直很關注架構這方面的知識,以往都是開發大佬們架構好的應用現在有機會自己去實踐下,打算把自己學到的知識應用于實際案例中來,
小明的腦海里是回想了下架構的基本三原則:
- 合適優于業界領先
- 簡單優于復雜
- 演化優于一步到位
小明作為架構新手,雖然干勁十足,但是也像大部分一樣開發人員一樣架構經驗較少,不知道如何下手去開始架構,萬事開頭難啊!小明請教了下公司的西踢毆(CTO),給了一句25字的架構真言:架構設計的主要目的是為了解決軟體系統復雜度帶來的問題
小明也算骨骼驚奇,久經沙場(996沒少鍛煉人~~),思考了“架構真言”既然是為了解決軟體系統繁雜度的問題,那不得先找出系統的復雜點在哪里嗎?
發現復雜點
小明根據“架構真言”開始思考《證件照》應用的復雜點,首先它是一款工具類應用,主要功能是進行影像處理:

小明發現影像處理和影像存盤可能比較復雜,公司現階段沒有專門做影像處理團隊,也沒有大資料團隊,這兩個問題是要優先解決的問題,
小明現在使用的手機是Galaxy s9一張照片大概是6m,如果初期應用榷訓1w,假設有20%的人會處理圖片,那一天的存盤量大約10g,運行一個月就需要300g的存盤空間,這個配置個幾T的磁盤可以跑個1年左右,不過這只是1w榷訓還要考慮到十萬、百萬級別的時候怎么辦,
經過討論小明列出了一些復雜的地方并按優先級做了排序:
- 影像存盤
- 影像處理
- 訂單處理
- 物流處理
設計架構方案
對于影像存盤復雜性,小明第一個想到的是一個分布式檔案存盤方案,這樣資料容量、可用性都可以得到很好的保障,他首先將這個想法和西踢毆交流了下,西踢毆也沒有否認這個方案只是讓小明考慮下成本方面的因素,小明回頭一想確認引入"分布式檔案存盤"首先會帶來以下幾點問題:
- 系統復雜性提高
- 運維成本提高
- 系統可用性降低
- ...
小明思考了下簡單優于復雜原則,決定使用最簡單的本地磁盤存盤影像檔案,但是使用本地磁盤的方案一定要考慮擴展性,將來隨時都可能擴容、遷移資料,于是小明對影像存盤做了個簡單的抽象層:

小明對于存盤復雜性應用了架構原則中的原則簡單優于復雜、演化優于一步到位,同時對于存盤的可變性,通過引入抽像層能夠有效合理的應對未來的變化,
初步定下來影像存盤后,小明開始對影像處理復雜性的問題進行設計,一張證件照的制作流程大致如下:
- 用戶提交圖片
- 檢測人臉
- 人像與背景切割
- 將切割后的圖交給客戶處理
- 客戶端合成背影、正裝生成證件照
檢測人臉、頭像分割這類技術公司也沒有使用過,基本上自研是不可能的,再說人力成本也不夠,首先合適的方案就是用第三方的服務,一番調研發現百度AI有人像處理的能力,小明開始考慮使用百度AI的服務,于是引入百度AI的服務:

對于影像處理小明考慮合適優于業界領先原則,考慮人力、物力的成本選擇合適的方案,而不是一開始就說要自研一套影像處理系統,投入大量的時間和人力去做最后得不償失,經過一番操作,小明最后整理出一張基礎架構圖交給了西踢毆,等待西踢毆的轉身~~

總結
根據架構設計的主要目的是為了解決軟體系統復雜度帶來的問題的綜指,小明首先找出系統的復雜點,然后經過優先級排序,一步步的解決復雜性的問題,最后結合實際情況設計出一套可行的架構方案,架構設計也是有套路可尋的,雖然案例架構比較簡單沒有大規模的分布式、高可用、高并發場景,再小的應用也是有架構,也要經過深思熟慮再去實行不然會是滿地的技術債,后期要花更多的成本去維護重構,
《架構文摘》每天一篇架構領域重磅好文,涉及一線互聯網公司應用架構(高可用、高性 能、高穩定)、大資料、機器學習等各個熱門領域,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/39847.html
標籤:架構設計

