Serverless ing rak

Serverless ing rak
Serverless ora babagan ora ana server fisik. Iki dudu pembunuh wadhah utawa tren sing liwat. Iki minangka pendekatan anyar kanggo mbangun sistem ing méga. Ing artikel saiki, kita bakal ndemek arsitektur aplikasi Tanpa Server, ayo ndeleng apa peran panyedhiya layanan Tanpa Server lan proyek sumber terbuka. Pungkasan, ayo ngomong babagan masalah nggunakake Serverless.

Aku pengin nulis bagean server saka aplikasi (utawa malah toko online). Iki bisa dadi obrolan, layanan penerbitan konten, utawa penyeimbang muatan. Ing kasus apa wae, bakal ana akeh ngelu: sampeyan kudu nyiapake infrastruktur, nemtokake dependensi aplikasi, lan mikir babagan sistem operasi inang. Banjur sampeyan kudu nganyari komponen cilik sing ora mengaruhi operasi liyane saka monolith. Inggih, aja lali babagan skala ing beban.

Apa yen kita njupuk wadhah ephemeral, ing endi dependensi sing dibutuhake wis diinstal, lan wadhah kasebut diisolasi saka saben liyane lan saka OS host? Kita bakal dibagi monolith menyang microservices, saben kang bisa dianyari lan scaled independen saka liyane. Kanthi nyelehake kode ing wadhah kasebut, aku bisa mbukak ing infrastruktur apa wae. Wis luwih apik.

Apa yen sampeyan ora pengin ngatur kontaner? Aku ora pengin mikir babagan skala aplikasi. Aku ora pengin mbayar kontaner sing nganggur nalika beban ing layanan minimal. Aku arep nulis kode. Fokus ing logika bisnis lan nggawa produk menyang pasar kanthi cepet.

Pikiran kuwi nuntun aku menyang komputasi tanpa server. Serverless ing kasus iki tegese ora anané fisik server, nanging ora ana ngelu Manajemen infrastruktur.

Ide kasebut yaiku logika aplikasi dipérang dadi fungsi mandiri. Dheweke duwe struktur acara. Saben fungsi nindakake siji "microtask". Kabeh sing dibutuhake saka pangembang yaiku ngemot fungsi kasebut menyang konsol sing diwenehake dening panyedhiya maya lan hubungake karo sumber acara. Kode bakal kaleksanan ing dikarepake ing wadhah otomatis disiapake, lan aku mung bakal mbayar kanggo wektu eksekusi.

Ayo ndeleng kaya apa proses pangembangan aplikasi saiki.

Saka sisih pangembang

Sadurungé kita miwiti ngomong babagan aplikasi kanggo toko online. Ing pendekatan tradisional, logika utama sistem ditindakake kanthi aplikasi monolitik. Lan server kanthi aplikasi terus mlaku, sanajan ora ana beban.

Kanggo pindhah menyang serverless, kita break aplikasi menyang microtasks. Kita nulis fungsi kita dhewe kanggo saben wong. Fungsi kasebut bebas saka saben liyane lan ora nyimpen informasi negara (stateless). Malah bisa uga ditulis ing macem-macem basa. Yen salah siji saka wong-wong mau "tiba", kabeh aplikasi ora bakal mandheg. Arsitektur aplikasi bakal katon kaya iki:

Serverless ing rak
Divisi dadi fungsi ing Serverless padha karo nggarap microservices. Nanging layanan mikro bisa nindakake sawetara tugas, lan fungsi kudu nindakake siji. Ayo bayangake yen tugas kasebut yaiku ngumpulake statistik lan nampilake ing panyuwunan pangguna. Ing pendekatan microservice, tugas ditindakake dening siji layanan kanthi rong titik entri: nulis lan maca. Ing komputasi tanpa server, iki bakal dadi rong fungsi sing ora ana hubungane. Pangembang nyimpen sumber daya komputasi yen, contone, statistik dianyari luwih kerep tinimbang sing diundhuh.

Fungsi tanpa server kudu dieksekusi ing wektu sing cendhak (wektu entek), sing ditemtokake dening panyedhiya layanan. Contone, kanggo AWS wektu entek 15 menit. Iki tegese fungsi sing tahan suwe kudu diganti supaya cocog karo syarat - iki sing mbedakake Serverless saka teknologi populer liyane saiki (kontainer lan Platform minangka Layanan).

We nemtokake acara kanggo saben fungsi. Acara minangka pemicu kanggo tumindak:

Acara
Tumindak sing ditindakake fungsi kasebut

Gambar produk wis diunggah menyang repositori.
Kompres gambar lan upload menyang direktori

Alamat toko fisik wis dianyari ing database
Muat lokasi anyar menyang peta

Klien mbayar barang
Miwiti pangolahan pembayaran

Acara bisa dadi panjalukan HTTP, streaming data, antrian pesen, lan liya-liyane. Sumber acara yaiku owah-owahan utawa kedadeyan data. Kajaba iku, fungsi bisa dipicu dening timer.

Arsitèktur wis digarap, lan aplikasi meh dadi tanpa server. Sabanjure kita pindhah menyang panyedhiya layanan.

Saka sisih panyedhiya

Biasane, komputasi tanpa server ditawakake panyedhiya layanan awan. Disebut kanthi beda: Fungsi Azure, AWS Lambda, Fungsi Awan Google, Fungsi Awan IBM.

Kita bakal nggunakake layanan liwat console panyedhiya utawa akun pribadi. Kode fungsi bisa diundhuh kanthi salah sawijining cara ing ngisor iki:

  • nulis kode ing editor sing dibangun liwat konsol web,
  • download arsip nganggo kode,
  • nggarap repositori git umum utawa pribadi.

Kene kita nyiyapake acara sing nelpon fungsi. Set acara bisa beda-beda kanggo panyedhiya sing beda.

Serverless ing rak

Panyedhiya mbangun lan ngotomatisasi sistem Fungsi minangka Layanan (FaaS) ing infrastruktur:

  1. Kode fungsi rampung ing panyimpenan ing sisih panyedhiya.
  2. Nalika ana acara, kontaner kanthi lingkungan sing disiapake kanthi otomatis dipasang ing server. Saben instance fungsi duwe wadhah sing diisolasi dhewe.
  3. Saka panyimpenan, fungsi kasebut dikirim menyang wadhah, diwilang, lan ngasilake asil.
  4. Jumlah acara paralel saya tambah akeh - jumlah wadhah saya tambah akeh. Sistem kanthi otomatis skala. Yen pangguna ora ngakses fungsi kasebut, fungsi kasebut bakal ora aktif.
  5. Panyedhiya nyetel wektu nganggur kanggo kontaner - yen sajrone wektu iki fungsi ora katon ing wadhah, mula bakal dirusak.

Kanthi cara iki kita njaluk Serverless metu saka kothak. Kita bakal mbayar kanggo layanan nggunakake model mbayar-kaya-sampeyan-go lan mung kanggo fungsi sing digunakake, lan mung kanggo wektu nalika padha digunakake.

Kanggo ngenalake pangembang menyang layanan kasebut, panyedhiya nawakake tes gratis nganti 12 wulan, nanging mbatesi total wektu komputasi, jumlah panjaluk saben wulan, dana utawa konsumsi daya.

Kauntungan utama nggarap panyedhiya yaiku kemampuan kanggo ora kuwatir babagan infrastruktur (server, mesin virtual, wadhah). Kanggo bagean kasebut, panyedhiya bisa ngetrapake FaaS kanthi nggunakake pangembangan dhewe lan nggunakake alat sumber terbuka. Ayo dadi pirembagan bab mau luwih.

Saka sisih open source

Komunitas open-source wis aktif nggarap alat Tanpa Server sajrone sawetara taun kepungkur. Pemain pasar paling gedhe uga nyumbang kanggo pangembangan platform tanpa server:

  • Google nawakake pangembang alat open-source - knative. IBM, RedHat, Pivotal lan SAP melu ing pembangunan;
  • IBM makarya ing platform Serverless OpenWhisk, sing banjur dadi proyek saka Yayasan Apache;
  • Microsoft sebagian mbukak kode platform Fungsi Azure.

Pangembangan uga ditindakake ing arah kerangka tanpa server. Kubeless и Pambuka disebarake ing kluster Kubernetes sing wis disiapake, OpenFaaS dianggo karo Kubernetes lan Docker Swarm. Framework tumindak minangka pengontrol - yen dijaluk, nyiyapake lingkungan runtime ing kluster, banjur mbukak fungsi ing kana.

Kerangka ninggalake ruang kanggo ngatur alat sing cocog karo kabutuhan sampeyan. Dadi, ing Kubeless, pangembang bisa ngatur wektu entek eksekusi fungsi (nilai standar yaiku 180 detik). Fission, ing upaya kanggo ngatasi masalah wiwitan kadhemen, nyaranake supaya sawetara kontaner mlaku kabeh wektu (sanajan iki entails biaya downtime sumber). Lan OpenFaaS nawakake sakumpulan pemicu kanggo saben rasa lan warna: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NAT lan liya-liyane.

Pandhuan kanggo miwiti bisa ditemokake ing dokumentasi resmi kerangka kerja. Nggarap wong-wong mau mbutuhake katrampilan luwih sithik tinimbang nalika nggarap panyedhiya - iki paling ora kemampuan kanggo miwiti kluster Kubernetes liwat CLI. Paling akeh, kalebu alat sumber terbuka liyane (contone, manajer antrian Kafka).

Preduli saka carane kita bisa karo Serverless - liwat panyedhiya utawa nggunakake open-source, kita bakal nampa sawetara kaluwihan lan cacat saka pendekatan Serverless.

Saka sudut pandang kaluwihan lan kekurangan

Serverless ngembangake gagasan prasarana wadah lan pendekatan layanan mikro, ing ngendi tim bisa kerja ing mode multibasa tanpa kaiket ing siji platform. Nggawe sistem disederhanakake lan kesalahan luwih gampang dibenerake. Arsitektur Microservice ngidini sampeyan nambah fungsi anyar menyang sistem luwih cepet tinimbang aplikasi monolitik.

Tanpa server nyuda wektu pangembangan luwih akeh, ngidini pangembang mung fokus ing logika bisnis lan coding aplikasi. Akibaté, wektu kanggo pasar kanggo pangembangan suda.

Minangka bonus, kita entuk skala otomatis kanggo mbukak, lan kita mung mbayar kanggo sumber daya sing digunakake lan mung nalika digunakake.

Kaya teknologi apa wae, Serverless duwe kekurangan.

Contone, kerugian kasebut bisa uga dadi wektu wiwitan sing adhem (rata-rata nganti 1 detik kanggo basa kayata JavaScript, Python, Go, Java, Ruby).

Ing tangan siji, ing kasunyatan, wektu wiwitan kadhemen gumantung akeh variabel: basa ing ngendi fungsi ditulis, jumlah perpustakaan, jumlah kode, komunikasi karo sumber daya tambahan (database padha utawa server otentikasi). Wiwit pangembang ngontrol variabel kasebut, dheweke bisa nyuda wektu wiwitan. Nanging ing sisih liya, pangembang ora bisa ngontrol wektu wiwitan wadhah - kabeh gumantung saka panyedhiya.

Wiwitan kadhemen bisa dadi wiwitan sing anget nalika fungsi nggunakake maneh wadhah sing diluncurake dening acara sadurunge. Kahanan iki bakal kedadeyan ing telung kasus:

  • yen klien kerep nggunakake layanan lan nomer telpon kanggo fungsi mundhak;
  • yen panyedhiya, platform utawa framework ngijini sampeyan supaya sawetara kontaner mlaku kabeh wektu;
  • yen pangembang mbukak fungsi ing wektu (ngandika saben 3 menit).

Kanggo akeh aplikasi, wiwitan sing adhem ora dadi masalah. Ing kene sampeyan kudu mbangun jinis lan tugas layanan kasebut. Wektu tundha wiwitan detik ora mesthi kritis kanggo aplikasi bisnis, nanging bisa dadi kritis kanggo layanan medis. Ing kasus iki, pendekatan tanpa server mbokmenawa ora cocok maneh.

Kerugian Serverless sabanjure yaiku umur fungsi sing cendhak (wektu entek sajrone fungsi kasebut kudu dieksekusi).

Nanging, yen sampeyan kudu nggarap tugas sing dawa, sampeyan bisa nggunakake arsitektur hibrida - gabungke Serverless karo teknologi liyane.

Ora kabeh sistem bakal bisa digunakake kanthi nggunakake skema Tanpa Server.

Sawetara aplikasi isih bakal nyimpen data lan status sajrone eksekusi. Sawetara arsitektur bakal tetep monolitik lan sawetara fitur bakal tahan suwe. Nanging (kaya teknologi maya banjur wadhah), Serverless minangka teknologi kanthi masa depan sing apik.

Ing vena iki, aku pengin lancar nerusake menyang masalah nggunakake pendekatan Tanpa Server.

Saka sisih aplikasi

Kanggo 2018, persentase panggunaan Tanpa Server thukul siji lan setengah kaping. Antarane perusahaan sing wis ngetrapake teknologi kasebut ing layanane yaiku raksasa pasar kayata Twitter, PayPal, Netflix, T-Mobile, Coca-Cola. Ing wektu sing padha, sampeyan kudu ngerti manawa Serverless dudu panacea, nanging alat kanggo ngrampungake sawetara masalah:

  • Ngurangi downtime sumber. Ora perlu terus-terusan nyimpen mesin virtual kanggo layanan sing duwe sawetara telpon.
  • Proses data kanthi cepet. Kompres gambar, ngethok latar mburi, ngganti enkoding video, nggarap sensor IoT, nindakake operasi matematika.
  • "Lem" layanan liyane bebarengan. Repositori Git karo program internal, chatting bot ing Slack karo Jira lan tanggalan.
  • Ngimbangi beban. Ayo dideleng ing kene.

Contone, ana layanan sing narik 50 wong. Ing ngisor iki ana mesin virtual kanthi hardware sing ringkih. Saka wektu kanggo wektu, beban ing layanan mundhak akeh. Banjur hardware sing ringkih ora bisa ngatasi.

Sampeyan bisa kalebu balancer ing sistem sing bakal disebaraké mbukak, ngomong, liwat telung mesin virtual. Ing tataran iki, kita ora bisa kanthi akurat prédhiksi beban, supaya kita nyimpen jumlah tartamtu saka sumber daya mlaku "ing cadangan." Lan kita overpay kanggo downtime.

Ing kahanan kaya mengkono, kita bisa ngoptimalake sistem liwat pendekatan Sato: kita ninggalake siji mesin virtual konco load balancer lan sijine link menyang Serverless Endpoint karo fungsi. Yen beban ngluwihi batesan, balancer bakal mbukak conto fungsi sing njupuk alih bagean pangolahan panjalukan.

Serverless ing rak
Mangkono, Serverless bisa digunakake ing ngendi perlu kanggo ngolah akeh panjalukan ora asring, nanging kanthi intensif. Ing kasus iki, mlaku sawetara fungsi kanggo 15 menit luwih duwe bathi saka njaga mesin virtual utawa server kabeh wektu.

Kanthi kabeh kaluwihan komputasi tanpa server, sadurunge implementasine, sampeyan kudu ngevaluasi logika aplikasi dhisik lan ngerti masalah apa sing bisa diatasi Serverless ing kasus tartamtu.

Tanpa Server lan Selectel

Ing Selectel kita wis karya simplified karo Kubernetes liwat panel kontrol kita. Saiki kita mbangun platform FaaS dhewe. Kita pengin pangembang bisa ngatasi masalah nggunakake Serverless liwat antarmuka sing trep lan fleksibel.

Yen sampeyan duwe ide babagan platform FaaS sing cocog lan kepiye sampeyan pengin nggunakake Serverless ing proyek sampeyan, tulisake ing komentar. Kita bakal nganggep kekarepan sampeyan nalika ngembangake platform kasebut.
 
Bahan sing digunakake ing artikel:

Source: www.habr.com

Add a comment