Ինչպես է աշխատում
Ինչպես է այն կառուցված
Maran-ով սերվերի երեք գործընթացը, նրանց միջև պայմանագիրը և կանոնները, որոնք որոշում են, թե ինչ է թույլատրված root դեմոնին։
Maran-ով սերվերի վրա աշխատում է ուղիղ երեք գործընթաց։ Նրանց միջև բաժանումը արտադրանքի գլխավոր նախագծային որոշումն է, և ստորև բերված կանոնների մեծ մասը բխում է դրանից։
Երեք գործընթացը
| Գործընթաց | Աշխատում է | Պահում է |
|---|---|---|
maran-api | ոչ արտոնյալ համակարգային օգտվողի անունից | ամբողջ բիզնես-տրամաբանությունը և բազայի միակ միացումը |
maran-agent | root-ի անունից | ոչինչ — այն վիճակ չի պահում, չունի բազա և սեփական կարգավորում |
| PostgreSQL | սեփական օգտվողի անունից | վահանակի տվյալները՝ unix-սոկետի վրա, առանց TCP պորտի ընդհանրապես |
Վահանակը երբեք չի դիպչում համակարգին։ Գործակալը ոչինչ չի որոշում։ Ահա ամբողջ ձևը․ գործընթացը, որը գիտի, թե ինչ պետք է տեղի ունենա, արտոնություններ չունի, իսկ արտոնություններով գործընթացը գիտի միայն, թե ինչպես կատարել ֆիքսված ցուցակը։
Պայմանագիրը նրանց միջև
Նրանք խոսում են unix-սոկետով, և փոխանցվում է անվանված գործողություն՝ տիպավորված և ստուգված արգումենտներով։ Այստեղից երեք հատկություն, և յուրաքանչյուրը կանոն է, ոչ թե սովորություն․
- Չկա գործողություն, որը գործարկում է կանչողի փոխանցած ծրագիրը։ Ո՛չ սահմանափակված, ո՛չ սպիտակ ցուցակից — ոչ մեկը։ Ուստի այն, ինչ կարելի է ստիպել անել root գործընթացին, վերջավոր է, գրված և ստուգելի։
- Փոխանակման մեջ ոչ մի տեղ shell-տող չկա։ Դոմենը չի պաշտպանվում կարգավորման ֆայլ ընկնելուց առաջ․ այն ստուգվում է որպես դոմեն՝ տառեր, թվեր, գծիկներ և կետեր, ուստի այնտեղ տողի փոխադրման նիշ չկա, որ ավարտի մեկ դիրեկտիվը և սկսի կանչողի ընտրած մյուսը։
- Գործակալը ստուգում է, թե ով է հարցնում։ Սոկետի վրա գործընկերոջ հավաստագրերը կարդացվում են մինչև գործողությունը դիտարկելը, այնպես որ դեմոնը գիտի, թե որ գործընթացն է մյուս ծայրում, փոխանակ հավատա իրեն ասվածին։
Կարգավորման ֆայլի գրառումը
Յուրաքանչյուր արտոնյալ գրառում ընթանում է նույն հերթականությամբ, և հերթականությունն էլ հենց էությունն է․
- գեներացնել ժամանակավոր ֆայլում;
fsync;- ատոմային կերպով վերանվանել տեղում;
- թույլ տալ, որ արդյունքը ստուգի հենց ծառայությունը՝
nginx -t, ոչ թե մեր կանոնավոր արտահայտությունը; - վերբեռնել;
- հետ գլորել ֆայլը, եթե ստուգումը կամ վերբեռնումը մերժել է։
Մեկ վատ գեներացիան չի կարող տապալել սերվերի մյուս կայքերը, որովհետև գեներացիայի որակի մասին դատում է սերվերի սեփական վերլուծիչը։
Մեկուսացում հաշիվների միջև
- Հաշիվը իրական Linux օգտվող է՝ իր տնային պանակով և ֆայլային համակարգի իրավունքներով։
- Նրա PHP-ն աշխատում է սեփական php-fpm լողավազանում սեփական uid-ի տակ, և ֆայլային գործողությունները գնում են այդ օգտվողից՝ երբեք ոչ root-ից։
- Վարձակալների աղյուսակները սահմանափակված են հաշվով բազայի մակարդակում՝ հարցումների ֆիլտրերով, որոնք ավտոմատ թեստը ստուգում է՝ շրջանցելով ամբողջ մոդելը։
- Ուրիշի ռեսուրսի հարցումը պատասխանում է 404, ոչ թե 403, ուստի սխալը երբեք չի հաստատում, որ տողը գոյություն ունի։
Ինչ գիտակցաբար չկա
Ո՛չ հաղորդագրությունների բրոքեր, ո՛չ sidecar, ո՛չ երկրորդ դեմոն։ Ֆոնային աշխատանքը գնում է PostgreSQL-ում պահվող հուսալի հերթերով, և Maran-ի տեղադրումը սերվերին չի ավելացնում ոչինչ, ինչ չկա վերևի աղյուսակում — բացառությամբ մեկի, որը օպերատորն ինքն է միացնում՝ FTPS ծառայությունը։
Վճարովի մոդուլներն էլ դա չեն փոխում․ դրանք C# մոդուլներ են, որոնք վարում են բաց գործակալի մեջ արդեն կոմպիլացված գործողությունները։ Գործակալը երբեք արտաքին կոդ չի բեռնում — ուստի արտոնագիրը չի կարող նոր արտոնյալ հնարավորություն ավելացնել։