如何構(gòu)建高擴(kuò)展性網(wǎng)站?
要內(nèi)容
本書從多個方面圍繞高擴(kuò)展性提出了50條建議,一個高擴(kuò)展性的網(wǎng)站會隨著業(yè)務(wù)的發(fā)展、用戶的增加,自由的擴(kuò)展架構(gòu),從而輕松的應(yīng)付網(wǎng)站的快速發(fā)展。下面看看本書的具體內(nèi)容:
化簡方程
1 不要過度的設(shè)計
過度的設(shè)計相當(dāng)于給系統(tǒng)增加了復(fù)雜度與維護(hù)的成本。而這些過度的設(shè)計,在正常的使用中,卻沒有太大的作用。往往是設(shè)計者自己認(rèn)為很重要或者錦上添花的功能,實(shí)際用處不大。
2 設(shè)計時考慮到擴(kuò)展性
在設(shè)計時要遵循一下的設(shè)計原則:設(shè)計時考慮20倍的容量,實(shí)現(xiàn)時考慮3倍的容量,部署時考慮1.5的容量。一面項目擴(kuò)大時,臨時擴(kuò)展造成的困難。
3 把方案一簡再簡
應(yīng)該遵循帕累托法則,20%的設(shè)計做了80%的工作,所以80%的時間,都應(yīng)該放在這20%的設(shè)計上。
一個產(chǎn)品主要的功能其實(shí)都集中在幾個點(diǎn)上,把這幾個點(diǎn)設(shè)計好了,其他的都是些附加的功能而已。所以這核心的業(yè)務(wù)一定要保證足夠的簡潔易用。
4 減少DNS查詢
每個不同的域下的文件,加載時都需要查詢DNS。比如cnblogs.com與i.cnblogs.com就屬于不同的域。那么在查詢DNS的時候,就會查詢兩次。當(dāng)業(yè)務(wù)量很大時,就會造成一定的影響。
5 盡可能減少對象
由于對象在瀏覽器訪問時,需要加載。所以可以考慮減少請求文件的數(shù)量(數(shù)量與瀏覽器并發(fā)加載數(shù)有關(guān)),把一些對象盡量的合并。比如圖標(biāo)類的文件,可以合并成一個大的圖片。合理的文件數(shù)量,會加速瀏覽器的訪問加載。
6 使用同一品牌的網(wǎng)絡(luò)設(shè)備
由于一個http請求,可能通過很多物理設(shè)備。比如負(fù)載均衡器,交換機(jī),路由器。所以盡量使用同一品牌的設(shè)備,會避免一些意外的情況。
分布工作
7 X軸,橫向復(fù)制
這種事最簡單的服務(wù)擴(kuò)充,通過克隆或者復(fù)制實(shí)現(xiàn),比如你的應(yīng)用放在多個服務(wù)器上進(jìn)行服務(wù)。常見的比如集群,負(fù)載均衡等等,數(shù)據(jù)庫的讀寫分離。
8 Y軸,拆分不同的東西
大型系統(tǒng)中,拆分不同的功能,比如注冊、購買、查詢、云盤。等等
9 Z軸,拆分不同的相似的東西
比如按照用戶的級別,或者用戶的地理位置等等拆分。
橫向擴(kuò)展設(shè)計
10 設(shè)計橫向的擴(kuò)展方案
擴(kuò)展包括橫向、縱向。橫向就是通過復(fù)制克隆應(yīng)用,利用小型機(jī)集群擴(kuò)展。縱向就是提高服務(wù)器的硬件以及網(wǎng)絡(luò)設(shè)施。
通過很多的案例都可以發(fā)現(xiàn),單純的升級硬件實(shí)現(xiàn)的縱向擴(kuò)展,僅僅能解決一點(diǎn)點(diǎn)現(xiàn)實(shí)壓力。而通過橫向的集群擴(kuò)展,卻能夠自由的實(shí)現(xiàn)伸縮。
11 采用經(jīng)濟(jì)型系統(tǒng)
與上面的原則類似,采用高價格的服務(wù)器,并不能保證日后的良好性能。應(yīng)該使用普通的小型機(jī)集群擴(kuò)展。
12 橫向擴(kuò)展數(shù)據(jù)中心
數(shù)據(jù)中心有很多的設(shè)計方案,比如
熱冷站配置:使用熱站提供服務(wù),當(dāng)熱站崩潰時,使用冷站繼續(xù)服務(wù)。
推薦使用多個實(shí)時站點(diǎn),成本更低,動態(tài)調(diào)用。缺點(diǎn)是增加了運(yùn)維的難度。
13 利用云技術(shù)進(jìn)行設(shè)計
云計算的有點(diǎn)就是虛擬化,可以在業(yè)務(wù)峰值時,彈性的擴(kuò)充設(shè)備。并且在日常處理用,歸還該擴(kuò)展。
缺點(diǎn)是提高了應(yīng)用于虛擬環(huán)境的耦合。后面提到利用物理設(shè)備,隔離業(yè)務(wù),在虛擬化的云計算中,可能會對業(yè)務(wù)隔離錯誤排查造成一定的干擾。
使用正確的工具
14 合理使用數(shù)據(jù)庫
目前有許多的數(shù)據(jù)庫版本,比如傳統(tǒng)的關(guān)系型數(shù)據(jù)庫Oracle、MySQl,還有比較新的非關(guān)系型數(shù)據(jù)庫NoSql,比如MongoDB,以及內(nèi)存數(shù)據(jù)庫FastDB,還有專門針對SSD固態(tài)硬盤的Aerospike等等。
但是到了選型的時候,還是要一句個人的業(yè)務(wù)需求來定。看你的數(shù)據(jù)庫要求的是速度,還是安全性等等。
15 防火墻,到處都是防火墻
防火墻可以對一些無效的訪問進(jìn)行攔截過濾。通常把一些CSS,靜態(tài)文件,圖片,JS等不采用防火墻,而關(guān)鍵的業(yè)務(wù)涉及到個人信息時采用。合理的設(shè)計防火墻,也會對網(wǎng)站的性能產(chǎn)生一定的影響。
16 積極的利用日志文件
利用各種日志以及工具,實(shí)時的監(jiān)控業(yè)務(wù)。不僅僅是監(jiān)控服務(wù)器的內(nèi)存CPU,還應(yīng)該監(jiān)控業(yè)務(wù)上的數(shù)據(jù)。比如splunk(提供日志的搜集,存儲,搜索,圖形化展示)。
不要做重復(fù)的工作
17 不要立即檢查剛做過的工作
比如剛剛寫如了數(shù)據(jù),不要立即讀取。雖然有些客戶需要保證數(shù)據(jù)的完整,不能丟失。但是可以通過日志等記錄,寫完查這種做法,還是不推薦。
18 停止重定向
重定向會消耗一定的延遲,計算資源。應(yīng)該盡量避免
19 放松時序約束
大多數(shù)的關(guān)系型數(shù)據(jù)庫講究ACID屬性,擴(kuò)展時就造成一定的困擾。因此某些業(yè)務(wù)適當(dāng)?shù)姆潘蓵r序約束,可以提高網(wǎng)站的性能。
比如某站在預(yù)定酒店時,用戶預(yù)定后,會等待酒店的審核。比如某寶,在提款時,進(jìn)行范圍時間的確認(rèn)。這種就是擴(kuò)大了時序約束,進(jìn)而提高網(wǎng)站性能以及事務(wù)安全。
積極利用緩存
20 利用CDN
可以利用CDN保存客戶的數(shù)據(jù)和內(nèi)容。大概的過程是,用戶在進(jìn)行網(wǎng)站訪問時,轉(zhuǎn)到CDN的服務(wù)器,CDN執(zhí)行DNS查詢,把用戶請求分?jǐn)偟讲煌姆?wù)器。有很多的CDN服務(wù)商提供這種服務(wù)。
21 使用過期頭
針對不同的對象類型,使用過期頭,減少對象請求。常見的HTTP對應(yīng)屬性為:public no-cahe max-age等等
22 緩存Ajax調(diào)用
正確修改Http頭Last-Modified Cache-Control Expires等屬性。
23 利用頁面緩存
緩存響應(yīng)之前的冬天請求,降低web服務(wù)器的負(fù)載。
24 利用應(yīng)用緩存
比如針對某些特殊的用戶,緩存其請求數(shù)據(jù)。
25 利用對象緩存
適用于反復(fù)查詢使用的數(shù)據(jù)對象。比如一個購物網(wǎng)站,緩存器熱銷產(chǎn)品數(shù)據(jù)。
26 把對象緩存放在自己的層上
使用單獨(dú)的緩層,易于擴(kuò)展和維護(hù)。
從錯誤中吸取教訓(xùn)
27 積極的學(xué)習(xí)
一個公司有學(xué)習(xí)的氛圍,才會衍生出更好的產(chǎn)品。學(xué)習(xí)的內(nèi)容一方面包括客戶的業(yè)務(wù)知識,一方面來自技術(shù)和運(yùn)維領(lǐng)域。
28 不要依靠QA發(fā)現(xiàn)失誤
雇傭測試或者質(zhì)量保證人員,最大的目的是為了檢測產(chǎn)品的正確性。它能減少成本,提高開發(fā)人員的開發(fā)速度,因為開發(fā)人員不需要時刻關(guān)注代碼的正確性,可以交給QA來測試。
但是QA只負(fù)責(zé)發(fā)現(xiàn)問題,如何避免為題還是得依靠開發(fā)人員。
29 沒有回退的設(shè)計是失敗的設(shè)計
這里的回退,指的是產(chǎn)品發(fā)布的回退。如果碰上某些版本的BUG,可能需要交付之前可運(yùn)行的版本,此時沒有回退,就無法交付產(chǎn)品了。
這里推薦學(xué)習(xí)持續(xù)集成的相關(guān)內(nèi)容。
30 討論失敗并從中吸取教訓(xùn)
不應(yīng)該在同一個問題上失敗兩次,每次失敗多進(jìn)行總結(jié)是不可缺少的。
數(shù)據(jù)庫原則
關(guān)系型數(shù)據(jù)庫的ACID屬性:
原子性:一個事務(wù)要么全執(zhí)行,要么都不執(zhí)行,
一致性:事務(wù)開始和結(jié)束時,所有數(shù)據(jù)狀態(tài)要一致,
隔離性:事務(wù)的表現(xiàn),是事務(wù)對數(shù)據(jù)庫唯一的操作,
持久性:事務(wù)完成,操作不能更改。
31 注意代價高的關(guān)系
應(yīng)該在設(shè)計階段完善的設(shè)計表的結(jié)構(gòu),等開發(fā)開始時,在增加某些列,可能會花費(fèi)很高的代價。
32 使用正確的數(shù)據(jù)庫鎖
數(shù)據(jù)庫有很多鎖的概念,比如隱式鎖、顯式鎖、行鎖、頁鎖、范圍鎖、表鎖、數(shù)據(jù)庫鎖等等。
不合理的使用鎖,會影響網(wǎng)站的吞吐量。
33 不要使用多階段提交
比如兩階段提交:先表決,在提交。這回降低擴(kuò)展性,因為在其提交事務(wù)完成前,是不能作其他操作的。
34 不要使用select for update
因為FOR UPDATE從句會導(dǎo)致鎖定行,降低事務(wù)處理的速度。
35 不要選擇所有的數(shù)據(jù)
比如select * from xxx;
這種做法第一是不開與數(shù)據(jù)的擴(kuò)展,比如本來有四列數(shù)據(jù),業(yè)務(wù)處理代碼直接寫死。當(dāng)增加了一列數(shù)據(jù)時,就會導(dǎo)致出錯;另外就是會查詢出不必要的數(shù)據(jù)。
或者inset into xxx values(xxxx);
這是當(dāng)列信息不匹配時,也會出錯。
容錯設(shè)計與故障控制
36 采用隔離故障的”泳道“
服務(wù)與數(shù)據(jù)的劃分有很多種,比如容器,集群,池,分片,泳道。泳道意味著每個業(yè)務(wù)有自己的領(lǐng)域,不能跨泳道調(diào)用。
37 不要信任單點(diǎn)故障
有很多系統(tǒng)設(shè)計成單點(diǎn)模式,當(dāng)整個系統(tǒng)只是用該模塊時,當(dāng)出現(xiàn)單點(diǎn)故障,整個系統(tǒng)也就崩潰了。
38 避免系統(tǒng)串聯(lián)
比如一個系統(tǒng)有很多的組件組成,每個組件99.9%的安全性,當(dāng)串聯(lián)3個組件時,整個系統(tǒng)的可用性就變成了99.7%。
39 確保能夠啟用/禁用功能
對于某些共享庫,第三方服務(wù),應(yīng)該提供開啟或者關(guān)閉的功能。
避免或分發(fā)狀態(tài)
40 努力實(shí)現(xiàn)無狀態(tài)
實(shí)現(xiàn)狀態(tài)會限制擴(kuò)展性,增大成本
41 盡可能在瀏覽器端維護(hù)會話
一方面降低服務(wù)器壓力,另一方面任何的請求可以發(fā)送給任何的服務(wù)器。
42 利用分布式緩存存放狀態(tài)
使用獨(dú)立的緩存層,利于擴(kuò)展。有很多分布式的緩存方案,比如memcached。
異步通信和消息總線
43 盡可能使用異步通信
異步通信,可以確保每個服務(wù)和層之間的獨(dú)立性,這樣易于早呢更加系統(tǒng)的擴(kuò)展性和減小耦合度。
44 確保消息總線能夠擴(kuò)展
盡量采用Y軸或者Z軸擴(kuò)展,即按業(yè)務(wù)需求和功能擴(kuò)展。因為單純的復(fù)制或者克隆,反而會增加各個消息訂閱者的監(jiān)聽數(shù)目。按照業(yè)務(wù)隔離,可以分離業(yè)務(wù)壓力。
45 避免讓消息總線過度擁擠
衡量價值與消息的成本。
其他原則
46 慎用第三方解決方案擴(kuò)展
企業(yè)如果出現(xiàn)問題,那么尋找第三方能夠解決燃眉之急。但是卻不是長久之計,因為解決方案的提供商有很多客戶,你的危機(jī)并不是他們的危機(jī),所以不可能在關(guān)鍵時刻,盡職盡責(zé)。因此企業(yè)還是應(yīng)該有一定的掌控力(這個詞真是高大上!)。
47 清除、歸檔和成本合理的存儲
有一些不必要的數(shù)據(jù),就應(yīng)該定期的刪除。一些略有價值的數(shù)據(jù)進(jìn)行定期的歸檔直接刪除。一些很有價值的數(shù)據(jù),應(yīng)該進(jìn)行備份以及快速訪問。
48 刪除事務(wù)處理中的商業(yè)智能
應(yīng)該把產(chǎn)品系統(tǒng)與業(yè)務(wù)系統(tǒng)分離,提高產(chǎn)品的擴(kuò)展性。
避免業(yè)務(wù)擴(kuò)展時,受到系統(tǒng)架構(gòu)的限制。
49 設(shè)計能夠監(jiān)控的應(yīng)用
應(yīng)該設(shè)計全局的監(jiān)控策略,保證回答
”發(fā)生了 問題了嗎?“
”哪里發(fā)生了問題?“
”發(fā)生了什么問題?“
”會發(fā)生問題嗎?“
”能自動修復(fù)嗎?“
50 要能勝任
應(yīng)該在每個設(shè)計中涉及到最優(yōu)秀的架構(gòu),不能完全依賴第三方的解決方案。
一個簡單優(yōu)秀的架構(gòu),都是小而精的,如果單純的依靠開源解決架構(gòu),雖然解決了問題,卻會導(dǎo)致應(yīng)用的臃腫。
參考
【1】《高擴(kuò)展性網(wǎng)站的50條原則》
如果本文對你有幫助,別忘記給我個3連 ,點(diǎn)贊,轉(zhuǎn)發(fā),評論,
咱們下期見!學(xué)習(xí)更多JAVA知識與技巧,關(guān)注與私信博主(666)
- 本樣式對齊文本text-align屬性用于指定文本塊的對齊方式,可選值包括: 1)start:內(nèi)容對齊開始邊界,默認(rèn); 2)end:內(nèi)容對齊結(jié)束邊界; 3)left:內(nèi)容左對齊; 4)right:內(nèi)容右對齊; 5)center:內(nèi)容居中對齊; 6)justify:內(nèi)容兩端對齊。當(dāng)text-align屬性使用了justify值時,可以使用text-justify屬性指定文本添加空白的方式,這個屬性...
- 了解了包的概念,就可以系統(tǒng)的介紹Java中的訪問控制級別。在Java中,針對類、成員方法和屬性提供了四種訪問級別,分別是private、default、protected和public。 權(quán)限訪問修飾符(權(quán)限從大到小依次往右排) public(公共) protected(受保護(hù)) default(缺省) private(私有) 同一個類 √ √...
- Rust 提供了代碼封裝的機(jī)制。可以通過crate (等同于Java中的package)創(chuàng)建相對獨(dú)立的module模塊,模塊中封裝了可以重復(fù)使用的功能函數(shù)。當(dāng)創(chuàng)建了自己的 lib 庫或者要使用第三方的庫的時候(這些庫就是一些事先寫好的crate)需要將這些庫中的module 模塊引用到當(dāng)前的環(huán)境中。Rust提供了以下幾種引用方式:一、使用 extern crate在使用這些Module的文件中,通過...
- 填空題: 他______犧牲生命_______出賣組織? 據(jù)數(shù)據(jù)統(tǒng)計,不同年代的同學(xué)回復(fù)的最多的是….. 60后,他寧可犧牲生命,也不出賣組織。 70后,他害怕犧牲生命,所以出賣組織。 80后,他與其犧牲生命,不如出賣組織。 90后,他即使?fàn)奚惨鲑u組織。 00后,他白白犧牲了生命,忘了出賣組織。 上邊的案例,引發(fā)了大家對”自我與企業(yè)關(guān)系的思考”. 能力與欲望...
- 歷屆試題 國王的煩惱 時間限制:1.0s 內(nèi)存限制:256.0MB 問題描述 C國由n個小島組成,為了方便小島之間聯(lián)絡(luò),C國在小島間建立了m座大橋,每座大橋連接兩座小島。兩個小島間可能存在多座橋連接。然而,由于海水沖刷,有一些大橋面臨著不能使用的危險。 如果兩個小島間的所有大橋都不能使用,則這兩座小島就不能直接到達(dá)了。然而,只要這兩座...
- go test命令參數(shù)問題在使用go test對go代碼進(jìn)行單元測試的時候,遇到關(guān)于命令參數(shù)的問題,google了一下,沒有找到很好的說明,其實(shí)就是一些細(xì)節(jié)而已。問題是這樣的,在進(jìn)行單元測試的時候,我希望輸入一些命令行參數(shù)來控制程序的運(yùn)行。 參考go官方文檔,只需要在go test后面加上-args和參數(shù)就可以了 例如 go test -args -classpath E:\testcase...
- 阿里云OSS-使用經(jīng)驗總結(jié),存儲,賬號-權(quán)限,分頁,縮略圖,賬號切換最近項目中,需要使用云存儲,最后選擇了阿里云-對象存儲服務(wù)OSS。總的來說,比較簡單,但是仍然遇到了幾個問題,需要總結(jié)下。1.OSS總的使用介紹 https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/...
- WEB應(yīng)用圖片的格式,以及各自的特點(diǎn)和優(yōu)化(一) by FungLeo前言12年前我入行三天.用table布局做了一個非常粗糙的網(wǎng)頁.我說了一句話,”網(wǎng)頁就是表格加文字加圖片,圖片分兩種,插入圖片和背景圖片”.這句話在今天看來,當(dāng)然是一個笑話.但是當(dāng)時我說出這句話的時候,當(dāng)時的那些前輩都非常認(rèn)可我的總結(jié),并且認(rèn)為我很有從事網(wǎng)絡(luò)發(fā)展的潛力啊.哎,要不是他們的鼓勵,說不定我早轉(zhuǎn)行了……扯遠(yuǎn)了.說回正題,...
- 1. 單表數(shù)據(jù)的導(dǎo)出針對單表數(shù)據(jù)的導(dǎo)出操作,MongoDB 提供了 mongoexport 命令。mongoexport 既可以將數(shù)據(jù)導(dǎo)出為 CSV 格式的文件,也可以導(dǎo)出 JSON 格式的文件。這兩者之間的區(qū)別是:JSON 是 mongoexport 默認(rèn)的導(dǎo)出格式,不需要指定,而要導(dǎo)出 CSV 格式的話需要明確指定;導(dǎo)出 CSV 格式必須顯式指定各屬性名,而導(dǎo)出 JSON 格式不需要。由此可見...
- 商業(yè)智能對于中小企業(yè)來說,由于其高昂的費(fèi)用和運(yùn)行維護(hù)技術(shù)水平要求高,往往難以承受,商業(yè)智能SAAS系統(tǒng)平臺+模塊的創(chuàng)新模式的出現(xiàn)能幫助中小企業(yè)走上商業(yè)智能之路。...
- stack.sh給出了一個非常好的例子,關(guān)于學(xué)習(xí)openstack創(chuàng)建 1.檢查devstack文件,檢查bash4.2以上,檢查用戶,不能是root2.準(zhǔn)備環(huán)境,導(dǎo)入函數(shù)3.檢查local.conf和localrc是否都存在,如果存在使用localrc4.檢查是否已經(jīng)運(yùn)行devstack5.代理設(shè)置和禁用無效服務(wù)6.配置sudo7.配置distro庫8.配置目標(biāo)目錄,創(chuàng)建目標(biāo)目錄9.配置主機(jī)、日...
- 博客地址:http://blog.csdn.net/FoxDave本文介紹如何利用SharePoint客戶端對象模型(.NET)逐級獲取Office 365網(wǎng)站中List的內(nèi)容,僅僅是示例,沒有講究太多東西。代碼如下:ClientContext ctx=new ClientContext(""); ctx.Credentials=new SharePointOn...
- 題外話Atom,風(fēng)風(fēng)雨雨走過一年多了.,目前最新版本是V1.7.0 .社區(qū)還是相當(dāng)活躍;體驗也改善了很多;但是性能上還是欠缺;今天我再來介紹自己常用的一款插件git-control插件介紹 官方介紹頁面 作者: jacogr Github地址 我的介紹 就是命令行的GUI版本,,有些類似sourcetree,但是不如它強(qiáng)大,日用滿足使用在編輯器下加載git版本的工作目錄;工具默認(rèn)啟用快捷鍵...
- 安裝devstack后,如果沒有設(shè)置參數(shù),執(zhí)行openstack命令是不成功的。1.登錄到horizon頁面,使用admin登入,進(jìn)入project->compute-> Access&Security -> API Access,記錄下Service Endpoint。或選擇download OpenStack RC File按鈕,下載demo-openrc.sh文件2.將demo-openrc...
- 對于這樣的問題,看到第一眼就是暴力破解,所以也就遞歸找到所有情況,再篩選出合格的小明被劫持到X賭城,被迫與其他3人玩牌。 一副撲克牌(去掉大小王牌,共52張),均勻發(fā)給4個人,每個人13張。 這時,小明腦子里突然冒出一個問題: 如果不考慮花色,只考慮點(diǎn)數(shù),也不考慮自己得到的牌的先后順序,自己手里能拿到的初始牌型組合一共有多少種呢?思路: 首先無論怎么取,手牌為13張的時候結(jié)束.也就是遞歸結(jié)束標(biāo)...
- 網(wǎng)紅和粉絲經(jīng)濟(jì),是最近幾年流行起來的概念。 截至目前,有一些初步的認(rèn)識,整理成文。 粉絲,最早是明星的跟隨者比較多。 我的理解是,對于一個人物、動物、運(yùn)動等,有著共同的興趣,從而建立多個人和一個人之間的關(guān)系,比如粉絲和明星。 粉絲經(jīng)濟(jì),大獲成功的標(biāo)志是,雷軍和小米科技。在創(chuàng)業(yè)早期,就把粉絲經(jīng)濟(jì)和社交傳播結(jié)合在一起,低成本地實(shí)現(xiàn)了全網(wǎng)營銷。從此以后,各大手機(jī)廠商等很多領(lǐng)域的企業(yè),都...
- 關(guān)于android端apk退出方式的設(shè)計,現(xiàn)在大體只有下面幾種:1,有退出和取消按鈕;2,一定時間內(nèi)兩次返回為退出;3,一次返回就是退出。首先可以看到這兩個用按鈕的,退出都在左側(cè),設(shè)計者肯定沒有看過十年前雅虎研究院出的web端設(shè)計指導(dǎo),下一步的操作一定是在右側(cè),而返回上一步的操作是在左側(cè)。但是到了移動端應(yīng)該考慮用戶是左手還是右手使用,也就是說,如果是左手使用,這個位置設(shè)計沒有問題,反之就不用說了。...
- 寫在最前:本文主要描述在網(wǎng)站的不同的并發(fā)訪問量級下,Mysql架構(gòu)的演變可擴(kuò)展性架構(gòu)的可擴(kuò)展性往往和并發(fā)是息息相關(guān),沒有并發(fā)的增長,也就沒有必要做高可擴(kuò)展性的架構(gòu),這里對可擴(kuò)展性進(jìn)行簡單介紹一下,常用的擴(kuò)展手段有以下兩種Scale-up : 縱向擴(kuò)展,通過替換為更好的機(jī)器和資源來實(shí)現(xiàn)伸縮,提升服務(wù)能力Scale-out : 橫向擴(kuò)展, 通過加節(jié)點(diǎn)(機(jī)器)來實(shí)現(xiàn)伸縮,提升服務(wù)能力對于互聯(lián)網(wǎng)的高并...
- angular.js中,指令是最基礎(chǔ)的也是最重要的工具之一。angular.js指令指的是以ng為前綴的HTML屬性。在之前的ng-app、ng-model等,都屬于指令。 angular.js中的基本指令包括如下內(nèi)容: · 1.ng-app/ng-model ng-app指令用于聲明angular,js的作用范圍,ng-model用于聲明模型。這些在之前都已經(jīng)進(jìn)行過詳細(xì)介紹。 2.ng-...
- java編碼 當(dāng)你的字節(jié)序列是某種編碼時,這個時候想把字節(jié)序列變成 字符串,也需要用這種編碼方式,否則會出現(xiàn)亂碼 文本文件就是字節(jié)序列 可以是任意編碼的序列,如果在中文機(jī)器上直接創(chuàng)建文本文件,那么該文本文件 只認(rèn)識ANSI編碼 案例: public class Bianma { public static void main(Strin...
- 調(diào)試JDK源碼-一步一步看HashMap怎么Hash和擴(kuò)容調(diào)試JDK源碼-ConcurrentHashMap實(shí)現(xiàn)原理調(diào)試JDK源碼-HashSet實(shí)現(xiàn)原理調(diào)試JDK源碼-調(diào)試JDK源碼-Hashtable實(shí)現(xiàn)原理以及線程安全的原因 ConcurrentHashMap線程安全的總結(jié)是我從源碼分析出來的:ConcurrentHashMap所謂線程安全是哈希沖突的時候新增的節(jié)點(diǎn)是線程安全的,而 Conc...
- 對于后臺系統(tǒng)的搜索進(jìn)行UI自動化,主要是比對頁面查詢結(jié)果是否與預(yù)期一致(即數(shù)據(jù)庫查詢結(jié)果) search.py# -*- coding:utf8 -*- import HTMLTestRunner import time import unittest import public from selenium import webdriver class Search(unittest.TestCa...
- ajax 的全稱是Asynchronous(異步的意思) JavaScript and XML,是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù) ajax技術(shù)的流行得益于google的大力推廣,正是由于google產(chǎn)品對ajax技術(shù)的廣泛應(yīng)用,使得ajax流行起來了。 Ajax其核心有JavaScript、XMLHTTPRequest、DOM對象組成,通過XmlHttpRequest對象來向服務(wù)器發(fā)異步請求,從服務(wù)器獲得數(shù)據(jù),然后用JavaScript來操作DOM而更新頁面。這其中最關(guān)鍵的一步就是從服務(wù)器獲得請...
- 一、SpringMVChttp://blog.csdn.net/evankaka/article/details/45501811Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計模式的請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將web層進(jìn)行職責(zé)解耦,基于請求驅(qū)動指的就是使用請求-響應(yīng)模型,框架的目的就是幫助我們簡化開發(fā),Spring Web MVC也是要簡...
- 概念: 優(yōu)化策略:字段選擇性 選擇性較低索引 可能帶來的性能問題索引選擇性=索引列唯一值/表記錄數(shù);選擇性越高索引檢索價值越高,消耗系統(tǒng)資源越少;選擇性越低索引檢索價值越低,消耗系統(tǒng)資源越多;查詢條件含有多個字段時,不要在選擇性很低字段上創(chuàng)建索引可通過創(chuàng)建組合索引來增強(qiáng)低字段選擇性和避免選擇性很低字段創(chuàng)建索引帶來副作用;盡量減少possible_keys,正確索引會提高sql查詢速度,過多索引...
- 一. 什么是Spark? Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行計算框架,Spark基于map reduce算法實(shí)現(xiàn)的分布式計算,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需...
- 相比之前的增改查,刪除就顯得簡單的多了。 這里的request的type為delete,刪除成功的status為204,404則是要刪除的記錄不存在 var id='BAD90A95-7FEA-E511-9414-ADA183AB6249'; $.ajax({ async: false, type: "DELETE ", co...
- 關(guān)于JPush極光推送是國內(nèi)的服務(wù)廠商提供的一站式push服務(wù)(同時支持iOS、android),后面也加入了即時通訊的能力供app使用。致力于打造簡單、可靠、價格有競爭力的服務(wù)(簡單功能全免費(fèi),高級版才收費(fèi)),讓應(yīng)用開發(fā)商可以聚焦業(yè)務(wù)開發(fā),push相關(guān)的技術(shù)實(shí)現(xiàn)全部通過極光推送來解決,僅需調(diào)用極光推送的api即可。正因為如此,開發(fā)者小伙伴們對其的評價相當(dāng)不錯。筆者的app新增了從服務(wù)器往移動客戶端...
- Mapreduce初析 Mapreduce是一個計算框架,既然是做計算的框架,那么表現(xiàn)形式就是有個輸入(input),mapreduce操作這個輸入(input),通過本身定義好的計算模型,得到一個輸出(output),這個輸出就是我們所需要的結(jié)果。 重點(diǎn)就是這個計算模型的運(yùn)行規(guī)則。在運(yùn)行一個mapreduce計算任務(wù)時候,任務(wù)過程被分為兩個階段:map階段...
- Jquery對象常用的方法:$(”p”).addClass(css中定義的樣式類型); 給某個元素添加樣式 $(”img”).attr({src:”test.jpg”,alt:”test Image”}); 給某個元素添加屬性/值,參數(shù)是map $(”img”).attr(”src”,”test.jpg”); 給某個元素添加屬性/值 $(”img”).attr(”title”, function(...
>同理,橫向行統(tǒng)計時輸入=SUM(FILTER(DROP($B$2:$O$9,-1,-2),COLUMN(DROP($B$2:$O$9,-1,-2))=COLUMN()))后橫拉,公式COLUMN(DROP($B$2:$O$9,-1,-2))=COLUMN())的作用就是條件,為當(dāng)前列的數(shù)據(jù)即B2:B8,F(xiàn)ILTER 函數(shù)是提取滿足條件的數(shù)據(jù),SUM函數(shù)是對數(shù)據(jù)求和。