電商的技術(shù)架構(gòu)
時(shí)間:2023-03-16 14:50:02 | 來源:電子商務(wù)
時(shí)間:2023-03-16 14:50:02 來源:電子商務(wù)
似乎所有網(wǎng)站,包括所有的電商網(wǎng)站,在起成長發(fā)展的過程中,都會(huì)暴露出數(shù)據(jù)庫瓶頸問題,優(yōu)化數(shù)據(jù)庫即使到了公司的成熟期也還是不斷要進(jìn)行,一方面是因?yàn)閿?shù)據(jù)架構(gòu)確實(shí)是一個(gè)比較專業(yè)的領(lǐng)域,另一方面,研發(fā)人員,即使是資深的研發(fā)人員,由于工作領(lǐng)域的不同,比較少去關(guān)注數(shù)據(jù)庫,自然就缺少敏感度, 系統(tǒng)架構(gòu)師,熟悉硬件和物理部署還是有必要的。以下簡單敘述下電商架構(gòu)的一些要注意的地方,我想很多公司都會(huì)碰到這樣的一些問題。
1、數(shù)據(jù)架構(gòu)中很重要的一點(diǎn)是數(shù)據(jù)的拆分,如果你的公司發(fā)展很快,你的數(shù)據(jù)量很可能是爆炸式增長,海量數(shù)據(jù)比較輕易得就達(dá)到,那么在數(shù)據(jù)容量、讀寫瓶頸存在的情況下,你怎么辦? 由于業(yè)務(wù)的快速發(fā)展,我更傾向的是先堆硬件,然后在沒有太大壓力的情況下,進(jìn)行重構(gòu)和調(diào)優(yōu),這會(huì)讓你更冷靜的分析問題。數(shù)據(jù)的拆分一般可以分為垂直拆分和水平拆分,垂直拆分意思是把不同的業(yè)務(wù),子業(yè)務(wù)的數(shù)據(jù)存放到不同的數(shù)據(jù)庫主機(jī)。而在一些大的業(yè)務(wù)中,我們可能還需要繼續(xù)進(jìn)行拆分,把數(shù)據(jù)分片到不同的數(shù)據(jù)庫主機(jī)上,比如一個(gè)很大的商品數(shù)據(jù)庫,我們可以按照商品ID作為主鍵,把數(shù)據(jù)按一定算法分散到許多臺(tái)數(shù)據(jù)庫機(jī)器上。通過拆分業(yè)務(wù)/數(shù)據(jù),我們也分散了風(fēng)險(xiǎn),如果出現(xiàn)了極端情況,某臺(tái)數(shù)據(jù)庫機(jī)器宕機(jī),那么也只是影響部分業(yè)務(wù)/用戶。
2、電商在發(fā)展的過程中,會(huì)需要進(jìn)行新的功能的嘗試,我可以理解移動(dòng)互聯(lián)網(wǎng)的快速迭代,但這種快速迭代只是一個(gè)手段,并不是要追求的目標(biāo),快速迭代是要求可控的,意即,你的新功能特性是否經(jīng)過了充分驗(yàn)證,是否做過壓力測試,在你已經(jīng)有了大量用戶的時(shí)候,做實(shí)驗(yàn)失敗的成本是很高的,我們應(yīng)該縮小試用功能的用戶范圍,在小部分用戶中試用功能,不斷收集數(shù)據(jù)和改進(jìn),嚴(yán)格的說,在功能的上線之前,就應(yīng)該考慮好數(shù)據(jù)的收集和處理,有一個(gè)分析和度量的機(jī)制,而不是事后才考慮如何進(jìn)行數(shù)據(jù)收集。你需要發(fā)布到生產(chǎn)環(huán)境的時(shí)候,你也需要一個(gè)灰度發(fā)布的系統(tǒng),這點(diǎn)可以參考國外的一些公司,比如facebook的做法,通過不斷灰度發(fā)布,監(jiān)控發(fā)布后的各種性能/業(yè)務(wù)反饋數(shù)據(jù),最終可以實(shí)現(xiàn)對(duì)全球范圍內(nèi)的大升級(jí)。
3、由于業(yè)務(wù)的快速發(fā)展,是否實(shí)現(xiàn)某些功能,你需要權(quán)衡取舍,架構(gòu)師要和業(yè)務(wù)方面充分溝通了解,架構(gòu)師也要和硬件運(yùn)維人員充分溝通,不可能充分實(shí)現(xiàn)所有的需求,在合適的時(shí)間,以合適的成本,實(shí)現(xiàn)某些需求,并且考慮到后續(xù)的擴(kuò)展,是架構(gòu)師素質(zhì)的一個(gè)重要體現(xiàn)。溝通、溝通、再溝通,這樣你才能明確需求,因?yàn)闃I(yè)務(wù)方很多時(shí)候并不明確自己想要什么,你需要以他們的語言和他們進(jìn)行交流,定下重大的需求,明白各個(gè)目標(biāo)的輕重緩急很重要,這樣,你可以合理安排自己的開發(fā)活動(dòng),雖然事情也許不會(huì)像你想象的那樣進(jìn)行。
4、所有的大點(diǎn)的公司都在做開放平臺(tái),包括內(nèi)部也有各種服務(wù)接口,那么對(duì)于各個(gè)接口的設(shè)計(jì)容量,性能統(tǒng)計(jì),流量分析,流量限制,是需要設(shè)計(jì)的時(shí)候考慮的。服務(wù)化,也是許多公司強(qiáng)調(diào)的,人人都想把系統(tǒng)拆分為各種獨(dú)立的服務(wù),可以松散進(jìn)行耦合,可以方便的上下線、調(diào)度、降級(jí),發(fā)布,彼此不影響,但服務(wù)拆分得過細(xì)也不是一個(gè)好事,你需要有手段明白你的諸多業(yè)務(wù)的調(diào)用關(guān)系。
5、上規(guī)模的公司,往往在內(nèi)部把基礎(chǔ)軟硬件資源服務(wù)化了,供業(yè)務(wù)系統(tǒng)共享復(fù)用,目前的技術(shù)發(fā)展很快,借助開源組件,許多中小公司也可以比較方便的構(gòu)建自己的基礎(chǔ)云設(shè)施,在機(jī)器規(guī)模到達(dá)一定程度后,通過這些內(nèi)部私有云/服務(wù)化的方式,可以大大節(jié)省成本。比如網(wǎng)站的緩存會(huì)用得很多,提供一個(gè)緩存云,在各個(gè)IDC之間有一個(gè)全局的失效處理的機(jī)制,這些都是值得考慮的。
6、在電商的技術(shù)架構(gòu)中,分布式、水平擴(kuò)展,在許多應(yīng)用服務(wù),基礎(chǔ)設(shè)置都進(jìn)行得不錯(cuò),但數(shù)據(jù)庫往往仍然屬于集中式的存儲(chǔ),因?yàn)槿绻讲鸱值暮茼樌枰褦?shù)據(jù)打散,而傳統(tǒng)關(guān)系型數(shù)據(jù)庫中存儲(chǔ)的一些數(shù)據(jù)對(duì)于一致性的要求是高的,對(duì)于一致性要求高的數(shù)據(jù),推薦是用更高端的硬件去處理/存儲(chǔ),沒有必要強(qiáng)迫自己把所有數(shù)據(jù)都拆分。有些時(shí)候,能通過硬件解決,可能是最佳的解決方案,這樣你會(huì)有 更多的時(shí)間精力去專注自己的業(yè)務(wù)設(shè)計(jì)。
7、互聯(lián)網(wǎng)公司,大數(shù)據(jù)的分析成為一個(gè)重要的領(lǐng)域,如果要實(shí)現(xiàn)大數(shù)據(jù)的架構(gòu),傳統(tǒng)的Oracle,MySQL往往是力不從心的,這點(diǎn)基于分布式的,列存儲(chǔ)的數(shù)據(jù)庫占據(jù)了很大的優(yōu)勢,所以,如果你真的有海量數(shù)據(jù)庫,那么熟悉hadoop等類似的框架/技術(shù)/工具集是有必要的。數(shù)據(jù)庫架構(gòu)師不應(yīng)該只專注于傳統(tǒng)關(guān)系數(shù)據(jù)庫,也應(yīng)該熟悉其他的數(shù)據(jù)存儲(chǔ)分析產(chǎn)品。
8、大數(shù)據(jù),照我的理解,可能更多層面上還是驗(yàn)證一些想法,輔助決策,市面上吹得比較神,用數(shù)據(jù)來驅(qū)動(dòng)業(yè)務(wù)發(fā)展,總是感覺的不太真實(shí),也許國外的少數(shù)公司已經(jīng)到達(dá)了這個(gè)境界吧,在有了海量數(shù)據(jù)后,通過分析這些數(shù)據(jù),能夠提煉出一些數(shù)據(jù)產(chǎn)品來,還是很有價(jià)值的,這要求技術(shù)人員也熟悉業(yè)務(wù)邏輯,這樣才能和業(yè)務(wù)團(tuán)隊(duì)一起來發(fā)掘大數(shù)據(jù)的價(jià)值。
9、數(shù)據(jù)的安全要加以重視,因?yàn)槟闶请娚坦?,涉及到金錢。主要兩方面的安全,1,數(shù)據(jù)庫的安全要加以重視,培訓(xùn)研發(fā)人員,DBA安全技能是需要的,平時(shí)的安全掃描也是需要。2,業(yè)務(wù)層面的安全,通過對(duì)業(yè)務(wù)數(shù)據(jù)的監(jiān)控分析,你也許可以找到一些問題所在,比如有帳號(hào)的異常活動(dòng),這點(diǎn)也是數(shù)據(jù)分析的價(jià)值所在。
10、許多公司發(fā)展到后來,都需要考慮多機(jī)房的部署,一方面是擴(kuò)容/容災(zāi),一方面也是成本的考量。那么在多IDC的設(shè)計(jì)的時(shí)候,應(yīng)用層往往是比較好部署和設(shè)計(jì),但數(shù)據(jù)的拆分,你會(huì)碰到很多難點(diǎn),這個(gè)時(shí)候,不要為拆而拆,你一定要對(duì)自己的數(shù)據(jù)有深刻的了解,它對(duì)一致性的要求有多高,它能否被拆分到到多個(gè)IDC而不會(huì)導(dǎo)致業(yè)務(wù)異常, 更具工程實(shí)際的方案是,對(duì)于最終一致的數(shù)據(jù),我們是可以考慮分布到不同的機(jī)房的,通過一些應(yīng)用設(shè)計(jì)的技巧減少延時(shí)對(duì)于用戶的影響,而對(duì)于一些一致性要求很高的數(shù)據(jù),集中放在某個(gè)機(jī)房,其他機(jī)房存一個(gè)副本。在各個(gè)數(shù)據(jù)中心出現(xiàn)問題的時(shí)候,由于數(shù)據(jù)的分區(qū),你要設(shè)計(jì)方案,盡可能快的恢復(fù)到正常情況,這很可能需要你在不同數(shù)據(jù),不同粒度上加以綜合平衡考量。
寫了1小時(shí),完工。