Migrate Legacy Uygulamaları Bir Serversız Mimariye Nasıl Yapılır
Serverless Architecture
Bir sunucusuz mimariye ait bir miras başvurusu yapmak basit bir asansör-ve değişim egzersizi değildir - uygulamanızın nasıl inşa edildiğini ve dağıtılmasını gerektirir.Bir sunucusuz modelde, bulut sağlayıcınız aslında işlem süresini yönetir.Bu ücretsiz geliştiricilerin geçici sunuculardan sipariş alma, iş sistemlerinizi yeniden yapılandırmasını gerektirir.
Büyük bulut sağlayıcıları tamamen yönetilen sunucusuz hesaplama platformlarını sunar: AWS Lambda, Azure Functions ve Google Cloud Functions. Bu hizmetler birden çok programlama dili destekler ve HTTP istekleri, veritabanı etkinlikleri, dosya yüklemeleri, planlanan görevler ve kuyruklardan gelen mesajlar, genellikle bir mikro hizmet veya etkinlik odaklı bir mimariyi benimsemeye devam eder.
Sunucusuz genellikle yeşil alan projeleri ile ilişkilendirilirken, birçok kuruluş, işletmesel koğuşları veya daha eski mikro hizmetleri operasyonel olarak azaltmak ve elastikliği artırmak için başarılı bir şekilde, göçü yönetilebilir aşamalara ayırarak, mirasınızın belirli kısıtlamaları ele alır - uzun süren süreçleri, devletli seanslar veya sıkı sıkı sıkı çalışma sistemi ile darbe.
Hazırlık Aşaması: Miras Uygulamanızı Değerlendirme
Tek bir sunucusuz kod yazmadan önce, mevcut uygulamayı iyice anlamanız gerekir. Bir aceleci göç iş mantığını kırabilir, güvenlik boşluklarını tanıtabilir veya her özelliğin ayrıntılı bir envanterini yaratarak başlayın, bağımlılık ve entegrasyon noktası.
Teşvik Uygulama Bileşenleri ve Bağımlılık
Miras uygulamaları genellikle iç kütüphanelerin, üçüncü taraf hizmetlerinin, konfigürasyon dosyalarının ve çevre özgü ayarların karışımına dayanır. Aşağıdaki belge:
- Tüm API'ler, uç noktaları ve iç hizmet çağrıları
- Üçüncü taraf SaaS entegrasyonları (ödeme ağ geçidi, CRM sistemleri, vs.)
- Veritabanı şemaları, depolanan prosedürler ve veri erişim kalıpları
- Caching katmanları (Redis veya Memcached gibi)
- Arka işler, cron görevleri ve toplu işleme rutinleri
- Kimlik ve yetki akışları (LDAP, OAuth, session store)
Uzun süreli süreçlere veya görevleri hafızada tutan özel dikkat edin. Serverless işlevleri genellikle zaman sınırlarına sahiptir (örneğin, AWS Lambda için 15 dakika), bu yüzden saatlerce çalışan süreçler, AWS Step Functions veya Azure Functions gibi yeniden faktörlenecek veya ele alınacaktır.
Serverless Functions için uygun adaylar
Bir mirasın her parçası sunucusuz bir işleve ait değildir. Devletsiz, idempotent ve bir olay tarafından tetiklenebilir. İyi adaylar şunları içerir:
- CRUD işlemleri yapan API uç noktaları
- Data dönüşümü ve zenginleştirme hatları
- Bildirim hizmetleri (email, SMS, uyarıları it)
- Kayıtlar veya temiz iş işleri
- Üçüncü taraf sistemler için entegrasyon adaptörleri
Tersine, kalıcı TCP bağlantılarını gerektiren bileşenler (uzun ömürlü bağlantıları gibi), yerel dosya sistemine büyük ölçüde güveniyor veya düşük seviyeli donanım erişimine bağlı olarak konteyner bazlı hizmetlere daha uygun (örneğin, AWS Fargate veya Azure Konteyner Instances).
Evaluate Data Storage Seçenekleri
Serverless mimariler genellikle manuel müdahale olmadan ölçeklenen veritabanı hizmetlerini tercih eder. Mevcut veri katmanınızı değerlendirin ve bu şekilde göçü planlayın:
- [FONT:0]Relational databases:[Dönetici:[Dönetici:0) Amazon Aurora Serverless, Azure SQL Database serverless veya Google Cloud SQL otomatik olarak otomatikleştirilme ile kullanılabilir.Mevcut şemalarınız depolanmış prosedürler veya tetikleyiciler kullanıyorsa, bu değişkenlerin sunucusuz olarak desteklenmediğini test edin.
- [FONT=0]NoSQL veritabanı:[Dönetici:[Dönetici: 0) DynamoDB, Firestore veya Cosmos DB, etkinlik odaklı, düşük ücretli iş yükleri için doğal olarak uygundur.
- [FONT:0]File depolama:[Dönetici:[Dönetici:0) Yerel diskten veya NFS'den Amazon S3, Azure Blob Storage veya Google Cloud Storage gibi depolamak için depolamak için depolamak için depolamak için yerel disk veya NFS'den gelen Migrate.
- [FONT:0)Caching:[Döncükler, ElastiCache veya Azure Cache for Redis gibi yönetilen hizmetlerle yeniden kayıt dışı bırakılır.
Her depolama göçü risk taşır. Her bir kayıttan sonra her bir kayıtta, bütünlük sağlamak için veri doğrulama yapar. Veritabanı göç araçları kullanın (AWS DMS, Azure Database Migration Service) aşağı zaman en aza indirmek için.
Plan Güvenliği, Kimlik ve Yetki
Serverless uygulamalar yeni güvenlik gözlerini ortaya koyar. Saldırı yüzeyi OS ve ağ katmanından fonksiyon koduna, bağımlılıklara ve izinlere geçer. Anahtar planlama adımları şunlardır:
- Kullanım:0)IAM rolleri[[Dönetici: 1)) koddaki bilgi bilgilerini depolamak yerine (veya eşdeğer bulut kimlik hizmetleri)
- ImplementFLT:0)En Az ayrıcalık[[Dönetici 1] her bir işlev için gerekli olan izinler.
- Güvenli API Gateway uç noktaları ile [[0.cognito kullanıcı havuzları[Dönetici:2)Lambda yazarizers) veya üçüncü taraf kimlik doğrulama hizmetleri (Auth0, Okta).
- EnableFLT:0 Geri kalanı ve transit geçişte şifrelenir tüm veri depoları için.
- Denetim, OWASP Bağımlılığı veya Snyk gibi bilinen kırılganlıkları bağımlıdır.
Mevcut ağ segmentinizi gözden geçirmeyi unutmayın. Serverless işlevleri özel kaynaklara erişmek için bir VPC'ye yerleştirilebilir, ancak bu, API Gateway veya yönetilen bir hizmet aracılığıyla bu kaynakları açığa çıkarabilirseniz latency ve soğuk başlangıç yükü anlamına gelir. Evaluate if you can put those resources through API Gateway or a managed service instead.
Göç Stratejisi: Doğru Yaklaşımı Seç
Evrensel bir göç yolu yoktur. seçiminiz, mirasınızın mimarisine, ekibinizin sunucusuzluğa ve alt süre için iş toleransına bağlıdır. Üç ortak strateji – ev sahibi olmak, yeniden inşa etmek ve yeniden inşa etmek – her şeyden önce ticaret-offları vardır.
Re loving: Lift and Shift with Serverless ballpers
Re hosting, mevcut uygulamayı bir konteyner içinde ve AWS Fargate veya Azure konteyner Instances gibi tamamen yönetilen bir konteyner platformuna taşımayı hedefliyor çünkü sunucusuz fonksiyonlar hala sunucu yönetimini ortadan kaldırır ve sürekli olarak devam edebilirsiniz.
Eğer mirasınız zaten bir Docker konteyner olarak paketlenirse, bu yaklaşım hızlı olabilir. Otomatik ölçeklendirme ( Lambda olarak granular olarak değil) ve operasyonel bir yük olarak bu stratejiyi kullanın: mevcut altyapınızla paralel olarak konteyner çalıştırın, o zaman saf sunucusuz işlevleri ile uç noktanızı değiştirin.
Refaksiyon: Serverless Bileşenleri
Yeniden faktörleme – ayrıca “strangler” deseni olarak da adlandırılır – monolith'den bireysel özellikleri çıkarmak ve bağımsız sunucusuz işlevleri uygulamak için bunları uygulamak gerekir.Bu aşamalı yaklaşım, her işlevi izolasyonda test edebileceğiniz için risk azaltır.
Yeniden faktörleme için adımlar:
- Açık giriş ve çıkış sınırları olan bir bağlantı veya özellik tanımlayın (örneğin, bir kullanıcı kayıt akışı).
- Bu özelliğin mantığını gerçekleştiren bir Lambda işlevine tetikleyen yeni bir API uç noktası oluşturun.
- Yeni uç noktaya trafik yüzdesi (kullanıcılar, yük denge kuralları) yollayın.
- Karşılaştırma logları, metrikler ve miras ve sunucusuz sürüm arasındaki hata oranları.
- Bir kez emin olun, eski kod yolunu ihmal edin.
Yeniden düzenleme en yaygın göç stratejisidir, çünkü tam bir yeniden yazma gerektirmeden artan değer sunar. Özellikle de miras kodbase iyi anlaşılır olduğunda çalışır ( mikro hizmet olmasa bile).
Yeniden inşa: Sunucusuz için Tam Yeniden Tasarım:
Yeniden inşa, sunucusuz ilkelleri kullanarak tüm uygulamayı yeniden yazmaktadır. Bu en yüksek çabadır, ancak en fazla fayda sağlar: tam elastiklik, ödemeli fiyat ve modern, kullanılabilir kodbase. Sadece mirasın çok sıkı bir şekilde iki katına çıktığı zaman yeniden inşa etmeyi düşünün (örneğin, bir deprecated dilde yazılmamış bir dil).
Yeniden inşa edildiğinde:
- Tasarım forma:0)event-güdümlü mimariler[Dönemli): Mesaj kuyrukları (SQS, Pub/Sub) ve etkinlik otobüsleri (hattatBridge, Azure Event Grid).
- Kullanım:0) kod olarak altyapı [DDüzdÜyetim: 1).(Terraform, AWS CDK, Azure Bicep) tüm sunucusuz kaynakları tanımlamak için.
- Uygulama:0) Domaine-güdümlü tasarım sistemi birbirine bağlı bağlamlara ayırarak, bir takım tarafından sahip olan her biri.
- Plan forFLT:0)data göçü[[Dönetici: 1 ) eski olana kadar yeni sistemle paralel olarak.
Yeniden inşa, çok fazla aylık veya çok merkezi bir çabadır. Tüm takımda taahhüt etmeden önce yeni mimariyi doğrulamaya başlayın.
Uygulama İpuçları: Yapım Production-Ready Serverless Functions
Bir stratejiniz olduğunda, bir üretim sisteminden bir hobi prototipini ayıran uygulama detaylarına odaklanacaksınız. Aşağıdaki uygulamalar ortak tuzaklardan kaçınmanıza yardımcı olacaktır.
Mümkün olduğunca mümkün olan Yönetilen Hizmetleri Kullanın
Serverless, operasyonel yükü azaltmak için tamamen yönetilen hizmetlerle fonksiyonlarınız hakkında daha fazlasıdır:
- [FONT=0)Databases:[Dönetici:[Dönetici:[Dönem:0) Amazon DynamoDB, Aurora Serverless, Azure Cosmos DB
- [[0.Message kuyrukları:[Dönem:[Dönemli:0) Amazon SQS, Azure Queue Storage, Google Cloud Pub/Sub
- [FONT:0]File depolama:[Dönem:[Dönem:[Dönem:0) Amazon S3, Azure Blob Storage
- [FONT:0)Orchestrasyon: [Dönetici: [Dönetici: [Düzg: 1] AWS Step Fonksiyonlları, Azure Dayanıklı Fonksiyonlar, Google Workflows
- [FONT:0)Monitoring:[Dönem:[Dönem:[Dönem:) CloudWatch, Azure Monitor, Google Cloud Operations
Yönetilen hizmetlere temel vermek, onları ya da ölçeklendirmek zorunda değilsiniz – otomatik olarak idare ediyorlar. Ancak, yüksek üretim ortamındaki maliyet etkilerini her zaman gerçekçi trafik simüle etmek.
Soğuk Starts için optimize edin
Soğuk bir işlev boşaldıktan sonra ortaya çıkar. gecikme (tipik olarak 100ms ila birkaç saniye) runtime ve kodunuzu yüklemeden gelir. Soğuk başlangıç etkisini en aza indirmek için:
- Hızlı başlangıç zamanlarında bir dil seçin (Python, Node.js, Go, veya .NET genellikle Java veya C#'den daha hızlı).
- Dağıtım paketi boyutunun - gereksiz bağımlılıklar.
- [FONT=0)) (AWS) veya [[Döneticileri [Döneticileri) (Ce) (Ce) geç hassas uç noktaları için (Ce)
- İşlev eller içinde ağır başlangıçlardan kaçının; SDK müşterileri ve dışsal nesneler yükler (üresel kapsamı).
Soğuk test etmek önemlidir. Birçok takım, bir geliştirme ortamında neyin iyi çalıştığını keşfetti soğuk başlangıç basıncı altında başarısız olur.
Robust Hatasını Uygulama ve Yeniden Yeniden Düzenlemeler
Serverless işlevlerin mükemmel bir şekilde başarısız olması gerekir, çünkü ikinci başına binlerce kez çağırılabilir, tek bir hata logları veya koşu maliyetleri üretebilir.En iyi uygulamalar şunları içerir:
- Deneyen bloklarda ana mantık ve anlamlı HTTP durum kodları döndürür.
- [FONT=0] · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
- ImplementFLT:0)exponential backoff[[Döneticileri dış API'leri çağıran yeniden kurulmak için).
- flaky olarak bilinen alt uç hizmetler için devre kesicileri ekleyin.
- Log yapılandırılmış JSON mesajları ve tracing için eşsiz bir istek ID içerir.
İzleme ve Giriş Tüm Etkinlikler
Serverless ortamlar, runtime internals'ta sınırlı görünürlük sağlar. Kodun aşağıdaki araçları kullanarak agresif bir şekilde kullanılmasını sağlamalıdır:
- [FONT:0)CloudWatch Logs[[Dönetici: 1 ) (veya Azure Monitor / Google Cloud Logging) ham log çıktı için.
- [FONT:0)Distributed tracing: [Dönetici: [Dönetici: AWS X-Ray, Azure Uygulama İçgörüleri veya Açık Ekran Seçenekleri Son İstek akışlarını görmek için son derecelendirin.
- [FONT:0)Müşteriler:[Döneticiler:[Döneticiler:0))))) metrikler:[Döneticileri (örneğin, işbaşı, son dereceleri, BulutWatch özel metrikleri.
- [FONT:0]Threshold Uyarılar:[Dönetici:[Dönetici:0)[Döneticiler:[Döneticiler:) Hata oranları için alarmlar ayarla, yüksek çağrılma sayıları ve soğuk başlangıç gecikmeleri.
İzleme, göçten sonra ilk haftalarda maliyetleri yakından takip eder. Serverless faturalama, per-invokasyon suçlamaları ve veri transferi içerir. uygun throttling olmadan, yanlış yapılandırılmış bir işlev faturayı şişirebilir.
Test ve Deployment: Bir Smooth Cutover
Test sunucusuz uygulamaları, bir monolith test etmek için farklı bir zihniyet gerektirir. Çünkü her işlev izole edilir, sadece fonksiyon mantığı değil aynı zamanda işlevleri ve yönetilen hizmetler arasındaki etkileşimleri test etmelisiniz.
Birim ve Entegrasyon Testi
Her işlevin temel mantığı için birim testleri yazın, SDK'nın AWS veya Azure hizmetlerine çağrılarını alay edin. Sonra, aslında yerel bir emülatöre karşı işlevi (örneğin yerelStack for AWS veya Azurite for Azure) veya özel bir test ortamına karşı uygulama.
Anahtar test senaryoları şunları içerir:
- Giriş doğrulama ve hata yanıtları
- Fonksiyonlar süresi ve son derecelendirilme koşulları
- Soğuk, simdi yük altında gecikmeye başlar
- Tartışma davranışı
- Bir alt uç hizmet başarısız olduğunda yeniden deneme ve ölü tutma
Jest (Node.js) gibi bir doğru kodu destekleyen bir test çerçevesi kullanın, pytest (Python), veya xUnit (.NET).
Yük Testi
Serverless platformlar otomatik ölçekler, ancak ölçeklendirme sınırları mevcut. Ayna zirve üretim trafiğinin doğrulanması için testleri:
- Sınırlılık sınırları aşılmıyor (Lambda varsayılan: Bölge başına 1.000 koncurrent infaz, destek bileti ile ayarlanıyor).
- Veritabanı bağlantıları (veya geçici olarak teslim edilir) tükenmiş değildir.
- Soğuk başlangıç performansı trafik aksakları sırasında lütufla başlar.
- Talep başına maliyet bütçe içinde kalır.
Artillery, Serverless Artillery veya AWS Dağıtımlı Yük Testi gibi araçlar gerçek dünya modellerini simüle edebilir.
Canary Deployments ve Blue-Green-Green
Testiniz geçtiğinde, yeni işlev artışıyla dağıtın. Modern sunucusuz çerçeveler (AWS SAM, Azure Functions Core Tools, Serverless Framework) trafik geçişi destekler:
- [[Döneticileri: [Döneticileri: [Döneticileri: 0,3] Büyük bir işlem için trafikten küçük bir yüzdesi, büyük çoğunluğun eski sürüme çalıştığı sırada, daha sonra yukarı doğru yukarı doğru yukarı doğru.
- [FONT:0)Mavi yeşil dağıtımlar: [Dönetici:[Dönetici:0) Yeni bir ortam (yeşil” bir yığın) oluşturun ve DNS veya API Gateway aşaması değişkenlerini duman testlerinin geçmesinden sonra değiştirin.This approach requires careful handle of database schema uyumluluğu.
Her zaman bir geri dönüş planı vardır. Çünkü sunucusuz fonksiyonlar bir kez yayımlanmış, önceki bir sürüme yeniden dönme, eski sürüme işaret eden kadar basit.
Serversız Göç Faydaları ve Zorluklar
Kaybetme kararı açık, ölçülebilir faydalar tarafından yönlendirilmelidir - ama aynı zamanda zorlukların dürüst bir değerlendirmesini de gerektirir.
Anahtar Faydaları
- [FONT:0)Redüktör altyapı yönetimi:[Dönetici:[Dönetici:0)))) Hiçbir sunucuyu bir yabap için değil, kapasite planlama, OS güncelleştirmeleri yok.
- [0]Automatic ölçekleme:[Döneticiler, saniyede sıfırdan binlerce eş zamanlı infaz ölçeklenir.
- [FONT:0) Düşük operasyonel maliyetler:[Dönetici:0) Ödeme sadece talep sırasında tüketilen hesaplama zamanı için ödeme yapın (artı herhangi bir yönetilen hizmet kullanımı).
- [[Uygun dağıtım döngüleri:[Döneticileri bağımsız olarak güncellenebilir, sürekli teslimata izin verebilir.
- [FONT:0)Built-in hata toleransı:) Bulut sağlayıcıları, uygun olarak erişilebilir Bölgelerde tekrarlanabilirler.
Ortak Meydanlar
- [FONT:0)Cold geç saatlere başlıyor:[Dönetici] Arka plan işleri için bir sorun değil, kullanıcı arayüzünü etkileyebilir API'leri. Mitigate, uzun süreli görevleri yeniden ele geçirerek.
- [FONT:0)State management:[Döneticiler tasarım tarafından devletsizdir. Veritabanına, önbelleklere veya nesne depolamaya dışlanmalıdır.
- [FONT:0]Vendor kilit-in: Her bulut sağlayıcısının benzersiz sunucusuz hizmetleri vardır.Sessiz Çerçeve veya Terraform gibi) potansiyel gelecek göçü kolaylaştırmak için soyutlama tabakaları kullanın.
- [FONT:0)Debugging karmaşıklığı:[Dönetici:[Dönetici:0) Tek bir sunucu olmadan SSH'ye kadar, gün içinde gözlemlenebilirlik üzerine yoğun güveniyorsunuz.
- [FONT=0) Zaman sınırları:[Dönetici:[Döneticileri) Çoğu sunucusuz işlevlerin Lambda için maksimum süre (15 dakika) Daha uzun süre çalışırsa, daha küçük adımlara veya orkestration hizmetleri kullanmanız gerekir.
Sonuç: Stratejik, Fazlı Bir Yolculuğu
Bir sunucusuz mimariye ait bir miras başvurusu yapmak, doğru göç stratejisini seçmek veya yeniden inşa etmek değildir - her bileşeni kullanarak ölçeklenebilirliği, maliyetsiz vaatlerin kilidini açabilir ve ekip güvendiği kadar genişletilebilir.
Unutmayın ki sunucusuz bir gümüş mermi değildir. Bazı miras işleri, özellikle sıkı geç saatler veya ağır devletlilik ile olanlar, konteynerler tarafından servis edilebilir veya sanal makineler tarafından yönetilebilir. Mimarinizi modernize etme fırsatı olarak geçiş sürecini kullanın, güvenlik duruşunuzu geliştirmek ve gelecekteki iş ihtiyaçlarına adapte olabilecek bir temel inşa edebilir.
Daha fazla okuma için resmi belgelere bakınız: [[0]AWS Serverless), LUD işlevleri genel olarak ) ve [[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜye Olmayanlar İçin Daha Derinleştirilmiş Bir Bakışta Geri Dönüşümler (DÜye Olmayanlar)