ბიბლიოთეკა
00/07 · ~36 წთ
GUIDEDECK · როგორ ხდება სისტემების დეპლოი და შეერთება

არქიტექტურული
პატერნები & სტილები
მთელი სისტემებისთვის.

36-წუთიანი მოგზაურობა სისტემური დონის ფორმებში — მონოლითიდან მიკროსერვისებამდე, BFF, API გეითვეები, event-driven, სერვერლესი და როგორ გადავიდეთ უსაფრთხოდ. გულწრფელები ვიქნებით იმაზე, თუ სად იმარჯვებს ჩუმად უფრო მარტივი ვარიანტი.

~36 წთდამწყები → საშუალოსისტემური დონე
გადაახვიეთ
01 · რატომ არქიტექტურის სტილები 4 წთ

დაკავშირებულობა და შეკრულობა —
ახლა უკვე სისტემურ მასშტაბში.

ერთი პროცესის შიგნით ცუდი საზღვარი ნელი რეფაქტორინგია. ქსელის გაღმა იგივე ცუდი საზღვარი იქცევა ხელახალი მცდელობების ქარიშხლად, ჩავარდნილ დეპლოიდ და ღამის ორ საათზე მიღებულ გაფრთხილებად. არქიტექტურული სტილი უბრალოდ ისაა, სად გაავლებთ დეპლოიმენტისა და ინტეგრაციის ხაზებს — და რა ჯდება ეს ხაზები, როცა ისინი ქსელს კვეთს.

არქიტექტურული სტილი — სისტემური დონის ფორმა იმისა, თუ როგორ იყოფა აპლიკაცია დასადეპლოი ერთეულებად და როგორ ესაუბრებიან ეს ერთეულები ერთმანეთს. ეს სხვა სიმაღლეა, ვიდრე კლასის დონის პატერნები (შრეებრივი, ჰექსაგონალური, clean) — ისინი კვლავ თითოეული ერთეულის შიგნით ცხოვრობს. ეს დეკი ერთეულებს შორის გავლებულ ხაზებზეა; მასშტაბირების ტექნიკები კი — System Design-შია.

ერთი ღერძი, რომელიც ყველაფერს უდევს ქვეშ

  • ერთი დასადეპლოი ერთეული თუ ბევრი. მონოლითი ერთ არტეფაქტად იგზავნება; განაწილებული სისტემები კი ბევრს უშვებს, ერთმანეთისგან დამოუკიდებლად.
  • პროცესშიდა გამოძახებები თუ ქსელური გამოძახებები. ფუნქციის გამოძახება ნანოწამებია და არასოდეს "ნახევრად ვარდება". ქსელური გამოძახება მილიწამებია და შეიძლება ტაიმაუტში გავიდეს, ხელახლა სცადოს ან ნაწილობრივ შესრულდეს.
  • ყოველი შემდეგი სტილი სხვადასხვა პასუხია ერთსა და იმავე კითხვაზე: "რომელი საზღვარი ღირს ქსელურ ნახტომად?"
პროცესის შიგნით
შეკვეთები
ბილინგი
შეკვეთები
ბილინგი
იუზერები
ძებნა
იუზერები
ძებნა
მონოლითი · ერთი ერთეული
განაწილებული · ბევრი ერთეული
ქსელური კავშირები · ვარდება

იგივე ოთხი საზრუნავი. მარცხნივ გამოძახება ვერ ჩავარდება; მარჯვნივ კი ყოველი ხაზი ის რამაა, რაც შეიძლება გაფუჭდეს.

მონოლითი იგებს

მარტივი ოპერაციები, ერთი დეპლოი, მარტივი ლოკალური გარემო, ტრანზაქციები უფასოა. პროდუქტების უმეტესობამ აქ უნდა დაიწყოს.

განაწილებული იგებს

დამოუკიდებელი მასშტაბირება და დეპლოები, გუნდის ავტონომია, ხარვეზების იზოლაცია — თუ საზღვრები ნამდვილია.

გადასახადი

განაწილებული ყველაფერს უმატებს ქსელურ ჩავარდნას, ნაწილობრივ ჩავარდნას, მონაცემთა თანმიმდევრულობასა და დაკვირვებადობის ღირებულებას.

წესი

ნუ გადაიხდით განაწილებულობის გადასახადს, სანამ დაკავშირებულობის ტკივილი — და არა რეზიუმეს შური — არ გაიძულებთ.

02 · მონოლითი → მოდულური მონოლითი → მიკროსერვისები 7 წთ

ეს სპექტრია და არა
კარგსა და ცუდს შორის არჩევანი.

ეს სამი ტომი არაა — ეს სამი წერტილია ერთ ხაზზე, სადაც დეპლოის სიმარტივეს დამოუკიდებლობაზე ცვლით. 2026 წლის გულწრფელი სიმართლე: მიკროსერვისები ზედმეტად ხშირად გამოიყენება. გუნდების უმეტესობა მათ იმ ტკივილამდე წლებით ადრე მიმართავს, რომელიც მათ გაამართლებდა — და მთელი ამ ხნის განმავლობაში გადასახადს იხდის.

მოდულური მონოლითი — ერთი დასადეპლოი ერთეული, რომელიც მკაცრ, კარგად დასახელებულ მოდულებადაა დაყოფილი და ეს მოდულები მხოლოდ გამოცხადებული ინტერფეისებით ესაუბრებიან ერთმანეთს. სუფთა საზღვრებს იღებთ ქსელის გარეშე. ეს არის ჩუმად სწორი ნაგულისხმევი ვარიანტი და გასაშვები ბაქანი, თუ ოდესმე მართლა გამოყოფთ სერვისს.
simpler ops · one deploy more independence · many deploys Monolith one unit · one codebase tangled modules boundaries: soft Modular monolith one unit · strict modules orders ▸ billing ▸ boundaries: enforced, in-process Microservices many units · own data + deploy orders billing users boundaries: over the wire

შუა ვარიანტი ის არის, რომელსაც გუნდების უმეტესობა გამოტოვებს — და რომელიც სინამდვილეში სჭირდება.

განაწილებული მონოლითი — ხაფანგი
// "microservices", but they share a database
async function checkout(cart) {
  await http.post("orders-svc/create", cart)
  await http.post("billing-svc/charge", cart)    // network hop
  await http.post("inventory-svc/reserve", cart) // network hop
}
// deploy one → must deploy all. Slower AND fragile.
მოდულური მონოლითი — პატიოსანი დაწყება
// modules with enforced boundaries, one process
async function checkout(cart) {
  await orders.create(cart)      // in-process, can't half-fail
  await billing.charge(cart)     // one DB transaction
  await inventory.reserve(cart)
}
// split a module into a service later, when it earns it.
სერვისი გაყავით, როცა…
  • მოდული საკუთარი ტემპით უნდა მასშტაბირდეს (10× დანარჩენებზე მეტად).
  • ცალკე გუნდს დეპლოის დამოუკიდებელი რიტმი სჭირდება.
  • მას ხარვეზების იზოლაცია ან სხვა რანტაიმი სჭირდება.
ნუ გაყოფთ, როცა…
  • საზღვარი ჯერ კიდევ ყოველ სპრინტზე იძვრება.
  • ორი "სერვისი" ერთ მონაცემთა ბაზას იზიარებს — ეს სწორედ ასეთი შემთხვევაა.
  • ინჟინრები ნაკლები გყავთ, ვიდრე შემოთავაზებული სერვისები.
იპოვეთ ნაკერები

გაჭერით შემოსაზღვრული კონტექსტების (DDD) გასწვრივ — ენა და მფლობელობა, რომლებიც ერთად იცვლება. ქსელური საზღვარი, რომელიც ნამდვილ ნაკერს მიჰყვება, იაფია; ის კი, რომელიც ტრანზაქციას ჭრის — ტანჯვაა.

03 · Backend-for-Frontend პატერნი 5 წთ

თითო ბექენდი თითო
ფრონტენდზე, ზუსტად მორგებული.

ვების ცხრილს, მობილურის სიასა და პარტნიორის ინტეგრაციას ერთი და იმავე მონაცემების სრულიად სხვადასხვა ფორმა სჭირდება. BFF არის თხელი ბექენდი, რომელსაც თითოეული კლიენტის გუნდი ფლობს: ის ქვედა დონის სერვისებს ესაუბრება და აბრუნებს ზუსტად იმას, რაც ამ კლიენტს სჭირდება — ზედმეტი მონაცემების წამოღებისა და თორმეტი მისვლა-მოსვლის გარეშე.

BFF — Backend for Frontend — გამოყოფილი API შრე თითოეული ტიპის კლიენტისთვის (ვები, მობილური, პარტნიორი), რომელიც ქვედა დონის სერვისებზე გამოძახებებს კრებს და მათ ფორმას კლიენტს არგებს. ის კლიენტისთვის სპეციფიკურ წებოს გამოაქვს ყველასთვის ერთნაირი API-დან და იქ ათავსებს, სადაც კლიენტის გუნდი ფლობს კოდს.

თითოეულ კლიენტს თავისი BFF აქვს; BFF-ები კი ერთსა და იმავე ქვედა დონის სერვისებს იზიარებენ.

რას იღებს BFF თავის თავზე

  • აგრეგაცია — მიმართავს 3 სერვისს, აბრუნებს ერთ მოწესრიგებულ პასუხს და კლავს მობილურის მისვლა-მოსვლებს.
  • ფორმის მორგება — ვების ცხრილი მდიდარ ობიექტებს იღებს; საათის აპლიკაცია — სამ ველს.
  • კლიენტისთვის სპეციფიკური ავთენტიფიკაცია & სიხშირის ლიმიტები — ძირითადი სერვისების დაბინძურების გარეშე.
  • მას ფრონტენდის გუნდი ფლობს, ამიტომ UI-ის საჭიროებები პლატფორმის ბექლოგში რიგში არ დგება.
მიმართეთ BFF-ს, როცა
  • კლიენტები მკვეთრად განსხვავდება (მობილურის გამტარუნარიანობა თუ ვების სიმდიდრე).
  • ფრონტენდი ორკესტრირების ლოგიკაში იხრჩობა.
  • გინდათ თითოეული კლიენტისთვის რელიზის დამოუკიდებლობა.
გამოტოვეთ BFF, როცა
  • მხოლოდ ერთი კლიენტი გყავთ — მაშინ BFF უბრალოდ დამატებითი ნახტომია, რომელსაც მოვლა სჭირდება.
  • კლიენტები თითქმის იდენტურია — საერთო API გეითვეი ან GraphQL შრე საკმარისია.
  • ყველა BFF-ში ერთსა და იმავე ლოგიკას გაიმეორებდით — სჯობს ქვემოთ ჩასწიოთ.

როგორც  პირადი შემსყიდველი თითოეული მომხმარებლისთვის — საწყობი ერთია, მაგრამ თითოეული ერთი ადამიანისთვის აწყობილი ჩანთით ბრუნდება. UI-ის მხარეს ნათესავი იდეაა მიკროფრონტენდები; ძლიერია და თანაბრად ზედმეტად გამოყენებული — ერთ გუნდს ისინი იშვიათად სჭირდება.

04 · API გეითვეი და სერვისების კომუნიკაცია 6 წთ

ერთი შესასვლელი კარი, უკან კი
სინქრონული ან ასინქრონული კავშირი.

კლიენტებმა თქვენი სერვისების რუკა არ უნდა იცოდნენ. API გეითვეი ერთადერთი შესასვლელი წერტილია, რომელიც განივკვეთ საქმეებს ითავსებს — მარშრუტიზაცია, ავთენტიფიკაცია, სიხშირის ლიმიტები, TLS — რომ ეს თითოეულმა სერვისმა ცალკე არ აკეთოს. მის უკან სერვისები ერთმანეთს ორნაირად ესაუბრებიან და ეს არჩევანი განსაზღვრავს, როგორ ვრცელდება ჩავარდნა.

API გეითვეი — უკუპროქსი, რომელიც თქვენს სერვისებს წინ უდგას და განივკვეთ საზრუნავებს ერთ ადგილას კრებს — მარშრუტიზაცია, ავთენტიფიკაცია, სიხშირის ლიმიტი, TLS-ის დასრულება და მოთხოვნის ფორმირება. BFF თითო კლიენტზეა და მას ფრონტენდის გუნდები ფლობენ; გეითვეი კი თითო სისტემაზეა და მას პლატფორმის გუნდი ფლობს. ხშირად ერთმანეთზე იწყობა: კლიენტი → გეითვეი → BFF → სერვისები.
# the gateway owns the edge, not the services routes: - path: /api/orders/* to: orders-svc - path: /api/catalog/* to: catalog-svc plugins: - jwt-auth # verify token once, at the edge - rate-limit: 100/min - cors, tls, request-id

ავთენტიფიკაცია და მარშრუტიზაცია ერთხელ, კიდეზე ხდება — სერვისები კი თავიანთ საქმეზე რჩებიან ფოკუსირებული.

სინქრონული — მოთხოვნა/პასუხი

  • გამომძახებელი პასუხს ელოდება (REST, gRPC). მარტივი გასააზრებელია.
  • მაგრამ ეს ხელმისაწვდომობას ერთმანეთზე აბამს — თუ ბილინგი ჩავარდა, ჩექაუთიც ჩავარდა. ჩავარდნა წინ ვრცელდება.
  • გამოიყენეთ წაკითხვებისთვის და ყველაფრისთვის, რასაც მომხმარებელი სწორედ ახლა ელოდება.

ასინქრონული — მოვლენები

  • გამომძახებელი გამოსცემს მოვლენას და საქმეს აგრძელებს; კონსიუმერები მოგვიანებით რეაგირებენ ბროკერის მეშვეობით.
  • ხელმისაწვდომობებს ერთმანეთისგან წყვეტს — ბილინგი შეიძლება ჩავარდნილი იყოს; მოვლენა რიგში დაელოდება.
  • ფასად საბოლოო თანმიმდევრულობა უჯდებათ. ბროკერის დეტალები აქაა: Message Queues & Streaming.

ინსტრუმენტების პეიზაჟი

აირჩიეთ საოპერაციო მოდელით: თვითჰოსტინგი კონტროლისთვის, მართული სერვისი ნაკლები ოპერაციებისთვის, სრული სასიცოცხლო ციკლი დიდი API პროგრამებისთვის.

Kong

აირჩიეთ, როცა გინდათ პორტაბელურობა და ღრმა კონფიგურირებადობა.

  • დადებითი — ღია კოდი, მდიდარი პლაგინები, ყველგან მუშაობს (თვითჰოსტინგი ან ღრუბელი).
  • უარყოფითი — თავად უშვებთ და მასშტაბირებთ.
AWS API Gateway

აირჩიეთ, როცა უკვე სერვერლესზე ხართ AWS-ში.

  • დადებითი — სრულად მართული, ნატიური Lambda / IAM ინტეგრაცია, ნულამდე მასშტაბირება.
  • უარყოფითი — AWS-ზეა მიბმული; მოთხოვნაზე ღირებულება დიდ მოცულობაზე გროვდება.
Apigee

აირჩიეთ, როცა API-ები პროდუქტია, რომელსაც გარე დეველოპერებს ყიდით.

  • დადებითი — API-ის სრული სასიცოცხლო ციკლი: დეველოპერის პორტალი, მონეტიზაცია, ანალიტიკა.
  • უარყოფითი — მძიმეა და ძვირი; შიდა ტრაფიკისთვის ზედმეტია.

აირჩიეთ გამოძახების ფორმის მიხედვით: ვინ მოიხმარს მას, რამდენად მჭიდროა შეყოვნების ბიუჯეტი და შეუძლია თუ არა გამომძახებელს ლოდინი.

REST / JSON

აირჩიეთ საჯარო API-ებისა და ფართო წვდომისთვის.

  • დადებითი — უნივერსალური, ქეშირებისთვის მოსახერხებელი, curl-ით გამართვადი.
  • უარყოფითი — ბევრს ლაპარაკობს; ნაგულისხმევად სქემა არ აქვს.
gRPC

აირჩიეთ შიდა, მაღალი გამტარუნარიანობის სერვის-მეშისთვის.

  • დადებითი — სწრაფი ბინარული ფორმატი, მკაცრი სქემა, სტრიმინგი, კოდის გენერაცია.
  • უარყოფითი — ბრაუზერში ნატიურად არ მუშაობს; თვალით ძნელი წასაკითხია.
GraphQL

აირჩიეთ მდიდარი, კლიენტზე მართული ფრონტენდებისა და BFF-ებისთვის.

  • დადებითი — კლიენტი თავად ირჩევს ველებს; ერთი მისვლა-მოსვლა სხვადასხვა ინტერფეისისთვის.
  • უარყოფითი — სერვერის სირთულე; ქეშირება და N+1 ნამდვილი სამუშაოა.
async მოვლენები

აირჩიეთ, როცა გამომძახებელს პასუხი ახლავე არ სჭირდება.

  • დადებითი — ხელმისაწვდომობებს ერთმანეთისგან წყვეტს; პიკებს ითავსებს.
  • უარყოფითი — საბოლოო თანმიმდევრულობა; ტრეისინგი უფრო რთულია.
05 · მოვლენებით მართული — pub/sub, event sourcing, CQRS 6 წთ

უთხარით სისტემას, რა
მოხდა, და არა ის, რა გააკეთოს.

მოვლენებით მართულ სტილში სერვისი აცხადებს ფაქტს — OrderPlaced — და მიდის. ვისაც აინტერესებს, ის რეაგირებს. პროდიუსერებმა კონსიუმერები არ იციან, ამიტომ ახალ რეაქციებს წყაროსთან შეხების გარეშე ამატებთ. სწორედ ეს განცალკევებაა მთელი მიმზიდველობა — და საბოლოო თანმიმდევრულობა კი მთელი ფასი.

მოვლენებით მართული არქიტექტურა — სერვისები ერთმანეთს ესაუბრებიან ბროკერის მეშვეობით მოვლენების გამოქვეყნებითა და გამოწერით და არა პირდაპირი გამოძახებებით. ბროკერის მექანიკა (Kafka, დანაწილება, მიწოდების გარანტიები) Message Queues & Streaming-ს ეკუთვნის; აქ კი არქიტექტურული ფორმა გვაინტერესებს, რომელსაც ის ქმნის.

Pub/sub: შეკვეთები ერთხელ აქვეყნებს; სამი კონსიუმერი რეაგირებს. მეოთხის დამატება ზემოთ არავის ეხება.

ორი პატერნი, რომელიც მოვლენებზე დგას

  • Event sourcing — ჭეშმარიტების წყაროდ შეინახეთ მოვლენების ნაკადი და არა მხოლოდ ბოლო სტრიქონი. მდგომარეობა მომხდარის ხელახალი გათამაშებაა; საჩუქრად იღებთ იდეალურ აუდიტის ლოგსა და დროში მოგზაურობას.
  • CQRS (Command Query Responsibility Segregation) — გამიჯნეთ ჩაწერის მოდელი წაკითხვის მოდელისგან. ბრძანებები მდგომარეობას ცვლის; შეკითხვები კი მოვლენებისგან აგებულ, წაკითხვაზე ოპტიმიზებულ პროექციებს მიმართავს.
  • ისინი ბუნებრივად ერწყმის ერთმანეთს, მაგრამ თითოეული დამოუკიდებელია — და თითოეული რეალურ სირთულეს ამატებს. რეფლექსით ნუ აიღებთ.
// the log of facts IS the truth
const events = [
  { type: "OrderPlaced",  items: 3 },
  { type: "OrderPaid",    amount: 90 },
  { type: "ItemRefunded", amount: 30 },
]
// current state = fold over events
const balance = events.reduce(apply, 0)  // → 60

CQRS: ჩაწერა მოვლენებს ამატებს; წაკითხვა კი ამ ლოგზე აგებული პროექციებიდან მოდის.

ღირს, როცა
  • ერთსა და იმავე ბიზნეს-ფაქტზე ბევრი დამოუკიდებელი რეაქციაა.
  • აუდიტი, ხელახალი გათამაშება ან დროითი შეკითხვები პირველი რიგის საჭიროებაა.
  • წაკითხვისა და ჩაწერის დატვირთვა მკვეთრად ასიმეტრიულია (CQRS).
თავი შეიკავეთ, როცა
  • მარტივი CRUD ცხრილი ყველა თქვენს კითხვას პასუხობს.
  • გუნდი მზად არაა საბოლოო თანმიმდევრულობისა და ტრეისებით გამართვისთვის.
  • მხოლოდ ერთი კონსიუმერი გჭირდებათ — პირდაპირი გამოძახება უფრო ნათელია.
06 · სერვერლესი და strangler-fig მიგრაცია 5 წთ

სერვერების მოვლა აღარ გჭირდებათ —
და უსაფრთხო გზა მიგრაციისთვის.

სერვერლესი საშუალებას გაძლევთ ფუნქცია გაუშვათ და არა მთელი ფლოტი: პლატფორმა მას საჭიროებისამებრ უშვებს და უქმად დგომისას ნულამდე ამცირებს. და როცა საბოლოოდ მონოლითის მოდერნიზაციას გადაწყვეტთ, მას ერთი შემზარავი ნახტომით არ გადაწერთ — ნელ-ნელა შეახრჩობთ, თითო მარშრუტს ერთდროულად.

სერვერლესი / FaaS — თქვენ ფუნქციებს დეპლოით; სერვერებზე, მასშტაბირებასა და უქმად დგომის ღირებულებაზე პროვაიდერი ზრუნავს. იხდით თითო მოთხოვნასა და თითო მილიწამზე, ნულამდე მასშტაბირდებით და OS-ს არასოდეს განაახლებთ. სანაცვლოდ: ცივი გაშვებები, შესრულების ლიმიტები და ვენდორზე მიბმა.
კარგად ჯდება

პიკებიანი ან დაბალი ტრაფიკი, დამაკავშირებელი/cron დავალებები, მოვლენების დამმუშავებლები, ვებჰუკები, მსუბუქი API-ები კიდეზე.

ცუდად ჯდება

სტაბილურად მაღალი ტრაფიკი (მუდმივად ჩართულ სერვერზე იაფია), გრძელი დავალებები, ულტრადაბალი შეყოვნება, მძიმე მდგომარეობიანი დატვირთვები.

ფრთხილად

ცივი გაშვებები, ტაიმაუტები და ვენდორზე მიბმა. ფუნქციები პატარა შეინახეთ, ბიზნეს-ლოგიკა კი პროვაიდერისგან დამოუკიდებელი.

სერვერლეს პლატფორმები

AWS Lambda

აირჩიეთ, როცა AWS-ში ცხოვრობთ და მოვლენების მდიდარი წყაროები გჭირდებათ.

  • დადებითი — ყველაზე ღრმა ეკოსისტემა; AWS-ში ყველაფერთან ინტეგრირდება.
  • უარყოფითი — ცივი გაშვებები დიდ რანტაიმებზე; AWS-ზე მიბმა.
Google Cloud Functions

აირჩიეთ, როცა თქვენი მონაცემები და სტეკი უკვე GCP-ზეა.

  • დადებითი — სუფთა DX, მჭიდრო ინტეგრაცია Firebase / GCP მონაცემებთან.
  • უარყოფითი — Lambda-ზე პატარა ეკოსისტემა.
Cloudflare Workers

აირჩიეთ გლობალური, დაბალშეყოვნებიანი კიდის ლოგიკისა და მსუბუქი API-ებისთვის.

  • დადებითი — მუშაობს კიდეზე თითქმის ნულოვანი ცივი გაშვებით (V8 isolates).
  • უარყოფითი — შეზღუდული რანტაიმი; ნაგულისხმევად სრული Node არაა.
Strangler-fig მიგრაცია — ძველი სისტემის წინ დააყენეთ პროქსი და ფუნქციონალის თითო ნაჭერი ეტაპობრივად გადაამისამართეთ ახალ კოდზე, სანამ ძველ სისტემას საქმე აღარ დარჩება და არ წაიშლება. სახელი იმ მცენარისგან აქვს, რომელიც ხის გარშემო იზრდება და თანდათან ანაცვლებს მას.

ფასადი როუტებს ძველიდან ახალზე თითო ნაჭრად ინაცვლებს — ერთბაშად გადაწერის გარეშე.

რატომ დახრჩობა და არა გადაწერა

  • ყოველთვის გასაშვები — თითოეული ნაჭერი ცალკე გადის პროდაქშენში; ერთი წლით არაფერს იყინავთ.
  • შექცევადი — თუ ახალი ნაჭერი ცუდად იქცევა, ერთი კონფიგურაციის ცვლილებით ტრაფიკს ძველ სისტემას დაუბრუნებთ.
  • რისკი პატარა ულუფებად — ერთბაშად გადაწერა პროდუქტის მოკვლის კლასიკური გზაა.
  • დაიწყეთ იმ ნაჭრით, რომელიც ყველაზე მეტად გტკივათ ან ყველაზე ხშირად იცვლება — და არა ყველაზე მარტივით.
07 · სტილის არჩევა + შეჯამება 3 წთ

დაიწყეთ მარტივად. დაიმსახურეთ ყოველი
დამატებითი მოძრავი ნაწილი.

"საუკეთესო" არქიტექტურა არ არსებობს — არსებობს მხოლოდ ყველაზე იაფი, რომელიც დღევანდელ რეალურ შეზღუდვებს აკმაყოფილებს. განმეორებადი შეცდომაა განაწილებული სირთულის ვალით ყიდვა და პროცენტის სამუდამოდ გადახდა.

1ნაგულისხმევად აირჩიეთ მოდულური მონოლითი. სუფთა საზღვრები, ნულოვანი ქსელის გადასახადი. ის სწორი პასუხია გაცილებით უფრო ხშირად, ვიდრე მისი რეპუტაცია გვაფიქრებინებს.
2სერვისი მიზეზით გაყავით — დამოუკიდებელი მასშტაბირება, დეპლოი ან ხარვეზების იზოლაცია რეალური შემოსაზღვრული კონტექსტის გასწვრივ. არასოდეს "იმიტომ, რომ მიკროსერვისები".
3სინქრონული, როცა მომხმარებელი ელოდება; ასინქრონული — გასათიშად. მოვლენები მედეგობას საბოლოო თანმიმდევრულობის ფასად ყიდულობს — აირჩიეთ გაცნობიერებულად.
4შრეები მხოლოდ მაშინ დაამატეთ, როცა ისინი ქირას იხდიან. BFF — განსხვავებული კლიენტებისთვის, გეითვეი — კიდეზე განივკვეთი საქმეებისთვის, CQRS/event sourcing — აუდიტისა და ასიმეტრიისთვის; და არა ნაგულისხმევად.
5მიგრაცია დახრჩობით. თითო ნაჭერი ერთდროულად, ყოველთვის გასაშვები, ყოველთვის შექცევადი. არასოდეს დადოთ კომპანია გადაწერაზე.

60-წამიანი გზამკვლევი გადაწყვეტილებისთვის

  • ერთი გუნდი, ერთი პროდუქტი, ბუნდოვანი საზღვრები? → მონოლითი, მოდულურად შენარჩუნებული. უშვით ფუნქციონალი და არა დიაგრამები.
  • საზღვრები იკვეთება, დეპლოიზე ერთმანეთს ეჯახებით? → მოდულური მონოლითი აღსრულებული მოდულებით; გამოყავით ის ერთი მტკივნეული სერვისი.
  • განსხვავებული კლიენტები API-ს ერთმანეთს ეცილებიან? → დაამატეთ თითო BFF თითო კლიენტზე; ძირითადი სერვისები საერთო დატოვეთ.
  • ერთსა და იმავე ფაქტზე ბევრი რეაქცია ან ნახტომიანი დატვირთვა? → ამ ნაჭრებისთვის მოვლენებით მართული ან/და სერვერლესი — იხილეთ Message Queues & Streaming.
  • ძველ მონოლითში იხრჩობით? → strangler-fig, ჯერ ყველაზე რთული ნაჭერი.
ცოდნის შემოწმება

დაგამახსოვრდათ?

ხუთი სწრაფი კითხვა მონოლითებზე, BFF-ებზე, გეითვეებზე, მოვლენებსა და მიგრაციაზე — მყისიერი პასუხი, ავტორიზაციის გარეშე.

შეაფასეთ ეს დასტა
იყავით პირველი

ნავიგაცია ← → ღილაკებით ან სქროლით · უკან ბიბლიოთეკაში