從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

淵渟嶽發表於2021-12-28

寫這篇文章為了更清楚自己技術能力,同時分享給大夥,看看自己技術水平位於哪裡。

個人能力有限,基於我所理解的知識來講解一下:從程式設計師到大型分散式架構師,我們自己到底位於哪裡。

描述不當之處還請各路大佬點明,老弟也好更上一層樓!!!

本人就以之前畫的微服務系統架構圖來逐一講解。

上一篇講述了:Java程式設計師刻苦修煉 鍛造基礎

    從程式設計師到大型分散式架構師,自己到底位於哪裡(一)

這一篇接著講述……

1.分散式服務治理方案

1.1.簡述幾個名詞

什麼是服務治理

    反過來讀一下:治理服務。分散式服務治理方案就是通過什麼方案來治理分散式的服務。強調的還是“服務”,所以治理的前提是有錯綜複雜的業務服務,才需要整這麼一套方案去解決這問題。

分散式架構是什麼?

    一整套的分散式架構的搭建就像建造一個自動化生產車間。新增的“業務系統N”部署到這個大家庭便會擁有架構中一整套的能力(服務治理能力、自動化能力、大資料能力等等)。

應用上雲和分散式架構

    在這幾年經常會聽到或談到“上雲”這個詞語,“應用上雲”和“分散式架構”這兩者乍眼一看兩者沒啥關係,其實關係大得很。就以阿里云為例:你將新增的“業務系統N”部署到阿里雲,需要什麼能力的服務是不是用錢買就行啦?或者直接搞個“行業解決方案”。這種第三方雲又稱為公有云;有“公”就有“私”,私有云就是企業自個獨有的雲;兩者一混就變成了混合雲。雲可以看作是完整的一套分散式架構+基礎設施。怎麼上雲,先申請資源(軟體資源、硬體資源和網路資源),再將業務服務部署到這分散式架構中,從而實現所有資源可插拔和服務的統一管理,這就是為什麼現在都喜歡搞“上雲”的原因之一。

本文是為讀者做定位和後續學習有目標,在此不展開太多。

1.2.技術實現方案

常用的兩種分散式服務治理方案:RESTful 和 RPC 分散式服務治理方案。

兩者最本質的區別

    RESTful 強調一切都看作資源,對資源進行操作;

    RPC 是遠端過程呼叫,強調的是客戶端和服務端的互動。

RESTful分散式服務治理技術方案

技術實現方案:SpringCloud

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

RPC分散式服務治理技術方案

技術實現方案:Dubbo + Zookeeper

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

兩種方案中都沒有提供一套完整的服務治理技術實現,還需加入鏈路追蹤技術、監控告警系統、日誌分析系統等​。

鏈路追蹤系統

在分散式環境中一個業務處理涉及多個服務間的呼叫,傳統方式通過系統日誌很難做到故障問題快速定位,而通過鏈路追蹤可以實現故障快速定位。鏈路追蹤系統除了故障快速定位功能,還有視覺化(如效能指標)、依賴優化(梳理服務依賴關係以及優化)、資料分析(如使用者的行為路徑,彙總分析應用在很多業務場景)。

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

監控告警系統

​一般監控有流量監控、異常監控、資源使用率、請求延遲等。當監控的資料超過指定範圍,就會通過郵件或電話進行告警通知,也可以在視覺化平臺檢視監控資料,收到告警通知的人員便會去處理相應問題。

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

日誌分析系統

日誌分析是運維工程師解決系統故障,發現問題的主要手段。

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

 

服務治理技術包含在紅色框中

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

2.DevOps(開發運維一體化)

為了高可用,將業務服務叢集化是一件很正常的事,但每次都要改動都要部署到不同的幾臺伺服器,做著重複的工作而且很有可能出錯,一次改動一天部署完成算是很順利的事了。是不是很想要有自動化部署這種東西呢?其實自動化在很多行業早就有了,現在很多行業都已邁入智慧化時代了。

DevOps開發運維一體化並不是讓開發去做運維,而是使開發和運維通過一些機制有機結合、高效統一,成為一個整體,從而消除開發團隊和運維團隊之間的隔閡,有效提升應用服務的研發和運維運營效率。

關鍵技術

  1. kubernetes(自動化運維平臺)-- 平臺

  2. Jenkins Pipeline(流水線)  -- 流水線

  3. docker(容器)  -- 包裹

主要涉及兩種角色:開發人員(developer)和 運維人員(Operation)

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)  &  從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

兩者的隔閡其實是通過容器化部署方式來解決,運維人員只需要知道容器映象怎麼部署即可,不需要知道其中的細節。

持續整合(CI):從程式設計師提交程式碼到自動打包生成docker映象,並部署到指定測試環境

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

持續交付和部署(CD):測試通過後,運維人員將docker映象部署到生成環境

整個流程都可以在k8s平臺中看到,並且支援專案部署的回滾操作,更多細節就不一一展開。

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

 

3.大資料接入

經常會聽到大資料“殺熟”,同一個平臺殺熟就算了,跨各大平臺殺熟就很讓人惱火。比如:我在淘寶或京東搜尋了下運動器材,然後在各種平臺都會收到各式各樣的運動器材推薦。這種智慧推送又被稱為智障推送,比如:我看了某種商品的某種規格後,再次搜尋商品就都是這種規格,其實這不是我想要的結果。大資料是把雙刃劍,搞得好智慧,搞不好智障,甚至觸犯法律條款。

分點簡述

  • 大資料平臺:Hadoop

  • 資料來源:資料庫,快取中介軟體,檔案儲存,資料倉儲等等。

  • 資料採集方式:實時採集 和 離線採集

  • 資料採集技術:kafka,flume,sqoop 等等,不同的資料來源使用不同的採集中介軟體技術

  • 資料儲存技術:Hbase,HDFS 等等

  • 資料處理方式:實時處理 和 離線批量處理,分別對應不同的技術棧

  • 資料服務:提供服務實現價值,如:精準營銷,瀏覽,分析檢索,下載等等

  • 平臺管理技術:Apache Ambari(供應、管理、監控等)和Zookeeper(平臺配置與排程)

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

 

4.其他

4.1.內網DNS

優點:方便記憶和服務遷移IP更換隻需要修改DNS即可;

缺點:DNS服務可能成為效能瓶頸和影響可用性。

4.2.網路區域和出入網控制

業務服務都部署在內網環境,主要原因是安全問題和IP資源問題。

內網環境還可以拆分成多個區域:DMZ區、業務區。DMZ 稱為隔離區,對外對內都有防火牆隔離,隔離外網和內網的一個區域。常用於部署以外網對接的系統服務。內網業務區,顧名思義是部署業務相關的服務。

統一入網:服務部署在內網環境,每個對外提供服務的系統都需要有個入口,為了網路安全和更好管理便有了統一入網,需要提供網際網路服務的系統申請入網資源即可。

統一出網:對於內網系統需要訪問網際網路資源時,則通過統一出網來控制。

4.3.安全技術

網路安全

  • 內網部署,內網專有網路

  • 統一出入網

  • 應用防火牆WAF:免受各種常見攻擊(XSS 攻擊、注入攻擊、DDOS攻擊等)

  • 使用HTTPS

  • 運維人員必須通過內網堡壘機來訪問內網伺服器

等等

編碼安全

  • 瀏覽器Cookie 加密與過期

  • 服務間通訊加密

  • 登入防爆力影像驗證碼等的多種驗證方式(如:郵件或簡訊驗證碼的一次一密)

  • 資料防爬蟲機器人驗證

  • 重要資訊資料脫敏(如:手機號,姓名,證件號,卡號等)

等等

伺服器安全

  • 通過滲透測試確認資料庫、應用等安全性,常用的技術:nmap、burp suite、sqlmap等。

  • 容器部署的安全性

  • 常用中介軟體安全性

等等多種安全技術,從程式碼到整個平臺所涉及之處都要考慮安全問題。

4.6.其他嘮嗑

隨著業務的發展,會持續出現技術問題,業務問題,開發問題,運維問題,業務響應速度等等。避免重複造輪子,需要對通用能力抽離;不同業務不斷髮展形成不同的軟體平臺,平臺間職能邊界劃分問題和資料孤島問題,需要引入領域驅動設計思想和中臺思想來解決相應問題,但專案一開始還是建議使用物件導向軟體設計方法,不要看到到處說DDD就湊熱鬧,領域驅動設計在2014年都出書了也不是什麼新鮮事物,過度設計還不如層次分明更利於開發維護。

閱讀上一篇:從程式設計師到大型分散式架構師,自己到底位於哪裡(一)

從​程式設計師到大型分散式架構師,自己到底位於哪裡(二)

轉載指明出處!!!

相關文章