2011-03-31 19 views
5

Çok kiracılı bir sistem tasarlıyorum ve veri tabanı yerine uygulama katmanı düzeyinde kiracı tarafından paylaşmayı düşünüyorum.Uygulama düzeyinde biçimlendirme

Varsayımsal olarak, bu işlemin çalışması, gelen istek için bir yönlendirici işleminin, sanal shard kimliğinin yanı sıra bu istek için kiracıyı belirlemek üzere birincil öznitelikleri içeren bir kiracı topluluğuna sahip olmasıdır. Bu sanal shard kimliği ayrıca gerçek bir shard ile eşleştirilir.

Gerçek parça, bu kiracı için hem uygulama kodunu hem de tüm verileri içerir. Bu kırıklar LNMP (Linux, Nginx, MySQL/MongoDB, PHP) sunucuları olacaktır.

Yönlendirici işlemi proxy işlevi görmelidir. Bazı yerel db veya dosyalarda depolanan koleksiyona göre gelen talep için hedef shard değerini belirlemek için bazı kodları çalıştırabilmelidir. Bunu daha iyi ölçeklendirebilmek için, kırıcıların kendilerini yönlendirici olarak hareket etmesini sağlamayı ve böylece talebi doğru bir parçaya yönlendirecek bir ters proxy çalıştırmayı düşünmekteyim. Belki de shard üzerinde çalışan nginx örneği de ters vekil olarak hareket edebilir. Ancak, uygun eğimle talebi karşılamak için gereken uygulama mantığını nasıl yürütecek?

Bu yönlendirici uygulamasına ilişkin tüm fikir ve önerileri takdir edeceğim.

Teşekkür

Eğer kiracı yaklaşık olarak eşit veri hacmi oluşturmak için bekliyoruz sürece

cevap

0

, kiracı tarafından Kırma işlemi çok verimli olmayacaktır.

genel olarak uygulama seviyesi Kırma işleminde gelince, bana kendi deneyimlerini paylaşmak alalım: Uygulama düzeyinde yüksek hacimli SaaS ürün kanatlı bir bir

Versiyon 1. Büyürken yeniden satmanın, uygulama seviyesinde bir SQL tipi çözüme karşı sallanıyorsanız veya süreci otomatikleştirmek için önemli bir takım yazmanız gerektiğinde büyük bir baş ağrısı olacağını göreceksiniz.

Veriler büyüdükçe yeniden oluşturma/yeniden dengeleme için yerleşik desteğin tamamı nedeniyle MongoDB'ye (Cassandra dahil olmak üzere birden çok seçenek göz önüne alındıktan sonra) küçük bir bölümden geçtik. Uygulamanızın, MySQL'in ilişkisel yeteneklerine ihtiyacı yoksa, mütevazı bir veri büyümesinden fazlasını beklerseniz, çabalarınızı MongoDB'ye (olası bir veri platformu olarak tanımladığınızdan beri) yoğunlaştırmanızı öneririm. MongoDB'nin veri paylaşımını ele almasına izin verin.

+0

Uygulama seviyesi shard, arkada tek taraflı MongoDB içeren bir sunucu grubu olabilir. Kiracıları kontrollü kontuarlar için kiracılara ayırma özelliğini hala inşa etmek istiyorum. Yine de yeniden başarabilmek için karmaşık takımlara olan ihtiyaç konusunda size katılıyorum. – msingla

1

DbShards gibi bir ürünü kullanmak başka bir seçenek olabilir. dbShards, uygulama düzeyinde kırılan tek parafudur. Bu şekilde herhangi bir RDMS (Postgres, MySQL, vb.) Kullanabilirsiniz ve yine de aralarında bir çeşit proxy koymak zorunda kalmadan veritabanınızı parçalayabilirsiniz. Diğer parçalayıcı ürünler, işlemleri doğru parçaya yönlendirmek için bir proxy'ye güvenir, ancak dbShards başka kimseye "sormak zorunda kalmadan" nereye gideceğini bilir.

Harika ürün.