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

淵渟嶽發表於2021-12-24

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

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

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

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

原圖地址:https://www.processon.com/view/61399bb0e401fd1fb6b5a651

從程式設計師的視角到大型分散式架構師的視角來看……

1.懵懵懂懂的我

    我剛開始學習Java程式設計時,只知道寫下簡單的格式化輸出語句,在開發工具列印出來;簡單讀寫檔案資料;後來開始接觸資料庫,學習JDBC,學會了簡單的增刪改查;接著學前端三劍客,學習jsp,學會了寫個簡單的頁面。到這裡就經歷了,普通jar應用到web應用。但當時的我一臉懵逼,根本不知道自己能幹什麼,甚至連開發web應用是用HTML+ajax開發還是用jsp+ajax來開發,因為我當初不知道動態頁面和靜態頁面的區別。

    因為蒙圈,所以學習。為了更好更快的開發,我開始接觸框架、接觸MVC三層架構、接觸JQuery。應用和資料庫互動不用自己封裝JDBC了、有了規範寫起來不亂套了、不在需要寫原生js那麼枯燥了。當時也是懵懵懂懂,知道怎麼用,不知道自己技術位於哪裡,也不知道該如何成長。

    後來接觸Spring,當時SpringBoot還不流行,但用著非常流行的一套框架SSM(Spring,SpringMVC,MyBatis)整個專案都簡單起來開發也迅速,copy配置檔案配置下就可以用起來。但當時前端還是用著jsp,el表示式,ajax。此時的系統還是個普通的JavaWeb專案。當初做個管理系統還是可以用的,哈哈哈。後面學習了tomcat、linux前端框架bootstrap、easyUI、maven,接觸了前後端分離。

    SpringBoot 2.0釋出後,才開始使用SpringBoot開發。前端框架vue 逐漸流行起來,也開始學習vue,學習前端新的ui框架如:elementui。學習前後端分離部署,前端編譯打包部署於nginx,後端編譯打包內建tomcat部署。

總結

    技術學到這裡,掌握了jar應用、一體化web和前後端分離web的開發,但依舊是個單機專案,整體來說就前端、後端和資料庫,位於微服務系統中“紅色框”。

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

    ​雖是滄海一粟,卻是根牢蒂固。這只是基礎的業務程式碼,也是很多程式設計師所做的工作。

    ​在此需要領悟一點:在大型分散式架構平臺下,程式設計師使用平臺中不同的技術開發出解決不斷增長業務的應用。

2.刻苦修煉成為強者

為了應對各種複雜的業務,需要不斷學習各種新技術。接下來將逐一簡述常用技術。

2.1.任務排程技術

    也稱為定時任務,定時的執行一些程式來完成業務所需功能。如:定時日終對賬。

常用任務排程技術

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

2.2.快取技術

    ​快取說白了就是面向記憶體運算元據,讀寫速度很快,也支援快取資料持久化的檔案中。在此重點講解技術的使用場景,以代表性的快取技術Redis為例,常用場景有:熱點資料快取,資料共享,分散式鎖,全域性ID,購物車等等。

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

2.3.訊息佇列技術

    ​常用訊息佇列RabbitMQ、RocketMQ、Kafka。如:對日誌收集和資料收集場景則使用Kafka。常見應用場景如圖

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

2.4.檔案儲存技術

    ​主要用於儲存業務資料檔案和檔案傳輸,可以在儲存上做修改操作,檔案儲存的樹狀結構及路徑訪問方式雖然方便使用者理解、記憶和訪問。如:某些業務互動需要通過ftp檔案傳輸來完成。

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

2.5.物件儲存技術

    ​主要用於儲存不在儲存上做修改的資料。方便計算機軟體訪問檔案儲存系統。如:圖片,視訊等。

 關於怎麼選擇檔案儲存還是物件儲存,主要看是否需要支援在儲存裝置上修改資料,像圖片這種資料就不需要在儲存裝置上直接修改資料。非常重要的一點:物件儲存的資料都是整個資料取出來,修改,再放回去的模式,不支援直接在儲存上修改。

    ​技術方案:MinIO

    ​Minio 是個基於 Golang 編寫的開源物件儲存套件,基於Apache License v2.0開源協議,擁有著高效能、可擴充套件、支援雲原生、相容亞馬遜S3雲端儲存服務介面等優點。

2.6.搜尋引擎技術

主要用於資料快速檢索。

技術方案:Elasticsearch、Solr

常用使用場景:

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

2.7.資料庫分庫分表技術

    ​如果還是使用以往方式,則查詢一個表資料需要多次訪問不同的庫來實現資料的查詢。資料庫分庫分表後需要引入新的技術來方便資料的操作。有兩種方案:客戶端方案和中介軟體(中間層)方案

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

    ​Sharding-JDBC客戶端方案就是引入新的jar,通過客戶端來訪問資料庫,無代理層,無需更改部署架構;

    ​MyCat 中介軟體方案就是新增一層代理,通過代理來訪問資料庫,後端無程式碼入侵,直接訪問代理層。

2.8.叢集技術

    ​有的中介軟體天然支援叢集,而有的則需要自己搭建叢集部署環境。

常用的軟體負載均衡技術組合:

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

三者都是採用反向代理來實現負載均衡。

    ​nginx 使用更加廣泛,不僅可以用於搭建負載均衡,還可以用於部署前端系統,nginx支援更高的併發、對傳輸檔案進行壓縮傳輸等功能。

2.9.內網私庫

    有的公司只能使用內網開發自研了框架技術,這時使用外網的庫(maven庫、Gradle庫或npm庫)都是無法解決該問題的,此時必須公司搭建私庫統一提供服務,自研框架上傳到私庫或內網服務構建環境走內網私庫。

    使用Nexus 技術來搭建私庫,支援Maven倉庫、Gradle倉庫和npm倉庫。

總結

    第2大點主要講了常用中介軟體技術。到此為止常用開發技術基本都有接觸到了(框起來的紅色部分)。學習到這個水平也已經非常不錯了,不要整天一上來就學習什麼電商系統、搞一整套微服務架構這些東西,把這些技術學紮實才是王道。

    在這裡多嘮叨幾句,微服務治理架構的搭建並不會提高你的程式設計能力,能接觸到生產環境微服務架構搭建落地的又有多少呢?說白了搭建這些的意義是什麼呢?最終不都是服務於業務嗎?業務的不斷增長,系統不斷的越來越繁雜,開發和維護都變得越來越複雜,才需要搭建治理環境來更好的開發部署,監控運維。宗旨,要在基礎打牢後再學習服務治理相關技術。

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

在第二篇繼續解說:分散式服務治理方案、DevOps(開發運維一體化)、大資料接入、內網DNS等等

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

 轉載請指名出處!!!

相關文章