隨著社會數字化進程不斷的提升,數字技術正在以新方式、新理念、新形態逐漸融入我們的經濟、文化、生產生活等各個領域乃至全過程。而在這背后涌現出的是海量數據以及海量設備高并發等問題,這也使業務系統面臨前所未有的巨大的挑戰。目前OneNET城市物聯網平臺面對大連接的應用場景,經受住了海量數據和高并發的挑戰。那么,如此高的性能挑戰,平臺是如何進行應對的?
作者:張天智
單位:中移物聯網有限公司
Part 01
● 高并發框架 ●
高并發是一種在“同一時間點或極短時間內出現大量的操作請求”的場景。而傳統的網絡通信模型,在面對海量數據高并發場景,已經顯得力不從心;一款優秀的高并發框架是現階段網絡通信必不可少的一環,如:Grizzly、Netty,Mina。平臺在面對海量設備接入場景,選擇了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,其對于消息異步的處理,微服務之間的應用解耦也是不可或缺的部分。
“一帶一路”背景下,物流裝備企業的全球化發展 01月01日 08:00
解讀汽車物流全局數字化 08月16日 14:11
“大數據與智慧物流”專題報道 12月06日 14:24
2017年中國零售電商十大熱點事件點評 12月11日 16:35
供應鏈協同、互聯網+,中國制造業轉型的十個方向! 01月11日 10:42
預判:2018年,中國快遞十個可見趨勢 02月28日 11:16
2018年關于零售的18個趨勢 03月27日 10:51