2
本文作者: 冼牛 | 2016-11-03 11:29 |
雷鋒網(wǎng)按:本文作者Carson,即構(gòu)科技資深直播技術(shù)和音視頻云服務(wù)后臺(tái)工程師, 熟悉高性能高可用網(wǎng)站架構(gòu),注重實(shí)用、高效的技術(shù)架構(gòu)和開發(fā)模式。
創(chuàng)業(yè)最開始的時(shí)候,是最難的時(shí)候。此時(shí),從0到1,從無到有,做的是自己不曾做過的事情。因此,我們稱之為創(chuàng)業(yè)。
對(duì)于早期的技術(shù)而言,不要大而全,不用高精尖,先按需求實(shí)現(xiàn),活下來再說。我們需要考慮的是哪些可以用第三方云服務(wù),哪些可以直接用現(xiàn)成的開源方案或技術(shù),哪些需要自己開發(fā)實(shí)現(xiàn)。我們可以粗曠一些,要的是快速出活,讓產(chǎn)品活下來。
前期那么幾桿槍,就技術(shù)而行,要用團(tuán)隊(duì)成員最熟悉的。要有人能全盤掌控所有的技術(shù)棧。雖然我們用的是最熟悉的東西,但是在整個(gè)技術(shù)選型和開發(fā)過程中,需要有以下幾個(gè)基本的思路:
注意解耦,分層,動(dòng)靜分離、輕重分離的原則。
開發(fā)的規(guī)范,代碼及代碼分支管理規(guī)范、發(fā)布流程。
在開發(fā)過程中,對(duì)于公共的操作要抽象成組件。即我們常說的職責(zé)單一,如緩存操作,數(shù)據(jù)庫(kù)操作等等都封裝成組件,一邊開發(fā)一邊封裝。
業(yè)務(wù)服務(wù)端無狀態(tài),會(huì)話通過 memcache 等來管理。
數(shù)據(jù)庫(kù)設(shè)計(jì)考慮到一定時(shí)間內(nèi)的容量,做好必要的分庫(kù)分表,如1到2年的容量規(guī)劃。
熱點(diǎn)數(shù)據(jù)緩存起來,將大量請(qǐng)求打到緩存而不是數(shù)據(jù)庫(kù)。
隔離關(guān)鍵業(yè)務(wù)和非關(guān)鍵業(yè)務(wù)。
隔離主業(yè)務(wù)系統(tǒng)與旁路上報(bào)、日志上報(bào)等周邊系統(tǒng)。如果是 HTTP 服務(wù),至少要在域名級(jí)別保證其隔離。
不同端業(yè)務(wù)的隔離。如 PC 側(cè)的業(yè)務(wù)和 H5 的頁面可以是同一套代碼,但是域名不同,接入點(diǎn)不同,后端機(jī)器相同。
在滿足現(xiàn)有業(yè)務(wù)需求的情況下,對(duì)業(yè)界開源的輪子做技術(shù)選型。在能駕馭的前提下盡量使用已有的,成熟的,經(jīng)過了大量公司實(shí)踐的開源組件,如nginx,redis,和elk等等。
安全是互聯(lián)網(wǎng)應(yīng)用無法回避的問題,我們需要在框架或基礎(chǔ)組件層面引入常見的 XSS 、CSRF、 和 SQL注入等安全問題的過濾。
對(duì)于靜態(tài)的能放到CDN的內(nèi)容盡量放到CDN。這樣做的好處:一是就近接入,提高訪問速度,二是減少后臺(tái)的服務(wù)壓力。
保留快速切到云服務(wù)防 DDoS 的能力。
在業(yè)務(wù)層面實(shí)現(xiàn)一定的規(guī)則以及聯(lián)合 WEB 容器實(shí)現(xiàn)一定程度上的防 CC 攻擊能力。
宕機(jī)、不同城市的機(jī)房同時(shí)起火、光纜被挖斷、數(shù)據(jù)錯(cuò)亂等等各種神奇的事情都有可能出現(xiàn)。此時(shí)備份就顯示出其價(jià)值。我們不僅僅是要備份業(yè)務(wù)數(shù)據(jù)庫(kù),還要備份代碼,和備份部署腳本等等。
當(dāng)所有的不幸都發(fā)生的時(shí)候,我們所有的東西都不見的時(shí)候,我們能夠很快地將應(yīng)用恢復(fù)到上一個(gè)可預(yù)見的備份版本。即我們必須有災(zāi)備方案,最好是能夠提前演練過。
使用第三方的監(jiān)控服務(wù)監(jiān)控網(wǎng)站的訪問可用性,服務(wù)的可用性等。
對(duì)業(yè)務(wù)的數(shù)據(jù)和關(guān)鍵的節(jié)點(diǎn)進(jìn)行監(jiān)控,比如做金融的需要確認(rèn)每個(gè)用戶的進(jìn)出錢要對(duì)得上賬,在這里至少要有一個(gè)監(jiān)控。
前期按機(jī)器做灰度發(fā)布,一個(gè)簡(jiǎn)單的腳本就可以搞定。后期可以實(shí)現(xiàn)按用戶灰度等,以此提高業(yè)務(wù)的連續(xù)性,保證業(yè)務(wù)的可用性。
從 0 到 1,不管是技術(shù)還是業(yè)務(wù)都是不成熟的,大家都是摸著石頭過河。因此,我們需要快速的試錯(cuò),需要快速的反饋。
在技術(shù)層面,在保證以上一些原則的同時(shí),快速迭代,實(shí)現(xiàn)產(chǎn)品需求。對(duì)于一些出錯(cuò)統(tǒng)計(jì)類的東西直接交給第三方來實(shí)現(xiàn)。在業(yè)務(wù)層面,如果是網(wǎng)站,一些流量分析直接也是直接交給第三方。比如百度統(tǒng)計(jì),Google Analytics等。對(duì)于具體的業(yè)務(wù),一個(gè)腳本每天早上跑出報(bào)表以郵件的形式發(fā)到指定郵件組。將相關(guān)人加入郵件組列表,以確保相關(guān)人等能接收到報(bào)表郵件。
以上是最開始需要注意的原則和必須要實(shí)現(xiàn)的東西。
在此之外,還有很重要的內(nèi)容需要持續(xù)搭建和實(shí)現(xiàn),包括但不限于以下這些:
1.降級(jí)服務(wù)能力:在遇到正常或不正常的大流量時(shí),可以在一定范圍內(nèi)將業(yè)務(wù)降級(jí)。業(yè)務(wù)降級(jí)可以前期提供手動(dòng)降級(jí)能力,后續(xù)實(shí)現(xiàn)自動(dòng)降級(jí)。
2.第三方服務(wù)可替換:花錢能解決問題,但花錢一般不能真正的解決問題。因?yàn)榛ㄥX買來的可能是一個(gè)坑,還是一個(gè)需要自己填的坑。在使用第三方服務(wù)時(shí),需要多家備用可替換,如短信服務(wù),多接兩家。平時(shí)兩家均衡分發(fā),或者按業(yè)務(wù)分發(fā)。當(dāng)某一家出問題時(shí),直接切到正常的那家。
3.日志中心:日志是定位問題的必備工具。當(dāng)后臺(tái)服務(wù)有多臺(tái)機(jī)器時(shí),就不能一臺(tái)一臺(tái)的用 grep 搜索了,需要有一個(gè)集中存儲(chǔ)的地方,直接上一個(gè) elk 也許能解決大部分的問題。
創(chuàng)業(yè)要的是能存活下來,技術(shù)要的是能產(chǎn)生價(jià)值。架構(gòu)會(huì)隨著業(yè)務(wù)的發(fā)展而不斷的演化。然而,在創(chuàng)業(yè)早期上面的原則是必須要守住的。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。