說到後臺開發,首選就有一個問題:什麼是後臺開發。就我理解,就是作服務器端開發。在服務器端運行着不一樣功能的服務,有直接與客戶端鏈接的,有實現某一特定業務的好比用戶註冊登陸,有數據存儲的如基於mysql,memcached,redis等作的存儲系統,除此以外還有一些知足運維監控系統,運營統計系統等。mysql
那麼後臺開發須要哪些技術呢?回答這個問題以前先來看看通常的後臺系統架構,以下圖所示:ios
後臺系統通常分爲接入層,業務邏輯層和數據存儲層,它們各自有不一樣的職責:redis
接入層主要負責客戶端接入把用戶請求分發到業務邏輯層,客戶端不管是什麼是瀏覽器仍是APP類型的首先都要鏈接到接入層,任何請求都是經過接入層轉發,客戶端不用戶關心功能具體有哪一個服務實現的。接入層主要解決跟用戶的鏈接問題。算法
業務邏輯層負責實現具體的業務功能,知足業務需求。好比在微信中你輸入手機號碼和登錄密碼進入微信,跟好友聊天發消息都是業務層中不一樣的業務模塊完成的。從產品的角度看它是整個後臺的核心,不管是接入層仍是數據存儲層都是爲它作支撐的。sql
數據存儲層負責保存業務所需的數據,提供業務數據的讀寫支撐。數據庫
後臺系統的三層架構須要根據具體狀況動態調整,而不是一成不變的。具體須要怎樣調整須要看具體的業務場景。首先要分析出系統的瓶頸在哪裏,重點投入提升供瓶頸,其餘地方則能夠作的粗糙一些,樣能夠避免過分設計,提升效率。編程
好比開發一個新的產品時,這個產品是沒什麼用戶的,可能就有幾百個種子用戶。功能上也不知道用戶喜歡什麼功能。這個時候基本沒什麼瓶頸的,這個時候就要遵循簡單原則,架構上儘量精簡,只作最核心的一些功能,目的是要儘快上線驗證。這個時候接入層和業務邏輯層能夠合併,直連數據庫就好了。設計模式
隨着用戶量增長,產品功能愈來愈複雜,就會遇到第一個瓶頸,不一樣的業務場景瓶頸也不一樣。好比視頻的瓶頸通常在網卡I/O上,實時語音瓶頸通常在接入層上,電商類網站瓶頸通常在圖片存儲上即磁盤I/O,須要加密壓縮的瓶頸通常在CPU上。數組
分析瓶頸並優化是後臺開發的核心能力,它須要如下幾個方面的技術支撐:瀏覽器
基礎:
1.服務器硬件硬件的性能,網卡性能,磁盤I/O性能,CUP性能。
2.經常使用系統調用和庫函數的性能,如read,write, memcpy,gettimeofday。
3.經常使用戶數據結構和算法的性能,如數組,隊列,二叉樹,hash表。
4.瞭解操做系統內存操做機制,熟悉內存分配算法,能夠根據須要本身設計內存分配算法變體。
網絡:
併發:
分佈式:
數據存儲:
安全:
故障定位:
靜態代碼分析工具
運行時故障定位工具top,free,iostat,mpstat,