SORU
25 AĞUSTOS 2011, PERŞEMBE


django üzerinde multitenant uygulama için optimum mimarlık

Multitenancy bir uygulama oluşturmak için doğru/uygun şekilde üzerine titremek oldum Django üzerinde.

Bunun bir açıklaması:

  • Uygulama birkaç kiracı (tenant1, tenant2, ...,) tarafından kullanılabilir.

  • Tüm bireysel kiracı veri diğer kiracıların erişim (ve kullanıcılarının) karşı güvenli olmalı.

  • İsteğe bağlı olarak kiracı uygulama nesneleri için özel ek alanlar oluşturabilir.

  • Tabii ki, bir kiracı temel donanım Limitleri numarası "sistem".

1) alt-etki alanı (örn kiracı özgü kullanarak her kiracı Ayıran temel tabakası veritabanları

2) bazı Kullanarak KİMLİK kiracı modeli veritabanında kiracı-veri ayırmak için

Dağıtım süreçleri, sistem-parçalar performans düşünüyorum (web sunucusu, veritabanı sunucusu(ler), düğümlü bir çalışma(s),...)

En iyi Kur ne olurdu ? Burada yanlısı ve con değil mi?

Ne düşünüyorsun?

CEVAP
25 AĞUSTOS 2011, PERŞEMBE


8 ** Bir multitenancy aşağıdaki mimarisi kullanılarak inşa. Bazı yararlı ipuçları bulabilirsiniz umarım.

  • Her kiracı alt etki alanı (t1.example.com alır
  • Django kullanarak url uygulama istekleri yeniden yazmak example.com/t1 gibi bir şeyler yazılmış
  • Tüm url tanımlar (r'^(?P<tenant_id>[\w\-] ) gibi bir şey ile öneki
  • middleware ve tenant_id süreçleri tüketir ve isteği (örneğin istek ekler.kiracı = 't1')
  • Şimdi mevcut kiracı tenant_id argüman her görünüm belirtmeden her görünümünde kullanılabilir
  • Bazı durumlarda isteği mevcut yok. Geçerli iş parçacığı (current language threading.local kullanmaya benzer) tenant_id bağlayarak bu sorunu çözdüm
  • Dekoratörler (e.oluşturmak bir kiracı farkında) login_required g, middlewares veya görüş korumak ve doğru modelleri seçmek için fabrikalar
  • Veritabanları ile ilgili iki farklı senaryo kullandım:
    • Kur birden çok veritabanı ve yapılandırma mevcut kiracı göre routing. Bu ilk kullandım ama yaklaşık bir yıl sonra bir veritabanı geçti. Nedenleri şunlardı:
      • Verileri ayırmak için yüksek güvenlikli bir çözüme ihtiyacımız yoktu
      • Farklı kiracılar hemen hemen hepsi aynı model kullanılmış
      • Veritabanları (ve kolay güncelleme/geçiş süreci inşa etmedi) bir sürü yönetmek zorunda kaldık
    • Yani kullanıcılar için bazı basit eşleme tabloları ve farklı modelleri ile bir veritabanı kullanın. Ek ve kiracı belirli model alanlar eklemek model inheritance kullanıyoruz.

Çevre ile ilgili aşağıdaki ayarları kullanıyoruz:

Benim açımdan bu Kur takip pro ve con:

Pro:

  • Bir uygulama örneği mevcut kiracı bilerek
  • Projenin büyük bir bölümü kiracı belirli sorunları ile rahatsız etmek yok
  • Tüm kiracılar arasındaki paylaşım varlıklar için kolay bir çözüm (örneğin mesajlar)

Contra:

  • Oldukça büyük bir veritabanı
  • Çok benzer bazı tablolar model mirası sayesinde
  • Veritabanı katmanında güvenli değil

Tabii en iyi mimari şiddetle kiracı sayısı, modelleri delta, güvenlik gereksinimleri ve gereksinimlerinize bağlıdır.

Güncelleme: Yapımızı gözden geçirdik, öneririmdeğilnokta 2-3 de belirttiği gibi, URL yeniden yazma. Daha iyi bir çözüm İsteği tenant_id Başlık koymak ve (4) tenant_id isteği dışında request.META.get('TENANT_ID', None) gibi bir şey ayıklamak için olduğunu düşünüyorum. Bu şekilde tarafsız bir URL almak ve çok daha kolay Django-dahili fonksiyonlar (örneğin {% url ...%} reverse()) veya harici uygulamaları kullanmak için.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007