一種用電信息采集前置數據處理的方法及系統的制作方法
【專利摘要】本發明涉及一種用電信息采集前置數據處理的方法及系統,所述方法包括:(1)用epoll_create()函數創建文件描述,并設定管理的socket描述符數目;(2)創建與epoll關聯的接收線程;(3)創建偵聽socket描述符ListenSock,并設定為非阻塞模式,調用Listen()函數在套接字上偵聽有無新的連接請求;(4)如有新的連接請求,調用accept()函數,將客戶端socket描述符添加到epoll_data聯合體,并設定該描述符為非阻塞,在epoll_event結構中設置要處理的事件類型為讀和寫;(5)如socket描述符上有數據可讀,則將該socket描述符加入可讀隊列,并通知接收線程讀入數據,將接收到的數據放入到接收數據的鏈表中,將反饋的數據包放入到發送數據鏈表中,等待發送線程發送。
【專利說明】一種用電信息采集前置數據處理的方法及系統
【技術領域】
[0001]本發明涉及一種數據處理方法及系統,具體講涉及一種用電信息采集前置數據處理的方法及系統。
【背景技術】
[0002]人們將(smart power grids)電網的智能化稱為“電網2.0”,并將其概括為以集成的、高速雙向通信網絡為基礎,應用傳感和測量技術、設備技術、控制方法和決策支持系統實現電網的可靠、安全、經濟、高效、環境友好和使用安全的目的,主要特征包括自愈、激勵和包括用戶、抵御攻擊、提供滿足用戶21世紀電能的需求質量、容許接入不同發電形式、啟動電力市場以及資產的高效優化運行。
[0003]隨著電網運營管理智能化的進一步發展,配用電系統部署和安裝了大量智能設備(如配電終端、智能電表和傳感器等)。為了支撐更復雜、更智能化的配用電業務,需要對智能設備量測點進行密度和頻率更高的監視和采集。為了滿足集約化、精益化管理的要求,系統集中建設和部署是未來必然趨勢。各網省電力公司用電信息采集系統的用戶規模,一般基本處于百萬甚至千萬級以上,鑒于終端每15min上送一次數據,這樣若本次任務未在15min內處理完一個周期內的大量數據,就會導致隊列堆積和數據后續處理的延遲,因此省級集中的用電信息采集前置機系統將面臨著千萬級數據潮涌的巨大壓力。
[0004]由于現有的用電信息采集架構為一個分層的網絡框架,這樣前置機系統在通信上接入的是采集終端而非智能電表,所以前置機系統需直接接入的對象數量會大大減少。但隨著IP通信技術的發展,并基于網絡標準化和可擴展性方面的考慮,把IP通信技術用于用電信息采集系統本地網絡(以下簡稱本地網絡)的趨勢日益突出,尤其是IPv6本地網絡的進一步應用,未來每個智能電表和傳感器將具有獨立的IP地址,主站系統和末端智能設備將端到端直接通信,因此前置機系統的前置服務器面臨的壓力將更大,而大量連接通信鏈路和處理數據無疑將嚴重影響整個系統的可靠性、實時性和擴展性。
【發明內容】
[0005]針對現有技術的不足,本發明提供一種用電信息采集前置數據處理的方法及系統,為了更好地解決具有IP地址的海量智能設備接入到主站,而帶來的一系列高并發、潮涌式堵塞等問題,本發明提出一種新的網絡負載均衡算法處理網絡連接問題;提出在前置服務器上搭建EPOLL模型對交互數據進行處理;提出增加前置路由模塊,負責前置機和應用服務的數據處理。本發明針對基于IP端點的智能電表等海量計量終端數據通訊時的接入“瓶頸”問題,改進采集系統的框架模塊,并提出一種用電信息海量數據接入的方法,解決了超大規模連接時的高并發和擁堵問題。
[0006]本發明的目的是采用下述技術方案實現的:
[0007]—種用電信息采集前置數據處理的方法,其改進之處在于,所述方法包括
[0008](I)用epoll_create O函數創建文件描述,并設定管理的socket描述符數目;
[0009](2)創建與印oil關聯的接收線程;
[0010](3)創建偵聽socket描述符ListenSock,并設定為非阻塞模式,調用Listen O函數在套接字上偵聽有無新的連接請求;
[0011](4)如有新的連接請求,調用acceptO函數,將客戶端socket描述符添加到epoll_data聯合體,并設定該描述符為非阻塞,在epoll_event結構中設置要處理的事件類型為讀和寫;
[0012](5)如socket描述符上有數據可讀,則將該socket描述符加入可讀隊列,并通知接收線程讀入數據,將接收到的數據放入到接收數據的鏈表中,將反饋的數據包放入到發送數據鏈表中,等待發送線程發送。
[0013]優選的,所述步驟(2)包括創建與印oil關聯的接收線程,應用程序可以創建接收線程處理印oil上的讀通知事件,線程的數量依賴于程序的具體需要和設備環境。
[0014]優選的,所述步驟(3)包括創建偵聽socket描述符ListenSock ;將該描述符設定為非阻塞模式,調用ListenO函數在套接字上偵聽有無新的連接請求,在epoll_event結構中將要處理的事件類型設置為EP0LLIN,工作方式為印oll_ET,使用印oll_ctl O注冊事件,啟動網絡監視線程。
[0015]優選的,所述步驟(4)包括epoll事件表明有新的連接請求,則調用accept O函數,將客戶端socket描述符添加到epoll_data聯合體,設定該描述符為非阻塞,在epoll_event結構中設置要處理的事件類型為讀和寫,工作方式為epoll_ET。
[0016]優選的,所述步驟(5)包括如印oil事件表明socket描述符上有數據可讀,則將該socket描述符加入可讀隊列,并通知接收線程讀入數據,將接收到的數據放入到接收數據的鏈表中,經邏輯處理,將反饋的數據包放入到發送數據鏈表中,等待由發送線程發送。
[0017]進一步地,如接收數據的鏈表長度到達一定閥值,則創建本地文件,對數據接收鏈表溢出數據進行本地緩存。
[0018]進一步地,所述網絡監視線程啟動循環中,epoll_wait()等待epoll事件發生。
[0019]本發明基于另一目的提供的一種用電信息采集前置數據處理系統,其改進之處在于,所述系統包括依次連接的應用服務模塊、前置機路由模塊、前置機集群、網絡負載均衡器和用電終端。
[0020]優選的,所述前置機路由模塊分別與應用服務器模塊和前置機集群連接,以將前置機解析數據發送相應的應用服務模塊中;保存終端網絡信息和前置機服務器網絡信息的關聯結構圖,響應前置機的關聯修改請求。
[0021]優選的,所述前置機集群:包括多臺相互獨立、通過高速網絡互聯的計算機,并以單一系統模式進行管理。
[0022]優選的,所述網絡負載均衡器設定前置服務器上可連接的客戶端個數,將連接請求依次循環地連接于每個允許連接的服務器上。
[0023]進一步地,連接數達到設定的閾值時,根據各個前置服務器的實時負載情況進行適當的分配;由位于前置服務器的性能監測軟件經過集群間的“心跳”專用線傳輸前置服務器的實時負載。
[0024]進一步地,所述前置路由模塊保存前置機攜帶終端IP信息的和本機IP地址的注冊關聯表,在下行數據傳輸時,前置路由模塊根據終端信息,在注冊關聯表中找到對應的前置服務器,將下行數據傳輸到該前置服務器上進行報文組裝和下發;發生socket遷移時,前置路由接受上行的更改命令對注冊關聯表進行修改。
[0025]與現有技術比,本發明的有益效果為:
[0026]本發明利用現有的集群服務器技術,修改針對網絡連接的網絡負載均衡算法對并發連接進行合適的分流,并在網絡負載均衡器上增加客戶端連接的遷移算法實現前置機服務器的故障遷移和柔性擴容;同時在方案中增加前置機路由模塊完成上行報文準確的下發到用電終端,分擔和緩解前置機服務器負載;并且在前置機服務器搭建EPOLL模塊進行數據流處理。本發明解決了基于IP端點的智能電表等計量終端海量連接時的高并發和擁堵的“瓶頸”問題。
【專利附圖】
【附圖說明】
[0027]圖1為本發明提供的一種用電信息采集前置數據處理系統結構圖。
[0028]圖2為本發明提供的客戶端TCP連接到前置機分配圖。
[0029]圖3為本發明提供的客戶端SOCKET建立后的數據連接圖。
[0030]圖4為本發明提供的一種用電信息采集前置數據處理的方法流程圖。
[0031]圖5為本發明提供的前置路由模塊數據流向圖。
【具體實施方式】
[0032]下面結合附圖對本發明的【具體實施方式】作進一步的詳細說明。
[0033]本發明中涉及公知函數解釋如下:
[0034]epoll O:在Iinux的網絡編程中,相比于select機制所提出的新方法;
[0035]epoll_create O:用來創建一個epoll的句柄,size用來告訴內核監聽數目的大小;
[0036]socket描述符:即套接字描述符;
[0037]ListenSock:即偵聽套接字;
[0038]ListenO:即偵聽方法;
[0039]acceptO:即接受新的連接;
[0040]epoll_data:即 epoll 數據;
[0041]epoll_event:即 epoll 事件;
[0042]EP0LLIN:表示對應的文件描述符可以讀(包括對端SOCKET正常關閉);
[0043]EP0LL_ET:將EPOLL設為邊緣觸發(Edge Triggered)模式,這是相對于水平觸發(Level Triggered)來說的;
[0044]epoll_ctl():該函數用于控制某個印oil文件描述符上的事件,可以注冊事件,修改事件,刪除事件;
[0045]epoll_wait ():等待事件的產生,類似于select O調用。
[0046]本發明中的系統結構如附圖1所示,其中應用服務模塊和用電終端為和
【發明內容】
相關的數據來源和數據流向,
【發明內容】
包括:
[0047](I)前置機路由模塊:連接應用服務器模塊和前置機集群,主要作用是把前置機的解析數據發送相應的應用服務模塊中;同時根據關聯關系,把下行數據準確的發送。在本模塊中保存終端網絡信息和前置機服務器網絡信息的關聯結構圖,并響應前置機的關聯修改請求。
[0048]前置路由模塊保存前置機攜帶終端IP信息的和本機IP地址的注冊關聯表,在下行數據傳輸時,前置路由模塊根據終端信息,在注冊關聯表中找到對應的前置服務器,并把下行數據傳輸到該前置服務器上進行報文組裝和下發。當發生socket遷移時,前置路由接受上行的更改命令對注冊關聯表進行修改。
[0049](2)前置機集群:是N臺相互獨立、通過高速網絡互聯的計算機,它們構成一個組,并以單一系統模式加以管理,可以提高服務器性能、降低成本、提高可擴展性、增強可靠性。本發明中采用的是負載均衡集群。
[0050](3)網絡負載均衡器:網絡負載均衡器對用電客戶端連接按現有前置機集群的處理能力進行分流,負載均衡策略按照“閾值輪循+動態負載反饋”的方法,擴展網絡連接吞吐量,加強前置機數據處理能力。在本方案中,網絡負載均衡器中運行狀態機和前置機服務器的狀態機進行呼應,處理故障時socket的遷移及擴容時前置機服務器的負載分流。
[0051]網絡負載均衡器的實現算法,主要針對客戶端連接分流均衡算法:先設定前置服務器上可連接的客戶端個數,順序循環將連接請求依次順序循環地連接每個允許連接的服務器上;當連接數達到設定的閾值時,根據各個前置服務器的實時負載情況進行適當的分配。前置服務器的實時負載由位于前置服務器的性能監測軟件經過集群間的“心跳”專用線傳輸。另外采用一定的算法處理故障遷移和擴容時的負載均衡。
[0052]基于IP的終端設備發起連接請求到網絡負載均衡器,由網絡負載均衡器根據“閾值輪循+動態負載反饋”算法對所有的連接請求進行分發到前置集群中的各個前置服務器上。如圖2所示,分發的原則是依據前置服務器的連接數據和實時負載情況,并由各個前置服務器和終端建立通訊鏈路,在通訊連接建立后,具體的數據傳輸如圖3所示,直接在前置服務器和終端之間交互。此時,網絡負載均衡器保存各個終端的連接信息,并只對鏈路的連接情況進行監測。
[0053]前置服務器每建立一個客戶端請求連接,則要在前置機路由模塊上注冊相應的連接信息,如圖5所示,假如終端IP地址為192.168.1.202,經網絡負載均衡器分配到IP地址為192.168.1.104的前置服務器上,在連接請求建立后,前置服務器則把連接信息注冊到前置路由模塊上,即在前置路由模塊上新增IP地址為192.168.1.104和192.168.1.202的關系對。當有上行數據傳輸時,經前置服務器解析處理后直接上送到應用服務模塊,當有下行數據時傳輸,由應用服務模塊把待發送的數據和終端信息發送到前置機路由模塊,前置機路由模塊根據終端信息查找到和該終端通訊的前置服務器,并經由查找到的前置服務器對數據組裝格式化后下發到所要發送到的終端。
[0054]本發明一種用電信息采集前置數據處理的方法具體為:
[0055]在前置機對數據流進行處理時采用印oil模型,epoll模型主要負責對大量并發用戶的請求進行及時處理,完成服務器與客戶端的數據交互。其具體的實現步驟如下:
[0056](I)使用epoll_create O函數創建文件描述,設定將可管理的最大socket描述符數目。
[0057](2)創建與印oil關聯的接收線程,應用程序可以創建多個接收線程來處理epoll上的讀通知事件,線程的數量依賴于程序的具體需要和設備環境。
[0058](3)創建一個偵聽socket描述符ListenSock ;將該描述符設定為非阻塞模式,調用ListenO函數在套接字上偵聽有無新的連接請求,在epoll_event結構中設置要處理的事件類型EP0LLIN,工作方式為印oll_ET,以提高工作效率,同時使用印oll_ctl()注冊事件,最后啟動網絡監視線程。
[0059](4)網絡監視線程啟動循環,epoll_wait O等待epoll事件發生。
[0060](5)如果epoll事件表明有新的連接請求,則調用acceptO函數,將客戶端socket描述符添加到epoll_data聯合體,同時設定該描述符為非阻塞,并在epoll_event結構中設置要處理的事件類型為讀和寫,工作方式為印oll_ET。
[0061](6)如果epoll事件表明socket描述符上有數據可讀,則將該socket描述符加入可讀隊列,通知接收線程讀入數據,并將接收到的數據放入到接收數據的鏈表中,經邏輯處理后,將反饋的數據包放入到發送數據鏈表中,等待由發送線程發送。
[0062](7)如果接收數據的鏈表長度到達一定閥值,則創建本地文件,對數據接收鏈表溢出數據進行本地緩存。
[0063]實施例
[0064]一種用電信息采集前置數據處理的方法具體步驟如下:
[0065](I)在前置服務器上建立一定數量的線程,并由線程池統一管理;
[0066](2)當客戶端進行連接時,由主線程對此連接建立通訊并把該客戶端加入到epoll監視事件中;
[0067](3)當epoll監測到某連接有可讀事件時則通知接收線程進行數據讀取,并判斷數據接收鏈表長度是否到達最大值,如果沒有則把讀到的數據插入到鏈表中;否則把讀到的數據以本地文件的形式進行緩存,并等待文件操作線程處理本地文件;
[0068](4)數據處理線程不斷的從數據接收鏈表中取出數據進行解析、處理;當有下行數據命令時,數據處理線程直接把數據保存到數據發送鏈表中等待處理;
[0069](5)數據發送線程檢測到待發送鏈表中有數據時,從中取出數據經由數據處理線程組裝格式化處理后下發到前置路由模塊進行分發。
[0070]綜上所述,本發明針對基于IP端點的智能電表等海量計量終端數據通訊時的接入“瓶頸”問題,改進采集系統的框架模塊,并提出一種用電信息海量數據接入的方法,解決了超大規模連接時的高并發和擁堵問題。
[0071]最后應當說明的是:以上實施例僅用以說明本發明的技術方案而非對其限制,所屬領域的普通技術人員參照上述實施例依然可以對本發明的【具體實施方式】進行修改或者等同替換,這些未脫離本發明精神和范圍的任何修改或者等同替換,均在申請待批的本發明的權利要求保護范圍之內。
【權利要求】
1.一種用電信息采集前置數據處理的方法,其特征在于,所述方法包括 (1)用epoll_createO函數創建文件描述,并設定管理的socket描述符數目; (2)創建與印oil關聯的接收線程; (3)創建偵聽socket描述符ListenSock,并設定為非阻塞模式,調用ListenO函數在套接字上偵聽有無新的連接請求; (4)如有新的連接請求,調用acceptO函數,將客戶端socket描述符添加到epoll_data聯合體,并設定該描述符為非阻塞,在ep0ll_eVent結構中設置要處理的事件類型為讀和與; (5)如socket描述符上有數據可讀,則將該socket描述符加入可讀隊列,并通知接收線程讀入數據,將接收到的數據放入到接收數據的鏈表中,將反饋的數據包放入到發送數據鏈表中,等待發送線程發送。
2.如權利要求1所述的一種用電信息采集前置數據處理的方法,其特征在于,所述步驟(2)包括創建與印oil關聯的接收線程,應用程序可以創建接收線程處理印oil上的讀通知事件,線程的數量依賴于程序的具體需要和設備環境。
3.如權利要求1所述的一種用電信息采集前置數據處理的方法,其特征在于,所述步驟(3)包括創建偵聽socket描述符ListenSock ;將該描述符設定為非阻塞模式,調用Listen O函數在套接字上偵聽有無新的連接請求,在epoll_event結構中將要處理的事件類型設置為EP0LLIN,工作方式為印oll_ET,使用印oll_ctl()注冊事件,啟動網絡監視線程。
4.如權利要求1所述的一種用電信息采集前置數據處理的方法,其特征在于,所述步驟(4)包括epoll事件表明有新的連接請求,則調用accept O函數,將客戶端socket描述符添加到epoll_data聯合體,設定該描述符為非阻塞,在epoll_event結構中設置要處理的事件類型為讀和寫,工作方式為epoll_ET。
5.如權利要求1所述的一種用電信息采集前置數據處理的方法,其特征在于,所述步驟(5)包括如epoll事件表明socket描述符上有數據可讀,則將該socket描述符加入可讀隊列,并通知接收線程讀入數據,將接收到的數據放入到接收數據的鏈表中,經邏輯處理,將反饋的數據包放入到發送數據鏈表中,等待由發送線程發送。
6.如權利要求5所述的一種用電信息采集前置數據處理的方法,其特征在于,如接收數據的鏈表長度到達一定閥值,則創建本地文件,對數據接收鏈表溢出數據進行本地緩存。
7.如權利要求3所述的一種用電信息采集前置數據處理的方法,其特征在于,所述網絡監視線程啟動循環中,epoll_wait O等待epoll事件發生。
8.一種適用于權利要求1?7任一項的方法的用電信息采集前置數據處理系統,其特征在于,所述系統包括依次連接的應用服務模塊、前置機路由模塊、前置機集群、網絡負載均衡器和用電終端。
9.如權利要求8所述的一種用電信息采集前置數據處理系統,其特征在于,所述前置機路由模塊分別與應用服務器模塊和前置機集群連接,以將前置機解析數據發送相應的應用服務模塊中;保存終端網絡信息和前置機服務器網絡信息的關聯結構圖,響應前置機的關聯修改請求。
10.如權利要求8所述的一種用電信息采集前置數據處理系統,其特征在于,所述前置機集群:包括多臺相互獨立、通過高速網絡互聯的計算機,并以單一系統模式進行管理。
11.如權利要求8所述的一種用電信息采集前置數據處理系統,其特征在于,所述網絡負載均衡器設定前置服務器上可連接的客戶端個數,將連接請求依次循環地連接于每個允許連接的服務器上。
12.如權利要求11所述的一種用電信息采集前置數據處理系統,其特征在于,連接數達到設定的閾值時,根據各個前置服務器的實時負載情況進行適當的分配;由位于前置服務器的性能監測軟件經過集群間的“心跳”專用線傳輸前置服務器的實時負載。
13.如權利要求9所述的一種用電信息采集前置系統,其特征在于,所述前置路由模塊保存前置機攜帶終端IP信息的和本機IP地址的注冊關聯表,在下行數據傳輸時,前置路由模塊根據終端信息,在注冊關聯表中找到對應的前置服務器,將下行數據傳輸到該前置服務器上進行報文組裝和下發;發生socket遷移時,前置路由接受上行的更改命令對注冊關聯表進行修改。
【文檔編號】H04L29/06GK104243481SQ201410494447
【公開日】2014年12月24日 申請日期:2014年9月24日 優先權日:2014年9月24日
【發明者】欒文鵬, 周逢權, 徐大青, 張展國 申請人:國家電網公司, 中國電力科學研究院, 許繼集團有限公司, 國網浙江省電力公司