随笔分类 -  cello

摘要:我觉得有以下作用: 1. 齐整,美观。 2. 分开了多线程,缓解了其他线程的压力。比如StateEvent和ActioEvent 如果有一个线程处理,如果ActionEvent处理RPC非常耗时,这样就会影响到其他StateEvent的处理。 3. 错误处理,事件没有成功可以想办法重新调度。如果没有统一起来,没有设置Buffer,这个就不可能。 阅读全文
posted @ 2013-03-06 13:58 zaleilynn 阅读(254) 评论(0) 推荐(0) 编辑
摘要:我理解就是一个executor_pool,它封装了一层,应该有以下好处:如果直接定义map<string, ExecutorPtr>,这个东西不能暴露出去,不能作为其他函数的参数(并发考虑)如果在外面再包一层,应该就可以达到上述需求,做的更灵活。这里为什么使用的是string(物理机器的端口号)作为索引,这样一个物理机器上面不是只有一个Executor?本质上一个物理机器只能运行一个Executor的。原来计划是把port分配给Container,machine + endpoint 作为Container的唯一索引。 阅读全文
posted @ 2013-03-04 21:43 zaleilynn 阅读(145) 评论(0) 推荐(0) 编辑
摘要:在master新建一个Executor的时候,会随之启动一个IdleTrigger,这个Trigger的启动参数默认的value = 0 period = 6(是心跳的3倍)。另外,在建立一个Framework结构的时候,会为每个框架建立一个整体的Trigger. 这个Tirgger,CpuTrigger触发器默认的是value为50, period为1,在CpuTrigger中,调用fim->IsOverLoad的参数value / 100,period * 60,这个是什么含义?表示百分比和60s?IdleTrigger触发器默认的是value为0, period 为5(或者6) 阅读全文
posted @ 2013-03-03 22:11 zaleilynn 阅读(187) 评论(0) 推荐(0) 编辑
摘要:1. cellet上报的都是ExecutorStat,这个与Container无关2. Executor的状态均是由Container状态驱动的,具体在cellet 中work_thread的StateHandle线程中执行。 阅读全文
posted @ 2013-03-03 15:19 zaleilynn 阅读(135) 评论(0) 推荐(0) 编辑
摘要:task的 id是由一个全局变量递增给出的,executor id 等于相应的task id,另外,containter id 等于 创建的contianer的pid. 阅读全文
posted @ 2013-03-03 15:04 zaleilynn 阅读(140) 评论(0) 推荐(0) 编辑
摘要:在collector.cpp的main函数里面会启动一个Monitor线程,这个线程的入口是Monitor的Entry(),主要做的事情就是从自身的m_queue阻塞队列里面取出机器(是由Monitor::AddEvent在接收心跳时放入),然后调用ForwardEvent,该函数找到这个机器上报的所有executor的状态,在相应的Framework(与Scheduler中的Framework不是一个函数)中找:1)如果有,调用相应Framework::AddEvent函数。2)如果没有,就新建一个Framework插入池中(这里初始化了FrameworkInMachine的结构),(是因为 阅读全文
posted @ 2013-03-01 10:18 zaleilynn 阅读(186) 评论(0) 推荐(0) 编辑
摘要:cellet启动了两个进程,分别是cellet-resource和cellet进程,这两个进程分别启动了一系列的线程:cellet-resource:StartExecutorReceiverResourceInfoSenderExecutorControlReceiver这个进程启动上述线程之后就会监控,是否其子进程Container退出,如果退出就调用相应的ContainerFinished函数。cellet:StartExecutorSenderResourceInfoReceiverExecutorStatusReceiver这个进程启动上述线程之后就启动RPC服务器。这写线程之间用的 阅读全文
posted @ 2013-02-23 20:45 zaleilynn 阅读(256) 评论(0) 推荐(0) 编辑
摘要:scheduler添加任务流程用户调用Submit函数(如果是自动伸缩的模式,Submit函数将不会被调用,在AutoScaleFrameWork的Init函数中会自己创建一个Task,插入m_wait_queue中而不用TaskProcessor调度),该函数将构建Task结构,并同时插入Task buffer(仅仅是为RPC而写的接口缓冲而使用的),和Task Pool,由TaskProcessor从TaskBuffer中线程取出,调用PlugTask(注意,如果是AutoScaleFramework,则PlugTask会调用SetInfo,设置Task的相关资源,因为AddExecuto 阅读全文
posted @ 2013-02-23 10:28 zaleilynn 阅读(309) 评论(0) 推荐(0) 编辑
摘要:cellet最后启动Rpc服务器的时候使用的是FLAGS_port 仅仅是端口(所有启动rpc服务器的时候均为这样)get proxy的时候需要endpoint也就是同时需要ip和端口1 阅读全文
posted @ 2012-05-07 19:54 zaleilynn 阅读(178) 评论(0) 推荐(0) 编辑
摘要:1. node->getChildNodes()->getLength()) == 1 这个用来判断是否某个标签下面只有自己,比如 <name>123</name> 而不是getLength() == 02. char * a = .. string b = .. boost::any = a 于 boost::any = b 这两个是不兼容的!3. if (PolicyMgr::Instance()->Parse(FLAGS_policy_file) < 0) return -1; 应该在SubmitContext context前面 阅读全文
posted @ 2012-04-11 20:07 zaleilynn 阅读(143) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示