|
適合工作的工具
Indelicato的第一個(gè)建議是“為工作選擇正確的工具”,想要達(dá)到這個(gè)目的,就要選擇下列架構(gòu)解決方案中的一種:
- 使用云部署解決方案
- 使用可伸縮的數(shù)據(jù)存儲(chǔ)解決方案,像MongoDB、CouchDB、Cassandra或者Redis。
- 添加高速緩存層,像Memcached。
他認(rèn)為在開(kāi)始開(kāi)發(fā)應(yīng)用程序的時(shí)候,這些解決方案并不是必須的,但是在開(kāi)始時(shí)就選擇可伸縮的數(shù)據(jù)存儲(chǔ)解決方案是很明智的,因?yàn)槟菚?huì)避免之后再進(jìn)行切換。將應(yīng)用程序部署到云中會(huì)為我們帶來(lái)一些好處,特別是對(duì)于創(chuàng)業(yè)公司來(lái)說(shuō),因?yàn)樗麄儫o(wú)法準(zhǔn)確地確定他們的應(yīng)用程序在啟用之后會(huì)有多少人使用。將應(yīng)用程序部署到云中之后,當(dāng)需求增加時(shí),就可以讓應(yīng)用程序以優(yōu)雅的方式進(jìn)行伸縮。很多軟件架構(gòu)師都講述了他們不得不對(duì)應(yīng)用程序進(jìn)行擴(kuò)展的事件,其中他們會(huì)引入高速緩存層,那會(huì)解決大部分問(wèn)題。但是我們應(yīng)該在設(shè)計(jì)階段就考慮相應(yīng)的解決方案。這樣在之后就很容易實(shí)現(xiàn)了。
可伸縮的數(shù)據(jù)存儲(chǔ)
接下來(lái),Indelicato建議選擇支持分區(qū)、復(fù)制并且有彈性的數(shù)據(jù)存儲(chǔ),包括以下幾種: MongoDB、Cassandra、Redis、Tokyo CabiNET、Project Voldemort,或者選擇MySQL作為關(guān)系型數(shù)據(jù)庫(kù)。這是很必要的,因?yàn)椴还茉鯓樱?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用程序的生命周期中,分區(qū)都是必要的。對(duì)于可伸縮性來(lái)說(shuō),分區(qū)并不是必需的,但是對(duì)于“確保高可用性”就是必需的。靈活性可以讓我們快速地增加更多的節(jié)點(diǎn),這可能是出現(xiàn)流量峰值的時(shí)候,也可能是“由于硬件故障或升級(jí)、大型的伸縮模式的變更或者任何需要讓節(jié)點(diǎn)下線的情況下,需要對(duì)節(jié)點(diǎn)進(jìn)行維護(hù)的時(shí)候。”
可伸縮的數(shù)據(jù)模式
Indelicato建議創(chuàng)建一種模式,從而讓我們可以很容易地進(jìn)行數(shù)據(jù)sharding,他還給出了下面的臨時(shí)組件的例子,User和UserFeedEntry:
Collection (or Table, or Entries, etc) User
{
UserId : guid, unique, key
Username : string
PasswordHash : string
LastModified : timestamp
Created : timestamp
}
Collection (or Table, or Entries, etc) UserFeedEntry
{
UserFeedEntryId : guid, unique, key
UserId : guid, unique, foreign key
Body : string
LastModified : timestamp
Created : timestamp
}
it知識(shí)庫(kù):設(shè)計(jì)Web應(yīng)用程序時(shí)要注意可伸縮性,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。