系統可用率
系統可用率
系統可用率
多級緩存
系統可用率
多級緩存
動態分組切換
系統可用率
多級緩存
動態分組切換
DB物理隔離
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
漏斗模型
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
漏斗模型
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
漏斗模型
DB限流
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
漏斗模型
DB限流
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
漏斗模型
DB限流
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
漏斗模型
DB限流
系統可用率
多級緩存
動態分組切換
DB物理隔離
服務分組隔離
跨機房隔離
漏斗模型
DB限流
系統一般可以分為前端應用系統和後端數據庫系統,前端應用系統實施分佈式集群部署技術上是比較成熟的,後端數據庫系統實現異地多活技術難度很大,目前也只有阿里,京東這樣的公司才真正實現。因此,對於大多數應用,前端應用雙機房集群部署,後端數據庫系統採取成熟的主備從的模式,也就是單個機房作為寫入,備庫在另外機房,可以快速進行切換,讀庫雙機房部署,是優選的方案。對於這個架構方案,存在跨機房寫延長的問題,可以根據場景利用異步的方式進行解決,一般也是沒有問題的。對於系統來講,也有些特別,利用分揀中心的本地服務器和操作人員的設備,實現離線生產,進一步提高可用性。
大系統小做,服務拆分,是互聯網應用的特點,也符合敏捷交付的理念。對於傳統軟件,如Windows,Office等,都要經過一個漫長的需求,研發,測試,發佈週期,在“唯快不破”的互聯網時代,這顯然是無法滿足業務要求的,即使最後上線,也可能因為週期太長而不再適用了。因此,對一個互聯網服務,一般會首先完成最核心的功能,快速進行上線,不斷進行迭代,後續再進行輔助功能跟進。對於核心功能,隨著用戶數的增加,會不斷進行服務拆分,如何進行拆分,拆分到什麼樣的粒度,是不是微服務是解決問題的銀彈?這些都要根據實際的應用場景來評估,絕不是越細越好,而是要達到一個優雅的平衡。
併發控制,服務隔離。併發控制,現在已經成為互聯網服務基本要求,在應用程序端和數據庫端,也都有成熟的方案,如果忽略,可能造成災難性的後果。對於重要的服務,還要進行隔離,例如同一個服務,要提供給內部調用,公司級調用和公司外開放服務調用,開放服務調用者我們一般認為是不可靠的,甚至有可能是惡意的,如果不進行隔離,開放服務調用有可能使得服務資源佔滿,對內也無法提供服務。從技術上,可以是硬件級隔離,全部隔離,也可以是前端應用的隔離。
灰度發佈也是互聯網服務的一大利器,有了灰度發佈,才使得快速迭代成為可能,並且,很多服務因為各種原因線下也是很難測試的,只能在線上測試。如果沒有灰度發佈,只能全量發佈,就存在較長測試周期問題,如果沒有重複勉強上線,就存在很大的系統崩潰的風險。按照用戶,區域進行灰度發佈是比較常用的方法。
全方位監控報警,可以分為技術層面和業務層面,技術層面包括對CPU,內存,磁盤,網絡等的監控,業務層面,包括對處理積壓量,正常的業務量等。做到全方位監控,才有可能在影響用戶之前,提前解決問題,提升系統可用性。否則,等用戶發現問題,在很大的壓力下,技術團隊更難處理,導致系統不可用時間加長。
核心服務,平滑降級。任何技術手段,都不可能保障100%可用,並且,即使能夠做到,其代價也是巨大,不經濟的,因此,對於核心服務來講,能夠平滑進行降級,提供基礎的服務,也是非常重要的。對於系統來講,就利用分揀中心本地服務器和操作人員的設備,研發了離線生產系統,來應對集中服務萬一不可用的情況。
大型互聯網服務,一般都微服務化了,這樣意味著一個用戶操作,都是由多個服務接口支持,如果按照傳統的同步接口設計,那麼,不僅面臨性能問題,而且,QPS也是無法滿足的,因此,需要將同步接口調用異步化。在2012年左右,eBay就提出所有系統調用異步化,後面,幾乎所有大型互聯網公司,都對自身系統進行了異步化改造,並且,取得了很好的效果,在和騰訊CTO Tony交流中,他就提出即使支付這種服務,也是有辦法進行異步化設計的。同步接口異步化,也是需要系統工具支持的。
數據一致性
我們就能分為四個基本的場景:高實時性/高一致性,高實時性/低一致性,低實時性/高一致性,低實時性/低一致性。針對具體的業務,我們可以匹配到具體的數據場景,這樣,我們就能找到對應的解決方案
- 實時&強一致場景:這個在大數據技術成熟之前,是非常棘手的,但是,現在解決方案已經比較成熟了。典型應用是生產系統的實時監控,例如實時生產量,各個生產環節差異量等,其實是作為生產系統的一部分。利用當前主流的大數據處理架構是可以解決的,例如線上生產庫binlog實時讀取,Kafaka進行數據傳輸,Spark進行流式計算,ES進行數據存儲等。如果利用傳統的ETL抽取方案來解決,頻繁對生產數據庫進行抽取,並不是可行的方案,因為,這樣會極大的影響線上OLTP系統的性能。還可以舉一個生產系統實時監控案例,架構方案是應用系統完成寫數據庫的同時,把內容通過消息發送,後面的大數據處理系統接收消息來進行處理,這個架構方案,對於實時性某種程度上可以保障,但是,也存在效率問題,但是,對於強一致性就非常不合適了,因為消息系統如ActiveMQ等不僅無法保障消息數據不能丟失,而且對應消息順序也是無法保障,項目實施後,雖然採取了很多補救措施,也無法滿足強一致性需求,不得不重起爐灶。
- 實時&弱一致性場景:典型的應用場景是消息通知,例如電商的全程跟蹤消息,如果個別數據出現丟失,對於用戶的影響並不大,也是可以接受的,因此,可以採用更加廉價的解決方案,應用完成對應的動作後,將消息發出即可,使用方訂閱對應的消息,按照主鍵,如訂單號,存儲即可。
- 離線&強一致場景:這是典型的大數據分析場景,也就是眾多的離線報表模式。從技術上,傳統的ETL抽取技術也能滿足要求,數據倉庫對應的技術也能夠解決。
- 離線&弱一致場景:對於抓取互聯網數據,日誌分析等進行統計系統,用於統計趨勢類的應用,可以歸為此類,這類應用主要是看能夠有足夠廉價的方案來解決,是不是可以巧妙的利用空閒的計算資源。這個在很多公司,利用晚上空閒的計算資源,來處理此類的需求。
在對業務能首先是業務數據化,並且具有數據質量保障。系統的支撐下,實現了所有物流操作的線上化,也就是數據化,並且,對每個操作環節都是可以進行實時分析,這就奠定了很好的基礎。如果業務都是線下操作,或者系統無法準確及時收集數據,那麼,即時數據量夠大,缺乏關鍵數據和數據不準確,也會給大數據處理帶來很大的困難。第二基礎就是大數據處理技術,包括收集,傳輸,存儲,計算,展示等一系列技術。夠進行實時監控和準確評估後,也就是利用大數據對業務進行預測。預測一直是大數據應用的核心,也是最有價值的地方。對於物流行業,如果能夠提前進行業務量預測,那麼,對於資源調度等非常有意義,不僅能夠實現更好的時效,而且能夠避免浪費。舉一個的例子,就是單量預測,根據用戶下單量,倉儲生產能力,路由情況等,可以進行建模預測。
智慧物流,以大數據處理技術作為基礎,利用軟件系統把人和設備更好的結合起來,讓人和設備能夠發揮各自的優勢,達到系統最佳的狀態。