百度运维部,基础平台研发工程师

百度运维部,基础平台研发工程师

(一面)

手写快排

/**

     * 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:失败
        |
  &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值