全量資料接入的過程本質上是資料集群件複雜的事件同步與時間相應的過程,涉及到觸發、反饋、反饋狀態檢查、分批等。因此,需要有乙個事件控制項作為基礎。
一、事件控制項
1.1 使用zk同步資料
zk路徑規劃:
$/$/$/$/$.info
說明:$.info可用於傳遞資訊,由指令碼自行解析
1.2 行為定義
1、觸發事件(trigger)
輸入引數:event_group、event_name、date、event_version
輸出引數:觸發是否成功(true/false)
說明:觸發事件
2、刪除事件(fade)
輸入引數:event_group、event_name、date、event_version
輸出引數:刪除是否成功(true/false)
說明:刪除已發生事件
3、監聽事件(listen)
輸入引數:監聽配置
輸出引數:事件是否發生(true/false)
說明:(1)監聽事件是否被觸發
(2)監聽配置包含:內部事件/外部事件、事件監聽指令碼(僅外部事件)、(僅內部事件)、timeout、指令碼垂直觸發/水平觸發、正向觸發/反向觸發、關聯響應事件行為、多個被監聽事件的or/and邏輯等
(3)時間監聽指令碼輸出引數應符合元件框架格式
4、響應事件(respond)
輸入引數:事件響應指令碼
輸出引數:事件響應成功或失敗(true/false)
說明:輸出引數應符合元件框架格式
1.3 交付形式
以二方庫的形式交付,在元件的基礎上封裝成服務
鏈式呼叫:listen(event0/script)->respond(script)->trigger(event1)-> fade(event4)
說明:(1)通過配置實現熱載入
(2)成功則繼續,失敗則退出
二、資料接入服務
2.1 切換索引
下文outer_listen表示外部監聽,inner_listen表示內部監聽
1、sn觸發「監聽開始」事件
定時任務->trigger($_want_to_pull)
2、index_server收集sn機器資訊
定時任務->inner_listen($_want_to_pull)
說明:index_server記錄參與分發/切換的機器列表,$_want_to_pull中攜帶希望pull的索引版本資訊
1、索引構建完成
outer_listen(index_build_done)->trigger(index_data_publish)
2、sn機器拉取資料
inner_listen(index_data_publish)->respond(pull_index_data_script)-> trigger($_pull_done)
說明:每個機器觸發和自己機器名相關聯的事件,方便index_server處理
3、index_server檢查資料分發狀態
inner_listen($_pull_done)->respond(check_distribution_condition)
說明:監聽所有機器列表中的機器,檢查是否合法
4、index_server觸發分批切換
接上一步->respond(switch_index)-> trigger($_switch)-> respond(check_switch_condition)->trigger($_switch)-> respond(check_switch_condition)->…->done
說明:index_server完成分組等邏輯後,開始切換
2.2 切索引上線
1、sn機器裝conf包
說明:conf檔案中寫明需要的索引版本資訊(zk路徑表示)
2、重啟sn服務
3、sn啟動時自動檢查本地索引版本是否匹配
4、若不匹配,使用新的conf拉取索引,並觸發切換
三、問題彙總
1、需要索引目錄中攜帶版本資訊
測試資料設計方案
一 測試覆蓋率 測試方法及技巧的應用 真正業務場景的滿足 測試資料的設計覆蓋 1.測試資料設計方法一 構造測試資料時,需要看資料的開源,資料的 一般來講有3個,乙個是根據被測系統需求的分析,針對正常業務,異常情況,邊界情況等來構建完整的資料,又稱為造資料,這不僅僅包括最近本的基礎資料,比如,使用者 ...
TinyURL設計方案
現在貌似tinyurl很火爆,也逐漸成為一種流行趨勢。對應於php版本的tinyurl也有一些演算法,其實本質上來說是一種hash。除此之外,還有另外一種tinyurl方案 類似於http img.ly 其實這種設計 是最簡單的,沒有使用hash,而是遞增,這種的好 處就是資料庫 可以無限擴充套件,...
許可權設計方案
簡要介紹一下該許可權管理系統的特點,該系統功能上做到了靈活授權,操控細緻,許可權可以細到按鈕及超鏈級別,而且部署簡單,下面談談我自己的設計經驗。該系統主要功能如下 1 自定義操作動作 如增加 刪除 修改 審核等,不再是以前見過的那種粗粒度的 按模組分配許可權,或者稍微先進點的規定死某幾個操作了 2 ...