
前面寫(xiě)(′?_?`)過(guò)一些電商網(wǎng)站相關(guān)的電商電商文章,這幾天有時(shí)間,總結造就把之前??寫(xiě)得網(wǎng)站架構相關(guān)的何打文章,總結整理一下。精的架構把以前的網(wǎng)站一些內容就連貫起來(lái),這樣也能系統的電商電商??知道,一個(gè)最小的總結造電商平臺是怎么一步步搭建起來(lái)的。對以前的何打文章感興趣的朋友可以看這個(gè),
本文大綱:
1.小型電商網(wǎng)站的精的架構架構
3.構建數據庫的主從架構
4.基于共享存儲的圖片服務(wù)器架構
5.移動(dòng)M站建設
7.緩存系統
一、小型電商網(wǎng)站的網(wǎng)站架構
剛從傳統軟件行業(yè)進(jìn)入到電商企業(yè)時(shí),覺(jué)得電商網(wǎng)站沒(méi)有什么技術(shù)含量??,電商電商也沒(méi)有什么門(mén)檻,總結造都是何打一些現有(′_`)的東西堆積木似的堆出來(lái)罷了。然而,精的架構真正進(jìn)入到這個(gè)行業(yè)之后,網(wǎng)站才發(fā)現并非如此。有人說(shuō)過(guò),好的架構,是演化出來(lái)的,電商網(wǎng)站的架構也是如此?,F在好的電商網(wǎng)站,看似很復雜,很牛逼,其實(shí)也是從很小的架構,也是從沒(méi)什么技術(shù)含量開(kāi)始的。所以,架構的演化過(guò)程,就是在技術(shù)團隊不斷追求極致的過(guò)程。
今天就來(lái)總結小型電商網(wǎng)站的架構演進(jìn)。一套電商系統最初期的架構,往往會(huì )采用一個(gè)比較典型的LAMP架構,前端加上Apache/PHP,后端是MySQL。這個(gè)算(suan)是比較流行的。不過(guò),目前還有一套.net的(de)技術(shù)架構,(′-ι_-`)可能大家??很少提到。很不幸,我就(╯°□°)╯是在一個(gè).net平臺為基礎的電商公司。所以,今天也是要總結.net平臺的電商架構。
1技術(shù)架ヽ(′ー`)ノ構
一般初期的電商網(wǎng)站,基本就幾個(gè)業(yè)務(wù)子系統:網(wǎng)站前臺、商家前臺、系統管理后臺、App、M站等。業(yè)務(wù)量也不是很大。所以??,MVC+緩存+數據庫基本就搞定了。
單就開(kāi)發(fā)效率而言,.netMVC的技術(shù)架構不會(huì )比LAMP開(kāi)發(fā)速度慢。所以,一些企業(yè),為了快速推出自己的電商平臺,也會(huì )采用.net架構。
上圖為基礎架構層面。這是一個(gè)很簡(jiǎn)單的基礎??架構。
3詳細架構
整個(gè)系統架構里面,還有一個(gè)比較重要的組成部分,那就是監控系統。例如:流量(???)監控、硬件監控、系統性能監控等, 還有就是對某個(gè)頁(yè)面進(jìn)行監控,設置頁(yè)面的其中一塊進(jìn)行監控等。它是提高整個(gè)平臺可用性的一個(gè)重要手段。多平(°ロ°) !臺、多個(gè)維度的監控,能夠確保系統的可用性(xing)。一旦出現異ヽ(′▽?zhuān)?ノ常,特別在硬件或者性能??方面出現異常,監控系統也能立刻發(fā)出警告,這樣也好防范于未然。
總而言之,一個(gè)好的系統架構應該從擴展性、(╯°□°)╯︵ ┻━┻安全性、性(??-)?能和可靠性來(lái)??考慮。羅馬不是一天建成的,架構適合就行,可以先行之而后優(yōu)。通過(guò)漸進(jìn)演化的過(guò)程,逐步讓系統越來(lái)越完善。
二、日志與監控系統的解┐(′д`)┌(jie)決方案
監控系統主(╬ ò﹏ó)要用于服務(wù)器集群的資源和性能監控,以及應用異常、性能監控、日志管理等多維度的性能監控分析。一個(gè)完善的(′ω`)監控系統??和日志系統對于一個(gè)系統的重要性不必多說(shuō)??傊?,只有實(shí)時(shí)了解各系統的狀態(tài),才能保證各系統的穩定。
如上圖所示,監控平臺監控的范圍很廣,從服務(wù)器性能及資源,到應用系統的監控。每個(gè)公司都有特定的平臺統一監控的需求及解決方案??,但監控平臺的任務(wù)和作用基本是一致的。
1日志
日志是監視程序運行的??一種重要的方式,主要有兩個(gè)目的:1.bug的及時(shí)發(fā)現和定??位;2.??顯示程序運行狀態(tài)。
正確詳細的日志記錄能夠快速的定位問(wèn)題。同樣,通過(guò)查看日志,可以看出程序正在??做什么,是不是按預期的設計在執行,所以記錄下程序的運行狀態(tài)是必要的。這里(li)將日志分為兩種(′▽?zhuān)?:1??.異常日志;2.運行日志。
我們主要是使用log4net,將各個(gè)系統的日志,持久化記錄到數據庫或者文件中,以方便后續的系統異常監控和性能分析。如何集成log4net,這里不( ?° ?? ?°)多(?????)說(shuō)。
日志記錄的幾個(gè)原則:
2監控
監控系統是一個(gè)復雜的系統平臺,目前有很多的開(kāi)源產(chǎn)品和平臺。不過(guò)我們平臺小,監控任務(wù)和需求少,所以基本都是自己開(kāi)發(fā)。主要有這五個(gè)方面:1.系統資源;2.服務(wù)器;3.服務(wù);4.應用異常;5.應用性能。
具體的架構圖如下:
1)系統資源監??控
監控各種網(wǎng)絡(luò )參數和各服務(wù)器相關(guān)資源(CPU、內存、磁盤(pán)讀寫(xiě)、網(wǎng)絡(luò )、訪(fǎng)問(wèn)請求等),保證服務(wù)器系統的??安全運營(yíng),并提供異常通知機制以讓系統管理員快速定位/解決存在的各種問(wèn)題。目前比較流行的應該是Zabbix。
2)服務(wù)器監控
服務(wù)器的監控,主要是監控各個(gè)服務(wù)器、網(wǎng)絡(luò )節點(diǎn)、網(wǎng)關(guān)等網(wǎng)絡(luò )設備的請求響應是否正常。通過(guò)定時(shí)服務(wù),定時(shí)去Ping各個(gè)(ge)網(wǎng)絡(luò )節點(diǎn)(dian)設備,以確認各網(wǎng)絡(luò )設備是否正常。如果哪個(gè)網(wǎng)絡(luò )設備出現異常,則發(fā)出消息提??醒。
3)(′ω`*)服務(wù)監控
服務(wù)監控,指的是各個(gè)Web服?務(wù)、圖片服(′?_?`)務(wù)、搜索引擎服ヽ(′▽?zhuān)?ノ務(wù)、緩存服務(wù)(wu)等平臺系統的各項服務(wù)是否正常運行??梢酝ㄟ^(guò)定時(shí)服務(wù),每隔一段時(shí)間,就去請求相關(guān)的服務(wù),以確保平臺的各項服務(wù)正常運行。
4)應用異常監控
目前我們平(′ω`)臺所有系統的異常記錄,都記錄在數據庫中。通過(guò)定時(shí)服(′?_?`)務(wù),統計分析一段時(shí)間之內的異常記錄。如果發(fā)現有相關(guān)重要的模塊的系(xi)統異常,比如支付、下單模塊頻繁發(fā)生異常,則立即通知相關(guān)人員處理,確保服務(wù)正常運行。
5)應用性能監控
在A(yíng)PI接口??和各應用的相關(guān)位置進(jìn)行攔截和記錄下程序性能(SQL性能,或是 程序執行效率)。相關(guān)重要模塊提供性能預警,提前發(fā)現問(wèn)題。同時(shí)統計相(xiang)關(guān)監控信息并顯示給開(kāi)發(fā)的人員,以方便后續的性( ???)能分析。
發(fā)展到大型成熟的公司之后,主從架??構可能就有點(diǎn)落伍了,取而代之的是更加復雜的數據庫集群(qun)。但作為一個(gè)小型電商公司,數據庫的主從架構應該是最基礎的。任何大型的系統架構如何做電商網(wǎng)站,都是不斷演進(jìn)的。主從架構便是數據庫架構中最基礎的架構。所以研究完主從架構,也就能看懂更加復雜的架構了。
首先為什么要讀寫(xiě)分離?
數據庫的讀寫(xiě)分離的好處?
讀寫(xiě)分離的基本原理就是讓主數據庫處理事務(wù)性增、改、刪操作(Insert、Update、Delete)操作,而從數據庫處理Select查詢(xún)操作。數據庫復制被用來(lái)把事務(wù)性操作導致的變更同步到其它從數據庫。
以SQL為例,主庫負責寫(xiě)(′?ω?`)數據、讀數據。讀庫僅負責讀數據。每次有寫(xiě)庫操作,同步更新到讀庫。寫(xiě)庫就一個(gè),讀庫可以有多個(gè),采用日志同步的方式實(shí)現主庫和多個(gè)讀庫的數據同步ヾ(^-^)ノ。
1SQL Server 讀寫(xiě)分離的配置
SQL Ser??ver提供??了三種技術(shù),可以用于主從架構之間的數據同步的實(shí)現:日志傳送、事務(wù)復制和SQL 2012 中新增的功能Always On 技術(shù)。各自?xún)?yōu)劣,具體??的大家自己去百度吧,這里提供網(wǎng)上的朋友的配置方式,僅供參考。
(圖源:網(wǎng)絡(luò ))
2C# 數據庫讀寫(xiě)操(′▽?zhuān)?作
最簡(jiǎn)(′?`)單的就是:配置兩個(gè)數據庫連接,然后在各個(gè)數據庫調用的位置,區分讀寫(xiě)請求相應的數據庫服務(wù)器,如下圖:
第二??種解決方案就ヾ(^-^)ノ是判斷SQL語(yǔ)句是寫(xiě)語(yǔ)句(Insert 、Update、Create、 Alter)還是讀語(yǔ)句(Select)。
Demo下載:
(PS:此Demo為本人總結,跟實(shí)際生產(chǎn)(′▽?zhuān)?中的DLL 不太相同,但原理是??一樣的,大家總結封裝吧)
四、基于共享存儲的圖片服務(wù)??器架構
在當前這個(gè)互聯(lián)網(wǎng)的ヽ(′?`)ノ時(shí)代,不管何種??網(wǎng)站,對圖片的需求量越來(lái)越大??。尤其是電商網(wǎng)站,幾乎都(dou)會(huì )面臨到海量圖片資源的存儲、訪(fǎng)問(wèn)等相關(guān)技術(shù)問(wèn)題。在對圖片服務(wù)器的架構、擴展、升級的過(guò)程中(???),肯定也會(huì )碰到各種各樣的問(wèn)題與需求。當然這并不代表,你就必須得弄一個(gè)特別NB的圖片服務(wù)架構,只要簡(jiǎn)單、高效、穩??定就行。這部分我們(′;ω;`)來(lái)總結一個(gè)特別簡(jiǎn)單、高??效的圖片服務(wù)架構:通過(guò)共享存儲的方式來(lái)實(shí)現圖片服務(wù)架構。
然而,也有一??些人問(wèn)我,現在大型網(wǎng)站的圖片服務(wù)器的架構已經(jīng)完全不是這樣了,別人家的圖片系統比你這個(gè)牛逼多了,為(/ω\)啥不直接寫(xiě)那個(gè)呢?
事實(shí)是:第一,大型牛逼的系統我也不會(huì );第二, 再牛逼的系統??也是從小的架構演化過(guò)去的(′?ω?`),沒(méi)有一步到位的。這里介紹圖??片服務(wù)器架構雖然比較(jiao)簡(jiǎn)單,但也是經(jīng)過(guò)了單機時(shí)代的演(T_T)化了,基本??上可ヽ(′ー`)ノ以滿(mǎn)足中小型分布式網(wǎng)站(???)的需求。這種架構的搭建和學(xué)習成本都極低(di),符合目前“短平快”的??開(kāi)發(fā)模式。
優(yōu)點(diǎn):
1. 將圖片服務(wù)和應用服務(wù)分離,緩解應用服務(wù)器的I/O負載。
2. 通過(guò)共享目錄的方式來(lái)進(jìn)行讀寫(xiě)操作,可以避免多服務(wù)器ヽ(′▽?zhuān)?ノ之間同步相關(guān)的問(wèn)題。
3.相對來(lái)講很靈活,也支持擴容(′ω`)/擴展。支持配置成獨立圖片服務(wù)(wu)器和域名訪(fǎng)問(wèn),方便日后的(′▽?zhuān)?擴展和優(yōu)化。
4.相對于更加復雜的分布式的NFS系統,這種方(fang)式是性?xún)r(jià)比高,符合目前互聯(lián)網(wǎng)的“短平快”的開(kāi)發(fā)(fa)模式。
缺點(diǎn) :
1. 共享目錄配置有些繁瑣。
2.會(huì )造成一定的(讀寫(xiě)和安全)性能損失。
3.如果圖片服務(wù)器出現問(wèn)題,那所有的應用都會(huì )受到影響。同時(shí)也對存儲服務(wù)器的性能要求特別高。
4.圖片上傳操作,還是得經(jīng)過(guò)Web服務(wù)器,這對Web服務(wù)器還是有巨大的壓力。
架構非常簡(jiǎn)單,基本架構如下圖所示:
在存儲服務(wù)器上建立一個(gè)共享目錄(具體方式,我就不去重復了,自己百度吧,注意共享目錄的文件安全)。
建立一個(gè)Web站點(diǎn)(i1.abc.com)將該共享目錄通過(guò)Web站點(diǎn)發(fā)布出去。這樣其它的應ヾ(?■_■)ノ用就能訪(fǎng)問(wèn)到相??關(guān)圖片。
所以,各應用將文件上傳到共享目錄
//保存原圖
//完整的地址:\\192.168.1.200\lib\( ?▽?)2016\03\04\10\IMG\4ugvvt6m9gdu.jp??g
relativePath = relative??Dir + fileName + imageExtension;
var absolutePath = Con(′?`)figHelper.SharePath + relativePath;
上(shang)傳成功后,可直接通過(guò)web 的方式訪(fǎng)問(wèn):
五、移動(dòng)M站建設
最近在一直在搞M站,也就是移動(dòng)Web站點(diǎn)。由于是第一次,也遇到了很多問(wèn)題,所以把最近了解??到的東西總結一番。聊一聊什么是移動(dòng)M站,以及它有什(′?_?`)么作用和優(yōu)勢。
有人會(huì )(hui)問(wèn),M站和APP有什么不同?
M站的推廣的渠道相比移??動(dòng)A(╯°□°)╯︵ ┻━┻PP,渠道較多,方便追蹤用戶(hù)來(lái)源、流量入ヽ(′▽?zhuān)?ノ口等,方便以后的活動(dòng)推廣和數據分析。
M站用戶(hù)無(wú)需安裝,輸入URL即可訪(fǎng)問(wèn),而APP需要下載安裝。
APP對用戶(hù)更具粘性及用戶(hù)體驗也更好。