Koper分布式異步編程框架
Koper
Koper是一個基于消息和事件驅(qū)動的分布式異步編程框架,
-
Koper的設(shè)計目標是為大型場景提供高性能高吞吐的簡單編程方案。
-
Koper為分布式環(huán)境提供了簡化的消息監(jiān)聽和數(shù)據(jù)事件監(jiān)聽模型,它可以幫你快速建立異步化應(yīng)用。
-
Koper可用于互聯(lián)網(wǎng)高流量應(yīng)用,例如電子商務(wù)、社交、互聯(lián)金融、O2O等等。
Concept
概念
-
核心架構(gòu): 消息架構(gòu), 事件驅(qū)動架構(gòu)(EDA)
-
核心概念: 生產(chǎn)者,消費者,消息,消息隊列,主題,訂閱
-
核心組件: 消息發(fā)送者(MessageSender), 消息監(jiān)聽者(MessageListener), 數(shù)據(jù)事件監(jiān)聽者(DataEventListener)
-
高層概念: 消費者群組, 消息分區(qū)
特性
-
簡化的消息隊列監(jiān)聽器模型和API。
-
簡化的數(shù)據(jù)事件模型和API。
-
獨立消息隊列提供者。
-
Koper默認支持Kafka,也支持其他消息隊列作為提供者,例如 RabbitMQ,RocketMQ
-
高性能、高吞吐量
-
基于消息隊列的高可伸縮性
-
高級特性: 時間點記錄、消息追蹤
編程模型
1. 監(jiān)聽器(Listener)模型
用戶注冊的例子。 當一個用戶注冊, MessageSender 會向MQ發(fā)送一個消息。
messageSender.send("koper.memberSignup", "Signed up successfully! " + member.getPhoneNo());
同時,消費者訂閱了這個主題然后處理消息(發(fā)送消息通知用戶)。
@Component
@Listen(topic = "koper.memberSignup")
public class MemberSignupListener {
@Autowired
private SmsService smsService;
public void onMessage(String msg) {
smsService.sendSms(msg);
}
}
2. 數(shù)據(jù)事件 & 數(shù)據(jù)監(jiān)聽器模型
訂單例子。
Koper支持事件驅(qū)動編程。數(shù)據(jù)事件的機制是攔截方法調(diào)用,并把數(shù)據(jù)事件發(fā)送給消息隊列。
orderDao.insertOrder( order); orderDao.updateOrder( order);
響應(yīng)事件的監(jiān)聽器(DataListener)
@Component
@DataListener(dataObject = "koper.demo.dataevent.dao.impl.OrderDaoImpl")
public class OrderListener {
// data event: onInsertOrder
public void onInsertOrder(Order order) {
System.out.println("orderNo : " + order.getOrderNo());
System.out.println("create time : " + order.getCreatedTime());
// do some other operations
}
//data event: onUpdateOrder
public void onUpdateOrder(Order order) {
System.out.println("orderNo : " + order.getOrderNo());
// do some other operations such as cache refresh
}
//data event: exception on updateOrder
public void onUpdateOrder_X(Order order, DataEvent event) {
String ex = event.getException();
System.out.println("onUpdateOrder exception :" +ex);
}
}
Koper 可以用來做什么?
Koper是基于消息隊列和事件驅(qū)動架構(gòu)進行分布式計算的框架,它適用于Web應(yīng)用,業(yè)務(wù)監(jiān)控,數(shù)據(jù)統(tǒng)計和大數(shù)據(jù)等場景。
在一個高可伸縮的應(yīng)用里,系統(tǒng)架構(gòu)和事件驅(qū)動架構(gòu)如下:
典型的使用場景
-
異步業(yè)務(wù)處理
-
分布式數(shù)據(jù)更新或緩存更新
-
數(shù)據(jù)日志
-
業(yè)務(wù)監(jiān)控和告警
詳情參見 Async Scenarios and examples.
如何參與貢獻
1 修改BUG 或 改進Koper
你可以自由 Fork 源代碼,提交你的Pull Request給我們。
2 貢獻其他的消息隊列實現(xiàn)
Koper提供了Kafka Provider作為缺省實現(xiàn)。 而且Koper有著良好的擴展性,你可以輕松的實現(xiàn)其他消息隊列的Provider,比如說 RabbitMQ, RocketMQ, ActiveMQ 等等。
詳情參見 Developer Guide .
【作者】何坤,前宅米首席架構(gòu)師,阿里巴巴平臺架構(gòu)師。主要領(lǐng)域大型網(wǎng)站架構(gòu),框架、分布式系統(tǒng), 云計算研發(fā). 曾負責阿里Webx框架, Doris分布式存儲等設(shè)計研發(fā)。
