寫這篇文章為了更清楚自己技術能力,同時分享給大夥,看看自己技術水平位於哪裡。
個人能力有限,基於我所理解的知識來講解一下:從程式設計師到大型分散式架構師,我們自己到底位於哪裡。
描述不當之處還請各路大佬點明,老弟也好更上一層樓!!!
本人就以之前畫的微服務系統架構圖來逐一講解。
原圖地址: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等等。
轉載請指名出處!!!