PHP 多維數組的排序----服務器負載均衡的應用

        array_multisort 在php 中該函數實現多維數組的排序功能,在呼叫中心或者計費服務器中,或許咱們須要實現多臺服務器按權重(百分比)的模式進行對語音進行分發,那麼該函數將幫助你實現該需求。php

       實例中core_callback_setting 將會保存能夠使用的服務器的配置信息:mysql

id---字段ID,也是服務器的ID標記sql

,ast_ob_servername ---服務器的名字標識,數組

,ast_ob_host-----服務器IP地址服務器

,ast_ob_port-----AMI 服務器端口併發

,ast_ob_user-----AMI 服務器驗證用戶名ide

,ast_ob_pwd-------AMI 服務器驗證密碼函數

,percent_rate-----服務器權重fetch

,current_threads----服務器當前併發spa

,max_threads-------服務器最大併發

,last_dispatch_time---最近一次分發到該服務器的時間

,ast_version-------軟交換的版本


下面將是具體實現的邏輯函數

//function get cb server
function get_callback_srv()
{
  global $conn;
  $cb_srv_ary=array();
  $srv_tmp_ary1=array();
  $srv_tmp_ary2=array();
  
  $sql="SELECT id,ast_ob_servername,ast_ob_host,ast_ob_port,ast_ob_user,ast_ob_pwd,percent_rate,current_threads,max_threads,last_dispatch_time,ast_version FROM core_callback_setting WHERE state AND percent_rate";
  #echo $sql,"\n";
  $rslt=mysql_query($sql,$conn);
  $rcnt=mysql_num_rows($rslt);
  if($rcnt>0)
    {
      if($rcnt ==1)
         {
           #echo "目前只有一個服務器知足要求.....\n";
           $cb_srv_ary=mysql_fetch_assoc($rslt);
         }
      else
      {
       for($j=0;$j<$rcnt;$j++)
         {
          $row=mysql_fetch_assoc($rslt);
          $srv_id=$row['id'];
          $srv_tmp_ary1[$srv_id]=$row;
          $r_rate=round($row['current_threads']/$row['percent_rate'],4);
          $srv_tmp_ary2[]=array('srv_id'=> $row['id'],
                             'last_dispatch_time' => $row['last_dispatch_time'],
                             'r_rate'=> $r_rate);
         }
         ##獲取記錄後,對記錄進行排序
         foreach($srv_tmp_ary2 as $key => $row)
             {
               $val1[$key]=$row['r_rate'];
               $val2[$key]=$row['last_dispatch_time'];
             }
          ##數組排序
          array_multisort($val1,SORT_ASC,$val2,SORT_ASC,$srv_tmp_ary2);
          #print_r($srv_tmp_ary2);
          ##獲取第一個
          #echo ">>>>>>>>>>>>>>>>>>>>>>>>\n";
          $srv_id=$srv_tmp_ary2[0]['srv_id'];
          #print_r($srv_tmp_ary1[$srv_id]);
          $cb_srv_ary=$srv_tmp_ary1[$srv_id];
          
      }
      
    }
    else
    {
      writelog($sql);
    }
    return $cb_srv_ary;
}
相關文章
相關標籤/搜索