MaxCompute(原ODPS) 事件(Event)机制

MaxCompute(原ODPS)的事件机制被广泛应用于数据地图的订阅展示、跨集群复制以及蚂蚁金服的工作流管理。用户通过监听Event来获取表的元数据更新,实现自动化的数据处理和权限管理。SourceType的可能取值包括Table。
摘要:  免费开通大数据服务: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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值