當前位置: 華文星空 > 汽車

物聯網、車聯網研發涉及到哪些關鍵技術,如儲存、大數據分析、高並行訊息處理(數據采集、分發、流轉)?

2015-03-09汽車

隨著社會數碼化行程不斷的提升,數碼技術正在以新方式、新理念、新形態逐漸融入我們的經濟、文化、生產生活等各個領域乃至全過程。而在這背後湧現出的是海量數據以及海量器材高並行等問題,這也使業務系統面臨前所未有的巨大的挑戰。目前公有雲平台、城市物聯網平台面對大連線的套用場景,經受住了海量數據和高並行的挑戰。實作了單節點百萬級器材接入,十萬級高並行能力,互動時延平均200毫秒。那麽,如此高的效能挑戰,平台是如何進行應對的?

Part 01

高並行框架

傳統的網絡模型,在面對海量數據高並行,已經顯得力不從心;一款優秀的高並行框架是現階段網絡通訊必不可少的一環。對於單節點百萬級的接入,Netty成為整個接入能力的核心框架。

-Netty是什麽

是一個異步事件驅動的Java開源網絡應用程式框架,用於快速開發可維護的高效能協定伺服器和客戶端。

-為什麽要選用Netty

相較於傳統的IO模型,Netty的IO執行緒NioEventLoop 聚合了多路復用器Selector,可以同時並行處理成千上萬個客戶端連線,線上程從客戶端讀寫數據閑暇時,執行緒可以進行其他任務,而無需等待讀寫數據。線上程模型上,Netty的執行緒模型也叫Reactor模型,核心是基於事件驅動的方式來處理事件; 其分布式的異步架構,使得事件處理器之間高度解耦,可以方便擴充套件事件處理邏輯;同時透過佇列暫存事件,執行緒消費事件,能方便並列異步處理事件。

-Netty的優勢是什麽

Netty適用於各種傳輸類別的統一API阻塞和非阻塞Socket;基於靈活且可延伸的事件模型,可以清晰地讓開發者專註於業務而無需關註底層架構,提升了開發效率;具備高度可客製的執行緒模型-單執行緒,一個或多個執行緒池;真正的無連線數據報套接字的支持。Zero-Copy技術使得Netty有更低的資源消耗,以及不必要的記憶體拷貝。

Part 02

微服務架構

「一根筷子易折斷,一把筷子難折斷」。對於平台也是一樣,巨大的單體式服務總會到達一個效能瓶頸。平台面對千萬級,乃至億萬級的接入,單體服務只能進行橫向擴充套件,部署更多的單體式服務;而單體式服務包含了全量的服務功能,任何一個功能出現問題,會面臨所有的功能都不可用;同樣單體式服務程式碼復雜度也非常高,在服務中包含了大量的業務邏輯。隨著時間推移,需求不斷增多,程式碼也越來越復雜,維護成本也越來越高,甚至對於修復bug和新增功能都要非常謹慎,可謂牽一發而動全身。
平台選擇微服務的整體架構設計,采用分布式部署的方式完美的解決了單體服務所面對的窘境。

-功能原子化,高可維護性

將復雜的單體式服務以功能點拆分為專註單一功能的微服務,並透過定義良好的介面清晰地表述服務邊界,由於體積小、復雜度低,易於保持高可維護性,並提高了研發效率。

-服務獨立性,部署風險低

微服務具備獨立的執行行程,可以單獨進行部署。當某個微服務發生變更時無需部署整個套用的服務,只需要對變更的微服務進行重新部署。使得釋出更加高效,降低了對正式環境所造成的部署風險,最終縮短套用受影響的時間。

-高擴充套件,高容錯

微服務便於橫向擴充套件,不同微服務在擴充套件需求存在差異時,可以根據微服務的實際需求進行獨立擴充套件,而不需要對整個套用進行擴充套件,節省了資源,提高了資源利用效率。

微服務也增加了套用的高容錯性,在單個微服務發生故障的情況下,不會影響到其他微服務,導致整個套用不可用。具備多個節點的微服務,上層的微服務會透過重試可用微服務或者平穩的故障轉移機制實作套用層面的高容錯性。

Part 03

負載均衡

面對大量的使用者存取,高並行請求,海量的數據,即使是使用高效能框架和微服務架構的設計也還不能完全解決套用服務的壓力。通常客戶端在請求伺服端時會有一個統一的存取入口,那這個統一的存取入口是如何將我們的請求分發到壓力較小的伺服器上去的呢?答案就是「負載均衡」

負載均衡,顧名思義就是將客戶端請求進行平衡,分攤到多個伺服器單元,最佳化資源的使用,最大化吞吐量,最小化響應時間並避免任何的單一資源過載的技術。

負載均衡的分類主要包含如下幾種:

-二層負載均衡

采用虛擬mac的形式,外部對虛擬mac地址請求,負載均衡接收後分配實際的mac地址服務進行響應處理。

-三層負載均衡

采用虛擬IP的方式,外部對虛擬IP的請求,負載均衡後分配到實際的IP地址進行響應

-四層負載均衡(TCP)

四層負載均衡是基於三層負載均衡透過釋出三層負載均衡的IP地址,加入四層的埠號,來決定哪些流量需要做負載均衡;LVS在四層負載均衡效能上高於Nginx的。

-七層負載均衡(HTTP)

七層負載均衡是在更高的套用層上執行負載均衡,會對每個訊息實際內容進行處理,主要透過解析訊息內容,得到訊息內容的有效標識,最終決定選擇的內部服務;例如選用URL來做出負載均衡決策;Nginx在功能性和便利性上是要好於LVS的。

平台負載均衡采用LVS+Keepalived+Nginx對業務流進行分發,實作整體負載均衡;支持TCP、UDP等協定的四層負載均衡;支持HTTP/HTTPs等協定的七層負載均衡;新增或刪除後端服務後可重新負載業務流。

Part 04

分布式中介軟體

高並行框架、微服務架構設計、負載均衡的使用解決了大部份的伺服端的並行壓力。但海量數據在磁盤中的讀寫,I/O的瓶頸也是非常明顯的。數據的儲存依舊也會造成套用服務的瓶頸。分布式中介軟體的使用就尤為重要了。

-分布式緩存

緩存是一種用於提高系統響應速度、改善系統執行效能的技術。緩存通常是基於記憶體的,數據庫中數據的讀寫通常是基於磁盤,從緩存讀取數據比從磁盤讀取數據快兩個數量級。

-分布式訊息佇列

訊息佇列是一種用於解決套用耦合、異步訊息、流量削鋒等場景的中介軟體技術。它可以實作高效能、高可用、可伸縮和最終一致性架構,是大型分布式系統不可缺少的中介軟體。

平台微服務架構設計方面同樣會使用緩存-分布式Redis緩存,分布式Redis緩存具有高效能、動態擴充套件、高可用、易用性等特點,采用集群方式來滿足高讀寫效能場景及容量需彈性變配的業務需求。也使用了分布式Kafka,其對於訊息異步的處理,微服務之間的套用解耦也是不可或缺的部份。