樓主剛開始學Web開發的時候,根本沒有前端,後端之說。前端
緣由很簡單,那個時候服務器端的代碼就是一切:接受瀏覽器的請求,實現業務邏輯,訪問數據庫,用JSP生成HTML,而後發送給瀏覽器。程序員
即便後來Javascript在瀏覽器中添加了一些AJAX的效果,那也是錦上添花,由於頁面的HTML主要仍是用所謂「套模板」的方式生成:美工生成HTML模板,程序員用JSP,JS,EL表達式等方式技術把動態的內容添加上去,僅此而已。docker
課上最流行的圖是這個樣子:(圖很吃藕)數據庫
在最初的J2EE體系中,這個表示層可不只僅是瀏覽器中運行的頁面,還包括Java寫的桌面端,只是Java在桌面端太TM吃藕, 沒有發展起來。後端
每一個程序員都是所謂「全棧」工程師,不只要搞定HTML, JavaScript, CSS,還要實現業務邏輯,編寫訪問數據庫的代碼。等到部署的時候,就把全部的代碼打成一個WAR包,往Tomcat指定的目錄一扔,測試一下沒問題,收工!瀏覽器
雖然看起來生活「簡單」又「愜意」,但實際上也須要實現那些多變的、不講邏輯的業務需求,苦逼的本質並無改變。緩存
START安全
1先後端的分離服務器
隨着你們對瀏覽器頁面的視覺和交互要求愈來愈高,「套模板」的方式漸漸沒法知足要求,這個所謂的表示層慢慢地遷移到瀏覽器當中去了,一大批像Vue.js,Angular, React.js,Node.js之類的框架崛起,先後端分離了!session
後端的工程師只負責提供接口和數據,專一於業務邏輯的實現,前端取到數據後在瀏覽器中展現,各司其職。
像Java這樣的語言很適合去實現複雜的業務邏輯,尤爲是一些MIS系統,行業軟件如稅務、倉儲、菸草、金融,汽車,通訊等等。 因此剝離表示層,只作後端挺合適的。
可是若是僅僅是實現業務邏輯,那後端也不會須要這麼多技術了,搞定SSH/SSM就好了。
2後端技術
互聯網,尤爲是移動互聯網開始興起之後,海量的用戶呼嘯而來,一個單機部署的小小War包確定是撐不住了,必須得作分佈式。
原來的單個Tomcat得變成Tomcat的集羣,前邊弄個Web服務器作請求的負載均衡,不只如此,還得考慮狀態問題,session的一致性。
業務愈來愈複雜,咱們不得不把某些業務放到一個機器(或集羣)上,把另一部分業務放到另一個機器(或集羣)上,雖然系統的計算能力,處理能力大大加強,可是這些系統之間的通訊就變成了頭疼的問題,消息隊列(MQ),RPC框架(如Dubbo)應運而生,爲了提升通訊效率,各類序列化的工具(如Protobuf)也爭先空後地問世。
單個數據庫也撐不住了,那就作數據庫的讀寫分離,若是還不行,就作分庫和分表,把原有的數據庫垂直地切一切,或者水平地切一切, 但無論怎麼切,都會讓應用程序的訪問很是麻煩,由於數據要跨庫作Join/排序,還須要事務,爲了解決這個問題,又有各類各樣「數據訪問中間件」的工具和產品誕生。
爲了最大程度地提升性能,緩存確定少不了,能夠在本機作緩存(如Ehcache),也能夠作分佈式緩存(如Redis),如何搞數據分片,數據遷移,失效轉移,這又是一個超級大的主題了。
互聯網用戶喜歡上傳圖片和文件,還得搞一個分佈式的文件系統(如FastDFS),要求高可用,高效率。
數據量大了,搜索的需求就天然而然地浮出水面,你得弄一個支持全文索引的搜索引擎(如Elasticsearch ,Solr)出來。
林子大了,什麼鳥都有,必須得考慮安全,數據的加密/解密,簽名、證書,防止SQL注入,XSS/CSRF等各類攻擊。
3大後端
前面提到了這麼多的系統,還都是分佈式的,每次上線,運維的同窗說:把這麼多系統協調好,把老子都累死了。
得把持續集成作好,能自動化地部署,自動化測試(其實前端也是如此),後來出現了一個革命化的技術docker, 可以讓開發、測試、生成環境保持一致,系統原來只是在環境(如Ngnix, JVM,Tomcat,MySQL等)上部署代碼,如今把代碼和環境一併打包, 運維的工做一會兒就簡化了。
公司本身購買服務器比較貴,維護也很麻煩,又難於彈性地增加,那就搞點虛擬的服務器吧,硬盤、內存均可以動態擴展(反正是虛擬的), 訪問量大的時候多用點,沒啥訪問量了就釋放一點,按需分配,很方便,這就是雲計算的一個場景。
隨着時間的推移,各個公司和系統收集的數據愈來愈多,都堆成一座大山了,難道就放在那裏白白地浪費硬盤空間嗎?
有人就驚奇地發現,咦,咱們利用這些數據搞點事情啊, 好比把數據好好分析一下,預測一下這個用戶的購買/閱讀/瀏覽習慣,給他推薦一點東西嘛。
但是這麼多數據,用傳統的方式計算好幾天甚至好幾個月才能出個結果,到時候黃花菜都涼了,因此也得利用分佈式的技術,想辦法把計算分到各個計算機去,而後再把計算結果收回來, 時勢造英雄,Hadoop,hbase、hive、sqoop,Spark,Zookeeper、Kafka就應運而生了。
後來大數據被分析完以後呢,以爲已經沒有什麼意思,就漸漸的投向了人工智能,人工智能是一大塊,那麼爲何須要人工智能,目的爲了代替人重複的繁瑣工做,應用例如
在後來出現了區塊鏈技術,是一種去中心化的信任機制,這裏用到Go語言了,這裏講述的主要仍是後端,就不深刻了
END