看透 Spring MVC 源代碼分析與實踐——網站基礎

編程語言 Java DNS Redis 最前沿編程諮詢 最前沿編程諮詢 2017-08-28

網站架構及其演變過程

基礎結構

網絡傳輸分解方式:

  • 標準的 OSI 參考模型

  • TCP/IP 參考模型

看透 Spring MVC 源代碼分析與實踐——網站基礎

OSI-TCPIP

海量數據的解決方案

  • 緩存和頁面靜態化

  • 使用模板技術生成(Velocity、FreeMaker等)

  • 通過程序直接保存在內存中

  • 使用緩存框架 (Encache、Redis、Memcache)

  • 緩存

  • 頁面靜態化

  • 數據庫優化

  • 表結構優化

  • SQL 語句優化

  • 分區

  • 分表

  • 索引優化

  • 使用存儲過程代替直接操作過程

  • 分離活躍數據

  • 批量讀取和延遲修改

  • 讀寫分離

看透 Spring MVC 源代碼分析與實踐——網站基礎

  • read-write

看透 Spring MVC 源代碼分析與實踐——網站基礎

  • sql-1
  • 分佈式數據庫

  • NoSQL 和 Hadoop

高併發的解決方案

  • 應用和靜態資源的分離:靜態文件(圖片、視頻、JS、CSS等)放在專門的服務器上

  • 頁面緩存(Nginx 服務器、Squid 服務器)

  • 集群與分佈式

  • 反向代理

  • CDN

  • 底層優化:網絡傳輸協議

常見協議和標準

TCP/IP 協議

IP:查找地址,對應著國際互聯網

TCP:規範傳輸規則,對應著傳輸層

TCP 在傳輸之前會進行三次溝通,稱 “三次握手”,傳完數據斷開的時候要進行四次溝通,稱 “四次揮手”。

TCP 兩個序號,三個標誌位含義:

  • seq:表示所傳數據的序號。TCP 傳輸時每一個字節都有一個序號,發送數據的時候會將數據的第一個序號發送給對方,接收方會按序號檢查是否接收完整了,如果沒接收完整就需要重新傳送,這樣就可以保證數據的完整性。

  • ack:表示確認號。接收端用它來給發送端反饋已經成功接收到的數據信息,它的值為希望接收的下一個數據包起始序號。

  • ACK:確認位,只有 ACK = 1 的時候 ack 才起作用。正常通信時 ACK 為 1,第一次發起請求時因為沒有需要確認接收的數據所以 ACK 為 0。

  • SYN:同步位,用於在建立連接時同步序號。剛開始建立連接時並沒有歷史接收的數據,所以 ack 也就沒有辦法設置,這是按照正常的機制就無法運行了,SYN 的作用就是解決這個問題的,當接收端接收到 SYN = 1 的報文時就會直接將 ack 設置為接收到的 seq + 1 的值,注意這裡的值並不是檢驗後設置的,而是根據 SYN 直接設置的,這樣正常的機制就可以運行了,所以 SYN 叫同步位。SYN 會在前兩次握手時都為 1,這是因為通信的雙方的 ack 都需要設置一個初始值。

  • FIN:終止位,用來在數據傳輸完畢後釋放連接。

看透 Spring MVC 源代碼分析與實踐——網站基礎

TCP

DNS 的設置

DNS 解析

參考域名設置,如下是我在騰訊雲域名的設置

看透 Spring MVC 源代碼分析與實踐——網站基礎

dns

記錄類型:

A記錄: 將域名指向一個IPv4地址(例如:8.8.8.8)

CNAME:將域名指向另一個域名(例如 www.54tianzhisheng.cn)

MX: 將域名指向郵件服務器地址

TXT: 可任意填寫,長度限制255,通常做SPF記錄(反垃圾郵件)

NS: 域名服務器記錄,將子域名指定其他DNS服務器解析

AAAA:將域名指向一個iPv6地址(例如:ff06:0:0:0:0:0:0:c3)

SRV:記錄提供特定服務的服務器(例如_xmpp-server._tcp)

顯性URL:將域名301重定向到另一個地址

隱性URL:類似顯性URL,但是會隱藏真實目標地址

主機記錄:

要解析 www.54tianzhisheng.cn,請填寫 www。

主機記錄就是域名前綴,常見用法有:

www: 解析後的域名為 www.54tianzhisheng.cn。

@: 直接解析主域名 54tianzhisheng.cn。

*: 泛解析,匹配其他所有域名 .54tianzhisheng.cn。

mail: 將域名解析為 mail.54tianzhisheng.cn,通常用於解析郵箱服務器。

二級域名: 如:abc.54tianzhisheng.cn,填寫abc。

*手機網站: 如:m.54tianzhisheng.cn,填寫m。

Java 中 Socket 的用法

普通 Soket 的用法

Socket 分為 ServerSocket 和 Socket 兩大類。

ServerSocket 用於服務器端,可以通過 accept 方法監聽請求,監聽到請求後返回 Socket;

Socket 用戶具體完成數據傳輸,客戶端直接使用 Socket 發送請求並傳輸數據。

隨便寫了個單方面發送消息的 demo:

客戶端:

import java.io.IOException;import java.io.OutputStream;import java.net.Socket;/**

服務器端:

import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;/**

NioSocket 的用法

轉www.54tianzhisheng.cn/2017/07/14/…

1、具有1-5工作經驗的,面對目前流行的技術不知從何下手,

需要突破技術瓶頸的可以加。2、在公司待久了,過得很安逸,

但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,

常用設計思想,常用java開發框架掌握熟練的,可以加。

4、覺得自己很牛B,一般需求都能搞定。

但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5. 群號:高級架構群 606187239備註好信息!

6.阿里Java高級大牛直播講解知識點,分享知識,

多年工作經驗的梳理和總結,帶著大家全面、

科學地建立自己的技術體系和技術認知!

相關推薦

推薦中...