Sunucusuz uygulamalar oluşturmaya yönelik ipuçları ve kaynaklar

Sunucusuz uygulamalar oluşturmaya yönelik ipuçları ve kaynaklar
Her ne kadar sunucusuz teknolojiler son yıllarda hızla popülerlik kazanmış olsa da, bunlarla ilgili hala birçok yanlış kanı ve korku var. Satıcı bağımlılığı, araçlar, maliyet yönetimi, soğuk başlangıç, izleme ve geliştirme yaşam döngüsü, sunucusuz teknolojiler söz konusu olduğunda öne çıkan konulardır. Bu makalede, belirtilen konulardan bazılarını keşfedeceğiz ve yeni başlayanların güçlü, esnek ve uygun maliyetli sunucusuz uygulamalar oluşturmasına yardımcı olacak ipuçları ve faydalı bilgi kaynaklarına bağlantılar paylaşacağız.

Sunucusuz Teknolojiler Hakkındaki Yanılgılar

Birçok kişi sunucusuz ve sunucusuz işlemenin (Hizmet Olarak İşlevler, FaaS) neredeyse aynı şeydir. Bu, farkın çok büyük olmadığı ve bir yenilik getirmeye değer olduğu anlamına gelir. AWS Lambda, sunucusuz çağın yıldızlarından biri ve sunucusuz mimarinin en popüler öğelerinden biri olmasına rağmen, bu mimari FaaS'tan çok daha fazlasıdır.

Sunucusuz teknolojilerin arkasındaki temel ilke, altyapınızı yönetme ve ölçeklendirme konusunda endişelenmenize gerek olmaması, yalnızca kullandığınız kadar ödeme yapmanızdır. Birçok hizmet bu kriterlere uygundur - AWS DynamoDB, S3, SNS veya SQS, Graphcool, Auth0, Now, Netlify, Firebase ve diğerleri. Genel olarak sunucusuz, altyapıyı yönetmeye ve ölçeklendirme için optimize etmeye gerek kalmadan bulut bilgi işlemin tüm gücünü kullanmak anlamına gelir. Bu aynı zamanda, altyapı seviyesindeki güvenliğin artık sizin endişeniz olmadığı anlamına gelir ki bu, güvenlik standartlarını karşılamanın zorluğu ve karmaşıklığı göz önüne alındığında büyük bir avantajdır. Son olarak, size sağlanan altyapıyı satın almak zorunda değilsiniz.

Sunucusuz bir "akıl durumu" olarak kabul edilebilir: çözümler tasarlarken belirli bir zihniyet. Herhangi bir altyapının bakımını gerektiren yaklaşımlardan kaçının. Sunucusuz bir yaklaşımla, projeyi doğrudan etkileyen ve kullanıcılarımıza fayda sağlayan görevleri çözmek için zaman harcıyoruz: sürdürülebilir iş mantığı oluşturuyoruz, kullanıcı arayüzleri geliştiriyoruz ve uyarlanabilir ve güvenilir API'ler geliştiriyoruz.

Örneğin, bir serbest metin arama platformunu yönetmekten ve sürdürmekten kaçınmak mümkünse, o zaman yapacağımız şey budur. Uygulama oluşturmaya yönelik bu yaklaşım, artık karmaşık altyapıyı yönetmeyi düşünmeniz gerekmediğinden, pazara sunma süresini büyük ölçüde hızlandırabilir. Altyapı yönetiminin sorumluluklarını ve maliyetlerini ortadan kaldırın ve müşterilerinizin ihtiyaç duyduğu uygulama ve hizmetleri oluşturmaya odaklanın. Patrick Debois bu yaklaşımı "hizmet dolu", terim sunucusuz toplulukta benimsenmiştir. İşlevler, dağıtılabilir modüller olarak hizmetlere bir bağlantı olarak düşünülmelidir (tüm kitaplığı veya web uygulamasını dağıtmak yerine). Bu, dağıtımı ve uygulamadaki değişiklikleri yönetmek için inanılmaz ayrıntı düzeyi sağlar. İşlevleri bu şekilde dağıtamazsanız bu, işlevlerin çok fazla görev gerçekleştirdiğini ve yeniden düzenlenmesi gerektiğini gösterebilir.

Bulut uygulamaları geliştirirken satıcıya bağımlı olmak bazılarının kafasını karıştırır. Aynısı sunucusuz teknolojiler için de geçerlidir ve bu pek de yanlış bir kanı değildir. Deneyimlerimize göre AWS üzerinde sunucusuz uygulamalar oluşturmak ve AWS Lambda'nın diğer AWS hizmetlerini bir araya getirme becerisi, sunucusuz mimarilerin gücünün bir parçasıdır. Bu, kombinasyonun sonucunun terimlerin toplamından daha fazlası olduğu iyi bir sinerji örneğidir. Satıcı bağımlılığından kaçınmaya çalışmak daha da fazla sorunla karşılaşabilir. Kapsayıcılarla çalışırken, bulut sağlayıcıları arasında kendi soyutlama katmanınızı yönetmek daha kolaydır. Ancak söz konusu sunucusuz çözümler olduğunda, özellikle de maliyet etkinliği en baştan hesaba katılırsa, çaba sonuç vermeyecektir. Satıcıların nasıl hizmet sunduğunu öğrendiğinizden emin olun. Bazı özel hizmetler, diğer satıcılarla entegrasyon noktalarına dayanır ve kutudan çıkar çıkmaz tak ve çalıştır bağlantısı sağlayabilir. Bir ağ geçidi API uç noktasından bir Lambda çağrısı sağlamak, isteği bir kapsayıcıya veya EC2 örneğine proxy olarak göndermekten daha kolaydır. Graphcool, üçüncü taraf kimlik doğrulama araçlarını kullanmaktan daha kolay olan Auth0 ile kolay yapılandırma sağlar.

Sunucusuz uygulamanız için doğru sağlayıcıyı seçmek mimari bir karardır. Bir uygulama oluşturduğunuzda, bir gün sunucuları yönetmeye geri dönmeyi beklemezsiniz. Bir bulut satıcısı seçmek, kapsayıcılar veya bir veritabanı ve hatta bir programlama dili kullanmayı seçmekten farklı değildir.

Dikkate almak:

  • Hangi hizmetlere ihtiyacınız var ve neden?
  • Bulut sağlayıcılarının hangi hizmetleri sağladığı ve bunları seçtiğiniz FaaS çözümüyle nasıl birleştirebileceğiniz.
  • Hangi programlama dilleri desteklenir (dinamik veya statik yazımla, derlenir veya yorumlanır, kıyaslamalar nelerdir, soğuk çalıştırmadaki performans nedir, açık kaynak ekosistemi nedir vb.).
  • Güvenlik gereksinimleriniz nelerdir (SLA, 2FA, OAuth, HTTPS, SSL vb.).
  • CI/CD ve yazılım geliştirme döngülerinizi nasıl yönetirsiniz?
  • Hangi kod olarak altyapı çözümlerinden yararlanabilirsiniz.

Mevcut bir uygulamayı genişletir ve kademeli olarak sunucusuz işlevsellik eklerseniz, bu, mevcut yetenekleri bir şekilde sınırlayabilir. Ancak, neredeyse tüm sunucusuz teknolojiler, uygulama çekirdeğinden bağımsız ve kolay entegrasyonla uzantılar oluşturmanıza izin veren bir çeşit API (REST veya mesaj kuyrukları yoluyla) sağlar. Net API'lere, iyi belgelere ve güçlü bir topluluğa sahip hizmetler arayın ve yanlış gidemezsiniz. Entegrasyon kolaylığı genellikle önemli bir ölçüm olabilir ve Lambda'nın 2015'te piyasaya sürülmesinden bu yana AWS'nin bu kadar başarılı olmasının ana nedenlerinden biri muhtemelen budur.

Sunucusuz İyi Olduğunda

Sunucusuz teknolojiler hemen hemen her yerde uygulanabilir. Ancak avantajları sadece tek bir uygulama şekli ile sınırlı değildir. Sunucusuz teknolojiler sayesinde bugün bulut bilişim için giriş engeli çok düşük. Geliştiricilerin bir fikirleri varsa, ancak bulut altyapısını nasıl yöneteceklerini ve maliyetleri nasıl optimize edeceklerini bilmiyorlarsa, bunu yapmak için bir tür mühendis aramalarına gerek yoktur. Bir startup bir platform oluşturmak istiyor ancak maliyetlerin kontrolden çıkabileceğinden korkuyorsa kolayca sunucusuz çözümlere yönelebilir.

Maliyet tasarrufları ve ölçeklendirme kolaylığı nedeniyle sunucusuz çözümler, milyonlarca izleyiciye sahip bir web uygulamasına kadar hem dahili hem de harici sistemler için eşit derecede uygulanabilir. Hesaplar avro yerine sent cinsinden ölçülür. AWS EC2'nin (t1.micro) en basit örneğini bir aylığına kiralamak, onunla hiçbir şey yapmasanız bile 15 Euro'ya mal olur (kim onu ​​kapatmayı asla unutmadı?!). Karşılaştırıldığında, aynı zaman diliminde bu harcama düzeyine ulaşmak için 512 MB Lambda'yı 1 saniye boyunca yaklaşık 3 milyon kez çalıştırmanız gerekir. Ve bu özelliği kullanmazsanız, hiçbir şey ödemezsiniz.

Sunucusuz, öncelikle olay odaklı olduğundan, eski sistemlere sunucusuz bir altyapı eklemek oldukça kolaydır. Örneğin, AWS S3, Lambda ve Kinesis'i kullanarak eski bir perakende sistemi için bir API üzerinden veri alabilen bir analiz hizmeti oluşturabilirsiniz.

Çoğu sunucusuz platform birden çok dili destekler. Çoğu zaman Python, JavaScript, C#, Java ve Go'dur. Genellikle tüm dillerde kitaplıkların kullanımıyla ilgili herhangi bir kısıtlama yoktur, bu nedenle en sevdiğiniz açık kaynak kitaplıklarını kullanabilirsiniz. Ancak, işlevlerinizin en iyi şekilde çalışması ve sunucusuz uygulamalarınızın muazzam ölçeklenebilirliğinin faydalarını ortadan kaldırmaması için bağımlılıkları kötüye kullanmamanız önerilir. Konteynere ne kadar çok paket yüklenmesi gerekiyorsa, soğuk çalıştırma o kadar uzun sürer.

Soğuk başlangıç, kabı, çalışma zamanını ve hata işleyiciyi kullanmadan önce ilk kez başlatmanız gerektiği zamandır. Bu nedenle, işlevlerin yürütülmesindeki gecikme 3 saniyeye kadar çıkabilir ve bu sabırsız kullanıcılar için en iyi seçenek değildir. Ancak, birkaç dakikalık boşta kalma işlevinin ardından ilk aramada soğuk çalıştırmalar gerçekleşir. Pek çok kişi bunu, işlevi rölantide tutmak için düzenli olarak pingleyerek çözülebilecek küçük bir sıkıntı olarak görüyor. Ya da bu yönü tamamen görmezden geliyorlar.

AWS piyasaya sürülmesine rağmen sunucusuz SQL veritabanı Sunucusuz AuroraAncak SQL veritabanları, AWS Lambda'da yoğun trafikle hızla bir darboğaza dönüşebilen işlemleri gerçekleştirmek için bağlantılara bağlı olduğundan bu uygulama için ideal değildir. Evet, geliştiriciler sürekli olarak Sunucusuz Aurora'yı geliştiriyorlar ve bunu denemelisiniz, ancak bugün NoSQL çözümleri DynamoDB. Ancak bu durumun çok yakında değişeceğine şüphe yok.

Araç seti ayrıca, özellikle yerel testler alanında birçok kısıtlama getirir. Docker-Lambda, DynamoDB Local ve LocalStack gibi çözümler olsa da, bunlar sıkı çalışma ve önemli miktarda yapılandırma gerektirir. Ancak, tüm bu projeler aktif olarak geliştirilmektedir, bu nedenle araç setinin ihtiyacımız olan seviyeye ulaşması an meselesidir.

Sunucusuz teknolojilerin geliştirme döngüsü üzerindeki etkisi

Altyapınız yalnızca bir yapılandırma olduğundan, kabuk betikleri gibi betikleri kullanarak kod tanımlayabilir ve dağıtabilirsiniz. Veya aşağıdaki gibi kod olarak yapılandırma sınıfı çözümlerine başvurabilirsiniz AWS CloudFormation. Bu hizmet, tüm alanlar için yapılandırma sağlamasa da, Lambda işlevleri olarak kullanılacak belirli kaynakları tanımlamanıza izin verir. Yani CloudFormation'ın başarısız olduğu yerde bu açığı kapatacak kendi kaynağınızı (Lambda fonksiyonu) yazabilirsiniz. Bu şekilde her şeyi yapabilir, hatta AWS ortamınızın dışındaki bağımlılıkları yapılandırabilirsiniz.

Tamamen yapılandırma olduğundan, özellikle CloudFormation gibi kod olarak altyapı çözümleri kullanıyorsanız dağıtım komut dosyalarınızı belirli ortamlar, bölgeler ve kullanıcılar için özelleştirebilirsiniz. Örneğin, depodaki her dal için altyapının bir kopyasını dağıtabilir, böylece bunları geliştirme sırasında tamamen izole bir şekilde test edebilirsiniz. Bu, kodlarının canlı bir ortamda yeterince çalışıp çalışmadığını anlamak isteyen geliştiriciler için geri bildirimi büyük ölçüde hızlandırır. Yöneticiler, yalnızca gerçek kullanım için ödeme yaptıklarından, birden fazla ortamı devreye alma maliyeti konusunda endişelenmelerine gerek yoktur.

DevOps, yalnızca geliştiricilerin doğru yapılandırmaya sahip olduğundan emin olmaları gerektiğinden daha az endişe duyar. Artık örnekleri, dengeleyicileri veya güvenlik gruplarını yönetmenize gerek yok. Bu nedenle, özellikle IAM yapılandırması ve bulut kaynağı optimizasyonu söz konusu olduğunda, altyapıyı yapılandırabilmek hala önemli olsa da, NoOps terimi giderek daha fazla kullanılmaktadır.

Epsagon, Thundra, Dashbird ve IOPipe gibi çok güçlü izleme ve görselleştirme araçları var. Sunucusuz uygulamalarınızın mevcut durumunu izlemenize, günlük kaydı ve izleme sağlamanıza, performans ölçümlerini ve mimari darboğazlarını yakalamanıza, maliyet analizi ve tahmin gerçekleştirmenize ve daha fazlasına olanak tanırlar. DevOps mühendislerine, geliştiricilerine ve mimarlarına yalnızca kapsamlı bir uygulama performansı görünümü sağlamakla kalmaz, aynı zamanda yöneticilerin saniye başına kaynak maliyetleri ve maliyet tahmini ile durumu gerçek zamanlı olarak izlemelerine olanak tanır. Yönetilen bir altyapı ile bunu organize etmek çok daha zordur.

Sunucusuz uygulamalar tasarlamak çok daha kolaydır çünkü web sunucularını dağıtmanız, sanal makineleri veya kapları yönetmeniz, yama sunucuları, işletim sistemleri, internet ağ geçitleri vb. çözüm, iş ve müşteri ihtiyaçları.

Araç seti daha iyi olabilse de (her geçen gün daha iyi hale geliyor), geliştiriciler iş mantığını uygulamaya ve uygulamanın karmaşıklığını mimari içindeki farklı hizmetlere en iyi şekilde dağıtmaya odaklanabilir. Sunucusuz uygulama yönetimi olay tabanlıdır ve bulut sağlayıcısı tarafından soyutlanır (örn. SQS, S3 olayları veya DynamoDB akışları). Bu nedenle, geliştiricilerin yalnızca belirli olaylara yanıt vermek için iş mantığı yazmaları gerekir ve veritabanlarını ve mesaj sıralarını en iyi nasıl uygulayacakları veya belirli donanım depolarındaki verilerle en iyi çalışmayı nasıl organize edecekleri konusunda endişelenmeleri gerekmez.

Kod, herhangi bir geliştirme sürecinde olduğu gibi yerel olarak çalıştırılabilir ve hata ayıklanabilir. Birim testi aynı kalır. Tüm uygulama altyapısını özel bir yığın yapılandırmasıyla devreye alma yeteneği, geliştiricilerin test maliyetini veya pahalı yönetilen ortamlar üzerindeki etkisini düşünmeden önemli geri bildirimleri hızla almalarını sağlar.

Sunucusuz uygulamalar oluşturmak için araçlar ve teknikler

Sunucusuz uygulamalar oluşturmanın belirli bir yolu yoktur. Bu görev için bir dizi hizmetin yanı sıra. AWS, günümüzde güçlü sunucusuz çözümler arasında liderdir, ancak şuna da bakın: Google Bulut, Zaman и Firebase. AWS kullanıyorsanız uygulamaları toplamak için önerilen yaklaşım şudur: Sunucusuz Uygulama Modeli (SAM), özellikle C# kullanırken, çünkü Visual Studio harika araçlara sahiptir. SAM CLI, Visual Studio'nun yapabileceği her şeyi yapabilir, böylece başka bir IDE'ye veya metin düzenleyiciye geçerseniz hiçbir şey kaybetmezsiniz. Elbette SAM diğer dillerle de çalışır.

Başka dillerde yazıyorsanız, Sunucusuz Çerçeve, her şeyi çok güçlü YAML yapılandırma dosyalarıyla yapılandırmanıza izin veren mükemmel bir açık kaynak aracıdır. Sunucusuz Çerçeve, çeşitli bulut hizmetlerini de destekler, bu nedenle çoklu bulut çözümü arayanlara tavsiye ederiz. Herhangi bir ihtiyaç için bir sürü eklenti oluşturan devasa bir topluluğa sahiptir.

Yerel testler için Docker-Lambda, Serverless Local, DynamoDB Local ve LocalStack açık kaynak araçları çok uygundur. Sunucusuz teknolojiler ve bunlara yönelik araçlar henüz geliştirmenin ilk aşamalarındadır, bu nedenle karmaşık test senaryoları için kurulum yaparken çok çalışmanız gerekir. Ancak, yığını bir ortama dağıtmak ve orada test etmek inanılmaz derecede ucuzdur. Ve bulut ortamlarının tam bir yerel kopyasını oluşturmanız gerekmez.

Dağıtılan paketlerin boyutunu azaltmak ve indirmeleri hızlandırmak için AWS Lambda Katmanlarını kullanın.

Belirli görevler için doğru programlama dillerini kullanın. Farklı dillerin kendi avantajları ve dezavantajları vardır. Birçok kıyaslama vardır, ancak AWS Lambda performansı açısından JavaScript, Python ve C# (.NET Core 2.1+) liderdir. AWS Lambda kısa bir süre önce istediğiniz dili ve çalışma zamanı ortamını belirlemenize olanak tanıyan Runtime API'yi tanıttı, bu yüzden deney yapın.

Dağıtım için paket boyutlarını küçük tutun. Ne kadar küçük olurlarsa o kadar hızlı yüklenirler. Özellikle bunlardan birkaç özellik kullanıyorsanız, büyük kitaplıkları kullanmaktan kaçının. JavaScript'te programlama yapıyorsanız, yapınızı optimize etmek ve yalnızca gerçekten ihtiyacınız olanı dahil etmek için Webpack gibi bir yapı aracı kullanın. .NET Core 3.0, performansı artıran ve soğuk başlangıçlarda çok yardımcı olan QuickJit ve Katmanlı Derleme özelliğine sahiptir.

Sunucusuz işlevlerin olaylara dayanması, ilk başta iş mantığını koordine etmeyi zorlaştırabilir. Bu bağlamda, mesaj kuyrukları ve durum makineleri inanılmaz derecede faydalı olabilir. Lambda işlevleri birbirini arayabilir, ancak bunu yalnızca bir yanıt beklemiyorsanız ("ateşle ve unut") yapın - başka bir işlevin tamamlanmasını beklerken faturalandırılmak istemezsiniz. İleti kuyrukları, iş mantığının bölümlerini izole etmek, uygulama darboğazlarını yönetmek ve işlemleri işlemek (FIFO kuyruklarını kullanarak) için kullanışlıdır. AWS Lambda işlevleri, daha sonra analiz edilmek üzere başarısız iletileri takip eden takılı kalmış ileti kuyrukları olarak SQS sıralarına atanabilir. AWS Step Functions (durum makineleri), işlevlerin zincirlenmesini gerektiren karmaşık süreçleri yönetmek için çok kullanışlıdır. Başka bir işlevi çağıran bir Lambda işlevi yerine, adım işlevleri durum geçişlerini koordine edebilir, işlevler arasında veri iletebilir ve işlevlerin genel durumunu yönetebilir. Bu, yeniden deneme koşullarını veya belirli bir hata oluştuğunda ne yapacağınızı belirlemenizi sağlar - belirli koşullarda çok güçlü bir araç.

Sonuç

Son yıllarda, sunucusuz teknolojiler benzeri görülmemiş bir hızla gelişiyor. Bu paradigma değişikliğiyle ilgili bazı yanlış anlamalar var. Sunucusuz çözümler, altyapıyı ve ölçeklendirme yönetimini soyutlayarak, basitleştirilmiş geliştirme ve DevOps süreçlerinden operasyonel maliyetlerde büyük düşüşlere kadar önemli avantajlar sunar.
Sunucusuz yaklaşımın dezavantajları da olsa, güçlü sunucusuz uygulamalar oluşturmak veya sunucusuz öğeleri mevcut mimarilere entegre etmek için kullanılabilecek güçlü tasarım modelleri vardır.

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster