Medya ayrı bir sunucu üzerinde tutulması nasıl işlemek için (PHP)

5 Cevap php

Yani, üç sunucu var ve fikri bir medya sunucusu üzerindeki tüm medya (resim, dosyaları, filmler) tutmak oldu. Bunu yapmak için çevresinde var hiç ama ben muhtemelen gerektiğini düşünüyorum.

Yani bu üç sunucular:

WWW server DB server Media server

Orijinal dosyalar orada tutulur gibi ing WWW sunucularında yapılır: Ziyaretçiler açıkça WWW sunucusu ve şu anda resim boyutlandırma ve önbellek bağlanın. Bu yüzden benim için fikir görüntü fonksiyonları için var olduğunu, tüm görüntü compositioning, yeniden boyutlandırma ve cahceing yapar finnished dosyanın orada yolunu dönecekti medya sunucusu sadece pasta komut üzerinde olur.

Ne olduğunu bilmiyorum bile herhangi bir görüntü yönetimi devreye giriyor önce böyle file_exists () ve gerektiğinde görüntü boyutlarını bulmaktan gibi fonksiyonları işlemek için nasıl. HTTP üzerinden, diğer sunucu I boru tüm bu komutları musunuz? Ben bu şekilde yapmanın yollarını boyunca düşünüyordum:

function image(##ARGS##){
    if ($GLOBALS["media_host"] != "localhost"){
        list ($src, $width, height) = file('http://$GLOBALS[media_host]/imgfunc.php?args=##ARGS##');
        return "<img src='$src' height and width >";
    }
    .... do other stuff here 
}

Ben bu yanlış şekilde yaklaşıyor muyum? Bunu yapmak için daha iyi bir yolu var mı?

5 Cevap

S3 kova olarak medya sunucusu, muhtemelen nerede ne olması gerektiğini anlamak için hayat daha kolay olurdu düşünün. Medya sunucusu üzerinde LightHTTPD yüklemek ve oradan doğrudan görüntüleri hizmet. Depolama, işlem için ana sunucu üzerinde görüntü, medya sunucusuna resim upload bunu hizmet etmek istiyorum, zaten tüm bilgileri mevcut var ki, veritabanında görüntü ile ilgili tüm bilgi depolamak ve varsayalım görüntü hala var :) tüm doğru nedenlerle

Bunu yapmak için istediğiniz şekilde gelince, ben ciddi bir darboğaza sebep ve ağ trafiği sürü yükseltmek olacağını düşünüyorum, ne tür dağıtık sistemlerde bulunan "mesajları" uygulamak için çalışıyoruz ve hepimiz tuzaklar yer biliyorum. Ben basit tutmak demek!

Değil sizin için gidiyoruz, ama ben de benim kodundan ayrı bir sunucu üzerinde medya dosyaları tutmak emin ne:

Ben medya dosyalarını depolamak için Amazon S3 kullanmak, ve ben sadece o tüm iş yapmak benim HTML dosyasının baş bir baz etiketi bulunmaktadır. Temelde, diğer sunucuya tüm göreli dosya / bağlantılar ve puan bu göreli yolları alır.

<base href="https://s3.amazonaws.com/BUCKET/PROJECT/FOLDER/" />

Orada büyük ihtimalle bu şekilde taban href etiketi benim kullanımını itiraz edecek bazı kim vardır, ama bu benim için gerçekten iyi çalışıyor. Bu şekilde ben Amazon tüm resim yükleme bant genişliği yönlendirebilir ve uzakta benim sunucudan.

: Uzak bir dosya varsa, bir HEAD isteği çalıştırmak öğrenmek için

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "url here");
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

if($code == 200)
    // The file exists.

Sen bilgilerini almak için medya sunucusu üzerinde bir port açmak gerekir ve bu yaptığınızı tam olarak buydu. Sizin yaklaşım (bu kadar uzun bu işlevselliği bir kamu port üzerinde kullanılabilir yapılıyor ok konum gibi) gayet iyi.

Ben herhangi bir medya dosyası bilgileri bir veritabanında saklanan ediliyor olmadığını varsayarak yaşıyorum.

Eğer bir aptal (non-scripting) ana bilgisayar kullanarak önemli maliyet tasarrufu yapıyoruz sürece bu kötü bir fikir olduğunu - bu sistem başarısız olur olasılığını iki katına çıkar. Eğer 2 ana var ise, en iyi çözüm kesin ayna olarak onlara sahip olmaktır. Session / veri çoğaltma olması gerekiyorsa, o zaman bu küçük yükü tanıtmak yok - ama maliyet değer. Round robin DNS üzerinden yükü dağıtmak. Buna ek olarak, sadece çok iyi .... kadar tek bir sunucuda (örneğin geliştirme kutusu) bir site ve ölçeklenebilir yedeklemek gerekiyor demektir.

Ben de (onları sizin sunucu üzerinde istemediğiniz bir şey gönderme önlemek için bir başlangıç ​​dönüşüm hariç) sunulan dosyaların değiştirilmiş sürümlerini tutmayın tavsiye ederim. Sonra talep üzerine içerik dönüşümü (ve sunucu tarafında önbelleğe kullanın).

Ama yine de birden vhosts ya da joker sankonlarına kullanarak klonlanmış sunucusu ile yapabilirsiniz - farklı DNS adları yoluyla mevcut içeriğe sahip bir avantajı çoğu tarayıcıların paralel daha istekleri çalışacak olmasıdır.

C.