IT技術互(hu)動交流平台

山西福彩网官网

來源(yuan)︰IT165收(shou)集  發布日(ri)期︰2020-02-26 14:39:26

滿足(zu)性能目標(biao)

影響操作(zuo)執行時間的重(zhong)要因素有算法和數據結構。在分布式系(xi)di)持zhong),還有一(yi)個重(zhong)要的因素就是網絡延時。

山西福彩网官网

開(kai)發人員在開(kai)發時通常沒(mei)有考慮(lv)延時,測試(shi)時亦是如此。

作(zuo)者給了(liao)一(yi)個示例(li),對za)諞yi)個20ms的操作(zuo)(典型的web操作(zuo)完成時間),在本地(di)執行只有0.067ms延時,而跨國(guo)執行時,需(xu)要264ms。

而通常一(yi)個web請求需(xu)要多次往返web服務器(qi),延時就更加嚴(yan)重(zhong)。因此應(ying)減少往返次數,即使對za)諛詿嫻姆夢室殘xu)如此。

通常听到的建(jian)議”make your remote services coarse grained” 或 “batch multiple operations together” 也會同樣的意思(si)。

山西福彩网官网

依據摩(mo)爾(er)定律,帶寬(kuan)通常不是問題。
網絡延時與光速有關,不大容(rong)易改善。而帶寬(kuan)卻在不斷增加,但不代表帶寬(kuan)問題可以忽略。

無論如何,應(ying)盡量(liang)減少網絡上xi)/O,只獲取必要的信息(xi),如果數據量(liang)過大,就將處理下(xia)放到數據,而非相反。

Coherence 與性能

Coherence 可以解決延遲(chi)和帶寬(kuan)問題,通過以下(xia)幾個手段︰

通過將後端數據庫的數據緩存降低(di)延遲(chi) 以及通過near-cache緩存最近(jin)使用的數據降低(di)延遲(chi) 在數據節點可並行執行,降低(di)延遲(chi)並減少帶寬(kuan)使用

滿足(zu)可擴(kuo)展性目標(biao)

可擴(kuo)展性可通過兩種手段實現,scaling up 或 scaling out

scale up︰
通過添加CPU/磁盤/內存等將小服務器(qi)變為大服務器(qi)
問題在于平衡,有時添加完CPU卻發現內存成了(liao)新(xin)的瓶頸,比較昂貴。

scale out:
添加更多的集群,並分享(xiang)工作(zuo)負(fu)載。更廉價。
不過設計和管(guan)理上更復雜(za),例(li)如需(xu)要從(cong)架(jia)構上消除單(dan)點故shou)希 xu)要保證(zheng)服務的無狀態化(hua)(stateless)

山西福彩网官网

應(ying)用層無狀態化(hua)時為了(liao)更好的擴(kuo)展。但應(ying)用仍然需(xu)要狀態這點是不變的。
通常,狀態會下(xia)移(yi)到最難擴(kuo)展的數據庫層。

山西福彩网官网

數據庫必須滿足(zu)ACID (atomicity, consistency, isolation, durability) 。

磁盤系(xi)di)撤淺Vzhong)要︰為了(liao)提高並發,磁盤需(xu)要合理分布;為了(liao)保證(zheng)durability,數據庫最終受限于磁盤性能。

當數據量(liang)增加,用mei)?夢試(shi)黽郵保 菘庾芑岬醬錛 蓿 饈本托xu)要擴(kuo)展。通常采用scale up方法,但此法昂貴且不可持zhong)/p>

這時,可以轉而考慮(lv)scale out的方法。

山西福彩网官网

參見前文︰關系(xi)型數據庫橫向擴(kuo)展的三種方法

山西福彩网官网

從(cong)應(ying)用端去掉狀態極大加重(zhong)了(liao)數據庫的負(fu)擔,為了(liao)減輕數據庫負(fu)擔,我(wo)們(men)還需(xu)要使狀態回到jie)ying)用層。
當然並非加到stateless的服務中(zhong),而是在無狀態的應(ying)用邏(luo)輯和數據庫間引入(ru)一(yi)個新(xin)的層次。

正如Bellovin 教授所(suo)說︰

any software problem can be solved by adding another layer of indirection
這里的indirection可以理解成abstraction

此新(xin)抽象層需(xu)要具備(bei)以下(xia)的能力︰
* 管(guan)理對象數據,因為應(ying)用mei)梢災苯jie)操縱對象
* 對象存于內存,以提高性能和減低(di)I/O
* 可以透明的將後端數據庫數據加載到內存
* 可以將數據修改持久mei) 膠蠖耍  J且yi)步的
* 易于橫向擴(kuo)展,如同無狀態的應(ying)用層

Coherence滿足(zu)以上所(suo)有要求

山西福彩网官网

通常的數據庫查(cha)詢都是基(ji)于主鍵的,將這些查(cha)詢轉移(yi)到jie)ying)用層緩存可以yuan)蟠蠹跚岷蠖聳菘獾母fu)擔。

Coherence的分布式架(jia)構還可以做更多復雜(za)的工作(zuo)。

有了(liao)coherence,主從(cong)復制(zhi)就不必要了(liao)。只讀的從(cong)庫被分布式緩存替代,同時,主庫和從(cong)庫的數據不一(yi)致問題也沒(mei)有了(liao)。

後端的數據庫仍需(xu)要集群,但coherence降低(di)了(liao)後端數據庫的壓力,集群可以簡單(dan),節點可以變少。

而分zhi)pian)方面,coherence內置了(liao)distributed queries 和 aggregations特(te)性。使多節點的查(cha)詢變得簡單(dan),應(ying)用也無需(xu)做太多修改,而且通過復制(zhi)對數據進(jin)行保護。

山西福彩网官网

coherence是理想的可擴(kuo)展數據管(guan)理方案。
通過添加節點就可以添加容(rong)量(liang)和吞吐量(liang)(處理能力)。
當然,應(ying)用mei)故切xu)要好好的設計架(jia)構的,把一(yi)個好產品用爛(lan)的na)榭鎏 嗔liao)。
好的產品 + 差的設計 = 差的產品

滿足(zu)高可用性目標(biao)

為了(liao)達到高可用目標(biao),我(wo)們(men)需(xu)要在架(jia)構中(zhong)去掉所(suo)有單(dan)點故shou)稀br />整體可用性=所(suo)有部件可用性的乘積
AS = A1 * A2 * … * An
這同時也意味著,一(yi)個部件不可用,整個系(xi)di)塵筒豢捎謾br />因此我(wo)們(men)需(xu)要做兩件事︰
1. 為每(mei)一(yi)個部件提供冗余(yu)
2. 使部件松耦合,而是故shou)細衾/p>

第二點通常通過引入(ru)異(yi)步實現,例(li)如引入(ru)消息(xi)隊列(lie),文件緩存等。而Coherence也可以緩存更新(xin),即使後端數據庫失敗也沒(mei)有影響。異(yi)步還可以提高吞吐量(liang)。

山西福彩网官网

F = F1 * F2 * … * Fn
F是部件失效的可能性
而 Fc = 1 - Ac(可用性)

例(li)如一(yi)個系(xi)di)秤個部件,每(mei)個部件的可用性為0.99;
As = 0.99 * 0.99 * 0.99 = 97%
每(mei)一(yi)個部件失效可能性為1-0.99 = 0.01
如果為每(mei)一(yi)個部件增加一(yi)個冗余(yu)部件。
則(ze)每(mei)一(yi)部件失效可能性為0.01 × 0.01 = 0.0001
新(xin)的As = (1-0.0001) * (1-0.0001) * (1-0.0001) = 99.97%
可用性提高了(liao)。

山西福彩网官网

僅有冗余(yu)是不夠的,還需(xu)要系(xi)di)秤凶zu)夠的容(rong)量(liang)來滿足(zu)峰值請求,避(bi)免(mian)系(xi)di)潮覽!/p>

如果系(xi)di)承xu)要N個服務器(qi)處理峰值請求,假(jia)設X個服務器(qi)失效後系(xi)di)橙鑰梢怨?zuo),那(na)麼系(xi)di)承xu)要N+X台服務器(qi)。否(fu)則(ze),如果峰值時服務器(qi)失效,剩余(yu)服務器(qi)將不能處理請求,從(cong)而導致響應(ying)時間下(xia)降,性能降低(di),甚至無法服務。

山西福彩网官网

Coherence在設計上就是高可用的,任何節點失效都不會有影響。這時通過在集群中(zhong)加入(ru)復制(zhi)來實現的。
每(mei)一(yi)個對象都在另(ling)一(yi)個節點有冗余(yu),當然對za)詼韻蟺母xin)也會增加開(kai)銷,不過開(kai)銷相較于集群數據庫還是會小很多。不過Coherence集群的Sizing仍很重(zhong)要。
另(ling)外(wai),Coherence集群的高可用並不意味著整個系(xi)di)車母嚦捎謾F淥ta)如負(fu)載均(jun)衡,路由器(qi),交換機等都需(xu)要冗余(yu)。

綜合考慮(lv)

山西福彩网官网

為達到性能和可用性目標(biao),必須定位系(xi)di)持zhong)的單(dan)點故shou)蝦推烤輩 ta)們(men),這需(xu)要仔細的設計架(jia)構,並在架(jia)構的最初就考慮(lv)可擴(kuo)展性。

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

很多人斷章取義,只看到後面這句︰premature optimization is the root of all evil,從(cong)而逃避(bi)復雜(za)的架(jia)構設計。而延遲(chi)和可擴(kuo)展性絕不是小事,必須在系(xi)di)成杓浦 蹙屯咨瓶悸lv)。

Scalability is a prerequisite to functionality, a priority-0 requirement, if ever there was one.

Randy Shoup - eBay架(jia)構師

山西福彩网官网

用mei)  ying)時間不超(chao)過2秒,這樣的目標(biao)是不夠的,我(wo)們(men)需(xu)要繼(ji)續分解,如網絡上耗時多少,後台處理多少時間,訪問shi)菘舛嗌偈奔淶鵲取H鞜宋wo)們(men)才(cai)能準確的定位瓶頸,做相應(ying)的優化(hua)。

山西福彩网官网

Count what is countable, measure what is measurable, and what is not measurable, make measurable.

–伽利略

應(ying)用是否(fu)滿足(zu)目標(biao),需(xu)要測量(liang)。如測量(liang)服務執行的時間,測量(liang)單(dan)個服務器(qi)所(suo)能承受的負(fu)載,以及擴(kuo)展後所(suo)能承受的負(fu)載,如此才(cai)能合理的規劃(hua)系(xi)di)常 約霸yu)期擴(kuo)展所(suo)需(xu)投入(ru)的成本。

在開(kai)發階段可以使用的測量(liang)工具包括︰
* 服務器(qi)端代碼 - YourKit (www.yourkit.com),
* 客(ke)戶(hu)端網頁測量(liang)工具 - FireBug (getfirebug.com), YSlow (developer.yahoo.com/yslow) 或 Page Speed (code.google.com/p/page-speed)
* 壓力測試(shi)工具 - HP LoadRunner, or an open source tool such as Apache JMeter (jakarta.apache.org/jmeter), The Grinder (grinder.sourceforge.net), 或 Pylot (www.pylot.org).

運行階段的監控(kong)工具︰
* JMX, 或 ERMA (erma.wikidot.com),
* coherence監控(kong) - JConsole
* 商用工具 - Evident ClearStone Live (www.evidentsoftware.com) 或 SL RTView (www.sl.com).

山西福彩网官网

讓團隊達成一(yi)致的性能和可用性目標(biao),並了(liao)解達成目標(biao)需(xu)要克服的問題。

推薦的書有︰
1. Scalable Internet Architectures - Theo Schlossnagle
2. Building Scalable Websites - Cal Henderson
3. High Performance Websites: Essential Knowledge for Front-End Engineers
4. Even Faster Web Sites: Performance Best Practices for Web Developers - Steve Souders

總結

本章討論了(liao)如何實現zhong)閱埽 捎眯院涂衫kuo)展性目標(biao),以及coherence如何幫(bang)助我(wo)們(men)實現目標(biao)。

為了(liao)提高性能,需(xu)要減少延時和移(yi)動的數據量(liang)。Coherence 的 near caching和 entry processors可以幫(bang)我(wo)們(men)達到這個目標(biao)。

通過把coherence引入(ru)架(jia)構,coherence可以實現最難擴(kuo)展的一(yi)層 - 數據管(guan)理層的橫向擴(kuo)展,從(cong)而避(bi)免(mian)復雜(za)的數據庫擴(kuo)展,如cluster和sharding。

為實現高可用性,你必須消除任何單(dan)點故shou)希 淙oherence設計上就是高可用的,但你還需(xu)保證(zheng)其它(ta)部件也是同樣高可用。通常可以引入(ru)冗余(yu),通過復制(zhi)。

最後,需(xu)要強調,性能,可擴(kuo)展性和可用性za)Ω麼cong)系(xi)di)匙畛跎杓剖笨悸lv),並且在運行時需(xu)要測量(liang)和監控(kong),而不能靠後期的補(bu)救。

Tag標(biao)簽︰可用性  性能  目標(biao)  
  • 山西福彩网官网

About IT165 - 廣告服務 - 隱私聲(sheng)明 - 版權申(shen)明 - 免(mian)責條款 - 網站地(di)圖 - 網友投稿 - 聯系(xi)方式
本站內容(rong)來自za)諢hu)聯網,僅供用于網絡技術學習,學習中(zhong)請遵循相關法律法規
山西福彩网官网 | 下一页