Sobes.tech
Middle

Ի՞նչ տեսակի ծառայություններ կան և ինչպես են նրանք գործում ցածր մակարդակով։

sobes.tech AI

Պատասխան AI-ից

Միկրոսերվիսների և տարածված համակարգերի համատեքստում կան մի քանի հիմնական տեսակի ծառայություններ:

  • Մոնոլիտային ծրագրեր: Միացյալ, անբաժանելի կոդային բազա, որը պարունակում է ծրագրի բոլոր ֆունկցիոնալությունները:
  • Միկրոսերվիսներ: Փոքր, անկախ ծառայությունների հավաքածու, որոնցից յուրաքանչյուրը իրականացնում է որոշ բիզնես տրամաբանություն: Կապվում են միմյանց API-ով:
  • Serverless (անհամակարգային) ծառայություններ: Հաշվարկային մոդել, որտեղ ամպային ծառայությունը դինամիկ կերպով կառավարում ռեսուրսների հատկացման և ընդլայնման գործընթացը: Ծրագրավորողը կենտրոնանում է միայն ֆունկցիաների կոդի վրա:

Նվազ մակարդակում աշխատանքը հետևյալ կերպ է գործում:

Մոնոլիտ:

Կատարվում է որպես մի ամբողջ պրոցես: Բոլոր բաղադրիչները միաժամանակ բեռնվում են հիշողության մեջ: Կապը բաղադրիչների միջև տեղի է ունենում ֆունկցիաների կամ մեթոդների կանչերով մեկ հասցեային տարածքում: Անհամակարգայնությունը հասնում է ամբողջ մոնոլիտի ռեզերվավորմամբ: Մասշտաբայնությունը դժվար է, անհրաժեշտ է ընդլայնել ամբողջ ծրագրի օրինակը: Ռեսուրսների օգտագործումը հաճախ ավելորդ է:

Միկրոսերվիսներ:

Յուրաքանչյուր միկրոսերվիս՝ առանձին պրոցես կամ պրոցեսների հավաքածու: Աշխատում է իր առանձնացված միջավայրում (կոնտեյներ, վիրտուալ մեքենա): Կապը տեղի է ունենում ցանցով, սովորաբար HTTP/gRPC-ով՝ սինխրոն կամ ասինխրոն պրոտոկոլներով (օրինակ, RabbitMQ, Kafka՝ ասինխրոնության համար): Յուրաքանչյուր ծառայության կարող է լինել իր տեխնոլոգիական ստակ և տվյալների բազա: Մասշտաբայնությունը տեղի է ունենում անկախ յուրաքանչյուր ծառայության համար: Գերազանց ռեզերվավորման ապահովում է (մեկ ծառայության անհաջողությունը չի ազդում մյուսների վրա) և ռեսուրսների լավագույն օգտագործումը: Կառավարումը բարդանում է (պահանջվում է Service Discovery, API Gateway, տարածված լոգավորում և մոնիտորինգ):

Միկրոսերվիսների ցանցային փոխազդեցության օրինակ:

// Հարցում Սերվիս A-ին
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Պատասխան Սերվիս A-ից
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "username": "testuser"
}

Serverless:

Ֆունկցիայի կոդը տեղադրվում է ամպային միջավայրում: Ամպային ծառայությունը գործարկում է ֆունկցիան որոշակի իրադարձությունների (HTTP-հարցեր, հաղորդագրություններ հերթում, տվյալների բազայի փոփոխություններ) արձագանքում: Ինֆրակառուցվածությունը (համակարգիչներ, օպերացիոն համակարգ) կառավարում է ծառայությունը: Ֆունկցիաները սովորաբար կարճաժամկետ և stateless են (առանց վիճակի պահպանում): Մասշտաբայնությունը ավտոմատ է, հիմնված է իրադարձությունների քանակի վրա: Վճարումը կատարվում է ռեսուրսների օգտագործման հիման վրա (կատարման քանակ, աշխատանքային ժամանակ): Նվազ մակարդակում ծառայությունը օգտագործում է կոնտեյներ կամ վիրտուալ մեքենաներ՝ ֆունկցիաների մեկուսացման և կատարման համար, բայց այս մակարդակը թաքնված է օգտագործողի համար:

AWS Lambda-ի օրինակ՝ Serverless ֆունկցիա:

# Պարզ Lambda ֆունկցիա
import json

def lambda_handler(event, context):
    # Վերաբերում է մուտքային իրադարձությանը
    # Կատարում է տրամաբանությունը
    response_body = {
        "message": "Hello from Lambda!",
        "input": event
    }

    return {
        "statusCode": 200,
        "body": json.dumps(response_body)
    }

Համեմատական աղյուսակ:

Գծագրություն Մոնոլիտ Միկրոսերվիսներ Serverless
Տարածաշրջանային կառուցվածք Միացյալ կոդային բազա Անկախ ծառայություններ Ֆունկցիաներ, կառավարվում իրադարձություններով
Տեղադրման գործընթացը Միացյալ պրոցես Անկախ յուրաքանչյուր ծառայության համար Կառավարում է ծառայությունը
Մասշտաբայնություն Հորիզոնական (կրկնօրինություն) Անկախ յուրաքանչյուր ծառայության համար Ավտոմատ, իրադարձությունների հիման վրա
Անհամակարգայնություն Նվազ (նվազում է) Բարձր (բաժանված) Բարձր (ներդրված)
Ռեսուրսների օգտագործում Կեսից ավել է, ավելորդ է Ավելի արդյունավետ Վճարում ըստ օգտագործման
Կառավարման բարդություն Նվազ Բարձր Նվազ (ինֆրակառուցվածքի համար)
Կապակցում Ներքին գործընթացային Ցանցով (API, հաղորդագրություններ) Իրադարձությունների միջոցով