後臺開發技術(1)--概述

說到後臺開發,首選就有一個問題:什麼是後臺開發。就我理解,就是作服務器端開發。在服務器端運行着不一樣功能的服務,有直接與客戶端鏈接的,有實現某一特定業務的好比用戶註冊登陸,有數據存儲的如基於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.瞭解操做系統內存操做機制,熟悉內存分配算法,能夠根據須要本身設計內存分配算法變體。

網絡:

  1. 精通Socket網絡編程,對TCP/IP協議要很是熟悉。
  2. 熟悉經常使用的應層協議如http, ftp, smpt, pop3。
  3. 可以根據須要設計專用應用層協議。
  4. 可以根據業務場景調整操做系統或開源工具的的網絡參數。
  5. 可以根據產品運行的局域網和廣域網環境優化接入機制。

併發:

  1. 熟練應用操做系統提供的進程間通訊機制。
  2. 清楚地知道多線程與多進程成各自的優缺點以及它們的應用場景。
  3. 數據併發訪問機制。
  4. 無鎖編程技術。
  5. 併發設計模式。
  6. 同步異步程序設計,瞭解他們的優缺點,根據具體場景靈活使用。

分佈式:

  1. 數據同步的算法。
  2. 數據/服務分片算法。
  3. 負載均衡的設計方案。
  4. 客戶端接入設計。
  5. 可用性設計。
  6. 擴展性設計。

數據存儲:

  1. mysql數據庫運行機制,清楚各類存儲引擎的特色
  2. 瞭解mysql的索引設計機制,知道基本的優化方法。
  3. 可以使用各類nosql數據庫。
  4. 數據主備方案設計
  5. 數據cache設計

安全:

  1. 對稱加密算法,非對稱加密算法,摘要算法。
  2. SQL注入,跨站攻擊,內存溢出防範方法。
  3. 瞭解https原理,可以根據狀況設計安全方案。
  4. 容錯設計。
  5. 容災設計。

故障定位:

靜態代碼分析工具

運行時故障定位工具top,free,iostat,mpstat,

相關文章
相關標籤/搜索