百度运维部,基础平台研发工程师
(一面)
手写快排
/**
* description : 快速排序
* @autor kwzhang
* modify :2012-6-20
*
* @param pData
* @param left
* @param right
* @return
*/
static void quicksort(int n[], int left,int right) {
int dp;
if (left < right) {
dp = partition(n, left, right);
quicksort(n, left, dp - 1);
quicksort(n, dp + 1, right);
}
}
static int partition(int n[], int left, intright) {
int pivot = n[left];
while (left < right) {
while (left < right &&n[right] >= pivot)
right--;
if (left < right)
n[left++] = n[right];
while (left < right &&n[left] <= pivot)
left++;
if (left < right)
n[right--] = n[left];
}
n[left] = pivot;
return left;
}
如何利用zookeeper进行选举,画图说明
3.用zookeeper做任务分配如何实现
调度顺序gateway-->api-->schedule-->agent-->gitlab-->job-server-->job-cache-->agent-->log-server-->log-center
gitlab:用于脚本的版本管理,权限的控制
job-server: 保存任务,对任务打包等
gateway: 多个机房间的调度通过gateway执行任务的分配
log-center: 日志集中管理服务器
api: 任务调度的入口
schedule: 任务调度的主程序
agent: 客户端,执行具体的任务
log-server: 日志服务器
job-cache: 任务的缓存服务器,下载的任务保存在这里,agent来这里下载任务
zookeeper: 组织任务调度的结构
步骤一:
创建一个任务,任务序号033451dcabe9465eb03e683fe2a2f295,这个任务需要对100台机器执行脚本。所以我们要知道目标机器有哪些,这些机器的执行结果是怎样的?成功或者失败。所以我们要有一种结构表示这种关系。
msched
|
|----tasks
|
|-----$task_id {
'job_id':test1,
fail_rate:0,
concurrent:10}
|
|----targets
|
|-----$hostname
N:新建
W:
等待
R:
执行
S:
成功
F:
失败
步骤二:
一个新任务的创建,任务的状态为N,同时将新建的任务的信息调度给agent(将task_id的信息({'job_id':test1,fail_rate:0,concurrent:10})复制给agent的task_id),复制成功后将tasks中的任务状态改为W,复制失败将tasks中的任务状态改为F,同时更新signal信号,以便重新进行调度.
msched
|
|----tasks
| |
| |
-----$task_id {
'job_id':test1,
fail_rate:0,
concurrent:10}
| |
| |
----targets
| |
| |
-----$hostname
N:新建
| W:等待
|R:
执行
| S:成功
|F:
失败
|
&