性能管理系统中,数据产生后需要经过采集,汇聚,入库三个流程,用户才能查询使用。
采集可以是snmp采集,也可以是ems采集;汇聚可以使storm汇聚,也可以是spark汇聚;入库可以是hdfs入库,也可以是mppdb入库。
针对不同场景,我们可以灵活选择不同的采集,汇聚,入库方式。这种一个功能需要多种服务支持,每种服务又有不同类型的实现,使用桥接模式再适合不过。
(注:这里仅仅是桥接模式的例子,实际应用中,采集、汇聚、入库时异步执行的,他们之间通过消息通信)
桥接模式,顾名思义,就是把每种服务看做一座桥,我们可以根据实际场景选择不同的桥。
上述例子表示数据产生到可以使用之前需要经过三座桥:采集桥->汇聚桥->入库桥。每座桥可以选择不同的构造。
下面来看具体代码
1、 采集桥
packagecom.coshaho.learn.bridge.collect;/***
* CollectionService.java Create on 2017年6月1日 下午11:00:10
*
* 类功能说明: 采集服务
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho*/
public abstract classCollectionService
{abstract voidexecute();public voidrun()
{
execute();
}
}
2、 汇聚桥
packagecom.coshaho.learn.bridge.aggregate;importcom.coshaho.learn.bridge.collect.CollectionService;/***
* AggregationService.java Create on 2017年6月1日 下午11:00:23
*
* 类功能说明: 汇聚服务
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho*/
public abstract classAggregationService
{public voidrun()
{if(null !=collectionService)
{
collectionService.run();
}
execute();
}abstract voidexecute();
CollectionService collectionService;publicAggregationService(CollectionService collectionService)
{this.collectionService =collectionService;
}
}
3、 入库桥
packagecom.coshaho.learn.bridge.store;importcom.coshaho.learn.bridge.aggregate.AggregationService;/***
* StoreService.java Create on 2017年6月1日 下午11:08:57
*
* 类功能说明: 入库服务
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho*/
public abstract classStoreService
{public voidrun()
{if(null !=aggregationService)
{
aggregationService.run();
}
execute();
}abstract voidexecute();
AggregationService aggregationService;publicStoreService(AggregationService aggregationService)
{this.aggregationService =aggregationService;
}
}
4、 EMS采集桥
packagecom.coshaho.learn.bridge.collect;public class EMSCollectionService extendsCollectionService
{
@Overridevoidexecute()
{
System.out.println("EMS collection.");
}
}
5、 SNMP采集桥
packagecom.coshaho.learn.bridge.collect;public class SNMPCollectionService extendsCollectionService
{
@Overridevoidexecute()
{
System.out.println("SNMP collection.");
}
}
6、 Storm汇聚桥
packagecom.coshaho.learn.bridge.aggregate;importcom.coshaho.learn.bridge.collect.CollectionService;public class StormAggregationService extendsAggregationService
{publicStormAggregationService(CollectionService collectionService)
{super(collectionService);
}
@Overridevoidexecute()
{
System.out.println("Storm aggregation.");
}
}
7、 Spark汇聚桥
packagecom.coshaho.learn.bridge.aggregate;importcom.coshaho.learn.bridge.collect.CollectionService;public class SparkAggregationService extendsAggregationService
{publicSparkAggregationService(CollectionService collectionService)
{super(collectionService);
}
@Overridevoidexecute()
{
System.out.println("Spark aggregation.");
}
}
8、 MPPDB入库桥
packagecom.coshaho.learn.bridge.store;importcom.coshaho.learn.bridge.aggregate.AggregationService;public class MPPDBStoreService extendsStoreService
{publicMPPDBStoreService(AggregationService aggregationService)
{super(aggregationService);
}
@Overridevoidexecute()
{
System.out.println("MPPDB store.");
}
}
9、 HDFS入库桥
packagecom.coshaho.learn.bridge.store;importcom.coshaho.learn.bridge.aggregate.AggregationService;public class HDFSStoreService extendsStoreService
{publicHDFSStoreService(AggregationService aggregationService)
{super(aggregationService);
}
@Overridevoidexecute()
{
System.out.println("HDFS store.");
}
}
10、 测试类
packagecom.coshaho.learn.bridge;importcom.coshaho.learn.bridge.aggregate.AggregationService;importcom.coshaho.learn.bridge.aggregate.StormAggregationService;importcom.coshaho.learn.bridge.collect.CollectionService;importcom.coshaho.learn.bridge.collect.SNMPCollectionService;importcom.coshaho.learn.bridge.store.HDFSStoreService;importcom.coshaho.learn.bridge.store.StoreService;/***
* BridgeTest.java Create on 2017年6月1日 下午10:59:43
*
* 类功能说明: 桥接模式测试
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho*/
public classBridgeTest
{public static voidmain(String[] args)
{
CollectionService snmpService= newSNMPCollectionService();
AggregationService stormService= newStormAggregationService(snmpService);
StoreService hdfsService= newHDFSStoreService(stormService);
hdfsService.run();
}
}
11、 测试结果
SNMP collection.
Storm aggregation.
HDFS store.