什麼是微內核架構

基本架構

核心系統

插件模塊

微內核的基本架構圖

設計關鍵點

1. 插件管理

2. 插件連接

3. 插件通信

OSGi 架構簡析

OSGi 框架的邏輯架構圖

1. 模塊層(Module 層)

一個簡單的 MANIFEST.MF 樣例如下

// MANIFEST.MF 
  Bundle-ManifestVersion: 2 
  Bundle-Name:UserRegister
  Bundle-SymbolicName: com.test.userregister 
  Bundle-Version: 1.0 
  Bundle-Activator: com.test.UserRegisterActivator
  Import-Package: org.log4j;version="2.0", 
  ..... 
  Export-Package: com.test.userregister;version="1.0"
2. 生命週期層(Lifecycle 層)
public class UserRegisterActivator implements BundleActivator { 
   public void start(BundleContext context) { 
       UserRegister.instance = new UserRegister (); 
   } 
   public void stop(BundleContext context) { 
       UserRegister.instance = null; 
   } 
}
3. 服務層(Service 層)
// 註冊服務
public class UserRegisterActivator implements BundleActivator {
// 在 start() 中用 BundleContext.registerService() 註冊服務
public void start(BundleContext context) {
context.registerService(UserRegister.class.getName(), new UserRegisterImpl(), null);
}
// 無須在 stop() 中註銷服務,因爲 Bundle 停止時會自動註銷該 Bundle 中已註冊的服務
public void stop(BundleContext context) {}
}
// 檢索服務
public class Client implements BundleActivator {
public void start(BundleContext context) {
// 1. 從服務註冊表中檢索間接的“服務引用”
ServiceReference ref = context.getServiceReference(UserRegister.class.getName());
// 2. 使用“服務引用”去訪問服務對象的實例
((UserRegister) context.getService(ref)).register();
}
public void stop(BundleContext context) {}
}

規則引擎架構簡析

規則引擎從結構上來看也屬於微內核架構的一種具體實現,其中執行引擎可以看作是微內核,執行引擎解析配置好的業務流,執行其中的條件和規則,通過

各種方式來支持業務的靈活多變。

規則引擎在計費、保險、促銷等業務領域應用較多。例如電商促銷,常見的促銷規則有:

以上僅僅列出來常見的幾種,實際上完整列下來可能有幾十上百種,再加上排列組合,促銷方案可能有幾百上千種,這樣的業務如果完全靠代碼來實現,開發效率遠遠跟不上業務的變化速度,而規則引擎卻能夠很靈活的應對這種需求,主要原因在於:

1. 可擴展

2. 易理解

3. 高效率

規則引擎的基本架構

對照微內核架構的設計關鍵點,規則引擎具體是如何實現的:

1. 插件管理
2. 插件連接
3. 插件通信

目前最常用的規則引擎是開源的 JBoss Drools,採用 Java 語言編寫,基於 Rete 算法

Drools 具有下面的優點:

雖然 Drools 號稱簡單易用,但實際上其規則語言還是和編程語言比較類似,在實際應用的時候普通業務人員面對這樣的規則語言,學習成本和理解成本還是比較高的,例如下面這個樣例

因此,通常情況下需要基於 Drools 進行封裝,將規則配置做成可視化的操作,例如下面電商反欺詐的一個示例

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/FO9JehhZJ9xt068sufv_qA