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