小编mic*_*xor的帖子

跨多个服务器使用Zend Cache和AWS ElastiCache的缓存值不一致

我们使用Zend Cache和memcached后端指向具有2个缓存节点的AWS ElastiCache集群.我们的缓存设置如下所示:

$frontend = array(
    'lifetime' => (60*60*48),
    'automatic_serialization' => true,
    'cache_id_prefix' => $prefix
);
$backend = array(
    'servers' => array(
        array( 'host' => $node1 ),
        array( 'host' => $node2 )
    )
);
$cache = Zend_Cache::factory('Output', 'memecached', $frontend, $backend);
Run Code Online (Sandbox Code Playgroud)

当使用单个EC2服务器从缓存中写入和读取时,我们没有注意到过去缓存有任何问题.

但是,我们最近推出了第二个EC2服务器,突然间我们从一个服务器写入缓存并从另一个服务器读取时遇到问题.两个服务器都由同一AWS账户管理,并且两个服务器都没有分别写入缓存或从缓存读取的问题.两者都使用相同的缓存配置.

服务器A执行$cache->save('hello', 'message');

$cache->load('message');服务器A的后续调用返回hello的预期结果.

但是,当服务器B执行时$cache->load('message');,我们会得到错误.

就我对ElastiCache的理解而言,发出读取请求的服务器应该对返回的缓存值没有影响.任何人都可以对此有所了解吗?

php caching zend-framework amazon-web-services amazon-elasticache

30
推荐指数
1
解决办法
1707
查看次数

默认情况下,boto3是否会尝试重试分段上传?

我正在使用boto3 1.4.4来处理使用S3处理大型文件(通常是数百MB到几GB)的上传S3.Client.upload_file

boto3文档声称默认情况下,botocore处理重试以进行流式上载。

  • 重试。虽然botocore处理重试以进行流式上载,但它不可能处理重试以用于流式下载。该模块处理两种情况的重试,因此您无需自己实现任何重试逻辑。

但是,我一直在浏览源代码,但找不到任何证据证明上载实际上已处理重试。相反,下载(使用download_filedownload_fileobj)的重试逻辑是明确且显而易见的,因此对于上载期间是否实际处理重试,我感到困惑。

接下来是来自失败上传的部分堆栈跟踪,这就是为什么我首先问这个问题的原因:

  upload_file中的文件“ /usr/local/lib/python2.7/dist-packages/boto3/s3transfer/__init__.py”,第642行
    self._multipart_upload(文件名,存储桶,密钥,回调,extra_args)
  _multipart_upload中的第739行的文件“ /usr/local/lib/python2.7/dist-packages/boto3/s3transfer/__init__.py”
    uploader.upload_file(文件名,存储桶,密钥,回调,extra_args)
  在上载文件中的文件“ /usr/local/lib/python2.7/dist-packages/boto3/s3transfer/__init__.py”,第393行
    文件名,'/'。join([bucket,key]),e))
  S3UploadFailedError:无法将[文件]上载到[存储桶]:(104,'ECONNRESET')

boto3是否提供某些保证可以重试上载,如果可以,则在何处实现/记录此逻辑?

目前,我选择使用重试包来重复调用upload_file

python file-upload amazon-s3 boto3

8
推荐指数
0
解决办法
721
查看次数

抽象类中的PHP静态变量

我正在开发一个项目,我希望能够在抽象基类中声明一个静态成员变量.我有一个Model类,一个中间Post类,最后是一个特定于站点的Post类,如下所示:

abstract class Model {
    protected static $_table    = null;
    protected static $_database = null;

    ...
}

abstract class PostModel extends Model {
    public function __construct() {
        if ( !isset(self::$_table) ) {
            self::$_table = 'some_table';
        }

        parent::__construct();
    }

    ...
}

class SitePostModel extends PostModel {
    public function __construct() {
        if ( !isset(self::$_database) ) {
            self::$_database = 'some_database';
        }

        parent::__construct();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

我想从Model类中明白需要$ _table和$ _database成员.但是,从PostModel类的角度来看,$ _table实际上是静态的,从SitePostModel类的角度来看,$ _database实际上是静态的.

这是实现我的目标的合法方式吗?声明模型本身中的静态变量是否意味着它们应该只对抽象基类存在一次,或者对于实际的实例化类只存在一次?

php abstract-class static-members

6
推荐指数
1
解决办法
4195
查看次数