谈WEB机器时间同步的重要性
作者:zhanhailiang 日期:2013-10-31
php实现time()的方式是直接使用C的time()来获取时间截, 而C的time()是直接读取当前机器时间值.
/* {{{ proto int time(void) Return current UNIX timestamp */PHP_FUNCTION(time){ RETURN_LONG((long)time(NULL));}/* }}} */
如下脚本读取的时间都是当前机器的时间截.
<?php echo time().PHP_EOL;
此时就涉及一个问题: 对于一些对时间极度敏感的应用, 如果不同机器时间不同步, 可能导致读取到值不同.
比如: 最近万圣节活动, 要求女巫出现时间不能超过12秒, 我的做法是通过定时任务, 在推送女巫之前先在memcache写入一个校验值, 当用户点击女巫时请求php判断当前时间和校验值的差, 但是由于定时任务跑在web1机器, 读取的时间为web1的时间截, 而请求php可能被负载到不同的机器, 而若此时刚好这台机器较web1快了12秒以上, 导致校验不通过, 这样就直接影响线上业务.
其它场景, 比如memcache机器部署在独立机器, 同样需要关注机器时间同步问题.
参考阅读: