Imperatiivne vs deklaratiivne

Autorid Andrew Chen ja Dominik Tornow

Kubernetes on konteinerikontrolli mootor, mis on loodud konteineriseeritud rakenduste majutamiseks sõlmede komplektis, mida tavaliselt nimetatakse klastriks. Süsteemide modelleerimise lähenemisviisi abil on selle sarja eesmärk edendada Kubernetese ja selle aluseks olevate mõistete mõistmist.

Kubernetesit kirjeldatakse sageli kui deklaratiivset süsteemi ja võrreldakse seda imperatiivsete süsteemidega. Mõistete "deklaratiivne" ja "imperatiiv" tähendus ei ole siiski selgelt ilmne. See ajaveebipostitus annab lühikese mudeli, mis illustreerib nende kahe sarnasusi ja erinevusi.

Arvestuse mudel

Selle postituse ülejäänud osas võetakse kasutusele arvutamise lihtne olekumasina mudel. Olekumasina mudelis on arvutus määratletud kui käsu rakendamine, mis siirdab süsteemi ühest olekust teise. Töötav süsteem on seega käskude seeria, mis siirdab süsteemi läbi erinevate olekute.

Joonis 1. Arvutuse olekumasina mudel

Süsteemi loetakse olekureitinguks, kui praegune olek on võrdne soovitud olekuga. Vastupidiselt sellele peetakse süsteemi oleku triiviks, kui praegune olek ei ole soovitud olekuga võrdne. Käskude komplekti, mis muudab süsteemi praegusest olekust soovitud soovitud olekusse, nimetatakse leevendavate toimingute komplektiks.

Näiteks, arvestades algseisundit S, siirdub käsk c süsteemi olekusse S '. Sarnaselt, c 'muudab süsteemi S'-ks ja nii edasi. Kuna S on praegune olek ja S '' 'on soovitud olek, on leevendavate meetmete komplekt võrdne {c, c', c ''}.

Joonis 2. Arvestuse olekumasina mudelis osalejaid tutvustav struktuuriskeem

Joonis 2. toob välja osalised, kes on seotud arvutamise olekumasina mudeliga. Automaat vastutab antud käsu rakendamise eest praegusesse olekusse, mis viib süsteemi järgmisesse olekusse. Kuid keskkond, milles süsteem eksisteerib, võib ka riiki mõjutada.

Siin on kavandatav oleku muutmine olekumuutus, mis tuleneb selgesõnaliselt tarnitud käsust. Tahtmatu oleku muutus on seevastu mis tahes oleku muutus, mis on tingitud interaktsioonist keskkonnaga.

Kubernetese kontekstis võib kavandatud oleku muutuseks olla Pod või ReplicaSet juurutamine, samas kui soovimatu oleku muutuseks võib olla ühe konteineri või kogu sõlme allakäik.

Kohustuslikud süsteemid

Imperatiivses süsteemis tunneb kasutaja soovitud olekut, määrab käskude jada süsteemi siirdamiseks soovitud olekusse ja edastab süsteemile käskude esituse. Süsteemi komponenti, mis rakendab olekut ülemineku käsku, nimetatakse protsessoriks.

Joonis 3. Imperatiivsed süsteemid

Deklaratiivsed süsteemid

Seevastu deklaratiivses süsteemis tunneb kasutaja soovitud olekut, edastab süsteemile soovitud oleku kujutise, seejärel loeb süsteem hetkeolukorra ja määrab käskluste jada süsteemi siirdamiseks soovitud olekusse. Komponenti, mis määrab vajaliku käskude jada, nimetatakse kontrolleriks.

Joonis 4. Deklareerimissüsteemid

Deklaratiivsetel süsteemidel on selge eelis, kui nad suudavad reageerida tahtmatutele olekumuutustele ilma täiendava järelevalveta: tahtmatu seisundimuutuse korral, mis põhjustab oleku triivimist, võib süsteem iseseisvalt määrata ja kohaldada seisundi kokkulangevust põhjustavate kergendavate meetmete komplekti. . Seda protsessi nimetatakse kontrollsilmuseks, mis on populaarne valik kontrollerite rakendamiseks.

Kubernetes

Kubernetes on deklaratiivne süsteem. Ühe kontrolleri asemel on sellel aga mitu kontrollerit, mis vastutavad Kubernetes'i erinevat tüüpi objekti, näiteks ReplicaSet või Deployment, eest. Protsessorina töötab API server, rakendades kontrollerite antud käsklusi süsteemi olekusse, mis salvestatakse Kubernetesi objektihoidlasse.

Joonis 5. Kubernetes kui deklaratiivne süsteem

Kokkuvõttes

Imperatiivsete ja deklaratiivsete süsteemide määratlev aspekt on vastus küsimusele, kes on juhiistmel. Kas kasutaja või süsteem vastutab soovitud olekusse ülemineku korraldamise eest?

Imperatiivses süsteemis vastutab kasutaja selle eest, kuidas ta oskab süsteemi soovitud olekusse viia, deklaratiivses süsteemis vastutab süsteem aga teadmise eest, kuidas juhtida ennast soovitud olekusse.

Selle postituse kohta

See ajaveebipostitus on osa CNCF-i, Google'i ja SAP-i ühistest jõupingutustest, et edendada Kubernetese ja selle aluseks olevate mõistete mõistmist.