Bir PHP uygulama nasıl ölçeklendirileceğini (sunucular, mysql, memcache)

5 Cevap php

Şu anda İsviçre'de bir sosyal proje için bir web sitesi oluşturma.

Kullanıcı bir taşma olduğunu önce ve ben ölçekli uygulama hazırlamak istiyorum.

Kendim birçok sorularını yanıtladı ama bazı bırakılır.

Ben ne yapmak istediğinizi açıklar.


First

beginnning, Uygulama DNS, PHP, MySQL, veri ve memcache ile tek bir sunucu (kısa süre) sahip olacaktır.


Second

Sonra ikiye onları bölecek

  1. DNS, MySQL, memcache
  2. Veri, PHP

Third

Burada sorun, ben de çalışan uygulama tutmak için burada tam olarak bunu yapmak için nasıl bilmiyorum.

Yapabileceğim:

  1. Ön: Yük Dengeleyici, memcache, DNS
  2. Web 1: PHP, DATA
  3. Web 2: PHP, DATA
  4. Mysql

Bu düzeni olacağını, tüm PHP oturumlar DB tutulur.

BUT, how do I sync the data? do I run a Rsync to keep them up to date. do I put them on a separate disk (network disk) to be sure ? but in this case, how can I do in case of user uploads ?

ve web sitesi daha başarılı olur ve biz daha büyük yapılar üzerine gitmek varsa, bu güncellemeleri bazı gecikme oluşturmak would'nt?

veya Amazon'un web hizmetlerine doğrudan gitmek için iyi bir şey olurdu?

some infos I use codeigniter as Framework. I use linux as webserver (distribution not chosen now, but should be Debian)

Cevaplar için şimdiden teşekkür ederiz.

5 Cevap

Göre Wikipedia, İsviçre 4.6 milyon Alman konuşmacılar, 1,5 milyon Fransız hoparlör, ve, İtalyan Romansch ve diğer dillerde .5 milyon hoparlöre sahip. Yani tek bir sunucu ihtiyaçlarınıza uygun göreceksiniz şüpheli. Eğer ölçeklendirme sorunları çalıştırmadan önce nasıl alabilirim büyük bir fikir almak için her ay veya her gün sitenizi ziyaret edecek nüfusun ne oranda sanırım.

Yani, henüz ölçekleme hakkında endişelenmenize gerek yok! Bonus: Eğer bu sorun hakkında endişe harcamak yok zaman, sizin kullanıcılar için diğer sorunları çözmek için kullanabilirsiniz.

Web hizmetleri yaygınlaştırılmasının birkaç ortak yolları Flickr ve Facebook gibi siteler kullanmak gibi ne için vardır:

  • Kavramlara dayalı bölünmüş sunucuları (API, giriş, medya dosyaları, reklamlar, statik sayfalar, dinamik sayfalar)
  • JOINed olması gerekmez kavramlar (giriş, uzun süreli raporlama, sayfa veri, vb) dayalı bölünmüş veritabanları
  • Derleme / PHP'nizi ve diğer kaynaklar (sprite, derlenmiş css, zend) optimize
  • Önbelleğe Ekle (ön, arka uç)
  • Temsilci ekleyin (yuvarlak robin, vb)

Ancak, ölçekleme önce, ölçmek. Testlerin Set, sizin kapasitesini hesaplamak, ve gerek önce optimize yok.

Bazı şüpheli şeyler görüyorum:

  • Bir SQL server var, ve sen son derece yüksek ses bekliyoruz bir sitede bir veritabanında oturumları depolamak. Birisi kaydedilir ve sonunda MySQL çoğaltma istihdam zaman beklenen yavaşlatmak ne ise kaç sorgular ki, tek bir sayfa üretmek için sürer?

  • Bir küme FS kullanıyorsanız, her şeyi senkronize 'sadece tutulur' edilir. Sen webserver 2 sonları üzerinde webserver 1 iken build B inşa A ile sona ermeyecek. Eğer gerçekten bu kadar trafik bekliyoruz, bu bir değişiklik yüklemek için gereken süre içinde, o zaman sadece bir bin kişiyi sinirli, tüm düğümleri senkronize.

Ben sorunu olmadan 40 düğümleri ile OCFS2 kullanarak kümelerde çalışan uygulamalar dağıtılan ettik ve OCFS2 mevcut tam olarak 'en iyi' küme FS değildir. Lustre kontrol ve diskteki oturumları tutmak düşünün.

Eğer hadoop içine bakmalı

Eğer / paylaşım klasörleri monte edebilirsiniz unutmayın.

Ne veri senkronizasyonu olurdu?

Sen veritabanı makine veya başka bir makinede verileri koyarak düşünebilirsiniz. Db makine ilk başta normal bir web sunucu daha fazla IO olması muhtemel olduğundan, genellikle iyi bir fikirdir.

Muhtemelen kurulum için iyi bir fikirdir böylece verileri tek bir yerde kalır benzer bir SAN veya. Veri birden fazla kopya ile başa çıkmak için bir acıdır. Bu yol giderek orada çok db dosyaları koymak anlamına gelir.