Yüksek ölçeklenebilir web hizmetleri Bina

4 Cevap php

Ekibim ve ben oldukça ağır trafik idare edebilmek için gereken bir uygulama geliştirme ortasında bulunmaktadır. Seviyesini Facebook'a ama ileride ben yeniden yazıyor masif kodu olmadan büyütülebilir edebilmek olmak istiyorum değil.

Benim düşünce kendi arayüzleri ile ayrı hizmetleri içine her şeyi modularise oldu. Yani, örneğin mesajlaşma yöntemleri olarak send ve getMessages () olabilir ve daha sonra PHP web uygulaması sadece sabun ya da kıvırmak ya da bunun gibi bir şey ile bu arabirimi sorgulamak istiyorum bir mesajlaşma arayüzü olurdu. Mesajlaşma uygulaması o zaman bir Java uygulaması veya Python veya ne olursa olsun, kendi ayrı bir veritabanı Shard belirli işlevselliği için uygun olan bir uygulamanın herhangi bir tür olabilir.

Bu iyi bir yaklaşım mı?

4 Cevap

Modularise

My thought was to modularise out everything into seperate services with their own interfaces. So for example messaging would have a messaging interface that might have send and getMessages() as methods and then the PHP web app would simply query this interface through soap or curl or something like that

Ben servis modülleri (iyi kodlama prensibi) her ayırma fikrini seviyorum. Ben SOAP hakkında kısmını sevmiyorum:. (Ben karmaşık bir yol olduğunu düşünüyorum ben JSON-RPC falan gibi bir şey için giderdim..

Some quick tips:

My team and I are in the middle of developing an application which needs to be able to handle pretty heavy traffic. Not facebook level but in the future I would like to be able to scale to that without massive code re-writes.

  • Diğerleri de ima etti gibi High Scalability blog bakmak için tavsiye ediyorum.
  • Kullanarak ön uç ilk odak YSlow / google page speed. Bu optimizasyon uygulamak kolay ve size önemli ölçüde artırır verebilir. YSlow web sayfasından bir alıntı:

80% of the end-user response time is spent on the front-end. Most of this time is tied up in downloading all the components in the page: images, stylesheets, scripts, Flash, etc. Reducing the number of components in turn reduces the number of HTTP requests required to render the page. This is the key to faster pages.

  • Ben de facebook için büyük bir destek oldu C koduna kodu php dönüştürür php için HipHop bakmak için size tavsiye ediyorum. Makalesinden bir alıntı:

With HipHop we've reduced the CPU usage on our Web servers on average by about fifty percent, depending on the page. Less CPU means fewer servers, which means less overhead

  • Değil zaten kurulum derlenmiş kod önbelleğe APC (opcode önbellek) kullanmak için ise başka bir büyük / kolay iyileşme sanırım. Bu size (HipHop dönüştürülen parçalar için gerekli değil) büyük bir destek verecektir.
  • Eğer web büyütmek istiyorsanız mantra ile gitmek zorunda:

    RAM is the new Disk

    !Cache, cache, cache!, örneğin, APC, memcached, redis.

  • İlk düşük asılı meyve optimize sonra PHP kod profil. Ben Rasmus Lerdorf bu audio dosya gerçekten yararlı bulundu. Blog yazısı okurken performansı artırmak için iyi ipuçları bir sürü bulabilirsiniz.
  • Ayrıca ben Cassandra, örneğin lehine uzak ilişkisi veritabanından hareket düşünün. Bu benim büyük oyuncuların bir sürü (örneğin twitter için, digg, facebook, reddit) son zamanlarda yapmak görmek bir harekettir. Sen tam bir farklı bir zihniyet bu şekilde gitmek zorunda, ama benim bahis bu tamamen çabaya değer olacaktır.
  • Queue everything and delight every one, örneğin beanstalkd, gearman veya google app engine 'taskqueue.

Bir ilk adım, sadece PHP tabakası ve mesajlaşma katmanı arasındaki trafik gecikme biraz katacak akılda tutmak gibi olduğunu makul geliyor. Şunları da düşünebilirsiniz:

  • (Örneğin) kullanılarak PHP katman ilgili belleğe alan veri memcached. Ayrıca, squid gibi bir Web Proxy Cache kullanmayı düşünebilirsiniz

  • Birden fazla makine için web sunucusu ölçekleme, örneğin, veritabanında oturum verilerini saklamak. Eğer 2 web sunucuları olan (vs, beşinci, dördüncü) üçüncü ekleyerek katkıda bulunabilirsiniz kez basit olmalıdır. Sonunda da çoklu makinelere mesajlaşma katman ölçek gerekebilir unutmayın.

  • Böyle derlenmiş komut önbelleğe PHP e-Accelerator gibi araçları kullanarak; web katmanda performansını artırmak yardımcı olmalıdır

High Scalability bazı büyük makaleler yararlı olabilir, hem de vardır.

Son olarak, fazla mühendis bir çözüm kolaydır unutmayın. Daha sonra gerekli ayarlamaları yapmak için bu verileri kullanmak - En iyi bahis sürekli yol boyunca vb yükü, performans, kaynak kullanımı, ölçmektir.

Önbellek, önbellek ve daha fazla önbellek. SQL sorgu önbelleğe alma, opcode önbelleğe alma, aynı şey için birden çok kez sorgulama önlemek. Eğer yavaş noktaları nerede takip etmek için koşmak gibi Sonra bir profilcisini kullanmak.

Modülleri bir dizi etrafında üst düzey tasarım oturtmakta (hatta daha böylece mikro düzeyde) karmaşıklığı ve yapısı gelişimini yönetmek için iyi bir yoldur, ancak

PHP web uygulaması sadece sabun veya kıvrılması ile bu arabirimi sorgulamak istiyorum

Bu uygulamaya gecikme bir sürü tanıttı. Ben API'leri tanımlayan önermek ancak herhangi eşzamanlı olarak ele istek için, mümkün olduğunca tek bir iş parçacığı içinde kod kadar koşmak isterdim.

Tabii, bir arayüz, HTTP üzerinden çalışan bir çok pragmatik bir çözüm kullanarak, birden fazla geliştirme dilleri ile uğraşmak zorunda - ama sen Soap çağırabilir soyut bir PHP API (Corba için programlama ile daha sonra PHP ön ucu gelişmekte eğer , ya da başka şeyler), yine daha sonra farklı bir şekilde backend reimplementing seçeneği var.

Ben mesajlaşma ile ne demek emin değilim. Eğer uyumsuz bir istek işleme bahsediyoruz, o zaman PHP bir aboneyi nasıl uygulanacağı hakkında düşünmek gerekir. Bu solucanlar tam bir kutu - Ben PHP ile yazılmış bir iyi bir mesaj işleme sistemini görmedim - ama Java ya da yazılı bir iyi ölçeklenebilir bir çözüm görmedim - ve yüksek sonunda bazı büyük oyuncular tarafından Pimped ürünleri içermektedir sistemleri. Belki bir gün ben bir tane yazacağım ;) arada, gerçekten (ve potansiyel olarak daha az güvenilir) sizin kompleksi tutmak istiyorsanız abone daemon her türlü dan ayrı bir iş parçacığı çalışan iş mantığı - böylece yapmak için açık bir yol olduğunu bir web sayfası olarak hedef ortaya çıkarmak ve sadece iletileri alır ve web tabanlı API'leri çağıran bir daemon olarak abone çalıştırıyorum.

Sen really mesajlaşma etrafında bir senkron sistemini esas istemiyorsanız eğer senin tüm performans / güvenilirlik / ölçeklenebilirlik endişe.

HTH

C.