Serverless dina rak

Serverless dina rak
Serverless sanes ngeunaan henteuna fisik server. Ieu sanes killer wadahna atawa trend lulus. Ieu mangrupikeun pendekatan énggal pikeun ngawangun sistem dina méga. Dina tulisan ayeuna urang bakal nyabak arsitektur aplikasi Tanpa Server, hayu urang tingali naon peran panyadia jasa Serverless sareng proyék open source. Tungtungna, hayu urang ngobrol ngeunaan masalah ngagunakeun Serverless.

Abdi hoyong nyerat bagian server tina hiji aplikasi (atawa malah hiji toko online). Ieu tiasa janten obrolan, jasa penerbitan kontén, atanapi pangimbang beban. Dina sagala hal, bakal aya loba headaches: Anjeun kudu nyiapkeun infrastruktur, nangtukeun gumantungna aplikasi, sarta mikir ngeunaan sistem operasi host. Satuluyna anjeun perlu ngamutahirkeun komponén leutik nu teu mangaruhan operasi sesa monolith nu. Nya, hayu urang hilap ngeunaan skala dina beban.

Kumaha upami urang nyandak wadah ephemeral, dimana katergantungan anu diperyogikeun parantos dipasang sateuacana, sareng wadahna sorangan terasing ti silih sareng tina OS host? Urang bakal ngabagi monolith kana jasa mikro, anu masing-masing tiasa diropéa sareng diskalakeun sacara mandiri tina anu sanés. Ku cara nempatkeun kode dina wadah sapertos, abdi tiasa ngajalankeun eta dina infrastruktur nanaon. Geus hadé.

Kumaha upami anjeun henteu hoyong ngonpigurasikeun wadahna? Kuring teu hayang mikir ngeunaan skala aplikasi. Abdi henteu hoyong mayar wadah anu dianggurkeun nalika beban jasa minimal. Abdi hoyong nyerat kode. Fokus kana logika bisnis sareng bawa produk ka pasar dina laju cahaya.

Pikiran sapertos kitu nyababkeun kuring ka komputasi tanpa server. Serverless dina hal ieu hartina lain henteuna fisik server, tapi henteuna headaches manajemén infrastruktur.

Ide nya éta logika aplikasi direcah jadi fungsi bebas. Aranjeunna gaduh struktur acara. Unggal fungsi ngalaksanakeun hiji "microtask". Sadaya anu diperyogikeun ti pamekar nyaéta ngamuat fungsi kana konsol anu disayogikeun ku panyadia awan sareng ngahubungkeunana sareng sumber acara. Kode bakal dieksekusi dina paménta dina wadahna otomatis disiapkeun, sarta kuring ngan bakal mayar waktos palaksanaan.

Hayu urang tingali kumaha prosés pamekaran aplikasi ayeuna.

Ti sisi pamekar

Tadi urang mimiti ngobrol ngeunaan hiji aplikasi pikeun toko online. Dina pendekatan tradisional, logika utama sistem dilaksanakeun ku aplikasi monolithic. Sareng server sareng aplikasi terus dijalankeun, sanaos henteu aya beban.

Pikeun pindah ka serverless, urang megatkeun aplikasi kana microtasks. Urang nulis fungsi urang sorangan pikeun tiap sahijina. Fungsina bebas saling sareng henteu nyimpen inpormasi kaayaan (stateless). Éta malah bisa ditulis dina basa béda. Lamun salah sahijina "ragrag", sakabéh aplikasi moal eureun. Arsitéktur aplikasi bakal katingali sapertos kieu:

Serverless dina rak
Divisi kana fungsi dina Serverless sami sareng damel sareng microservices. Tapi microservice tiasa ngalaksanakeun sababaraha pancén, sareng hiji fungsi kedah ngalaksanakeun hiji. Hayu urang bayangkeun yén tugasna nyaéta pikeun ngumpulkeun statistik sareng nampilkeunana dina pamundut pangguna. Dina pendekatan microservice, hiji tugas dipigawé ku hiji layanan kalawan dua titik asupna: nulis jeung maca. Dina komputasi tanpa server, ieu bakal janten dua fungsi anu béda anu henteu aya hubunganana. Pamekar ngahemat sumber komputasi upami, contona, statistik diropéa langkung sering tibatan anu diunduh.

Fungsi tanpa server kedah dieksekusi dina waktos anu pondok (timeout), anu ditangtukeun ku panyadia ladénan. Salaku conto, pikeun AWS waktosna 15 menit. Ieu ngandung harti yén fungsi umur panjang kedah dirobih pikeun nyocogkeun ka sarat - ieu anu ngabédakeun Serverless tina téknologi populér ayeuna (wadah sareng Platform salaku Layanan).

Urang nangtukeun hiji acara pikeun tiap fungsi. Kajadian mangrupikeun pemicu pikeun tindakan:

Kajadian
Aksi anu dijalankeun ku fungsi

Gambar produk parantos diunggah ka gudang.
Kompres gambar sareng unggah kana diréktori

Alamat toko fisik parantos diropéa dina pangkalan data
Muatkeun lokasi anyar kana peta

Klién mayar barang
Mimitian pamrosésan pamayaran

Acara tiasa janten pamundut HTTP, ngalirkeun data, antrian pesen, sareng sajabana. Sumber kajadian mangrupa parobahan atawa kajadian data. Salaku tambahan, fungsi tiasa dipicu ku timer.

Arsitéktur didamel, sareng aplikasina ampir janten tanpa server. Salajengna urang buka panyadia ladenan.

Ti sisi panyadia

Biasana, komputasi tanpa server ditawarkeun ku panyadia ladenan awan. Éta disebut béda: Fungsi Azure, AWS Lambda, Fungsi Awan Google, Fungsi Awan IBM.

Kami bakal ngagunakeun jasa liwat konsol panyadia atanapi akun pribadi. Kodeu fungsi tiasa diunduh dina salah sahiji cara ieu:

  • nyerat kode dina éditor anu diwangun ku konsol wéb,
  • Unduh arsip nganggo kodeu,
  • damel sareng repositori git umum atanapi swasta.

Di dieu urang nyetél acara nu nelepon fungsi. Susunan acara tiasa bénten pikeun panyadia anu béda.

Serverless dina rak

Panyadia ngawangun sareng ngajadikeun otomatis sistem Fungsi salaku Jasa (FaaS) dina infrastrukturna:

  1. Kodeu fungsi ends nepi di gudang di sisi panyadia.
  2. Nalika hiji kajadian lumangsung, wadahna kalawan lingkungan disusun otomatis deployed on server. Unggal conto fungsi boga wadahna terasing sorangan.
  3. Tina panyimpenan, fungsina dikirim ka wadahna, diitung, sareng ngabalikeun hasilna.
  4. Jumlah kajadian paralel ngembang - jumlah wadahna ningkat. Sistem otomatis skala. Upami pangguna henteu ngaksés fungsi éta, éta bakal teu aktip.
  5. Panyadia nyetél waktos dianggurkeun pikeun wadahna - upami dina waktos ieu fungsina henteu muncul dina wadahna, éta ancur.

Ku cara ieu urang meunang Serverless out of the box. Kami bakal mayar jasa nganggo modél bayar-sakumaha-anjeun-balik sareng ngan ukur pikeun fungsi anu dianggo, sareng ngan ukur nalika dianggo.

Pikeun ngenalkeun pamekar kana jasa éta, panyadia nawiskeun tés gratis dugi ka 12 bulan, tapi ngabatesan total waktos komputasi, jumlah pamundut per bulan, dana atanapi konsumsi listrik.

Kauntungan utama tina gawé bareng panyadia nyaéta kamampuan pikeun henteu hariwang ngeunaan infrastruktur (server, mesin virtual, wadah). Pikeun bagian na, panyadia tiasa nerapkeun FaaS boh nganggo pamekaran sorangan sareng nganggo alat open-source. Hayu urang ngobrol ngeunaan aranjeunna salajengna.

Ti sisi open source

Komunitas open-source parantos aktip ngerjakeun alat Serverless salami sababaraha taun ka pengker. Pamaén pasar panggedéna ogé nyumbang kana pamekaran platform tanpa server:

  • Google nawiskeun pamekar alat open-source - Knatif. IBM, RedHat, Pivotal sareng SAP milu dina pangwangunanana;
  • IBM digawé dina platform Serverless OpenWhisk, nu saterusna jadi proyék ti Yayasan Apache;
  • Microsoft sawaréh dibuka kodeu platform Fungsi Azure.

Pangwangunan ogé dijalankeun dina arah kerangka tanpa server. Kubeless и Édisi disebarkeun di jero klaster Kubernetes anu tos disiapkeun, OpenFaaS dianggo sareng Kubernetes sareng Docker Swarm. Kerangka tindakan minangka jinis controller - upami dipénta, éta nyiapkeun lingkungan runtime di jero kluster, teras ngaluncurkeun fungsi di dinya.

Frameworks ninggalkeun rohangan pikeun ngonpigurasikeun alat pikeun nyocogkeun ka kabutuhan Anjeun. Janten, dina Kubeless, pamekar tiasa ngonpigurasikeun waktos palaksanaan fungsi (nilai standar nyaéta 180 detik). Fisi, dina usaha pikeun ngajawab masalah mimiti tiis, nyarankeun tetep sababaraha wadahna ngajalankeun sadaya waktu (sanajan ieu entails waragad downtime sumberdaya). Sareng OpenFaaS nawiskeun sakumpulan pemicu pikeun unggal rasa sareng warna: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NAT sareng anu sanésna.

Parentah pikeun ngamimitian tiasa dipendakan dina dokuméntasi resmi kerangka. Gawé sareng aranjeunna peryogi gaduh kaahlian langkung sakedik tibatan nalika damel sareng panyadia - ieu sahenteuna kamampuan pikeun ngaluncurkeun klaster Kubernetes via CLI. Paling, kaasup parabot open-source séjén (contona, manajer antrian Kafka).

Henteu paduli kumaha urang damel sareng Serverless - ngalangkungan panyadia atanapi nganggo sumber terbuka, kami bakal nampi sababaraha kaunggulan sareng kalemahan pendekatan Tanpa Server.

Ditilik tina kaunggulan jeung kalemahanana

Serverless ngembangkeun ideu ngeunaan infrastruktur wadah sareng pendekatan microservice, dimana tim tiasa damel dina mode multibasa tanpa kabeungkeut kana hiji platform. Ngawangun sistem disederhanakeun sareng kasalahan langkung gampang dilereskeun. Arsitéktur Microservice ngamungkinkeun anjeun pikeun nambihan fungsionalitas énggal kana sistem langkung gancang tibatan dina kasus aplikasi monolithic.

Serverless ngirangan waktos pangembangan langkung jauh, ngamungkinkeun pamekar pikeun museurkeun ukur kana logika bisnis sareng coding aplikasi. Hasilna, waktos ka pasar pikeun pamekaran dikirangan.

Salaku bonus, urang nampi skala otomatis pikeun beban, sarta kami mayar ngan pikeun sumberdaya dipaké sarta ngan dina waktos aranjeunna dipaké.

Sapertos téknologi naon waé, Serverless ngagaduhan kalemahan.

Salaku conto, kalemahan sapertos kitu mangrupikeun waktos mimiti tiis (rata-rata dugi ka 1 detik pikeun basa sapertos JavaScript, Python, Go, Java, Ruby).

Di hiji sisi, dina kanyataanana, waktu mimiti tiis gumantung kana loba variabel: basa nu fungsina ditulis, jumlah perpustakaan, jumlah kode, komunikasi jeung sumber tambahan (database sarua atawa server auténtikasi). Kusabab pamekar ngadalikeun variabel ieu, anjeunna tiasa ngirangan waktos ngamimitian. Tapi di sisi anu sanésna, pamekar teu tiasa ngontrol waktos ngamimitian wadahna - éta sadayana gumantung kana panyadia.

A mimiti tiis bisa ngahurungkeun kana mimiti haneut lamun fungsi hiji reuses wadahna dibuka ku acara saméméhna. Kaayaan ieu bakal timbul dina tilu kasus:

  • upami klien sering nganggo jasa sareng jumlah telepon ka fungsi naék;
  • lamun panyadia, platform atawa kerangka ngidinan Anjeun pikeun tetep sababaraha peti ngajalankeun sadaya waktu;
  • lamun pamekar ngajalankeun fungsi on timer a (sebutkeun unggal 3 menit).

Pikeun seueur aplikasi, mimiti tiis henteu janten masalah. Di dieu anjeun kedah ngawangun dina jinis sareng tugas jasa. A reureuh mimiti sadetik teu salawasna kritis pikeun aplikasi bisnis, tapi bisa jadi kritis pikeun layanan médis. Dina hal ieu, pendekatan tanpa server sigana moal cocog deui.

Karugian salajengna tina Serverless nyaéta umur pondok tina hiji fungsi (waktos waktos dimana fungsina kedah dieksekusi).

Tapi, upami anjeun kedah damel sareng tugas anu lami-lami, anjeun tiasa nganggo arsitektur hibrid - ngagabungkeun Serverless sareng téknologi anu sanés.

Henteu sakabéh sistem bakal tiasa dianggo ngagunakeun skéma Serverless.

Sababaraha aplikasi tetep bakal nyimpen data sareng kaayaan salami palaksanaan. Sababaraha arsitéktur bakal tetep monolithic sarta sababaraha fitur bakal lila-hirup. Nanging (sapertos téknologi awan teras wadahna), Serverless mangrupikeun téknologi kalayan masa depan anu saé.

Dina urat ieu, abdi hoyong lancar ngaléngkah ka masalah ngagunakeun pendekatan Serverless.

Ti sisi aplikasi

Pikeun 2018, persentase pamakean Tanpa Server tumuwuh hiji satengah kali. Diantara perusahaan anu parantos ngalaksanakeun téknologi dina jasana nyaéta raksasa pasar sapertos Twitter, PayPal, Netflix, T-Mobile, Coca-Cola. Dina waktos anu sami, anjeun kedah ngartos yén Serverless sanés panacea, tapi alat pikeun ngarengsekeun sababaraha masalah:

  • Ngurangan downtime sumberdaya. Teu perlu terus-terusan nyimpen mesin virtual pikeun jasa anu gaduh sababaraha telepon.
  • Ngolah data dina laleur. Kompres gambar, motong latar tukang, robih panyandian pidéo, damel sareng sénsor IoT, ngalaksanakeun operasi matematik.
  • "Lem" jasa lianna babarengan. Repositori Git sareng program internal, chat bot di Slack sareng Jira sareng almenak.
  • Nyaimbangkeun beban. Hayu urang nempo leuwih deukeut dieu.

Sebutkeun aya layanan anu narik 50 urang. Di handapeun éta aya mesin virtual sareng hardware anu lemah. Ti waktos ka waktos, beban dina jasa naek sacara signifikan. Lajeng hardware lemah teu bisa Cope.

Anjeun tiasa ngawengku hiji balancer dina sistem anu bakal ngadistribusikaeun beban, sebutkeun, leuwih tilu mesin virtual. Dina tahap ieu, urang teu bisa akurat ngaduga beban, jadi urang tetep jumlah nu tangtu sumberdaya ngajalankeun "dina cadangan". Sarta kami overpay pikeun downtime.

Dina kaayaan kitu, urang tiasa ngaoptimalkeun sistem ngaliwatan pendekatan hibrid: urang ninggalkeun hiji mesin virtual balik balancer beban sarta nempatkeun link ka Serverless Endpoint kalawan fungsi. Lamun beban ngaleuwihan bangbarung, balancer ngajalankeun instansi fungsi nu nyokot alih bagian tina pamrosésan pamundut.

Serverless dina rak
Ku kituna, Serverless bisa dipaké dimana perlu ngolah sajumlah badag requests teu mindeng teuing, tapi intensif. Dina hal ieu, ngajalankeun sababaraha fungsi pikeun 15 menit leuwih nguntungkeun ti ngajaga mesin virtual atawa server sadaya waktu.

Kalayan sagala kaunggulan komputasi tanpa server, sateuacan palaksanaan, anjeun kedah ngevaluasi logika aplikasi sareng ngartos naon masalah anu tiasa direngsekeun ku Serverless dina kasus anu khusus.

Serverless sareng Selectel

Di Selectel kami geus karya disederhanakeun jeung Kubernetes ngaliwatan panel kontrol urang. Ayeuna urang ngawangun platform FaaS urang sorangan. Kami hoyong pamekar tiasa ngarengsekeun masalahna nganggo Serverless ngalangkungan antarmuka anu fleksibel sareng fleksibel.

Upami anjeun gaduh ide ngeunaan naon platform FaaS idéal sareng kumaha anjeun hoyong nganggo Serverless dina proyék anjeun, bagikeun dina koméntar. Kami bakal nganggap kahayang anjeun nalika ngembangkeun platform.
 
Bahan anu dianggo dina tulisan:

sumber: www.habr.com

Tambahkeun komentar