六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 59|回复: 0

6月梦想活动总结

[复制链接]

升级  25.33%

24

主题

24

主题

24

主题

秀才

Rank: 2

积分
88
 楼主| 发表于 2013-2-7 00:54:40 | 显示全部楼层 |阅读模式
1.
在大PV UV 和并发面前 往往平常正常工作的程序 都会变得不正常了 会出现未知的异常。在这次活动中遇到了类似的问题。 比如:大量并发造成数据库无故插入失败 为了保证 完整性 那么我们采用了 事务的解决方法 保证成功和失败都完整。另外对失败的进行异常捕捉写入到异常日志表 然后采用我们自己的计划任务进行跑 保证数据不丢失。

#增加事务防止高并发异常
$this->db = get_db();
$this->db->beginTransaction(); //开始事务
try{
$this->do_dream($orders);//执行处理程序 包括多个数据表的操作 逻辑处理
$this->db->commit(); //成功的话 提交事务
} catch(Exception $e){
$this->db->rollBack();//异常则回滚之前的操作
if($e->getCode()!=1){ //方法里 可以抛出自己预测到的异常 比如定义为1则不去记录
    $this->insert_log($orders->order_id,$e->getMessage());//否则记录异常日志表
        }
}



2.
在大并发情况下 程序的唯一判断是不会起作用的 因为不是顺序执行的  比如淘宝接口同时发送多个交易状态到这边并发执行的话 会造成数据库生成同样的几条数据 绕过了程序唯一判断  那么解决这个的唯一办法就是 数据库对应的字段设置为唯一索引(包括 单唯一 和联合唯一)
UNIQUE KEY `uid` (`uid`,`order_id`)

3.对于投票的防范可以采用 图片验证码+手机发送短信息验证+次数限制+手机归属地限制(IP对应的地址 http://www.12580ba.com/plus/ip.php 投票的手机必须是手机归属地的地址 http://www.youdao.com/smartresult-xml/search.s?type=mobile&q= )

#根据手机号码查询接口获取手机归属地存入数据库表
if($mobile_num){
    $api_url ="http://www.youdao.com/smartresult-xml/search.s?type=mobile&q=".$mobile_num;
    $result_str = @file_get_contents($api_url);
}
$xml_obj  = simplexml_load_string($result_str);
$str_city = $xml_obj->product->location;
$city_array = explode(' ',$str_city);
if($city_array[1]){
$city =$city_array[1];
}else{
$city =$city_array[0];
}
将CITY存入数据库 然后IP来投票的时候取得IP的城市 对比数据库的城市 (不过这个误差大 不精确)
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表