ტირინერის გადასვლა კუბერნეში

დაწერილი: კრის ო’ბრაიენი, ინჟინერიის მენეჯერი | კრის ტომასი, ინჟინერიის მენეჯერი | Jinyong Le, უფროსი პროგრამული უზრუნველყოფის ინჟინერი | რედაქტირებულია: კუპერ ჯექსონი, პროგრამული უზრუნველყოფის ინჟინერი

რატომ

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

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

ეს არ იყო ადვილი ჩვენი მიგრაციის დროს, 2019 წლის დასაწყისში, ჩვენ მიაღწიეთ კრიტიკულ მასას ჩვენს Kubernetes- ის კლასტერში და დავიწყეთ სხვადასხვა გამოწვევების გამოწვევა ტრეფიკის მოცულობის, მტევნების ზომისა და DNS- ის გამო. ჩვენ გადავწყვიტეთ საინტერესო გამოწვევები 200 სერვისის მიგრაციისა და Kubernetes- ის კლასტერის მასშტაბის შესაქმნელად, რომელთა საერთო რაოდენობაა 1000 კვანძი, 15,000 ღვედი და 48,000 გაშვებული კონტეინერი.

Როგორ

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

სურათების მშენებლობა კუბერნეებისთვის

Kubernetes- ის კასეტში მიმდინარე მიკრო სერვისებისთვის არსებობს 30-ზე მეტი წყარო კოდი. ამ საცავებში კოდი იწერება სხვადასხვა ენაზე (მაგ. Node.js, Java, Scala, Go) მრავალჯერადი გაშვების გარემოში იმავე ენაზე.

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

სურათი 1–1 მშენებლობის სტანდარტიზებული პროცესი აღმაშენებლის კონტეინერის მეშვეობით

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

აღმაშენებლის კონტეინერის განხორციელებას მოითხოვს მოწინავე დოქერის ტექნიკა. ეს აღმაშენებლის კონტეინერი მემკვიდრეობს ადგილობრივი მომხმარებლის პირადობის მოწმობას და საიდუმლოებას (მაგ., SSH ღილაკს, AWS სერთიფიკატს და ა.შ.), როგორც საჭიროა Tinder კერძო საცავებში შესასვლელად. იგი დამონტაჟებულია ადგილობრივ დირექტორიებში, რომლებიც შეიცავს კოდს, რომ ჰქონდეს ბუნებრივი საშუალება, რომ შეაგროვოთ ნივთები. ეს მიდგომა აუმჯობესებს შესრულებას, რადგან ეს გამორიცხავს აშენებული ნივთების კოპირებას აღმაშენებლის კონტეინერსა და მასპინძელ აპარატს შორის. შენახული აშენებული ნიმუშების ხელახლა გამოყენება ხდება შემდგომში, დამატებითი კონფიგურაციის გარეშე.

გარკვეული სერვისებისთვის, ჩვენ გვჭირდებოდა Builder- ში კიდევ ერთი კონტეინერის შექმნა, რათა შევადგინოთ დროითი გარემო და დროშესაფარი გარემო (მაგ. Node.js. Bcrypt ბიბლიოთეკის დაყენება ქმნის პლატფორმის სპეციფიკურ ბინარულ არტეფაქტებს). დროის შედგენის მოთხოვნები შეიძლება განსხვავდებოდეს სერვისებს შორის და საბოლოო დოქერფილი დამზადებულია ფრენაზე.

Kubernetes კასეტური არქიტექტურა და მიგრაცია

კასეტური ზომის

გადავწყვიტეთ, რომ გამოვიყენოთ kube-aws ავტომატური კლასტერების უზრუნველყოფისთვის Amazon EC2 ინსტანციებზე. ადრე, ჩვენ ყველაფერს ვატარებდით ერთი ზოგადი კვანძის აუზში. ჩვენ სწრაფად დავადგინეთ სამუშაო დატვირთვის დაყოფა სხვადასხვა ზომის და ტიპის ინსტანციებში, რესურსების უკეთ გამოყენების მიზნით. დასაბუთება იყო იმაში, რომ ნაკლები დატვირთული ძირები ერთად გაშვებამ ჩვენთან შედარებით უფრო პროგნოზირებადი შედეგების შედეგი გამოიღო, ვიდრე მათთან ერთად თანაარსებობამ უფრო მეტი რაოდენობის ერთჯერადი ძირები აიღო.

ჩვენ დავსახლდით:

  • m5.4xlarge მონიტორინგისთვის (პრომეთე)
  • c5.4xlarge for Node.js დატვირთვისთვის (ერთ თემატური დატვირთვა)
  • c5.2xlarge for Java და Go (მრავალ თემატური დატვირთვა)
  • c5.4x გაფართოება საკონტროლო თვითმფრინავისთვის (3 კვანძი)

მიგრაცია

ჩვენი მემკვიდრეობითი ინფრასტრუქტურადან კუბერნეტში მიგრაციის ერთ-ერთი მოსამზადებელი ნაბიჯი იყო არსებული სერვისა და სერვისის კომუნიკაციის შეცვლა, რათა აღვნიშნოთ ახალი ელასტიური დატვირთვის ბალანსები (ELBs), რომლებიც შეიქმნა სპეციფიკური ვირტუალური პირადი ღრუბლის (VPC) ქვეტექსტში. ეს ქვეტექსტი ეწოდა Kubernetes VPC- ს. ეს საშუალებას მოგვცემდა მარცვლოვანი მიგრირებულიყო მოდულები, რომ არ განეხორციელებინათ მომსახურების საიმედოობის სპეციფიკური წესრიგი.

ეს ბოლო პუნქტები შეიქმნა შეწონილი DNS ჩანაწერის გამოყენებით, რომელსაც CNAME ჰქონდა თითოეული ახალი ELB. ამის დასამატებლად, ჩვენ დავამატეთ ახალი ჩანაწერი, სადაც მიუთითებს Kubernetes- ის ახალი სერვისი ELB, რომლის წონაა 0. ჩვენ შემდეგ ჩაწერეთ Time To Live (TTL) ჩანაწერზე. 0. ძველი და ახალი წონა შემდეგ ნელა შეცვალეს საბოლოოდ, 100% შევა ახალ სერვერზე. მოჭრის დასრულების შემდეგ, TTL დასახელდა რაღაც უფრო გონივრულად.

ჩვენი ჯავის მოდულებმა პატივი მიაგეს DNS TTL– ს დაბალი დონის, მაგრამ ჩვენი კვანძის პროგრამებში ეს არ მოხდა. ერთ-ერთმა ინჟინერმა გადაწერა დაუკავშირდა აუზის კოდის ნაწილს, რომ იგი მენეჯერი გახადოს, რომელიც აუზებს განახლებდა ყოველ 60-იან წლებში. ამან ძალიან კარგად იმუშავა ჩვენთვის.

სწავლა

ქსელის ქსოვილის შეზღუდვები

2019 წლის 8 იანვრის დილის დილის საათებში ტაინერის პლატფორმა დაჟინებით განიცდიდა. საპასუხოდ, პლატფორმის შეფერხების არარსებობის მატებასთან დაკავშირებით, დილით ადრე, ბოძზე და კვანძზე ითვლიდა კლასტერზე. ამან გამოიწვია ARP- ის ქეში ამოწურვა ყველა ჩვენს კვანძზე.

ARP- ს ქეშის შესაბამისი სამი Linux მნიშვნელობა:

კრედიტი

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

ჩვენ ვიყენებთ Flannel- ს, როგორც ჩვენს ქსელურ ქსოვილს Kubernetes- ში. პაკეტების გაგზავნა ხდება VXLAN- ის საშუალებით. VXLAN არის Layer 2 გადახურვის სქემა Layer 3 ქსელზე. იგი იყენებს MAC- ის მომხმარებლების მონაცემთა დიაგრამის პროტოკოლის (MAC- ინ-UDP) კაფსულაციას, რათა უზრუნველყოს Layer 2 ქსელის სეგმენტების გაფართოების საშუალება. ფიზიკური მონაცემების ცენტრის ქსელში ტრანსპორტის პროტოკოლი არის IP plus UDP.

სურათი 2–1 ფლანელის დიაგრამა (კრედიტი)

სურათი 2–2 VXLAN პაკეტი (კრედიტი)

Kubernetes- ის თითოეული მუშათა კვანძი გამოყოფს საკუთარ / 24 ვირტუალურ მისამართთა ადგილს უფრო დიდი / 9 ბლოკიდან. თითოეული კვანძისთვის, ეს შედეგია 1 მარშრუტის ცხრილის შესვლის, 1 ARP ცხრილის შესვლის (flannel.1 ინტერფეისზე) და 1 მონაცემთა გადაცემის მონაცემთა ბაზაში (FDB) შესვლის შესახებ. ეს ემატება იმ დროს, როდესაც მუშათა კვანძი პირველად იწყებს ან როგორც ყველა ახალ კვანძს აღმოაჩენენ.

გარდა ამისა, კვანძ-ბოძზე (ან pod-to-pod) კომუნიკაცია საბოლოოდ მიედინება eth0 ინტერფეისზე (გამოსახულია ფლანის დიაგრამის ზემოთ). ეს გამოიწვევს ARP ცხრილში დამატებით შესვლას თითოეული შესაბამისი კვანძის წყაროსა და კვანძის დანიშნულების ადგილისთვის.

ჩვენს გარემოში, ამ ტიპის კომუნიკაცია ძალიან ხშირია. ჩვენი Kubernetes სერვისის ობიექტებისთვის იქმნება ELB და Kubernetes რეგისტრაციას უწევს ყველა კვანძს ELB- სთან. ELB არ არის ცნობილი და არჩეული კვანძი შეიძლება არ იყოს პაკეტის საბოლოო დანიშნულების ადგილი. ეს იმიტომ ხდება, რომ როდესაც კვანძი ELB- სგან იღებს პაკეტს, იგი აფასებს მომსახურების შესახებ მის iptables წესებს და სხვა კვანძზე შემთხვევით ირჩევს pod- ს.

წყვეტის დროს მტევანში 605 სულ კვანძი იყო. ზემოთ ჩამოთვლილი მიზეზების გამო, ეს საკმარისი იყო, რათა შეცვალოთ ნაგულისხმევი gc_thresh3 მნიშვნელობა. როდესაც ეს მოხდება, არა მხოლოდ პაკეტების ჩამოშვება ხდება, არამედ ვირტუალური მისამართების სივრცის მთელი Flannel / 24- ები დაკარგული ARP ცხრილიდან. კომუნიკაციის კვანძთან და DNS- ს ჩხრეკა ვერ ხერხდება. (DNS მასპინძლობს კლასტერში, რაც უფრო დეტალურად იქნება აღწერილი ამ სტატიაში შემდეგში.)

გადასაჭრელად, gc_thresh1, gc_thresh2 და gc_thresh3 მნიშვნელობები წამოიჭრა და ფლენელი უნდა გადატვირთულიყო, რომ დაკარგული ქსელები ხელახლა დაარეგისტრიროთ.

მოულოდნელად გაშვებული DNS მასშტაბით

ჩვენი მიგრაციის მოსაწყობად, ჩვენ DNS ძლიერად გამოვიყენეთ ტრეფიკის ფორმირება და მემკვიდრეობიდან Kubernetes- ის დამატებითი გადასვლა, ჩვენი მომსახურებისთვის. ჩვენ დავაყენეთ შედარებით დაბალი TTL მნიშვნელობები დაკავშირებულ Route53 ჩანაწერების კომპლექტზე. როდესაც ჩვენ დავტოვეთ ჩვენი მემკვიდრეობის ინფრასტრუქტურა EC2 შემთხვევებში, ჩვენმა რეზოლუციურმა კონფიგურაციამ მიუთითა ამაზონის DNS. ეს ჩვენთვის სათანადოდ მივიღეთ და შედარებით დაბალი TTL- ს ღირებულება ჩვენი მომსახურებებისა და Amazon- ის სერვისებისთვის (მაგ. DynamoDB) ძირითადად შეუმჩნეველი დარჩა.

როდესაც მივადექით Kubernetes- ს უფრო და უფრო მეტ მომსახურებას, აღმოვაჩინეთ DNS სერვისი, რომელსაც პასუხობდა წამში 250,000 მოთხოვნაზე. ჩვენს აპლიკაციებში ვხვდებოდით წყვეტილი და გავლენიანი DNS საძიებო პერიოდებს. ეს მოხდა იმის მიუხედავად, რომ ამომწურავი შერწყმის მცდელობა და DNS პროვაიდერი გადავიდა CoreDNS განლაგებაზე, რომელიც ერთ დროს პიკს აღწევდა 1000 ძირზე და მოიხმარდა 120 ბირთვს.

სხვა შესაძლო მიზეზებისა და გადაწყვეტილებების კვლევისას, ჩვენ აღმოვაჩინეთ სტატია, რომელიც აღწერს რასის მდგომარეობას, რომელიც გავლენას ახდენს Linux პაკეტის ფილტრაციის ჩარჩო ნაფილტრზე. DNS ვადის ამოღების ჩვენ ვხედავდით, ერთად დამატებით insert_failed counter Flannel ინტერფეისი, რომელიც შეესაბამება სტატიის დასკვნებს.

ეს საკითხი ხდება წყარო და დანიშნულების ქსელის მისამართის თარგმნის დროს (SNAT და DNAT) და შემდგომში საკონტროლო ცხრილში ჩასმისას. შინაგანად განსახილველად და საზოგადოების მიერ შემოთავაზებული ერთი გზა იყო DNS გადატანა თავად მუშა კვანძზე. Ამ შემთხვევაში:

  • SNAT არ არის აუცილებელი, რადგან ტრეფიკი ადგილობრივად რჩება კვანძზე. მას არ სჭირდება გადაცემა ეთ0-ის ინტერფეისით.
  • DNAT არ არის აუცილებელი, რადგან დანიშნულების IP არის კვანძის ადგილობრივი და არა შემთხვევით შერჩეული pod თითო iptables წესები.

ამ მიდგომით გადავწყვიტეთ წინსვლა. CoreDNS განლაგდა, როგორც DaemonSet, Kubernetes- ში და ჩვენ ჩასვით კვანძის ადგილობრივი DNS სერვერი თითოეულ pod- ს rezv.conf- ში kubelet - cluster-dns ბრძანების დროშის კონფიგურაციით. გამოსწორება ეფექტური იყო DNS- ის გამოსვლისთვის.

ამასთან, ჩვენ ჯერ კიდევ ვხედავთ ჩამოგდებულ პაკეტებს და Flannel ინტერფეისის insert_failed counter ატრიმენტს. ეს გაგრძელდება ზემოაღნიშნული გამოსვლის შემდეგაც კი, რადგან ჩვენ თავიდან ავიცილოთ SNAT ან / და DNAT DNS ტრეფიკისთვის. რასის მდგომარეობა კვლავ მოხდება სხვა ტიპის ტრაფიკისთვის. საბედნიეროდ, ჩვენი პაკეტების უმეტესი ნაწილი არის TCP და როდესაც მდგომარეობა ვითარდება, პაკეტების წარმატებით გადაცემა ხდება. გრძელვადიანი დაფიქსირება ყველა ტიპის ტრაფიკისთვის არის ის, რასაც ჯერ კიდევ განვიხილავთ.

დესპანის გამოყენება უკეთესი დატვირთვის დაბალანსების მისაღწევად

როდესაც ჩვენ გადავსახლეთ ჩვენი უკანა სერვისები კუბერნეზში, ჩვენ დავიწყეთ ტანჯვის გამო დაუბალანსებელი დატვირთვა. ჩვენ აღმოვაჩინეთ, რომ HTTP Keepalive- ის გამო, ELB კავშირები ჩერდებოდა თითოეული მოძრავი განლაგების პირველ მზა ღილაკზე, ამიტომ უმეტესობა ტრეფიკი მიედინებოდა ხელმისაწვდომი პოდების მცირე პროცენტში. ერთ-ერთი პირველი შემსუბუქება, რომელიც შევეცადეთ, გამოიყენეთ 100% MaxSurge ახალ განლაგებაზე ყველაზე უარესი დამნაშავეებისთვის. ეს იყო ზღვრულად ეფექტური და არა მდგრადი გრძელვადიანი პერსპექტივით ზოგიერთ უფრო მსხვილ განლაგებასთან.

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

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

კონფიგურაცია ჩვენ მივიღეთ, რომ თითოეულ ბოძთან ერთად გვქონოდა ყოფილიყო დესპანის გვერდი, რომელსაც ერთი მარშრუტი და კასეტური უნდა ჰქონოდა, რათა მოეტყუებინა ადგილობრივი კონტეინერის პორტში. პოტენციური კასკადობის შესამცირებლად და მცირე აფეთქების რადიუსის შესანარჩუნებლად, ჩვენ გამოვიყენეთ ფრონტის მარიონეტული დესპანის საყრდენი ფლოტი, თითო განლაგება თითო განაწილების ზონაში (AZ) თითოეული მომსახურებისთვის. ამ ჩვენს პატარა ინჟინერთა მექანიზმმა დაარღვია მცირე ზომის მომსახურების აღმოჩენის მექანიზმი, რომელმაც უბრალოდ უკან დააბრუნა თითოეულ ყბაყაში მოცემული მონაცემების სია.

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

განლაგების მიზნით, ჩვენ გამოვიყენეთ preStop Hook როგორც აპლიკაციურ, ისე გვერდიგვერდზე. ამ კაკლს, რომელსაც ეწოდება sidecar ჯანმრთელობის შემოწმება, ვერ ახერხებს ადმინისტრატორი, მცირე ძილით, გარკვეული დრო დაუთმოს, რომ ინფლაციის კავშირები დასრულდეს და გადინება.

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

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

დიაგრამა 3–1 პროცესორის კონვერგენცია ერთ – ერთი სერვისის დესპანზე გადასვლის დროს

საბოლოო შედეგი

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

ჩვენს მემკვიდრეობის ინფრასტრუქტურაზე, როდესაც დამატებითი მასშტაბის გაკეთება იყო საჭირო, ჩვენ ხშირად ვიტანჯეთ რამდენიმე წუთის განმავლობაში, როდესაც ველოდებოდით ახალი EC2 ინსტანციის ინტერნეტით შემოსვლას. კონტეინერები ახლა დაგეგმეს და ემსახურებიან ტრაფიკს წამში, წუთების საპირისპიროდ. მრავალჯერადი კონტეინერის დანიშვნა ერთჯერადი EC2 მაგალითისთვის ასევე უზრუნველყოფს ჰორიზონტალური სიმკვრივის გაუმჯობესებას. შედეგად, ჩვენ 2019 წელს ვაფორმებთ ხარჯების მნიშვნელოვან დაზოგვას EC2- ზე, წინა წელთან შედარებით.

თითქმის ორი წელი დასჭირდა, მაგრამ ჩვენ გადავწყვიტეთ ჩვენი მიგრაცია 2019 წლის მარტში. Tinder პლატფორმა ექსკლუზიურად ხდება კუბერნეტის კლასტერზე, რომელიც მოიცავს 200 მომსახურებას, 1000 კვანძს, 15,000 ბოძს და 48000 გაშვებულ კონტეინერს. ინფრასტრუქტურა აღარ არის ჩვენი ოპერაციული ჯგუფებისთვის დაცული ამოცანა. ამის ნაცვლად, ინჟინრები მთელს ორგანიზაციაში იზიარებენ ამ პასუხისმგებლობას და აქვთ კონტროლი იმაზე, თუ როგორ აშენებენ და იყენებენ პროგრამებს, როგორც ყველაფერ კოდს.

Იხილეთ ასევე

როგორ შეაჩერეთ ვინმემ Instagram- ზე შენი მოხსენიება?შეყვარებულს თავის Snapchat- ზე ბიჭი ეჯახება. მან მოიგო იგი ან უთხრა მას ჩემი თხოვნით უკან დაეხია, ასე რომ მე პირადი გაგზავნა მას Instagram– ზე და ვუთხარი მას ყველა კონტაქტის შეწყვეტა. ახლა ის გიჟდება და გიჟდება. ვინ მართალია?ხართ სტრესი თქვენი SnapChat- ის სტრიქონების გამო? რატომ გსურთ მათი შენარჩუნება?როგორ გამოვიყენო Instagram BioLink ფულის გამომუშავების მიზნით?რატომ შემიძლია გამოვაქვეყნო \ u201c ვუყურო \ u201d Instagram- ის ისტორიებს?არსებობს გამოსავალი, რომ გამორთოთ ხმოვანი შეტყობინებები WhatsApp- ზე ავტომატურად გადმოტვირთვისგან? თუ დიახ, რა არის ამის გაკეთება?უნდა გამოვტოვო ჩემი ყოფილი, როგორც მიმდევარი Instagram- დან? უბრალოდ აღმოვაჩინე, რომ ეს შესაძლებელი იყო. გრძელი მოთხრობა მოკლედ: ეს იყო ცივი დაშლა და ჩვენ მას შემდეგ აღარ ვლაპარაკობდით (თითქმის 3 წელი). რომელი უფრო მეტად დააზარალებს მას: ის განახლებულია ჩემს ცხოვრებაზე, ან მოწყვეტით?როგორ ვუყურო ვინმეს \ u2019s Instagram- ის შეტყობინებები Android- ზე?