1. 程式人生 > >DRM動態資源管理框架

DRM動態資源管理框架

1. 背景介紹

        隨著系統複雜性增加和靈活化性,配置化的需求,需要能夠動態改變程式執行軌跡,在不同的場景下程式執行不同軌跡,說直白點就是不用重啟服務就能夠動態改變程式中物件對應的屬性值,根據推送的不同屬性值來路由不同的處理邏輯,使的系統能夠靈活路由。

2. 框架設計說明

2.1 框架需要解決的問題

        在設計drm框架的時候,需要考慮以下幾個問題:

(1) 持久化問題:就是在Client重啟的時候,應該如何保證Client能夠重新接收到屬於持久化標記的推送資訊?去伺服器端拉取?還是其他?

(2) 特定機器和全部機器推送的問題:如何實現對單臺或者多臺單獨推送的問題?如何實現對所有的機器廣播的問題?

(3) 推送操作日誌記錄問題:記錄推送的歷史

(4) 定時推送的問題

(5) 簡化Client實現:使得使用方方便的接入使用

2.2 總體框架


        Drm整體設計框架是利用Zookeeper作為配置中心的思想,通過Zookeeper提供的watch機制來實現Client對推送資訊的監聽,通過動態建立ZK目錄層次結構來實現動態配置資訊的推送,對應的目錄結構設計如下:

/CTFIN/DRM/系統名/特定機器名/類名/屬性名/persist 

/CTFIN/DRM/系統名 /特定機器名/類名/屬性名/nopersist 

/CTFIN/DRM/系統名 /all/類名/屬性名/persist 

/CTFIN/DRM/系統名 /all/類名/屬性名/nopersist 

/CTFIN/DRM/系統名 /all/ip/應用程式對應的ip地址(這個節點是臨時節點)

        就是客戶端在啟動的時候都去判斷對應的zk路徑:/CTFIN/DRM/系統名/all/類名/屬性名 是否存在,如果不存在,則進行建立,並且還會拉取已經存在的路徑/CTFIN/DRM/系統名/all/類名/屬性名/persist 和/CTFIN/DRM/系統名/特定機器/類名/屬性名/persist 對應的屬性值進行屬性設定---》實現了持久化功能;

        後臺在推送值時候會根據推送標記是否持久化,進行節點路徑persist和nopersist的建立,客戶端監控節點/CTFIN/DRM/系統名/特定機器/類名/屬性名 對應的資料變化,一旦該表則會通知客戶端,客戶端接收到到通知則會進行詳細屬性值得變更。

          應用程式對應的ip地址也放在對應的路徑上,是因為這樣後臺就能獲得應用程式部署到哪些機器上了(方便推送),這個路徑的建立也是在客戶端應用程式啟動的時候進行建立。


        管理後臺通過推送(建立對應的ZK node節點)將要推送到Client的資訊推送的配置中心ZK,即是在Zk上建立對應的目錄結構,Client通過監聽ZK對應節點的Child和Data 變更資訊來實現Client對應的配置資訊動態修改,為了進一步簡化客戶端的操作,定義了一套註解(DrmClassResource,DrmFieldResource)用於標記哪個類對應的哪個屬性需要通過drm動態推送。

2.2.1 管理推送端

對應的主要類圖如下:


其中介面DrmConfRequestParamPersist是需要使用方自己實現對應的推送日誌持久化操作的。

2.2.2 DRM client客戶端

客戶端對應的主要類圖如下:


            類DrmResourceParserFactory是整個Drm Client的核心,其主要的功能如下:

                (1)對應的init方法中,其會遍歷整個Spring Context找到有註解@DrmClassResource的類,並對這樣的類進行校驗,校驗點有是否有屬性有@DrmFieldResource註解和對應的類是否實現了DrmResourceManager介面(不進行判斷了,可以實現這個介面也可以不實現)。

            (2)根據Drm推送的資訊ClassName + fieldname 找到對應的實體Bean,在使用反射將對應的drmValue設定到被@DrmFieldResource之前,會呼叫對應實體bean的beforeUpdate方法,然後再進行反射設定值,值設定完成之後還會呼叫實體bean的afterUpdate方法。

         類ZkChangeMonitor是Client啟動的時候自動註冊和載入對應的perisist對應的內容和註冊對應的監聽器。

3. 使用說明

3.1 DRM admin使用

步驟:

(1)增加maven依賴

    <dependency>

            <groupId>com.ctfin.framework</groupId>

            <artifactId>drm</artifactId>

            <version>1.0.0</version>

    </dependency>

(2)實現介面DrmConfRequestParamPersist完成對應的推送日誌記錄操作

(3)在配置檔案中增加zkclient地址配置:

        如properties檔案中增加zk.server.addr=192.168.1.202:2181

       如yaml檔案中增加zk.server.addr: 192.168.1.202:2181

(4)呼叫DrmService對應的push方法即可

(5)增加Component 掃描路徑:com.ctfin.framework.drm.server

3.2 DRM Client使用

步驟:

(1)增加maven依賴

    <dependency>

            <groupId>com.ctfin.framework</groupId>

            <artifactId>drm</artifactId>

            <version>1.0.0</version>

    </dependency>

(2)在配置檔案中增加如下屬性:

            applicationName應用程式的名稱

            zk.server.addr: zk對應的地址和埠

            如yaml檔案中對應的配置如下:

                    applicationName: kccf

                    zk.server.addr: 192.168.1.202:2181

(3)註解需要推送的類和屬性(注意註解和需要實現的介面DrmResourceManager—)介面可以實現也可以不實現,不做強制要求)


(4)增加Component 掃描的路徑:com.ctfin.framework.drm.client


4. 原始碼地址

https://github.com/lwjaiyjk/drm

轉載請說明出處

相關推薦

DRM動態資源管理框架

1. 背景介紹        隨著系統複雜性增加和靈活化性,配置化的需求,需要能夠動態改變程式執行軌跡,在不同的場景下程式執行不同軌跡,說直白點就是不用重啟服務就能夠動態改變程式中物件對應的屬性值,根據推送的不同屬性值來路由不同的處理邏輯,使的系統能夠靈活路由。2. 框架設計

Yarn資源管理框架

簡單介紹Yarn。 背景介紹 MapReduce v1 JobTracker Manage Cluster Resources & Job Scheduling TaskTracker

Apache Calcite 1.18.0 釋出,動態資料管理框架

   Apache Calcite 1.18.0 釋出了,Calcite 是一個動態資料管理框架,用於 Hadoop 平臺。 此次更新包含 200 多個 commit,亮點包括: SQL 添加了 JSON 函式和線性迴歸函式,以及聚合的 WITHIN GROUP 子句功能

Mesos---分散式資源管理框架

        對Mesos Slave,實現了Slave的恢復功能,當Slave節點上的程序失敗時,可以讓執行器/任務繼續執行,併為那個Slave程序重新連線那臺Slave節點上執行的執行器/任務。當任務執行時,Slave會將任務的監測點元資料存入本地磁碟。如果Slave程序失敗,任務會繼續執行,當Mas

MapReduce再學習:資源管理框架YARN

在前面寫到的三篇部落格中,HDFS概述 和 MapReduce簡介寫的都是hadoop1.0的情況,針對1.0版本的各種不足,2.0都有相應的改動, HDFS再學習:HA和Federation機制寫的是儲存系統HDFS上的改動。針對我們的計算模型MapReduc

遊戲底層資源管理載入框架(一) ------ 架構以及預備知識

一.架構 1. AssetBundle打包管理 2.類物件池資源池物件池 打包管理ssetBundle打包管理 3.離線資料及配置表 4.使用框架製作簡單的UI系統 預備知識 : 1.程式集 2.unity資源載入方式介紹  3.c#的xml序

遊戲底層資源管理載入框架(二) ------ AssetBundle打包管理

一.打包策略 二.自定義打包配置表 1.新建ABConfig指令碼 [CreateAssetMenu(fileName ="ABConfig",menuName = "CreateABConfig",order = 0)] public class ABConfig :

必須要注意的 C++ 動態記憶體資源管理(六)——vector的簡單實現

十六.myVector分析         我們知道,vector類將其元素存放在連續的記憶體中。為了獲得可接受的效能,vetor預先分配足夠大的記憶體來儲存可能需要的更多元素。vector的每個新增元素的成員函式會檢查是否有空間容納更多的元素。如果有,成員

[RK3399][Android7.1] 除錯筆記DRM下device resource management(裝置資源管理

平臺 核心版本 安卓版本 RK3399 Linux4.4 Android7.1 文章目錄 1 、`analogix

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(十)

實現使用者管理中的查詢功能並將之呈現 系統的使用者管理功能包含使用者查詢、使用者新增、使用者刪除與使用者修改等功能。 先貼上該方法程式碼: @RequestMapping(value="/selectUser") public String selectUser(

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(九)

使用者登入功能的實現 由於系統設定了一個interceptor對使用者訪問進行了攔截,未登入使用者無法進入系統進行下一步的操作,因此要想實現進一步操作就必須進行登入,系統的登入功能的實現大致是:1、使用者提交登入表格引數(該請求不受攔截器攔截,可提交到前端控制器)2、前端控制器接收到該請

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(八)

系統UI介面設計 為了實現許可權控制並提高安全性,我將所有的jsp頁面均放在WEB-INF的資料夾下,利用一個攔截器判斷使用者是否登入,未登入使用者不具備訪問的資格。攔截器程式碼如下: package org.fkit.hrm.interceptor; import javax.s

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(七)

實現業務邏輯介面HrmService 業務邏輯介面HrmService中定義了系統功能實現所需要呼叫的方法,HrmServiceImpl類實現了該介面,對每個方法的方法體進行了具體實現: package org.fkit.hrm.impl; import java.util.Has

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(六)

業務邏輯元件HrmService介面的實現 業務邏輯元件的實現需要依賴於DAO元件,在HrmService介面中針對需要操作的六個實體(User、Employee、Job、Dept、Notice、Document)設計了不一樣的業務方法(CRUD),每個方法又會呼叫DAO元件中的一個或多

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(五)

部署DAO層 對前面實現的DAO元件的呼叫有兩種方式實現: 一是通過SqlSession物件的getMapper()方法獲取介面例項,程式碼如下: try( InputStream is=Resources.getRessourceAsStream("mybatis-conf

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(四)

利用Mybatis框架實現持久化Dao層 1、新增Mybatis支援,下載mybatis-3.2.3開發包下載地址,將mybatis-3.2.3.jar以及lib資料夾下所有的jar包引入工程,即完成了專案的Mybatis支援。 2、建立UserDao介面 Mybatis註解的使用極大的

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(三)

確定系統中的實體,建立資料庫表以及持久化類 1、確定系統所用到的實體、實體屬性以及各實體之間的聯絡同時建立資料庫表 本系統按照功能需求共涉及六個實體,分別是使用者User、員工Employee、職位Job、部門Dept、公告Notice、檔案Document,各實體之間的聯絡如下:

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(十一)

實現使用者管理中的新增、刪除、修改功能 新增功能的實現 @RequestMapping(value="/insertUser") public ModelAndView addUser(@ModelAttribute User user,ModelAndView mv){

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(二)

系統主要應用技術 表現層:jsp,負責收集使用者請求資料以及業務資料的表示。 MVC框架:系統應用SpringMVC框架作為MVC框架,該框架作為controller接收前端傳送過來的引數以及返回檢視,註解形式簡化了程式碼的編寫,極大地提高了開發效率;同時,通過SpringMVC的con

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(一)

寫在前面的話 儘管已經參加了工作,工作的內容也不是開發這一塊的,但不論是為了打發時間還是為了不讓自己將來有一天突然發現自己無一技之長,我一直堅持著學習java。我希望自己能將這種學習發展成自己的一種興趣,能堅持探索java的世界。 九月份的時候買了一本瘋狂軟體編寫的《Spring+M