Yüksek performanslı işlemlerin işlenmesi için her türlü teknik vardır ve Fowler'in makalesinde yer alan konu, kanama alanındaki birçok kişiden sadece biridir. Herhangi birinin durumuna uygulanabilir veya uygulanamayacak bir dizi teknik listelemek yerine, temel prensipleri ve LMAX'in çok sayıda kişiye nasıl hitap ettiğini tartışmanın daha iyi olacağını düşünüyorum.
Yüksek ölçekli bir işlem işleme sistemi için aşağıdakilerin tümünü mümkün olduğunca yapmak istiyorsunuz:
En yavaş depolama katmanlarında harcanan zamanı en aza indirin. Modern bir sunucuda en hızlıdan en yavaşına kadar: CPU / L1 -> L2 -> L3 -> RAM -> Disk / LAN -> WAN. En hızlı modern manyetik diskten en yavaş RAM'e bile atlama, sıralı erişim için 1000x'in üzerindedir ; rastgele erişim daha da kötüdür.
Bekleyen harcanan zamanı en aza indirin veya ortadan kaldırın . Devlet, bu araçlar, mümkün olduğunca az devlet olarak paylaşımı ve gereken paylaşılacak Mümkün açık kilitleri kaçınarak.
İş yükünü yay. İşlemciler son birkaç yılda çok daha hızlı bir şekilde artmadı, ancak daha da küçüldü ve bir sunucuda 8 çekirdek oldukça yaygın. Bunun ötesinde, çalışmayı Google'ın yaklaşımı olan birden fazla makineye bile yayabilirsiniz; Bunun en güzel yanı I / O dahil her şeyi ölçeklendirmesidir .
Fowler’a göre, LMAX bunların her birine aşağıdaki yaklaşımı uygular:
Tutun tüm bellekte durumunu bütün zamanlar. Çoğu veritabanı motorları aslında bu zaten yapacak olursa tüm veritabanı bellekte sığabilecek, ancak bir gerçek zamanlı ticaret platformunda anlaşılabilir şans, bir şey bırakıyorum istemiyoruz. Bir ton risk eklemeden bunu ortadan kaldırmak için bir grup hafif yedekleme ve yük devretme altyapısı inşa etmek zorunda kaldılar.
Girdi olaylarının akışı için kilitsiz bir sıra ("bozucu") kullanın. Kesin olarak kilitlenmeyen ve aslında genellikle acı verici şekilde yavaş dağıtılmış işlemleri içeren geleneksel dayanıklı mesaj sıralarının aksine .
Fazla değil. LMAX bunu iş yükünün birbirine bağımlı olması esasına dayanarak veri yolunun altına atar; birinin sonucu diğerlerinin parametrelerini değiştirir. Bu kritik bir uyarıdır ve Fowler'ın açıkça söylediği bir uyarıdır. Onlar yaparım bazı yük devretme yetenekleri sağlamak amacıyla eşzamanlılık kullanımını, ancak tüm iş mantığını bir üzerine işlenir tek iplik .
LMAX, yüksek ölçekli OLTP'ye tek yaklaşım değildir . O kendi başına Oldukça zekice olsa da, senin yok değil bu performans seviyesine çekip amacıyla kanama-kenar teknikleri kullanmak gerekir.
Yukarıdaki prensiplerin hepsinde, muhtemelen en önemli ve en etkili olan 3 numaralı cihazdır, çünkü açıkçası donanım ucuzdur. İş yükünü yarım düzine çekirdeğe ve birkaç düzine makineye uygun şekilde bölebiliyorsanız, gökyüzü geleneksel Paralel Hesaplama tekniklerinin sınırıdır . Bir sürü mesaj kuyruğu ve bir yuvarlak dağıtımcı dağıtıcısı dışında hiçbir şeyle ne kadar verim elde edebileceğinizi görünce şaşıracaksınız. Belli ki LMAX kadar verimli değil - aslında yakın bile değil - verim, gecikme ve maliyet etkinliği ayrı ayrı endişeler ve burada özellikle verim hakkında konuşuyoruz.
Eğer LMAX’ın, özellikle de aceleci bir tasarım seçimine karşılık bir iş gerçekliğine karşılık gelen ortak bir durumla aynı tür özel ihtiyaçlarınız varsa, o zaman bileşenlerini denemeyi öneririm, çünkü çok fazla görmedim. bu şartlara uygun başka bir şey. Fakat eğer sadece yüksek ölçeklenebilirlikten bahsediyorsak, o zaman sizleri dağıtık sistemler hakkında daha fazla araştırma yapmaya davet ediyorum, çünkü bugün çoğu kurum tarafından kullanılan kanonik yaklaşımlar (Hadoop ve ilgili projeler, ESB ve ilgili mimariler, ayrıca Fowler bahseder, vb.).
SSD'ler aynı zamanda bir oyun değiştirici olacak; tartışmasız, onlar zaten. Artık RAM'e benzer erişim sürelerine sahip kalıcı bir depolama alanınız olabilir ve sunucu sınıfı SSD'ler hala korkunç bir şekilde pahalı olsalar da, benimseme oranları arttıkça nihayetinde fiyatlar düşecektir. Kapsamlı bir şekilde araştırıldı ve sonuçlar oldukça kafa karıştırıcı ve yalnızca zamanla daha iyi olacak, bu nedenle "her şeyi bellekte tut" konsepti eskiden olduğundan çok daha az önemli. Bu yüzden bir kez daha, mümkün olduğunda eşzamanlılığa odaklanmaya çalışıyorum.