Problem

I have a imgproxy server instance to resize cloud image on-demand using signed url then saving response cache to disk.

To the day I want to move to another domain point to another server instance, then I remember the last time I changed immediately to new domain, my websites lost many images because it needs to resize all the images in a short period of time (my server is crash).

So this time, I need another strategy :)

Probability

First try : random (looks okay)

$is_new = rand(1, 4) == 1;
$domain = $is_new ? 'new_domain' : 'old_domain';

This strategy looks okay but it has loophole when you have high traffic websites.

Second try : hash > hex2dec > division

$is_new = (intval((hexdec(substr(md5($url),0,9)))) % 4) == (intval(date('H')) % 4);
$domain = $is_new ? 'new_domain' : 'old_domain';

This strategy split resize-needed image pool into 4 segments based on hash value. Then I match 4 these segments to 4 segments of time (current hour % 4).

Conclusion

Hashing provides a “stable” random variable in short period of time :)

I just wait 4-6 hours then switch to new domain 100% because the cached responses is ready :D