在微服務框架中集成重量級算法服務的一種方案

概述

微服務架構作爲當前最流行的架構體系,它所集成的服務大都是輕量級的(這也是爲什麼叫微服務)。單個微服務內部實現邏輯簡單,處理客戶請求時間短,經常做一些數據的增刪改查操作。一般來說2到3千行代碼就可以實現一個微服務。

與輕量級的微服務對應的是重量級的算法服務。如何定義重量級服務呢?首先服務請求處理時間很長,一般在幾分鐘到幾個小時都有可能,視處理的數據量大小而定;其次,算法的輸入參數和輸出結果的數據量都很大。由於以上兩個原因,一般算法服務的併發能力都很弱(很多時候只允許同時處理一個請求,或者認爲它併發量就是1).

在微服務框架中如何集成這類算法服務呢? 我認爲需要考慮三個方面:
1. 算法服務自動發現和任務調度。
2 .算法服務的輸入參數和計算結果數據傳遞。
3. 算法服務和任務狀態監控。

整體架構圖

這裏寫圖片描述

算法調度服務

由於算法服務資源是有限的,算法服務的併發能力也很差或者說沒有併發能力。我們需要一個算法調度服務來分配資源。算法服務部署後通過心跳註冊(IP地址、服務狀態等信息),算法調度服務就拿到了所有算法服務的狀態和數量。

Client應用從算法調度服務申請計算任務,新任務添加到任務隊列裏面(可以放到內存也可以放到數據庫,推薦放到數據庫,重啓服務數據不丟失)。

算法調度服務檢測從算法服務上報的心跳,發現有算法服務空閒了,就從任務隊列中取出一個任務交給它去執行。

FTP服務器

由於算法服務是重型化的,它需要的輸入參數和計算後的結果 數據量都很大,直接通過restful接口傳遞不是特別合適。這裏提供一種思路:採用文件的方式傳遞。輸入參數和計算結果都通過JSON串的形式保存到文件,通過FTP上傳和下載。

監控進程

監控進程實際上是算法服務的守護進程,和算法服務部署到同一個虛擬機或者docker容器裏面。監控服務啓動後就開始週期性的向調度服務發送心跳。

這個監控進程不是必須的,如果算法服務本身實現了心跳上報的功能,就不需要了。但是如果要實現對算法服務的啓停功能(kill進程,啓動進程),那還是需要的。

上報心跳

上報心跳單獨拿出來說,上報心跳實現了很多功能:算法服務註冊,申請新任務,上報任務執行進度等。如果調度服務長時間收不到某個算法服務的心跳,會認爲它已經掉線了,會通知運維人員定位問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章