首頁  >  文章  >  後端開發  >  Spring MVC程式碼實踐之網站架構及演變

Spring MVC程式碼實踐之網站架構及演變

零到壹度
零到壹度原創
2018-04-02 10:03:411720瀏覽

這篇文章給大家分享的是Spring MVC程式碼實踐之網站架構及演變,內容挺不錯的,希望可以幫助到有需要的朋友

網站架構及其演進過程

基礎架構

網路傳輸分解方式:

  • 標準的OSI 參考模型

  • TCP/IP 參考模型

Spring MVC程式碼實踐之網站架構及演變

##海量資料的解決方案

  • #快取與頁面靜態化

  • 快取

    • #透過程式直接儲存在記憶體中

    • 使用快取框架(Encache、Redis、Memcache)

  • 頁面靜態化

    • 使用範本技術產生(Velocity、FreeMaker等)

  • 資料庫最佳化

  • ##表結構優化

  • #SQL 語句最佳化

  • 分區

  • 分錶

  • 索引最佳化

    ################ #####

    使用預存程序取代直接操作程序

  • #分離活躍資料

  • #批次讀取與延遲修改

    Spring MVC程式碼實踐之網站架構及演變

  • Spring MVC程式碼實踐之網站架構及演變

  • ##讀寫分離

  • 分散式資料庫

  • #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程式碼實踐之網站架構及演變


#DNS 的設定

DNS 解析

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

Spring MVC程式碼實踐之網站架構及演變

#記錄類型:

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:

客戶端:

  1. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"> import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span>##;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>

    ##################################################### ########
  2. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span>##io<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span>. <span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>OutputStream<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"></span>;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>

  3. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"> import</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"> java</span>.net

  4. .
  5. Socket##;

  6. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>

  7. ##/**<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>

  8. * Created by 10412 on 2017/5/2.<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>

  9. ## * TCP用戶端: <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"></span>

    ################ ①:建立tcp的socket服務,最好先明確具體的位址和連接埠。這個物件在創建時,就已經可以對指定ip和連接埠進行連接(三次握手)。 ################
  10. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②:如果連線成功,就表示通道建立了,socket流就已經產生了。只要取得socket流中的讀取流和寫入流即可,只要透過getInputStream和getOutputStream就可以取得兩個流物件。 </span>

  11. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"># ③:關閉資源。 </span>

  12. */
    //单方面的输入!
    public class TcpClient
    {
        public static void main(String[] args) {
            try {
                Socket s = new Socket("127.0.0.1", 9999);
                OutputStream o = s.getOutputStream();
                o.write("tcp sssss".getBytes());
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

#伺服器端:

  1. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span>##IOException<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"></span> ;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>

  2. #import<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"></span> java<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span> #.<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>io<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span>.<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>InputStream<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;"></span>;<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>

  3. import<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;"></span> java<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"></span>.<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>net<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">##.</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">ServerSocket</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">;</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"></span>

  4. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>

  5. /**
     * Created by 10412 on 2017/5/2.
     */
    public class TcpServer
    {
        public static void main(String[] args) {
            try {
                ServerSocket ss = new ServerSocket(9999);//建立服务端的socket服务
                Socket s = ss.accept();//获取客户端对象
                String ip = s.getInetAddress().getHostAddress();
                int port = s.getPort();
                System.out.println(ip + " : " + port + " connected");
                // 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。
                InputStream ins = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流
                byte[] bytes = new byte[1024];
                int len = ins.read(bytes);
                String text = new String(bytes, 0, len);
                System.out.println(text);
                //关闭资源
                s.close();
                ss.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

以上是Spring MVC程式碼實踐之網站架構及演變的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn