Next.js ile Ölçeklenebilir B2B Platformları Nasıl Tasarlıyoruz?
Bir B2B platform nadiren ana sayfasıyla değerlendirilir. Asıl sınav aylar sonra gelir: onuncu kurumsal müşteri tek oturum açma (SSO) istediğinde, bir muhasebeci bir faturayı kimin değiştirdiğini gösteren denetim kaydına ihtiyaç duyduğunda ya da büyük bir müşteri pazartesi sabahı elli bin kayıt içe aktardığında. Next.js bu tür yazılımlar için hızlı ve modern bir temel sunar: ön yüzde React, aynı kod tabanında güvenli sunucu tarafı kod ve her sayfa türü için esnek render seçenekleri. Ancak bir platformu ölçeklenebilir yapan tek başına framework değil, mimaridir. Bu yazıda Next.js ile B2B platform geliştirirken verdiğimiz kararları ve platform büyüdükçe her birinin neden önemli olduğunu paylaşıyoruz.
Framework'ten Değil, İş Modelinden Başlamak
Veritabanı veya klasör yapısı seçmeden önce işin gerçekte nasıl yürüdüğünü haritalandırırız. Müşteriler kimler: tek tek şirketler mi, büyük kurumların departmanları mı, yoksa kendi müşterilerini yöneten bayiler mi? Kullanıcılar nasıl gruplanıyor ve kim neyi görebiliyor? Platformun muhasebe yazılımları, CRM'ler veya ödeme sağlayıcıları gibi hangi sistemlerle konuşması gerekiyor? Bu soruların cevapları, sonrasında gelen neredeyse her teknik kararı şekillendirir.
Bu adım aynı zamanda ilgili platform için 'ölçeğin' ne anlama geldiğini de tanımlar. Bazı ürünler için bu binlerce küçük organizasyon demektir; bazıları için ise yoğun veriye ve sıkı uyumluluk gereksinimlerine sahip birkaç büyük müşteri. Doğru ölçek türü için tasarım yapmak, hem gereksiz karmaşıklığı hem de ileride acı veren yeniden yazımları önler.
Multi-Tenancy: Her Müşterinin Verisini İzole Etmek
Neredeyse her B2B platform multi-tenant'tır: birçok organizasyon aynı uygulamayı paylaşır ve her biri yalnızca kendi verisini görmelidir. Üç yaygın model vardır. Her satırda tenant kimliği bulunan ortak bir veritabanı en maliyet etkin ve işletmesi en kolay olanıdır. Tenant başına ayrı bir şema daha güçlü bir ayrım sağlar; tenant başına ayrı veritabanı ise sıkı sözleşme veya mevzuat gereksinimleri olan müşteriler için en yüksek izolasyonu sunar.
Çoğu platformda ortak bir veritabanıyla başlar ve tenant izolasyonunu birden fazla katmanda uygularız. Uygulama mevcut tenant'ı her zaman sunucuda belirler, her sorgu bu tenant'a göre sınırlandırılır ve veritabanı destekliyorsa satır düzeyinde güvenlik (row-level security) ikinci bir savunma hattı görevi görür; böylece unutulan tek bir filtre asla veri sızıntısına yol açmaz. Tenant'ın alt alan adı, özel alan adı veya giriş yapan kullanıcının organizasyonu üzerinden belirlenmesi isteğin erken bir aşamasında yapılır; böylece uygulamanın geri kalanı buna güvenebilir.
Sunucuda Render ve Veri Çekme
App Router ve React Server Components, B2B yazılımlara özellikle iyi uyar. Bir iş platformundaki ekranların çoğu veri yoğun tablolar, panolar ve formlardan oluşur. Bunları sunucuda render etmek hassas mantığı ve kimlik bilgilerini istemciden uzak tutar, tarayıcıya gönderilen JavaScript miktarını azaltır ve büyük veri setlerinde bile sayfaların hızlı yüklenmesini sağlar. İstemci bileşenlerini filtreler, editörler ve sürükle bırak arayüzleri gibi gerçekten etkileşimli parçalar için kullanırız.
Multi-tenant bir sistemde önbellekleme özel bir özen gerektirir. Next.js güçlü önbellekleme özellikleri sunar, ancak bir organizasyona ait veri asla başka bir organizasyonun alabileceği şekilde önbelleğe alınmamalıdır. Tenant ve kullanıcı bağlamını her önbellek kararının parçası olarak ele alır, ortak referans verilerini agresif biçimde önbelleğe alır ve kişiselleştirilmiş verileri dinamik tutarız. Değişiklikler, her çağrıda girdiyi doğrulayan ve yetkiyi kontrol eden server action'lar veya API route'ları üzerinden yapılır; istemciye asla güvenilmez.
Kimlik Doğrulama, Roller ve Yetkiler
Kurumsal müşteriler e-posta ve şifreden fazlasını bekler. Büyük müşteriler çoğu zaman kendi kimlik sağlayıcıları üzerinden tek oturum açma ister ve birçok organizasyonun ayrıntılı rollere ihtiyacı vardır: yöneticiler, müdürler, çalışanlar, dış muhasebeciler veya yalnızca okuma yetkisi olan denetçiler. Yetki modelini, kontrolleri bileşenlere dağıtmak yerine her server action ve API route'un kullandığı merkezi bir katman olarak erkenden tasarlarız.
Denetim kaydını (audit log) da platforma en baştan dahil ederiz. Kimin neyi ne zaman yaptığını kaydetmek, B2B müşteriler için çoğu zaman sözleşmeden doğan bir zorunluluktur ve destek süreçleri için paha biçilmezdir. Bunu sonradan eklemek her önemli işlemi yeniden ele almak anlamına gelir; bu yüzden mimarinin ilk versiyonunda yer almalıdır.
Entegrasyonlar ve Arka Plan İşleri
B2B platformlar daha geniş bir ekosistemin içinde yaşar. Faturalar muhasebe sistemlerine akar, ödemeler sağlayıcılardan gelir, veriler tablolardan ve eski yazılımlardan içe aktarılır. Büyük içe aktarımlar, rapor üretimi ve harici API çağrıları gibi uzun süren veya güvenilmez işler, kullanıcının isteğini asla bloke etmemelidir. Bu işleri kuyruklar, yeniden denemeler ve net durum takibi olan arka plan işlerine taşırız; böylece kullanıcılar zaman aşımı yerine ilerlemeyi görür.
Her entegrasyonu idempotent ve gözlemlenebilir olacak şekilde tasarlarız. Webhook'lar doğrulanır ve iki kez iletildiklerinde bile güvenle işlenir, harici API limitlerine uyulur ve hatalar sessizce kaybolmak yerine uyarı üretir. Demoda çalışan bir entegrasyonla çeyreğin en yoğun gününde çalışan bir entegrasyon arasındaki fark budur.
Gözlemlenebilirlik, Güvenilirlik ve Dağıtım
Bir müşteri sorun bildirdiğinde ekibin hızla cevap verebilmesi gerekir: hangi tenant, hangi kullanıcı, hangi istek? Loglara ve trace'lere tenant ve istek bağlamı ekler, hata oranlarını ve performansı müşteri bazında izler ve tenant başına istek limitleri uygularız; böylece yoğun kullanan tek bir müşteri platformu herkes için yavaşlatamaz.
Dağıtım da aynı disipline tabidir. Her değişiklik için önizleme ortamları, pipeline'da otomatik testler, güvenli veritabanı migration'ları ve yönetilen bir platforma ya da müşterinin tercih ettiği buluttaki container'lara dağıtım seçeneği, B2B müşterilere güncellemelerin operasyonlarını aksatmayacağı güvenini verir.
Sıkça Sorulan Sorular
Next.js kurumsal B2B platformlar için uygun mu?
Evet. Next.js her ölçekten şirket tarafından üretim ortamında kullanılıyor; sunucu tarafı render, server action'lar ve API route'ları onu veri yoğun iş yazılımları için çok uygun hale getiriyor. Bir platformu kurumsal kullanıma hazır yapan ise framework'ün etrafındaki mimaridir: tenant izolasyonu, yetkilendirme, denetim kaydı, entegrasyonlar ve gözlemlenebilirlik.
Yeni bir B2B platform hangi multi-tenancy modelini kullanmalı?
Çoğu platform için en iyi başlangıç, her kayıtta tenant kimliği bulunan ortak bir veritabanıdır; bu izolasyon hem uygulamada hem de mümkünse veritabanında satır düzeyinde güvenlikle sağlanır. Tenant başına ayrı şema veya veritabanı ise belirli müşterilerin daha güçlü izolasyon için sözleşme veya mevzuat gereksinimleri olduğunda anlam kazanır; iyi tasarlanmış bir platform ikisini birlikte destekleyebilir.
Next.js platformu kurumsal müşteriler için tek oturum açmayı (SSO) destekleyebilir mi?
Evet. Next.js uygulamaları, SAML ve OpenID Connect gibi standartlar üzerinden doğrudan veya bir kimlik doğrulama servisi aracılığıyla kurumsal kimlik sağlayıcılarla entegre olabilir. SSO'yu erkenden planlamak, ilk büyük müşteri talep ettiğinde kullanıcı ve organizasyon modelini yeniden kurmak zorunda kalmayı önler.
Ayrı bir arka yüze ihtiyaç var mı, yoksa Next.js yeterli mi?
Birçok B2B platform için, özellikle uzun süren işler için bir arka plan iş sistemiyle birleştirildiğinde, Next.js route handler'ları ve server action'ları yeterlidir. Laravel veya Node.js gibi ayrı bir arka yüz ise iş mantığı, entegrasyonlar ve arka plan işlemleri kendi servisini hak edecek kadar kapsamlı olduğunda değerli hale gelir.
Next.js platformunun Vercel'de barındırılması zorunlu mu?
Hayır. Vercel popüler bir seçenektir, ancak Next.js uygulamaları AWS, Google Cloud, Azure veya özel bir bulut üzerinde Node.js sunucusu ya da container olarak da çalışabilir. Veri yerleşimi gereksinimi olan B2B müşteriler çoğu zaman bu esnekliği tercih eder.
Tek bir müşterinin platformu diğerleri için yavaşlatması nasıl önlenir?
Tenant başına istek limitleri ve kaynak kotaları uygulanarak, içe aktarma ve raporlar gibi ağır işler arka plan kuyruklarına taşınarak ve performans müşteri bazında izlenerek. Böylece yoğun kullanan tek bir müşteri, herkesi etkilemeden önce fark edilir ve sınırlandırılır.
Sonuç
Next.js, B2B platformlar için güçlü bir temeldir; ancak ölçeklenebilirlik onun etrafında verilen kararlardan gelir: önce iş modelini anlamak, tenant verisini birden fazla katmanda izole etmek, render ve önbelleklemeyi tenant bağlamını gözeterek yapmak, yetkileri ve denetim kaydını merkezileştirmek, ağır işleri arka plana taşımak ve sistemin her parçasını gözlemlenebilir kılmak. Bu kararları ilk gün vermek, yayına aldıktan sonra sisteme sonradan eklemekten çok daha kolaydır. Bir B2B platform planlıyorsanız ve müşteri tabanınız büyüdükçe ayakta kalacak bir mimari istiyorsanız, ihtiyaçlarınızı birlikte konuşmaktan memnuniyet duyarız.