摘要:
免费开通大数据服务:https://www.aliyun.com/product/odps 转自habai 什么是 MaxCompute事件机制 MaxCompute event 用于监控表和实例等MaxCompute资源(目前只用于监控表)。
免费开通大数据服务:
https://www.aliyun.com/product/odps
什么是MaxCompute
大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。
什么是 MaxCompute事件机制
MaxCompute event 用于监控表和实例等MaxCompute资源(目前只用于监控表)。当表状态发生变化时,MaxCompute 会向预先注册(订阅)的 uri 发送信息。Event通知只有在订阅Event之后才能收到。每个project中可以订阅一个或多个Event。Event是用户的数据,同表数据一样,创建或修改时都需要有这个Project的操作权限。关于Event的Restful Api,在文章里有介绍。
为什么需要 MaxCompute 事件机制
考虑以下场景:当一个用户 A 关心某一个表 T 的操作(创建/删除/插入/修改/...)时,如果表 T 不是用户 A 创建的,那么用户 A 可以采用什么方法感知这个操作?一个方法是主动轮询这个表是否做了某个操作,但是缺点是不言而喻的。另一个方法是,注册一个回调,当表被操作时,被动接受通知。用这种方法可以使用户逻辑不必轮询和等待对表的操作。
MaxCompute Event机制就是第二种方法的实现。
在实际的生产中,对以上应用场景有大量的需求,并已经形成了对MaxCompute Event丰富的应用,例如:
- 数据地图: 订阅了一些 project 的 Event,并根据 Event 通知展示这些 project 中表的元数据。
- 跨集群复制: 监听 Event 通知以复制相应的表。
- 蚂蚁金服: 依赖事件通知机制进行工作流管理,统计,授权等工作。 事实上,每个 project 都有大量用户订阅了所属project的表以及其它project表的事件通知。
MaxCompute 事件机制是怎样实现的
本节首先将 MaxCompute 事件机制 作为一个黑盒,从用户的角度介绍其功能和使用方法。而后以此为切入点,深入剖析 MaxCompute 事件机制的内部机理。最后,提出一些对当前事件机制的思考。
订阅(注册)一个事件 & 事件通知
在网络编程中,为了减轻多线程的压力,往往使用事件通知驱动的异步编程。如,libevent[2]。使用这个库编写一个服务器程序,可以这样做:
void on_accept(int sock, short event, void* arg);
int main(int argc, char* argv[])
{
// create socket s
struct sockadddr_in addrin;
int s = socket(AF_INET, SOCK_STREAM, 0);
BOOL bReuseaddr=TRUE;
setsockopt(s, SOL_SOCKET ,SO_REUSEADDR, (const char*)&bReuseaddr, sizeof(BOOL));
memset(&addrin, 0, sizeof(addrin));
addrin.sin_family = AF_INET;
addrin.sin_port = htons(PORT);
addrin.sin_addr.s_addr = INADDR_ANY;
bind(s, (struct sockaddr*)&addrin, sizeof(struct sockaddr));
listen(s, BACKLOG);
// 创建事件池 event base
struct event_base* eb = event_base_new();
// 创建事件 & 绑定回调
struct event e;
event_set(&e, s, EV_READ|EV_PERSIST, on_accept, NULL);
// 注册事件
event_base_set(eb, &e);
event_add(&e, NULL);