說框架設計思路
其旨在打造一個集應用開發、大數據存儲、處理、分布式計算、自動化部署的無節點微服務集中開發與運行平臺,以響應業務的快速變更,滿足系統對大數據,大並發與開發效率的需求;
平臺設計以數據為核,以groovy腳本為基礎,通過提供api、異步消息處理、調度等基礎構件來支持應用的快速開發;
核心是通過整合現有開源項目來實現的,其主要用到的技術棧包括:spring cloud, zookeeper, kafka, elasticsearch, mysql, kudu(hadoop系列), fastdfs,redis, quartz, maxwell, groovy, activitiy,couchdb等。
核心概念介紹
項目 - project
其對應一個微服務應用,一個項目定義了一個應用的邊界,每個項目有唯一的代碼與請求上下文路徑,所有資源,接口,調度,通道或觸發器都必需歸屬一個項目,項目與項目之間的調用需要授權。
模塊 - module
其對應項目下的一個模塊,每個模塊可以由一系列的節點組成,方便進行管理。
資源 - resource
資源定義了項目中可以使用的數據庫,消息,緩存,文件存儲等服務,項目資源只能引用平臺上配置的全局資源,在後續的api等腳本中,可以通過資源腳本對象對資源進行操作。
計劃支持的資源類型:mysql,oracle,kudu,es(elasticsearch),redis,kafka,filestore,couchdb
外部接口 - restapi
restapi定義了項目對外提供的rest接口;其通過urlmapping來映射外部訪問地址,urlmapping為ant表達式,例如:/foo/**或/foo/*/bar
rest接口可以綁定授權,你實現權限驗證;rest接口也可以支持mockscript,實現mock;支持通過docapi來指定接口文檔。
本地接口 - localapi
本地接口,主要用於在項目內定義一些公共方法,以便其它腳本使用,內部接口可以通過項目腳本對象的call方法來調用,例如:def robj = prj.call(‘foo‘, name:‘abc‘);
項目過濾器 - filter
過濾器用於攔截請求,其分為項目filter與全局filter
項目filter只能對當前項目的restapi或filter進行攔截,其通過urlmapping來指定攔截路徑。
全局過濾器 - globalfilter
全局filter可以攔截所有項目的restapi或filter進行攔截,項目中如需要配置全局filter必需獲得管理員為其配置的“全局filter"定義的授權。
項目通道 - channel
通道主要用於異步處理,其對應一個kafka的topic,在腳本中可以通過prj.sendChannel(‘foo‘, ‘valuestr‘)的方式觸發channel腳本的執行。
channel默認是有序單隊列的,如果需要支持無序並發處理,請將配置的hostnum設置大於1,考慮到資源占用,暫時最高不能大於100。
全局通道 - publicchannel
全局通道主要用於向其它項目廣播,例如在產品主數據修改後,聯采,交易,結算等都需要同步數據。
其它項目如需要監聽當前通道,需要通過allowPullProjects為其它項目授權,其它項目可以使用publicreciver來監聽其它項目的廣播。
其它項目如需要發送數據到當前通道,可以通過prj.sendPublicChannel(‘project‘, ‘channelname‘, ‘valuestr‘)來實現,同時當前通道需要設置allowPushProjects來授權。
全局消息處理器 - publicreciver
用於接收全局廣播,其對應publicchannel
觸發器 - trigger
監聽數據庫的變動,當前只支持MYSQL;
調度 - schedule
用於定義項目中的調度,通過定義cron表達式來指定執行周期。
ES數據集 - dataset
用於定義elasticsearch的索引庫,其可以通過copyfromtable來同步某個數據庫表的結構;
dataset變更後需要重建索引才會生效。
數據庫表 - table
用於定義數據庫資源中的表。
數據初始化 - datainit
用於定義數據庫資源中的初始化數據。
——————————————
推薦閱讀:
Kafka 入門教程
你可以不懂但一定要知道的代碼審查 Code Review
ELK Stack 實戰教程
filebeat+kafka+strom+logstash+es 輿情采集系統
安全漏洞掃描,風險原因分析及解決方案
說框架設計思路