後端程式設計師都做些什麼?
小夥伴們注意了!
小編在這裡給大家送上關注福利:
搜尋微信公眾號“速學Java”關注即可領取小編精心準備的資料一份!
後端程式設計師都做些什麼?相信很多小夥伴都會有這樣的問題,那麼我們就來一起看一下吧!
剛開始做Web開發的時候,根本沒有前端,後端之說。
原因很簡單,那個時候伺服器端的程式碼就是一切: 接受瀏覽器的請求,實現業務邏輯,訪問資料庫,用JSP生成HTML,然後傳送給瀏覽器。
即使後來 JavaScript 在瀏覽器中添加了一些 AJAX 的效果,那也是錦上添花 ,絕對不敢造次。因為頁面的 HTML 主要還是用所謂“套模板”的方式生成 : 美工生成HTML模板,程式設計師用 JSP,Veloctiy,FreeMaker 等技術把動態的內容新增上去,僅此而已。

那個時候最流行的圖是這個樣子
在最初的 J2EE 體系中,這個表示層可不僅僅是瀏覽器中執行的頁面,還包括Java 寫的桌面端,只是 Java 在桌面端太不爭氣, 沒有發展起來。
每個程式設計師都是所謂 “全棧”工程師 ,不僅要搞定 HTML, JavaScript, CSS ,還要實現業務邏輯,編寫訪問資料庫的程式碼。等到部署的時候,就把所有的程式碼打成一個 WAR 包,往 Tomcat 指定的目錄一扔,測試一下沒問題,收工回家!
不差錢的公司會把程式部署到 Weblogic,Websphere 這樣的應用伺服器中,還會用上高大上的 EJB。
雖然看起來生活“簡單”又“愜意”,但實際上也需要實現那些多變的、不講邏輯的業務需求,苦逼的本質並沒有改變。
前後端的分離
隨著大家對瀏覽器頁面的視覺和互動要求越來越高,“套模板”的方式漸漸無法滿足要求,這個所謂的表示層慢慢地遷移到瀏覽器當中去了,一大批像Angular , ReactJS 之類的框架崛起,前後端分離了!
後端的工程師只負責提供介面和資料,專注於業務邏輯的實現,前端取到資料後在瀏覽器中展示,各司其職。
像 Java 這樣的語言很適合去實現複雜的業務邏輯,尤其是一些 MIS 系統,行業軟體如稅務、電力、菸草、金融,通 信等等。 所以剝離表示層,只做後端挺合適的。
但是如果僅僅是實現業務邏輯,那後端也不會需要這麼多技術了,搞定SSH/SSM 就行了。
後端技術
網際網路,尤其是移動網際網路開始興起以後,海量的使用者呼嘯而來,一個單機部署的小小 War 包肯定是撐不住了,必須得做 分散式 。
原來的單個 Tomcat 得變成 Tomcat 的叢集,前邊弄個 Web 伺服器做請求的負載均衡,不僅如此,還得考慮狀態問題,session 的一致性。
業務越來越複雜,我們不得不把某些業務放到一個機器(或叢集)上,把另外一部分業務放到另外一個機器(或叢集)上 ,雖然系統的計算能力,處理能力大大增強,但是這些系統之間的通訊就變成了頭疼的問題, 訊息佇列 (MQ),RPC框架 (如 Dubbo) 應運而生,為了提高通訊效率,各種序列化的工具 (如Protobuf) 也爭先空後地問世。
單個數據庫也撐不住了,那就做 資料庫的讀寫分離 ,如果 還不行,就做分庫和分表 ,把原有的資料庫垂直地切一切,或者水平地切一切, 但不管怎麼切,都會讓應用程式的訪問非常麻煩,因為資料要跨庫做 Join/排序,還需要事務, 為了解決這個問題,又有各種各樣“資料訪問中介軟體”的工具和產品誕生。
為了最大程度地提高效能,快取肯定少不了,可以在 本機做快取 (如Ehcache) ,也可以做分散式快取 (如Redis), 如何搞資料分片,資料遷移,失效轉移, 這又是一個超級大的主題了。
網際網路使用者喜歡上傳圖片和檔案,還得搞一個 分散式的檔案系統(如FastDFS),要求高可用,高可靠。
資料量大了,搜尋的需求就自然而然地浮出水面,你得弄一個 支援全文索引的搜尋引擎 (如Elasticsearch ,Solr) 出來。
林子大了,什麼鳥都有,必須得 考慮安全,資料的加密/解密,簽名、證書,防止SQL注入,XSS/CSRF 等各種攻擊 。
“大後端”
前面提到了這麼多的系統,還都是分散式的,每次上線,運維的同學說:把這麼多系統協調好,把老子都累死了。
得把持續整合做好,能自動化地部署,自動化測試(其實前端也是如此),後來出現了一個革命化的技術 docker , 能夠 讓開發、測試、生成環境保持一致, 系統原來只是在環境(如Ngnix, JVM,Tomcat,MySQL等)上部署程式碼,現在把程式碼和環境一併打包, 運維的工作一下子就簡化了。
公司自己購買伺服器比較貴,維護也很麻煩,又難於彈性地增長,那就搞點虛擬的伺服器吧,硬碟、記憶體都可以動態擴充套件(反正是虛擬的), 訪問量大的時候多用點,沒啥訪問量了就釋放一點,按需分配,很方便,這就是 雲端計算的一個場景。
隨著時間的推移,各個公司和系統收集的資料越來越多,都堆成一座大山了,難道就放在那裡白白地浪費硬碟空間嗎?
有人就驚奇地發現,咦,我們利用這些資料搞點事情啊, 比如 把資料好好分析一下,預測一下這個使用者的購買/閱讀/瀏覽習慣,給他推薦一點東西 嘛。
可是這麼多資料,用傳統的方式計算好幾天甚至好幾個月才能出個結果,到時候黃花菜都涼了,所以也得利用 分散式 的技術,想辦法把計算分到各個計算機去,然後再把計算結果收回來, 時勢造英雄, Hadoop 及其生態系統 就應運而生了。
之前聽說過一個大前端的概念, 把移動端和網頁端都歸結為“前端” ,我這裡造個詞“大後端”
,把那些使用者直接接觸不到的、發生在伺服器端的都歸結進來。
怎麼學?
現在無論是前端還是後端,技術領域多如牛毛,都嚴重地細分了,所以我認為真正的全棧工程師根本不存在,因為一個人精力有限,不可能搞定這麼多技術領域,太難了。那麼問題來了, 後端這麼多東西,我該怎麼學?
往深度挖掘,可以成為某個技術領域的專家,如搜尋方面的專家、安全方面的專家,分散式檔案的專家等等 ,不管是哪個領域,重點都不是學會使用某個工具和框架, 而是保證你可以自己的知識和技術去搞定這個領域的頂尖問題。
往廣度發展,各個技術領域都要了解,對於某種需求,能夠選取合適的軟體和技術架構來實現它. 把需求轉化成合適的技術元件,讓這些元件以合適的方式連線、部署、執行,這也需要持續地學習和不斷的經驗積累。
最後,以一張漫畫來結束吧!

最後,想學習Java的小夥伴們!
關注“速學java”公眾號就可以拿到一份我為大家準備的Java學習資料!
對Java感興趣的小夥伴也可以加 小編V❤: suxuejava
