Maran

Ինչպես է աշխատում

Ինչպես է այն կառուցված

Maran-ով սերվերի երեք գործընթացը, նրանց միջև պայմանագիրը և կանոնները, որոնք որոշում են, թե ինչ է թույլատրված root դեմոնին։

Maran-ով սերվերի վրա աշխատում է ուղիղ երեք գործընթաց։ Նրանց միջև բաժանումը արտադրանքի գլխավոր նախագծային որոշումն է, և ստորև բերված կանոնների մեծ մասը բխում է դրանից։

Երեք գործընթացը

ԳործընթացԱշխատում էՊահում է
maran-apiոչ արտոնյալ համակարգային օգտվողի անունիցամբողջ բիզնես-տրամաբանությունը և բազայի միակ միացումը
maran-agentroot-ի անունիցոչինչ — այն վիճակ չի պահում, չունի բազա և սեփական կարգավորում
PostgreSQLսեփական օգտվողի անունիցվահանակի տվյալները՝ unix-սոկետի վրա, առանց TCP պորտի ընդհանրապես

Վահանակը երբեք չի դիպչում համակարգին։ Գործակալը ոչինչ չի որոշում։ Ահա ամբողջ ձևը․ գործընթացը, որը գիտի, թե ինչ պետք է տեղի ունենա, արտոնություններ չունի, իսկ արտոնություններով գործընթացը գիտի միայն, թե ինչպես կատարել ֆիքսված ցուցակը։

Պայմանագիրը նրանց միջև

Նրանք խոսում են unix-սոկետով, և փոխանցվում է անվանված գործողություն՝ տիպավորված և ստուգված արգումենտներով։ Այստեղից երեք հատկություն, և յուրաքանչյուրը կանոն է, ոչ թե սովորություն․

  • Չկա գործողություն, որը գործարկում է կանչողի փոխանցած ծրագիրը։ Ո՛չ սահմանափակված, ո՛չ սպիտակ ցուցակից — ոչ մեկը։ Ուստի այն, ինչ կարելի է ստիպել անել root գործընթացին, վերջավոր է, գրված և ստուգելի։
  • Փոխանակման մեջ ոչ մի տեղ shell-տող չկա։ Դոմենը չի պաշտպանվում կարգավորման ֆայլ ընկնելուց առաջ․ այն ստուգվում է որպես դոմեն՝ տառեր, թվեր, գծիկներ և կետեր, ուստի այնտեղ տողի փոխադրման նիշ չկա, որ ավարտի մեկ դիրեկտիվը և սկսի կանչողի ընտրած մյուսը։
  • Գործակալը ստուգում է, թե ով է հարցնում։ Սոկետի վրա գործընկերոջ հավաստագրերը կարդացվում են մինչև գործողությունը դիտարկելը, այնպես որ դեմոնը գիտի, թե որ գործընթացն է մյուս ծայրում, փոխանակ հավատա իրեն ասվածին։

Կարգավորման ֆայլի գրառումը

Յուրաքանչյուր արտոնյալ գրառում ընթանում է նույն հերթականությամբ, և հերթականությունն էլ հենց էությունն է․

  1. գեներացնել ժամանակավոր ֆայլում;
  2. fsync;
  3. ատոմային կերպով վերանվանել տեղում;
  4. թույլ տալ, որ արդյունքը ստուգի հենց ծառայությունը՝ nginx -t, ոչ թե մեր կանոնավոր արտահայտությունը;
  5. վերբեռնել;
  6. հետ գլորել ֆայլը, եթե ստուգումը կամ վերբեռնումը մերժել է։

Մեկ վատ գեներացիան չի կարող տապալել սերվերի մյուս կայքերը, որովհետև գեներացիայի որակի մասին դատում է սերվերի սեփական վերլուծիչը։

Մեկուսացում հաշիվների միջև

  • Հաշիվը իրական Linux օգտվող է՝ իր տնային պանակով և ֆայլային համակարգի իրավունքներով։
  • Նրա PHP-ն աշխատում է սեփական php-fpm լողավազանում սեփական uid-ի տակ, և ֆայլային գործողությունները գնում են այդ օգտվողից՝ երբեք ոչ root-ից։
  • Վարձակալների աղյուսակները սահմանափակված են հաշվով բազայի մակարդակում՝ հարցումների ֆիլտրերով, որոնք ավտոմատ թեստը ստուգում է՝ շրջանցելով ամբողջ մոդելը։
  • Ուրիշի ռեսուրսի հարցումը պատասխանում է 404, ոչ թե 403, ուստի սխալը երբեք չի հաստատում, որ տողը գոյություն ունի։

Ինչ գիտակցաբար չկա

Ո՛չ հաղորդագրությունների բրոքեր, ո՛չ sidecar, ո՛չ երկրորդ դեմոն։ Ֆոնային աշխատանքը գնում է PostgreSQL-ում պահվող հուսալի հերթերով, և Maran-ի տեղադրումը սերվերին չի ավելացնում ոչինչ, ինչ չկա վերևի աղյուսակում — բացառությամբ մեկի, որը օպերատորն ինքն է միացնում՝ FTPS ծառայությունը։

Վճարովի մոդուլներն էլ դա չեն փոխում․ դրանք C# մոդուլներ են, որոնք վարում են բաց գործակալի մեջ արդեն կոմպիլացված գործողությունները։ Գործակալը երբեք արտաքին կոդ չի բեռնում — ուստի արտոնագիրը չի կարող նոր արտոնյալ հնարավորություն ավելացնել։