中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

網(wǎng)站優(yōu)化技術(shù)

2018-10-16    來源:SEO研究協(xié)會網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

網(wǎng)站優(yōu)化技術(shù)


1大型網(wǎng)站在架構(gòu)上應(yīng)當考慮哪些問題?


答:

- 分層:分層是處理任何復(fù)雜系統(tǒng)最常見的手段之一,將系統(tǒng)橫向切分成若干

個層面,每個層面只承擔單一的職責,然后通過下層為上層提供的基礎(chǔ)設(shè)施和

服務(wù)以及上層對下層的調(diào)用來形成一個完整的復(fù)雜的系統(tǒng)。計算機網(wǎng)絡(luò)的開放

系統(tǒng)互聯(lián)參考模型(OSI/RM)和Internet 的 TCP/IP模型都是分層結(jié)構(gòu),大型

網(wǎng)站的軟件系統(tǒng)也可以使用分層的理念將其分為持久層(提供數(shù)據(jù)存儲和訪問

服務(wù))、業(yè)務(wù)層(處理業(yè)務(wù)邏輯,系統(tǒng)中最核心的部分)和表示層(系統(tǒng)交

互、視圖展示)。需要指出的是:(1)分層是邏輯上的劃分,在物理上可以位

于同一設(shè)備上也可以在不同的設(shè)備上部署不同的功能模塊,這樣可以使用更多

的計算資源來應(yīng)對用戶的并發(fā)訪問;(2)層與層之間應(yīng)當有清晰的邊界,這樣

分層才有意義,才更利于軟件的開發(fā)和維護。

- 分割:分割是對軟件的縱向切分。我們可以將大型網(wǎng)站的不同功能和服務(wù)分

割開,形成高內(nèi)聚低耦合的功能模塊(單元)。在設(shè)計初期可以做一個粗粒度

的分割,將網(wǎng)站分割為若干個功能模塊,后期還可以進一步對每個模塊進行細

粒度的分割,這樣一方面有助于軟件的開發(fā)和維護,另一方面有助于分布式的

部署,提供網(wǎng)站的并發(fā)處理能力和功能的擴展。

- 分布式:除了上面提到的內(nèi)容,網(wǎng)站的靜態(tài)資源(JavaScript、CSS、圖片

等)也可以采用獨立分布式部署并采用獨立的域名,這樣可以減輕應(yīng)用服務(wù)器

的負載壓力,也使得瀏覽器對資源的加載更快。數(shù)據(jù)的存取也應(yīng)該是分布式

的,傳統(tǒng)的商業(yè)級關(guān)系型數(shù)據(jù)庫產(chǎn)品基本上都支持分布式部署,而新生的

NoSQL產(chǎn)品幾乎都是分布式的。當然,網(wǎng)站后臺的業(yè)務(wù)處理也要使用分布式技

術(shù),例如查詢索引的構(gòu)建、數(shù)據(jù)分析等,這些業(yè)務(wù)計算規(guī)模龐大,可以使用

Hadoop以及 MapReduce 分布式計算框架來處理。

- 集群:集群使得有更多的服務(wù)器提供相同的服務(wù),可以更好的提供對并發(fā)的

支持。

- 緩存:所謂緩存就是用空間換取時間的技術(shù),將數(shù)據(jù)盡可能放在距離計算最

近的位置。使用緩存是網(wǎng)站優(yōu)化的第一定律。我們通常說的 CDN、反向代理、

熱點數(shù)據(jù)都是對緩存技術(shù)的使用。

- 異步:異步是實現(xiàn)軟件實體之間解耦合的又一重要手段。異步架構(gòu)是典型的

生產(chǎn)者消費者模式,二者之間沒有直接的調(diào)用關(guān)系,只要保持數(shù)據(jù)結(jié)構(gòu)不變,

彼此功能實現(xiàn)可以隨意變化而不互相影響,這對網(wǎng)站的擴展非常有利。使用異

步處理還可以提高系統(tǒng)可用性,加快網(wǎng)站的響應(yīng)速度(用 Ajax加載數(shù)據(jù)就是一

種異步技術(shù)),同時還可以起到削峰作用(應(yīng)對瞬時高并發(fā))。"能推遲

處理的都要推遲處理"是網(wǎng)站優(yōu)化的第二定律,而異步是踐行網(wǎng)站優(yōu)化第二定律

的重要手段。

- 冗余:各種服務(wù)器都要提供相應(yīng)的冗余服務(wù)器以便在某臺或某些服務(wù)器宕機

時還能保證網(wǎng)站可以正常工作,同時也提供了災(zāi)難恢復(fù)的可能性。冗余是網(wǎng)站

高可用性的重要保證。

2、你用過的網(wǎng)站前端優(yōu)化的技術(shù)有哪些?


答:

① 瀏覽器訪問優(yōu)化:

- 減少 HTTP 請求數(shù)量:合并 CSS、合并 JavaScript、合并圖片(CSS Sprite)

- 使用瀏覽器緩存:通過設(shè)置 HTTP響應(yīng)頭中的 Cache-Control和 Expires 屬

性,將CSS、JavaScript、圖片等在瀏覽器中緩存,當這些靜態(tài)資源需要更新

時,可以更新HTML 文件中的引用來讓瀏覽器重新請求新的資源

- 啟用壓縮

- CSS 前置,JavaScript 后置

- 減少 Cookie 傳輸

② CDN加速:CDN(Content Distribute Network)的本質(zhì)仍然是緩存,將數(shù)

據(jù)緩存在離用戶最近的地方,CDN通常部署在網(wǎng)絡(luò)運營商的機房,不僅可以提

升響應(yīng)速度,還可以減少應(yīng)用服務(wù)器的壓力。當然,CDN緩存的通常都是靜態(tài)

資源。

③ 反向代理:反向代理相當于應(yīng)用服務(wù)器的一個門面,可以保護網(wǎng)站的安全

性,也可以實現(xiàn)負載均衡的功能,當然最重要的是它緩存了用戶訪問的熱點資

源,可以直接從反向代理將某些內(nèi)容返回給用戶瀏覽器。

3、你使用過的應(yīng)用服務(wù)器優(yōu)化技術(shù)有哪些?


答:

① 分布式緩存:緩存的本質(zhì)就是內(nèi)存中的哈希表,如果設(shè)計一個優(yōu)質(zhì)的哈希函

數(shù),那么理論上哈希表讀寫的漸近時間復(fù)雜度為 O(1)。緩存主要用來存放那些

讀寫比很高、變化很少的數(shù)據(jù),這樣應(yīng)用程序讀取數(shù)據(jù)時先到緩存中讀取,如

果沒有或者數(shù)據(jù)已經(jīng)失效再去訪問數(shù)據(jù)庫或文件系統(tǒng),并根據(jù)擬定的規(guī)則將數(shù)

據(jù)寫入緩存。對網(wǎng)站數(shù)據(jù)的訪問也符合二八定律(Pareto分布,冪律分布),

即80%的訪問都集中在 20%的數(shù)據(jù)上,如果能夠?qū)⑦@ 20%的數(shù)據(jù)緩存起來,那么

系統(tǒng)的性能將得到顯著的改善。當然,使用緩存需要解決以下幾個問題:

- 頻繁修改的數(shù)據(jù);

- 數(shù)據(jù)不一致與臟讀;

- 緩存雪崩(可以采用分布式緩存服務(wù)器集群加以解決,memcached 是廣泛采

用的解決方案);

- 緩存預(yù)熱;

- 緩存穿透(惡意持續(xù)請求不存在的數(shù)據(jù))。

② 異步操作:可以使用消息隊列將調(diào)用異步化,通過異步處理將短時間高并發(fā)

產(chǎn)生的事件消息存儲在消息隊列中,從而起到削峰作用。電商網(wǎng)站在進行促銷

活動時,可以將用戶的訂單請求存入消息隊列,這樣可以抵御大量的并發(fā)訂單

請求對系統(tǒng)和數(shù)據(jù)庫的沖擊。目前,絕大多數(shù)的電商網(wǎng)站即便不進行促銷活

動,訂單系統(tǒng)都采用了消息隊列來處理。

③ 使用集群。

④ 代碼優(yōu)化:

- 多線程:基于 Java 的 Web 開發(fā)基本上都通過多線程的方式響應(yīng)用戶的并發(fā)請

求,使用多線程技術(shù)在編程上要解決線程安全問題,主要可以考慮以下幾個方

面:A. 將對象設(shè)計為無狀態(tài)對象(這和面向?qū)ο蟮木幊逃^點是矛盾的,在面向

對象的世界中被視為不良設(shè)計),這樣就不會存在并發(fā)訪問時對象狀態(tài)不一致

的問題。B. 在方法內(nèi)部創(chuàng)建對象,這樣對象由進入方法的線程創(chuàng)建,不會出現(xiàn)

多個線程訪問同一對象的問題。使用 ThreadLocal 將對象與線程綁定也是很好

的做法,這一點在前面已經(jīng)探討過了。C. 對資源進行并發(fā)訪問時應(yīng)當使用合理

的鎖機制。

- 非阻塞 I/O: 使用單線程和非阻塞 I/O 是目前公認的比多線程的方式更能充

分發(fā)揮服務(wù)器性能的應(yīng)用模式,基于 Node.js 構(gòu)建的服務(wù)器就采用了這樣的方

式。Java 在 JDK 1.4 中就引入了NIO(Non-blocking I/O),在Servlet 3 規(guī)范

中又引入了異步Servlet 的概念,這些都為在服務(wù)器端采用非阻塞 I/O 提供了

必要的基礎(chǔ)。

- 資源復(fù)用:資源復(fù)用主要有兩種方式,一是單例,二是對象池,我們使用的

數(shù)據(jù)庫連接池、線程池都是對象池化技術(shù),這是典型的用空間換取時間的策

略,另一方面也實現(xiàn)對資源的復(fù)用,從而避免了不必要的創(chuàng)建和釋放資源所帶

來的開銷。

4、什么是 XSS 攻擊?什么是 SQL 注入攻擊?什么是 CSRF 攻擊?


答:

- XSS(Cross Site Script,跨站腳本攻擊)是向網(wǎng)頁中注入惡意腳本在用戶

瀏覽網(wǎng)頁時在用戶瀏覽器中執(zhí)行惡意腳本的攻擊方式。跨站腳本攻擊分有兩種

形式:反射型攻擊(誘使用戶點擊一個嵌入惡意腳本的鏈接以達到攻擊的目

標,目前有很多攻擊者利用論壇、微博發(fā)布含有惡意腳本的 URL就屬于這種方

式)和持久型攻擊(將惡意腳本提交到被攻擊網(wǎng)站的數(shù)據(jù)庫中,用戶瀏覽網(wǎng)頁

時,惡意腳本從數(shù)據(jù)庫中被加載到頁面執(zhí)行,QQ 郵箱的早期版本就曾經(jīng)被利用

作為持久型跨站腳本攻擊的平臺)。XSS 雖然不是什么新鮮玩意,但是攻擊的

手法卻不斷翻新,防范 XSS 主要有兩方面:消毒(對危險字符進行轉(zhuǎn)義)和

HttpOnly(防范 XSS 攻擊者竊取Cookie 數(shù)據(jù))。

- SQL 注入攻擊是注入攻擊最常見的形式(此外還有 OS注入攻擊(Struts 2 的

高危漏洞就是通過 OGNL 實施 OS注入攻擊導(dǎo)致的)),當服務(wù)器使用請求參數(shù)

構(gòu)造SQL 語句時,惡意的 SQL 被嵌入到SQL 中交給數(shù)據(jù)庫執(zhí)行。SQL 注入攻擊

需要攻擊者對數(shù)據(jù)庫結(jié)構(gòu)有所了解才能進行,攻擊者想要獲得表結(jié)構(gòu)有多種方

式:(1)如果使用開源系統(tǒng)搭建網(wǎng)站,數(shù)據(jù)庫結(jié)構(gòu)也是公開的(目前有很多現(xiàn)

成的系統(tǒng)可以直接搭建論壇,電商網(wǎng)站,雖然方便快捷但是風險是必須要認真

評估的);(2)錯誤回顯(如果將服務(wù)器的錯誤信息直接顯示在頁面上,攻擊

者可以通過非法參數(shù)引發(fā)頁面錯誤從而通過錯誤信息了解數(shù)據(jù)庫結(jié)構(gòu),Web 應(yīng)

用應(yīng)當設(shè)置友好的錯誤頁,一方面符合最小驚訝原則,一方面屏蔽掉可能給系

統(tǒng)帶來危險的錯誤回顯信息);(3)盲注。防范 SQL注入攻擊也可以采用消毒

的方式,通過正則表達式對請求參數(shù)進行驗證,此外,參數(shù)綁定也是很好的手

段,這樣惡意的SQL 會被當做 SQL的參數(shù)而不是命令被執(zhí)行,JDBC 中的

PreparedStatement 就是支持參數(shù)綁定的語句對象,從性能和安全性上都明顯

優(yōu)于Statement。

- CSRF 攻擊(Cross Site Request Forgery,跨站請求偽造)是攻擊者通過跨

站請求,以合法的用戶身份進行非法操作(如轉(zhuǎn)賬或發(fā)帖等)。CSRF 的原理是

利用瀏覽器的Cookie 或服務(wù)器的Session,盜取用戶身份,其原理如下圖所

示。防范CSRF 的主要手段是識別請求者的身份,主要有以下幾種方式:(1)

在表單中添加令牌(token);(2)驗證碼;(3)檢查請求頭中的 Referer

(前面提到防圖片盜鏈接也是用的這種方式)。令牌和驗證都具有一次消費性

的特征,因此在原理上一致的,但是驗證碼是一種糟糕的用戶體驗,不是必要

的情況下不要輕易使用驗證碼,目前很多網(wǎng)站的做法是如果在短時間內(nèi)多次提

交一個表單未獲得成功后才要求提供驗證碼,這樣會獲得較好的用戶體驗。

補充:防火墻的架設(shè)是 Web 安全的重要保障,ModSecurity是開源的 Web 防火

墻中的佼佼者。企業(yè)級防火墻的架設(shè)應(yīng)當有兩級防火墻,Web服務(wù)器和部分應(yīng)

用服務(wù)器可以架設(shè)在兩級防火墻之間的 DMZ,而數(shù)據(jù)和資源服務(wù)器應(yīng)當架設(shè)在

第二級防火墻之后。

5. 什么是領(lǐng)域模型(domain model)?貧血模型(anaemic domain model)和


充血模型(rich domain model)有什么區(qū)別?


答:領(lǐng)域模型是領(lǐng)域內(nèi)的概念類或現(xiàn)實世界中對象的可視化表示,又稱為概念

模型或分析對象模型,它專注于分析問題領(lǐng)域本身,發(fā)掘重要的業(yè)務(wù)領(lǐng)域概

念,并建立業(yè)務(wù)領(lǐng)域概念之間的關(guān)系。貧血模型是指使用的領(lǐng)域?qū)ο笾兄挥?br>
setter和 getter 方法(POJO),所有的業(yè)務(wù)邏輯都不包含在領(lǐng)域?qū)ο笾卸?br>
放在業(yè)務(wù)邏輯層。有人將我們這里說的貧血模型進一步劃分成失血模型(領(lǐng)域

對象完全沒有業(yè)務(wù)邏輯)和貧血模型(領(lǐng)域?qū)ο笥猩倭康臉I(yè)務(wù)邏輯),我們這

里就不對此加以區(qū)分了。充血模型將大多數(shù)業(yè)務(wù)邏輯和持久化放在領(lǐng)域?qū)ο?br>
中,業(yè)務(wù)邏輯(業(yè)務(wù)門面)只是完成對業(yè)務(wù)邏輯的封裝、事務(wù)和權(quán)限等的處

理。下面兩張圖分別展示了貧血模型和充血模型的分層架構(gòu)。

貧血模型

充血模型

貧血模型下組織領(lǐng)域邏輯通常使用事務(wù)腳本模式,讓每個過程對應(yīng)用戶可能要

做的一個動作,每個動作由一個過程來驅(qū)動。也就是說在設(shè)計業(yè)務(wù)邏輯接口的

時候,每個方法對應(yīng)著用戶的一個操作,這種模式有以下幾個有點:

- 它是一個大多數(shù)開發(fā)者都能夠理解的簡單過程模型(適合國內(nèi)的絕大多數(shù)開

發(fā)者)。

- 它能夠與一個使用行數(shù)據(jù)入口或表數(shù)據(jù)入口的簡單數(shù)據(jù)訪問層很好的協(xié)作。

- 事務(wù)邊界的顯而易見,一個事務(wù)開始于腳本的開始,終止于腳本的結(jié)束,很

容易通過代理(或切面)實現(xiàn)聲明式事務(wù)。

然而,事務(wù)腳本模式的缺點也是很多的,隨著領(lǐng)域邏輯復(fù)雜性的增加,系統(tǒng)的

復(fù)雜性將迅速增加,程序結(jié)構(gòu)將變得極度混亂。

6. 談一談測試驅(qū)動開發(fā)(TDD)的好處以及你的理解。


答:TDD 是指在編寫真正的功能實現(xiàn)代碼之前先寫測試代碼,然后根據(jù)需要重

構(gòu)實現(xiàn)代碼。在JUnit 的作者 Kent Beck的大作《測試驅(qū)動開發(fā):實戰(zhàn)與模式

解析》(Test-Driven Development: by Example)一書中有這么一段內(nèi)容:

“消除恐懼和不確定性是編寫測試驅(qū)動代碼的重要原因”。因為編寫代碼時的

恐懼會讓你小心試探,讓你回避溝通,讓你羞于得到反饋,讓你變得焦躁不

安,而TDD 是消除恐懼、讓 Java開發(fā)者更加自信更加樂于溝通的重要手段。

TDD會帶來的好處可能不會馬上呈現(xiàn),但是你在某個時候一定會發(fā)現(xiàn),這些好

處包括:

- 更清晰的代碼 — 只寫需要的代碼

- 更好的設(shè)計

- 更出色的靈活性 — 鼓勵程序員面向接口編程

- 更快速的反饋 — 不會到系統(tǒng)上線時才知道 bug 的存在

補充:敏捷軟件開發(fā)的概念已經(jīng)有很多年了,而且也部分的改變了軟件開發(fā)這

個行業(yè),TDD 也是敏捷開發(fā)所倡導(dǎo)的。

TDD可以在多個層級上應(yīng)用,包括單元測試(測試一個類中的代碼)、集成測

試(測試類之間的交互)、系統(tǒng)測試(測試運行的系統(tǒng))和系統(tǒng)集成測試(測

試運行的系統(tǒng)包括使用的第三方組件)。TDD 的實施步驟是:紅(失敗測試)-

綠(通過測試) - 重構(gòu)。關(guān)于實施TDD 的詳細步驟請參考另一篇文章《測試驅(qū)

動開發(fā)之初窺門徑》。

在使用TDD 開發(fā)時,經(jīng)常會遇到需要被測對象需要依賴其他子系統(tǒng)的情況,但

是你希望將測試代碼跟依賴項隔離,以保證測試代碼僅僅針對當前被測對象或

方法展開,這時候你需要的是測試替身。測試替身可以分為四類:

- 虛設(shè)替身:只傳遞但是不會使用到的對象,一般用于填充方法的參數(shù)列表

- 存根替身:總是返回相同的預(yù)設(shè)響應(yīng),其中可能包括一些虛設(shè)狀態(tài)

- 偽裝替身:可以取代真實版本的可用版本(比真實版本還是會差很多)

- 模擬替身:可以表示一系列期望值的對象,并且可以提供預(yù)設(shè)響應(yīng)

Java世界中實現(xiàn)模擬替身的第三方工具非常多,包括 EasyMock、Mockito、

jMock等。


本文僅代表作者個人觀點,不代表SEO研究協(xié)會網(wǎng)官方發(fā)聲,對觀點有疑義請先聯(lián)系作者本人進行修改,若內(nèi)容非法請聯(lián)系平臺管理員,郵箱cxb5918@163.com。更多相關(guān)資訊,請到SEO研究協(xié)會網(wǎng)bingfeng168.cn學(xué)習(xí)互聯(lián)網(wǎng)營銷技術(shù)請到巨推學(xué)院www.jutuiedu.com。

標簽: seo web服務(wù)器 安全 代碼 電商 電商網(wǎng) 電商網(wǎng)站 防火墻 服務(wù)器 服務(wù)器端 服務(wù)器使用 服務(wù)器性能 互聯(lián)網(wǎng) 機房 建網(wǎng)站 腳本 開發(fā)者 漏洞 權(quán)限 數(shù)據(jù)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:網(wǎng)站優(yōu)化文章素材哪里來?全網(wǎng)天下告訴你!

下一篇:汽車配件十大品牌排名,看看自己車的配件排第幾呢?