一種應用程式高並發高負荷處理方法和系統與流程
2023-07-09 22:07:56 1

本發明涉及移動終端應用程式技術領域,特別是涉及一種應用程式高並發高負荷處理方法和系統。
背景技術:
隨著網絡信息技術的不斷進步,移動終端應用程式也得以快速發展,以滿足人們多樣化需求,而隨之而來的也是業務的不斷增長,用戶基數越來越大、訪問量越來越高,有的應用程式從一開始設計的系統架構己經不能再支撐百萬級的訪問量,產品表現得越來越慢,消耗資源越來越高,用戶等待時間越來越長。面對這類問題目前的一種有效解決方式是負載均衡,即在伺服器集群中,設置一臺伺服器充當調度者的角色,用戶的所有請求都會首先由它接收,調度者再根據每臺伺服器的負載情況將請求分配給某一臺後端伺服器去處理,在這個過程中,調度者如何合理分配任務,保證所有後端伺服器都將性能充分發揮,從而保持伺服器集群的整體性能最優。採用負載均衡雖然能夠一定程度上緩解相應問題,但是面對數量級增長的用戶訪問還是顯得不夠。這是it行業一些開發產品的瓶頸通病,在高並發、高訪問、高負荷壓力下出現響應延遲甚至無法響應,使用戶失去耐心等待而棄用該產品。
技術實現要素:
本發明的目的是提供一種應用程式高並發高負荷處理方法和系統,以解決現有技術中的一些應用程式在高並發、高負荷壓力下無法快速響應的技術問題。
為實現上述目的,本發明提供了如下方案:
一種應用程式高並發高負荷處理方法,包括步驟:
以protocolbuffers數據替代json數據作為後端api跟客戶端交互的數據傳輸方式;
通過redis集群將數據交由後端api返回到客戶端;
通過高速消息隊列kafka來聯接任務調度系統。
其中,所述步驟通過高速消息隊列kafka來聯接任務調度系統,還包括步驟:
使日誌文件根據broker中的配置要求,將被消費消息保留預定的時間之後刪除。
其中,所述步驟通過高速消息隊列kafka來聯接任務調度系統還包括步驟:
使consumer保存被消費消息的offset,並控制offset的保存和使用。
其中,所述步驟通過高速消息隊列kafka來聯接任務調度系統還包括步驟:
使consumer和producer的狀態信息由zookeeper保存。
其中,所述步驟通過redis集群將數據交由後端api返回到客戶端,還包括步驟:
redis集群支持數據從主伺服器向任意數量的從伺服器上同步。
本發明實施例還提供一種應用程式高並發高負荷處理系統,與客戶端、後端api數據連接,包括protocolbuffers數據傳輸模塊、redis集群模塊、高速消息隊列kafka模塊和任務調度系統;
所述protocolbuffers數據傳輸模塊,用於以protocolbuffers數據替代json數據作為後端api跟客戶端交互的數據傳輸方式;
所述redis集群模塊,用於通過redis集群將數據交由後端api返回到客戶端;
所述高速消息隊列kafka模塊,用於通過高速消息隊列kafka來聯接所述任務調度系統。
其中,所述高速消息隊列kafka模塊,還用於使日誌文件根據broker中的配置要求,將被消費消息保留預定的時間之後刪除。
其中,所述高速消息隊列kafka模塊,還用於使consumer保存被消費消息的offset,並控制offset的保存和使用。
其中,所述高速消息隊列kafka模塊,還用於使consumer和producer的狀態信息由zookeeper保存。
其中,所述redis集群模塊,還用於支持數據從主伺服器向任意數量的從伺服器上同步。
根據本發明提供的具體實施例,本發明公開了以下技術效果:基於本發明提供的應用程式高並發高負荷處理方法和系統,主要包括protocolbuffers數據傳輸、redis集群、消息隊列kafka、任務調度系統四項功能,kafka的機制能夠有效釋放磁碟空間,減少消息消費之後對文件內容改動的磁碟io開支,而consumer和producer狀態信息由zookeeper保存,kafka集群幾乎不需要維護任何,因此producer和consumer的客戶端實現非常輕量級,它們可以隨意離開,而不會對集群造成額外的影響,redis集群支持主從同步,數據可以從主伺服器向任意數量的從伺服器上同步,對讀取操作的可擴展性和數據冗餘很有幫助,protocolbuffers相比較一些其他的xml技術而言,更加節省空間、速度更快,總的來說,本發明提供的應用程式高並發高負荷處理方法和系統,能夠使移動終端應用程式在高負載高並發情況下表現出更優的處理效果。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明的高並發高負荷處理方法的主要流程示意圖;
圖2為kafka集群架構下的基本工作流程示意圖;
圖3為redis資料庫的架構組成示意圖;
圖4為java環境下protocolbuffers的基本操作流程示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
本發明的目的是提供一種應用程式高並發高負荷處理方法和系統。
實施例一
本發明實施例一提供一種應用程式高並發高負荷處理方法,參見圖1所示,該方法包括:
步驟s110,以protocolbuffers數據替代json數據作為後端api跟客戶端交互的數據傳輸方式。
在後端api(applicationprogramminginterface,應用程式編程接口)跟前端客戶端android、ios交互中,以高效率的protocolbuffers數據來替代傳統json數據的傳輸方式。
步驟s111,通過redis集群將數據交由後端api返回到客戶端。
前端android、ios客戶端與後端api傳輸數據,不再以db方式直連,而是通過redis集群將數據交由api返回到前端,避免db資源的消耗、以獲取最大性能指標。
步驟s112,通過高速消息隊列kafka來聯接任務調度系統。
通過高速消息隊列kafka來聯接任務調度系統,使各大後端子系統與模塊之間緊密相結合。
參見圖2所示,在本發明實施例中,kafka提供了類似於jms的特性,但是在設計實現上完全不同,此外它並不是jms規範的實現。kafka對消息保存時根據topic進行歸類,發送消息者成為producer,消息接受者成為consumer,一個topic可以包括一個或多個partition,此外kafka集群有多個kafka實例組成,每個實例(server)成為broker。無論是kafka集群,還是producer和consumer都依賴於zookeeper來保證系統可用性集群保存一些meta信息。圖2中blockingqueue為阻塞隊列,sendthread為發送線程,kafkacluster為kafka集群,syncproducer即同步producer,形成producerpool即producer池。
在本發明實施例中,kafka和jms(javamessageservice)實現(activemq)不同的是:即使消息被消費,消息仍然不會被立即刪除。日誌文件將會根據broker中的配置要求,保留一定的時間之後刪除;比如log文件保留2天,那麼兩天後,文件會被清除,無論其中的消息是否被消費。kafka通過這種簡單的手段,來釋放磁碟空間,以及減少消息消費之後對文件內容改動的磁碟io開支。
對於consumer而言,它需要保存消費消息的offset,對於offset的保存和使用,有consumer來控制;當consumer正常消費消息時,offset將會"線性"的向前驅動,即消息將依次順序被消費。事實上consumer可以使用任意順序消費消息,它只需要將offset重置為任意值。
此外,kafka集群幾乎不需要維護任何consumer和producer狀態信息,這些信息有zookeeper保存;因此producer和consumer的客戶端實現非常輕量級,它們可以隨意離開,而不會對集群造成額外的影響。
參見圖3所示,在本發明實施例中,redis是一個高性能的key-value資料庫redis的出現,很大程度補償了memcached這類key/value存儲的不足,可以對關係資料庫起到很好的補充作用。它提供了java,c/c++,c#,php,javascript,perl,object-c,python,ruby,erlang等客戶端,使用很方便。
redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得redis可執行單層樹複製。存檔可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。
在本發明實施例中,protocolbuffers是一個用來序列化結構化數據的技術,支持多種語言諸如c++、java以及python語言,可以使用該技術來持久化數據或者序列化成網絡傳輸的數據。相比較一些其他的xml技術而言,該技術的一個明顯特點就是更加節省空間(以二進位流存儲)、速度更快以及更加靈活。參見圖4所示,圖4是java環境下protocolbuffers的基本操作流程。
實施例二
本發明實施例二提供一種應用程式高並發高負荷處理系統。該系統與客戶端、後端api數據連接,包括protocolbuffers數據傳輸模塊、redis集群模塊、高速消息隊列kafka模塊和任務調度系統。
其中protocolbuffers數據傳輸模塊,用於以protocolbuffers數據替代json數據作為後端api跟客戶端交互的數據傳輸方式;redis集群模塊,用於通過redis集群將數據交由後端api返回到客戶端;高速消息隊列kafka模塊,用於通過高速消息隊列kafka來聯接所述任務調度系統。
本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本發明的方法及其核心思想;同時,對於本領域的一般技術人員,依據本發明的思想,在具體實施方式及應用範圍上均會有改變之處。綜上所述,本說明書內容不應理解為對本發明的限制。