1、什么是后端?
后端開發人員從事于構建Web應用程序背后的實際邏輯,負責通過API向前端或者其他系統提供其他需要的信息,如:數據。
實際上,開發web應用中對用戶不可見的部分,稱為web后端,也就是后端工作。
簡單來說,在應用程序或網站的屏幕上看不到的所有東西都是前端的后端。
如:核心業務邏輯、數據庫等等。
后端開發壓力通常比前端的大,因為后端是web應用的“靈魂”,它影響web前端的方方面面,除了業務邏輯以外,還需要考慮安全性、穩定性、可維護性、可拓展性、伸縮問題等等。
2、定義
后端開發(Back-End Development,也稱服務端開發、服務器端開發等)是創建完整可運行的Web應用服務端程序(服務端程序和資源合稱為后端,即在服務器上運行的、不涉及用戶界面的部分)的過程,是Web應用程序開發的一部分。
后端開發者使用Java、Golang等語言及其衍生的各種框架、庫和解決方案來實現Web應用程序的核心業務邏輯,并向外提供特定的API,使得Web應用能夠高效、安全、穩定地運行。
3、具體職責
-->實現Web應用程序的實際業務邏輯。
即:實現Web應用程序的具體功能(如注冊、發表和查詢信息等)或Web應用程序在服務端執行的具體操作。
后端開發這項工作的主要內容。
-->使用API和創建API。
后端需要向前端提供前端所需的數據,也需要使用第三方API來完成業務邏輯(如完成某個功能需要通過API調用其他應用、在使用框架進行開發時需要使用語言和框架的API、操作數據庫時需要使用數據庫或ORM框架的API等)。
因為在后端開發的過程中經常需要與API打交道,所以有人也把后端開發稱為“API開發”,就像有些人將前端稱為“GUI開發”一樣。
-->優化。
在用戶量達到一定程度后,就會出現諸如響應慢等各種問題(加載很慢,比如學習搶課總是系統會慢半拍);同時,隨著代碼行數的增多,許多架構上的缺陷可能也會隨之暴露出來,如代碼邏輯混亂、模塊劃分不正確等。
此時就需要后端開發人員對Web應用程序進行優化,如重構、分布式部署、優化業務邏輯、單體應用拆分成微服務等。
-->架構設計。
雖然一般只有高級的后端開發人員和架構師才需要關注架構問題,但是架構設計是后端開發中非常重要的一環,因為它決定了如何組織代碼、某個模塊負責解決什么樣的問題、系統的擴展性和可維護性如何、業務邏輯如何進行組織等,也會一定程度上影響到業務邏輯的具體實現(比如微服務和單體架構這兩種架構下,同一種業務邏輯的實現可能完全不同)。
?
3、特點
1、后端是工作在服務器上的,負責通過API向前端或其他系統提供其所需的信息(如數據等)。
2、后端開發實際上是開發Web應用中對用戶不可見的部分(如核心業務邏輯、數據庫等),大多數的后端開發都是不涉及用戶界面的(除了在前后端不分離的架構中將前端的靜態頁面通過模板引擎改造成動態頁面時)。
通常情況下,一個Web應用的絕大多數代碼都屬于后端代碼,因為后端承擔了Web應用實際的業務邏輯。
3、后端開發的壓力通常比前端開發要大,因為后端是Web應用的“靈魂”,它影響著Web應用的方方面面,除了業務邏輯之外還需要考慮安全性、穩定性、可維護性、可擴展性、伸縮性等問題。
?
4、技術
程序設計語言
許多語言都可以用于后端開發,比較流行的是Java和Go。
例如我所使用的就是Go語言,也曾經使用過Java。此外,由于后端開發中經常需要和數據庫打交道,所以作為后端開發者,還需要懂SQL語言(如果使用了NoSQL的話,也需要懂NoSQL數據庫的語言)。
數據庫
數據庫作為一種簡單易用的持久化機制,可以讓用戶的信息不因為斷電等故障而丟失,Web應用開發中經常需要用到數據庫,甚至許多簡單的Web應用本質上都只是“數據庫的可視化系統”,也因為絕大多數簡單的業務邏輯本質上都只是對數據庫的增刪改查(即CRUD)。
框架、庫和解決方案
想要高效率地開發Web應用,框架、庫和解決方案是必不可少的,比如MVC框架、ORM框架、RPC框架、微服務開發框架、云基礎設施(如Service Mesh、容器編排工具等)、運行時環境/容器(如Docker)、消息隊列(Message Queue,MQ)、日志收集和分析工具等;這部分有一些框架是可以跨語言通用的,比如gRPC(RPC框架)、Istio(Service Mesh),也有一些是某種語言專用的,如Spring Cloud(微服務開發工具,JVM技術棧專用)、Gin(MVC框架,Go語言專用)。
架構和指導思想
架構是后端開發中非常重要的一部分,作為一名后端開發者需要了解常見的架構,如三層架構、SOA、微服務架構、六邊形架構等,還需要了解常用于后端開發中的指導思想,如設計模式、MVC模式、DDD、CQRS/ES等。
包管理工具/項目管理工具
因為后端開發中經常要用到各種框架和庫,所以用于管理這些框架和庫的管理工具是非常重要的。每一門語言都有自己的包管理工具,如Java的Maven,Go語言的go mod等;
基礎知識。不管是前端開發還是后端開發,都需要對操作系統、計算機網絡、數據結構等基礎知識有一定了解,還需要了解對應語言的編碼規范、重構等知識,這可以幫助你理解框架和庫,也能幫助你寫出更高質量的代碼。
開發方法
實際上這個也可以說是屬于指導思想的一部分,包括CI/CD、敏捷開發、DevOps等;
版本管理工具。相信我,幾乎沒有人能離開這玩意。最常用的是Git。
5、
后端開發是一個非常綜合的領域,既有非常抽象的架構和指導思想,又有具體的解決方案和業務邏輯,還涉及到許多計算機底層問題(如多線程、網絡、I/O等)。
后端開發的技術含量實際上是非常高的,也非常有意思,充滿了未知與挑戰。
像微服務、云原生、DDD、CQRS/ES、高并發、負載均衡、緩存、消息隊列、多線程、微服務監控、Service Mesh等技術,每一項都值得我們去研究,而這些技術中有很多都是在大型Web應用中被頻繁使用的,如果你真正了解后端開發的話,是絕無可能說出“后端開發很枯燥”這樣的話的。
請記住,并不是不涉及界面的工作就一定很枯燥。
后端開發實際上比前端開發更需要細心。就如前文所述,后端是Web應用程序的“靈魂”,后端開發中的許多問題都決定著Web應用的“生死存亡”,尤其是數據校驗、多線程/多進程、鎖、異步編程、事務/分布式事務、與第三方系統的交互等,這些問題有非常非常多的細節,且既復雜又非常重要,一旦在細節上出現問題(如數據校驗不完全或加鎖解鎖的邏輯出現錯誤),輕則出現錯誤的數據或業務邏輯不能正常運行,重則直接導致整個Web應用掛掉或出現安全問題(如數據校驗不完全導致的文件上傳漏洞、函數使用錯誤導致的遠程命令執行漏洞等)。所以如果你想從事后端開發,那足夠細心絕對是一個必要的條件。
與前端開發是“寫代碼給人看”的不同,后端開發是“寫代碼給服務器看”(或者說給前端/第三方系統看)的。雖然這兩個說法都不太嚴謹,但是后端開發更多的就是與服務器打交道(如降低資源使用率、提高Web應用程序的運行效率等等),而不是與人打交道(如提高頁面的美觀程度、思考用戶的使用邏輯和心理等等)。
前端的邏輯更多的是交互邏輯,如點擊某個按鈕應該彈出什么窗口、怎么把數據渲染成用戶想要看到的頁面等,而后端的邏輯更多的是實際的業務邏輯,如完成某個功能需要怎樣做、請求某個API應該返回什么樣的數據等。
后端看似簡單,實際上技術含量是非常高的。就如前面所說,現在的后端可不僅僅是CRUD,而是隨著互聯網和云計算技術的發展而不斷改變,Web應用程序在需求不斷變化的過程中功能變得越來越強,架構變得越來越復雜,對性能的考驗也越來越嚴峻,技術含量自然也就越來越高。作為一名后端開發工程師,需要有不斷學習新技術的覺悟,還需要有一定的自學能力,因為不是什么技術都有人教你的,在學習和使用最新技術時對著英文文檔啃是常有的事。
對系統的基礎設施(如框架、庫和解決方案等)感興趣的人。據我所知,許多在云原生方面有深刻造詣的大佬都是從后端開發者成長起來的,許多框架的作者曾經也是后端開發者。如果你碰巧像我一樣對框架、庫和解決方案(如Spring Boot、Spring Cloud、Gin、Kubernetes、Istio等)十分感興趣,那么可以從成為一名后端開發者開始,在編寫業務代碼的過程中慢慢體會框架的重要性和所用框架的優缺點,以及如何設計一個好的框架。