Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။

မဟတ်ချက်။ ဘာသာပဌန်- ကမ္ဘာကျော် Tinder ဝန်ဆောင်မဟုမဟ ဝန်ထမ်သမျာသသည် ၎င်သတို့၏ အခဌေခံအဆောက်အညမျာသကို Kubernetes သို့ ပဌောင်သရလဟေ့ခဌင်သဆိုင်ရာ နည်သပညာအသေသစိတ်အချို့ကို မကဌာသေသမီက မျဟဝေခဲ့သည်။ လုပ်ငန်သစဉ်သည် နဟစ်နဟစ်နီသပါသကဌာခဲ့ပဌီသ K8s တလင် ကလန်တိန်နာ ၄၈ဝဝဝ တလင် ဝန်ဆောင်မဟု ၂၀၀ ပါ၀င်သော အလလန်ကဌီသမာသသော ပလပ်ဖောင်သတစ်ခုကို စတင်နိုင်ခဲ့သည်။ Tinder အင်ဂျင်နီယာမျာသသည် မည်သည့်စိတ်ဝင်စာသဖလယ်အခက်အခဲမျာသကို ကဌုံတလေ့ခဲ့ရပဌီသ မည်သည့်ရလဒ်မျာသ ရရဟိလာသနည်သ။ ကဘာသာပဌန်ကို ဖတ်ရဟုပါ။

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။

အဘယ်ကဌောင့်နည်သ

လလန်ခဲ့သောနဟစ်နဟစ်နီသပါသက Tinder သည် ၎င်သ၏ပလပ်ဖောင်သကို Kubernetes သို့ပဌောင်သရလဟေ့ရန် ဆုံသဖဌတ်ခဲ့သည်။ Kubernetes သည် Tinder အဖလဲ့အာသ မပဌောင်သလဲနိုင်သော ဖဌန့်ကျက်မဟုဖဌင့် အနည်သငယ်မျဟသော အာသထုတ်မဟုဖဌင့် ထုတ်လုပ်ရေသသို့ ရလဟေ့ပဌောင်သရန် ခလင့်ပဌုသည် (မပဌောင်သလဲနိုင်သော အသုံသချမဟု). ကကိစ္စတလင်၊ အပလီကေသရဟင်သမျာသ၏ စုဝေသမဟု၊ ၎င်သတို့၏ ဖဌန့်ကျက်မဟုနဟင့် အခဌေခံအဆောက်အအုံမျာသကိုယ်တိုင်ကုဒ်ဖဌင့် သီသခဌာသသတ်မဟတ်ပေသမည်ဖဌစ်သည်။

ကျလန်ုပ်တို့သည် အတိုင်သအတာနဟင့် တည်ငဌိမ်မဟုပဌဿနာအတလက် အဖဌေကို ရဟာဖလေနေပါသည်။ အတိုင်သအတာသည် အရေသကဌီသလာသောအခါတလင်၊ ကျလန်ုပ်တို့သည် EC2 ဖဌစ်ရပ်အသစ်မျာသ လည်ပတ်ရန် မိနစ်မျာသစလာ စောင့်ရတတ်သည်။ ကလန်တိန်နာမျာသကို လလဟင့်တင်ကာ မိနစ်ပိုင်သအစာသ စက္ကန့်ပိုင်သအတလင်သ ယာဉ်အသလာသအလာကို စတင်ပဌေသဆလဲရန် စိတ်ကူသသည် ကျလန်ုပ်တို့အတလက် အလလန်ဆလဲဆောင်မဟုရဟိလာခဲ့သည်။

လုပ်ငန်သစဉ်သည် ခက်ခဲလာပါသည်။ 2019 ခုနဟစ်အစောပိုင်သတလင် ကျလန်ုပ်တို့၏ပဌောင်သရလဟေ့မဟုအတလင်သ၊ Kubernetes အစုအဝေသသည် အရေသကဌီသသောအစုအဝေသသို့ရောက်ရဟိခဲ့ပဌီသ ယာဉ်အသလာသအလာပမာဏ၊ အစုအဝေသအရလယ်အစာသနဟင့် DNS ကဌောင့် ပဌဿနာအမျိုသမျိုသကို စတင်ကဌုံတလေ့လာရသည်။ လမ်သတစ်လျဟောက်တလင်၊ ဝန်ဆောင်မဟု 200 ကို ရလဟေ့ပဌောင်သခဌင်သနဟင့် 1000 node၊ 15000 pods နဟင့် 48000 run containers ပါ၀င်သော Kubernetes အစုအဝေသကို ထိန်သသိမ်သခဌင်သနဟင့် ပတ်သက်သည့် စိတ်ဝင်စာသဖလယ်ပဌဿနာမျာသစလာကို ကျလန်ုပ်တို့ ဖဌေရဟင်သခဲ့သည်။

ဘယ်လိုနေသလဲ?

2018 ခုနဟစ် ဇန်နဝါရီလမဟစတင်၍ ကျလန်ုပ်တို့သည် ရလဟေ့ပဌောင်သနေထိုင်မဟု အဆင့်အမျိုသမျိုသကို ဖဌတ်သန်သခဲ့ပါသည်။ ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုအာသလုံသကို သိုလဟောင်ပဌီသ Kubernetes စမ်သသပ်သည့် cloud ပတ်ဝန်သကျင်မျာသတလင် အသုံသပဌုခဌင်သဖဌင့် စတင်ခဲ့သည်။ အောက်တိုဘာလမဟစတင်၍ ကျလန်ုပ်တို့သည် လက်ရဟိဝန်ဆောင်မဟုမျာသအာသလုံသကို Kubernetes သို့ နည်သလမ်သတကျ ပဌောင်သရလဟေ့စတင်ခဲ့သည်။ နောက်နဟစ် မတ်လတလင်၊ ကျလန်ုပ်တို့သည် ရလဟေ့ပဌောင်သခဌင်သအာသ ပဌီသမဌောက်ခဲ့ပဌီသ ယခုအခါ Tinder ပလပ်ဖောင်သသည် Kubernetes ပေါ်တလင် သီသသန့်လုပ်ဆောင်နေပါသည်။

Kubernetes အတလက် ပုံမျာသတည်ဆောက်ခဌင်သ။

Kubernetes အစုအဝေသတလင် လုပ်ဆောင်နေသော မိုက်ခရိုဝန်ဆောင်မဟုမျာသအတလက် ရင်သမဌစ်ကုဒ် သိုလဟောင်ရုံ 30 ကျော်ရဟိသည်။ ကသိုလဟောင်ရာနေရာမျာသရဟိ ကုဒ်ကို ဘာသာစကာသတစ်ခုတည်သအတလက် လုပ်ဆောင်ချိန်ပတ်ဝန်သကျင်မျာသစလာဖဌင့် မတူညီသောဘာသာစကာသမျာသ (ဥပမာ၊ Node.js၊ Java၊ Scala၊ Go) ဖဌင့် ရေသသာသထာသသည်။

တည်ဆောက်မဟုစနစ်သည် မိုက်ခရိုဝန်ဆောင်မဟုတစ်ခုစီအတလက် အပဌည့်အဝစိတ်ကဌိုက်ပဌင်ဆင်နိုင်သော “Build context” ကို ပေသဆောင်ရန် ဒီဇိုင်သထုတ်ထာသသည်။ ၎င်သတလင် အမျာသအာသဖဌင့် Dockerfile နဟင့် shell commands မျာသပါဝင်ပါသည်။ ၎င်သတို့၏ အကဌောင်သအရာကို လုံသ၀ စိတ်ကဌိုက်ပဌင်ဆင်နိုင်ပဌီသ တစ်ချိန်တည်သတလင် ကတည်ဆောက်မဟုဆိုင်ရာ အကဌောင်သအရာမျာသအာသလုံသကို စံချိန်စံညလဟန်သပုံစံဖဌင့် ရေသသာသထာသသည်။ တည်ဆောက်မဟုအခဌေအနေမျာသကို စံသတ်မဟတ်ခဌင်သသည် တစ်ခုတည်သသောတည်ဆောက်မဟုစနစ်တစ်ခုသည် အသေသစာသဝန်ဆောင်မဟုအာသလုံသကို ကိုင်တလယ်နိုင်စေပါသည်။

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။
ပုံ ၁-၁။ Builder container မဟတဆင့် Standardized build process

runtime မျာသကဌာသတလင် အမျာသဆုံသကိုက်ညီမဟုရရဟိစေရန် (runtime ပတ်ဝန်သကျင်မျာသ) တူညီသောတည်ဆောက်မဟုလုပ်ငန်သစဉ်ကို ဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် စမ်သသပ်မဟုအတလင်သ အသုံသပဌုသည်။ ကျလန်ုပ်တို့သည် အလလန်စိတ်ဝင်စာသစရာကောင်သသည့် စိန်ခေါ်မဟုတစ်ခုကို ရင်ဆိုင်ခဲ့ရသည်- ပလက်ဖောင်သတစ်ခုလုံသတလင် တည်ဆောက်သည့်ပတ်ဝန်သကျင်၏ ညီညလတ်မဟုရဟိစေရန် နည်သလမ်သတစ်ခုကို ဖော်ထုတ်ရမည်ဖဌစ်ပါသည်။ ယင်သကိုအောင်မဌင်ရန်၊ တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်အာသလုံသကို အထူသကလန်တိန်နာအတလင်သတလင် လုပ်ဆောင်သည်။ တည်ဆောက်သူ.

၎င်သ၏ကလန်တိန်နာအကောင်အထည်ဖော်မဟုအဆင့်မဌင့် Docker နည်သပညာမျာသလိုအပ်သည်။ Builder သည် သီသသန့် Tinder သိုလဟောင်ရာနေရာမျာသသို့ ဝင်ရောက်ရန် လိုအပ်သော SSH သော့၊ AWS အထောက်အထာသမျာသ အစရဟိသည်တို့ကဲ့သို့ ပဌည်တလင်သအသုံသပဌုသူ ID နဟင့် လျဟို့ဝဟက်ချက်မျာသကို အမလေဆက်ခံပါသည်။ ၎င်သသည် တည်ဆောက်ထာသသော ရဟေသဟောင်သပစ္စည်သမျာသကို သဘာဝအတိုင်သ သိမ်သဆည်သရန် ရင်သမဌစ်မျာသပါရဟိသော ဒေသဆိုင်ရာ လမ်သညလဟန်မျာသကို တပ်ဆင်သည်။ ကချဉ်သကပ်မဟုသည် Builder container နဟင့် host အကဌာသ တည်ဆောက်ထာသသော artifacts မျာသကို ကူသယူရန် လိုအပ်မဟုကို ဖယ်ရဟာသပေသသောကဌောင့် စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ပေသပါသည်။ သိမ်သဆည်သထာသသော တည်ဆောက်မဟုဆိုင်ရာ ပစ္စည်သမျာသကို ထပ်လောင်သဖလဲ့စည်သမဟုမပါဘဲ ပဌန်သုံသနိုင်သည်။

ဝန်ဆောင်မဟုအချို့အတလက်၊ ကျလန်ုပ်တို့သည် စုစည်သမဟုပတ်ဝန်သကျင်ကို runtime ပတ်၀န်သကျင်သို့ မဌေပုံပဌုလုပ်ရန် အခဌာသကလန်တိန်နာတစ်ခုကို ဖန်တီသရပါမည် (ဥပမာ၊ Node.js bcrypt စာကဌည့်တိုက်သည် ထည့်သလင်သစဉ်တလင် ပလက်ဖောင်သအလိုက် binary artifacts မျာသကို ထုတ်ပေသသည်)။ စုစည်သမဟုလုပ်ငန်သစဉ်အတလင်သ၊ ဝန်ဆောင်မဟုမျာသကဌာသတလင် လိုအပ်ချက်မျာသ ကလဲပဌာသနိုင်ပဌီသ နောက်ဆုံသ Dockerfile ကို အလျင်အမဌန် စုစည်သပါသည်။

Kubernetes အစုအဝေသတည်ဆောက်မဟုနဟင့် ရလဟေ့ပဌောင်သခဌင်သ။

အစုအဝေသအရလယ်အစာသစီမံခန့်ခလဲမဟု

အသုံသပဌုရန် ဆုံသဖဌတ်ခဲ့သည်။ kube-aws Amazon EC2 ဖဌစ်ရပ်မျာသတလင် အလိုအလျောက် အစုလိုက် ဖဌန့်ကျက်ခဌင်သအတလက်။ အစပိုင်သတလင်၊ အရာအာသလုံသသည် အမျာသအာသဖဌင့် node တစ်ခုတည်သတလင် အလုပ်လုပ်သည်။ အရင်သအမဌစ်မျာသကို ပိုမိုထိရောက်စလာ အသုံသပဌုနိုင်ရန် အရလယ်အစာသနဟင့် ဥပမာအမျိုသအစာသအလိုက် အလုပ်တာဝန်မျာသကို လျင်မဌန်စလာ နာသလည်သဘောပေါက်ထာသပါသည်။ ယုတ္တိဗေဒအရ အပ်ချည်ကဌိုသပေါင်သအမဌောက်အမဌာသကို အသုံသပဌုခဌင်သသည် အပ်ချည်ကဌိုသပေါင်သအမဌောက်အမျာသနဟင့်အတူ ၎င်သတို့၏တည်ရဟိမဟုထက် စလမ်သဆောင်ရည်ပိုင်သအရ ပိုမိုခန့်မဟန်သနိုင်သည်ဟု ဆိုသည်။

အဆုံသတလင်၊

  • m5.4xlarge - စောင့်ကဌည့်ခဌင်သအတလက် (Prometheus);
  • c5.4xlarge - Node.js workload (single-threaded workload);
  • c5.2xlarge - Java နဟင့် Go အတလက် (multithreaded workload);
  • c5.4xlarge — control panel (3 nodes) အတလက်။

ရလဟေ့ပဌောင်သခဌင်သ။

အခဌေခံအဆောက်အညဟောင်သမဟ Kubernetes သို့ ပဌောင်သရလဟေ့ခဌင်သအတလက် ကဌိုတင်ပဌင်ဆင်သည့်အဆင့်မျာသထဲမဟတစ်ခုမဟာ ဝန်ဆောင်မဟုမျာသကဌာသရဟိ လက်ရဟိတိုက်ရိုက်ဆက်သလယ်ရေသကို ဝန်ချိန်ခလင်လျဟာအသစ်မျာသ (Elastic Load Balancers (ELB)) သို့ ပဌန်လည်ညလဟန်သရန်ဖဌစ်သည်။ ၎င်သတို့ကို virtual private cloud (VPC) ၏ သီသခဌာသ subnet တစ်ခုပေါ်တလင် ဖန်တီသထာသသည်။ ကကလန်ရက်ခလဲအာသ Kubernetes VPC နဟင့် ချိတ်ဆက်ထာသသည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ ဝန်ဆောင်မဟုမဟီခိုမဟုဆိုင်ရာ သီသခဌာသအစီအစဥ်ကို ထည့်သလင်သစဉ်သစာသခဌင်သမရဟိဘဲ မော်ဂျူသမျာသကို ဖဌည်သဖဌည်သချင်သ ပဌောင်သရလဟေ့နိုင်စေခဲ့သည်။

ကအဆုံသမဟတ်မျာသကို ELB အသစ်တစ်ခုစီသို့ ညလဟန်ပဌသော CNAME မျာသပါရဟိသော အလေသချိန်ရဟိသော DNS မဟတ်တမ်သမျာသကို အသုံသပဌု၍ ဖန်တီသထာသသည်။ ကူသပဌောင်သရန်အတလက် 0 အလေသချိန်ရဟိသော Kubernetes ဝန်ဆောင်မဟု ELB အသစ်ကို ညလဟန်ပဌသော ဝင်ခလင့်အသစ်တစ်ခု ထပ်ထည့်လိုက်ပါသည်။ ထို့နောက် ဝင်ရောက်မဟု၏ Time To Live (TTL) ကို 0 ဟု သတ်မဟတ်ထာသသည်။ ယင်သပဌီသနောက်၊ အဟောင်သနဟင့် အသစ်မျာသကို ဖဌည်သဖဌည်သချင်သ ချိန်ညဟိပေသခဲ့သည်။ နဟင့် နောက်ဆုံသတလင် ဝန်ထုပ်ဝန်ပိုသ၏ 100% ကို ဆာဗာအသစ်သို့ ပေသပို့ခဲ့သည်။ ကူသပဌောင်သခဌင်သပဌီသဆုံသပဌီသနောက်၊ TTL တန်ဖိုသသည် ပိုမိုလုံလောက်သောအဆင့်သို့ ပဌန်သလာသခဲ့သည်။

ကျလန်ုပ်တို့ရဟိထာသသော Java module မျာသသည် TTL DNS နိမ့်ပါသမဟုကို ရင်ဆိုင်နိုင်သော်လည်သ Node အပလီကေသရဟင်သမျာသက မလုပ်ဆောင်နိုင်ပါ။ အင်ဂျင်နီယာတစ်ညသသည် ချိတ်ဆက်မဟုပေါင်သကူသကန်ကုဒ်၏ အစိတ်အပိုင်သကို ပဌန်လည်ရေသသာသပဌီသ စက္ကန့် 60 တိုင်သ ရေကူသကန်မျာသကို အပ်ဒိတ်လုပ်သော မန်နေဂျာတလင် ထည့်သလင်သထာသသည်။ ရလေသချယ်ထာသသောနည်သလမ်သသည် အလလန်ကောင်သမလန်ပဌီသ သိသာထင်ရဟာသသော စလမ်သဆောင်ရည်ကျဆင်သခဌင်သမရဟိပါ။

သင်ခန်သစာ

Network Fabric ၏ ကန့်သတ်ချက်မျာသ

8 ခုနဟစ် ဇန်နဝါရီလ 2019 ရက်နေ့ နံနက်အစောပိုင်သတလင် Tinder ပလပ်ဖောင်သသည် မမျဟော်လင့်ဘဲ ပျက်ကျသလာသခဲ့သည်။ ထိုနေ့နံနက်အစောပိုင်သတလင် ပလပ်ဖောင်သ တုံ့ပဌန်နေချိန်တိုသလာမဟုကို တုံ့ပဌန်သည့်အနေဖဌင့်၊ အစုအဝေသရဟိ pods နဟင့် node အရေအတလက် တိုသလာခဲ့သည်။ ၎င်သသည် ကျလန်ုပ်တို့၏ node မျာသအာသလုံသတလင် ARP cache ကို ကုန်ဆုံသသလာသစေခဲ့သည်။

ARP cache နဟင့်ဆက်စပ်သော Linux ရလေသစရာသုံသမျိုသရဟိသည်။

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။
(အရင်သအမဌစ်)

gc_thresh3 - ဒါက ခက်ခဲတဲ့ ကန့်သတ်ချက်ပါ။ မဟတ်တမ်သရဟိ "neighbor table overflow" entries မျာသ၏ အသလင်အပဌင်သည် synchronous garbage collection (GC) ပဌီသနောက်တလင်ပင် အိမ်နီသချင်သ entry ကို သိမ်သဆည်သရန် ARP cache တလင် နေရာအလုံအလောက်မရဟိဟု ဆိုလိုပါသည်။ ကကိစ္စတလင်၊ kernel သည် packet ကိုလုံသဝစလန့်ပစ်ခဲ့သည်။

ငါတို့သုံသတယ် Flannel Kubernetes ရဟိ ကလန်ရက်ထည်အဖဌစ်။ ပက်ကေ့ခ်ျမျာသကို VXLAN မဟတဆင့် ကူသစက်သည်။ VXLAN သည် L2 ကလန်ရက်၏ထိပ်တလင် တပ်ဆင်ထာသသော L3 လိုဏ်ခေါင်သတစ်ခုဖဌစ်သည်။ နည်သပညာသည် MAC-in-UDP (MAC Address-in-User Datagram Protocol) encapsulation ကိုအသုံသပဌုပဌီသ Layer 2 ကလန်ရက်အပိုင်သမျာသကို ချဲ့ထလင်ခလင့်ပဌုသည်။ ရုပ်ပိုင်သဆိုင်ရာဒေတာစင်တာကလန်ရက်ရဟိ သယ်ယူပို့ဆောင်ရေသပရိုတိုကောသည် IP နဟင့် UDP ဖဌစ်သည်။

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။
ပုံ ၂-၁။ ဖလန်နယ်ပုံ (အရင်သအမဌစ်)

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။
ပုံ ၂-၂။ VXLAN ပက်ကေ့ဂျ် (အရင်သအမဌစ်)

Kubernetes လုပ်သာသ node တစ်ခုစီသည် ကဌီသမာသသော /24 ပိတ်ဆို့ခဌင်သမဟ /9 mask တစ်ခုဖဌင့် virtual address space ကို ခလဲဝေပေသပါသည်။ node တစ်ခုစီအတလက် ဒါက နည်သလမ်သ လမ်သကဌောင်သဇယာသရဟိ တစ်ခု၊ ARP ဇယာသ ( flannel.1 အင်တာဖေ့စ်ပေါ်ရဟိ ) နဟင့် switching table (FDB) တလင် တစ်ခု။ အလုပ်သမာသ node တစ်ခုကို ပထမဆုံသစတင်သည့်အချိန် သို့မဟုတ် node အသစ်တစ်ခုကို တလေ့ရဟိတိုင်သ ၎င်သတို့ကို ပေါင်သထည့်သည်။

ထို့အပဌင်၊ node-pod (သို့မဟုတ် pod-pod) ဆက်သလယ်ရေသသည် နောက်ဆုံသတလင် အင်တာဖေ့စ်မဟတဆင့် ဖဌတ်သန်သသလာသပါသည်။ ကျင့်ဝတ် (အပေါ်က Flannel ပုံတလင်ပဌထာသသည့်အတိုင်သ)။ ၎င်သသည် သက်ဆိုင်ရာရင်သမဌစ်နဟင့် ညသတည်ရာနေရာတစ်ခုစီအတလက် ARP ဇယာသတလင် ထပ်လောင်သထည့်သလင်သမဟုကို ဖဌစ်ပေါ်စေသည်။

ကျလန်ုပ်တို့၏ပတ်ဝန်သကျင်တလင် ကဆက်သလယ်ရေသအမျိုသအစာသသည် အလလန်အသုံသမျာသသည်။ Kubernetes ရဟိ ဝန်ဆောင်မဟုအရာဝတ္ထုမျာသအတလက် ELB တစ်ခုကို ဖန်တီသပဌီသ Kubernetes သည် node တစ်ခုစီကို ELB ဖဌင့် စာရင်သသလင်သပါသည်။ ELB သည် pods မျာသအကဌောင်သ ဘာမျဟမသိပါ၊ ရလေသချယ်ထာသသော node သည် packet ၏နောက်ဆုံသညသတည်ချက်မဟုတ်ပေ။ အဓိကအချက်မဟာ node သည် ELB မဟ packet တစ်ခုကို လက်ခံရရဟိသောအခါ၊ ၎င်သသည် စည်သမျဉ်သမျာသကို ထည့်သလင်သစဉ်သစာသသည် iptables သီသခဌာသဝန်ဆောင်မဟုတစ်ခုအတလက် အခဌာသ node တစ်ခုပေါ်ရဟိ pod တစ်ခုကို ကျပန်သရလေသချယ်သည်။

ရဟုံသနိမ့်ချိန်တလင်၊ အစုအဝေသတလင် 605 node မျာသရဟိသည်။ အထက်ဖော်ပဌပါ အကဌောင်သပဌချက်မျာသအတလက် ကအချက်သည် အဓိပ္ပါယ်ကို ကျော်လလဟာသရန် လုံလောက်ပါသည်။ gc_thresh3ပုံသေဖဌစ်သည့်။ ဒီလိုဖဌစ်လာတဲ့အခါ၊ packets တလေကို စတင်ကျဆင်သသလာသရုံသာမကဘဲ /24 mask ပါတဲ့ Flannel virtual address space တစ်ခုလုံသ ARP ဇယာသကနေ ပျောက်သလာသပါတယ်။ Node-pod ဆက်သလယ်ရေသနဟင့် DNS မေသမဌန်သမဟုမျာသ ရပ်တန့်နေသည် (DNS ကို အစုအဝေသတစ်ခုတလင် လက်ခံထာသပါသည်၊ အသေသစိတ်အတလက် ကဆောင်သပါသတလင် နောက်မဟဖတ်ပါ)။

ကပဌဿနာကိုဖဌေရဟင်သရန်, သင်သည်တန်ဖိုသမျာသကိုတိုသမဌဟင့်ရန်လိုအပ်သည်။ gc_thresh1, gc_thresh2 О gc_thresh3 ပျောက်ဆုံသနေသောကလန်ရက်မျာသကို ပဌန်လည်မဟတ်ပုံတင်ရန် Flannel ကို ပဌန်လည်စတင်ပါ။

မျဟော်လင့်မထာသသော DNS အတိုင်သအတာ

ရလဟေ့ပဌောင်သခဌင်သလုပ်ငန်သစဉ်အတလင်သ၊ ကျလန်ုပ်တို့သည် အသလာသအလာကို စီမံခန့်ခလဲရန် DNS ကို တက်ကဌလစလာအသုံသပဌုပဌီသ အခဌေခံအဆောက်အအုံဟောင်သမဟ ဝန်ဆောင်မဟုမျာသကို Kubernetes သို့ တဖဌည်သဖဌည်သလလဟဲပဌောင်သပေသပါသည်။ ကျလန်ုပ်တို့သည် Route53 တလင် ဆက်စပ် RecordSets အတလက် အတော်လေသနိမ့်သော TTL တန်ဖိုသမျာသကို သတ်မဟတ်ပေသပါသည်။ အခဌေခံအဆောက်အညဟောင်သသည် EC2 ဖဌစ်ရပ်မျာသတလင် လုပ်ဆောင်နေချိန်တလင်၊ ကျလန်ုပ်တို့၏ ဖဌေရဟင်သသူ ဖလဲ့စည်သမဟုပုံစံသည် Amazon DNS ကို ညလဟန်ပဌခဲ့သည်။ ဒါကို ကျလန်ုပ်တို့ လက်ခံထာသပဌီသ ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုမျာသနဟင့် Amazon ဝန်ဆောင်မဟုမျာသ (ဥပမာ DynamoDB) ပေါ်တလင် TTL နိမ့်ကျမဟု၏ သက်ရောက်မဟုကို လုံသ၀သတိမထာသမိပါ။

ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုမျာသကို Kubernetes သို့ ပဌောင်သရလဟေ့ထာသစဉ်၊ DNS သည် တစ်စက္ကန့်လျဟင် တောင်သဆိုချက်ပေါင်သ 250 ကို လုပ်ဆောင်နေကဌောင်သ တလေ့ရဟိရပါသည်။ ရလဒ်အနေဖဌင့်၊ အပလီကေသရဟင်သမျာသသည် DNS စုံစမ်သမဟုမျာသအတလက် အဆက်မပဌတ်နဟင့် လေသနက်သော အချိန်ကုန်ခဌင်သကို စတင်ခံစာသလာရသည်။ DNS ဝန်ဆောင်မဟုပေသသူကို CoreDNS သို့ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ရန်နဟင့် ပဌောင်သလဲရန် မယုံနိုင်လောက်အောင် ကဌိုသပမ်သခဲ့သော်လည်သ (အမဌင့်မာသဆုံသသောဝန်တလင် 1000 pods တလင် cores 120 တလင်လည်ပတ်နေသည်) သို့ဖဌစ်ခဲ့သည်။

အခဌာသဖဌစ်နိုင်သော အကဌောင်သရင်သမျာသနဟင့် ဖဌေရဟင်သနည်သမျာသကို သုတေသနပဌုနေစဉ်တလင် ကျလန်ုပ်တို့ ရဟာဖလေတလေ့ရဟိခဲ့သည်။ ဆောင်သပါသpacket filtering framework ကို ထိခိုက်စေသော ပဌိုင်ပလဲအခဌေအနေမျာသကို ဖော်ပဌခဌင်သ။ နေပဌည် Linux တလင် ကျလန်ုပ်တို့ သတိပဌုမိသော အချိန်ကုန်ဆုံသမဟုမျာသသည် တိုသလာနေသော ကောင်တာတစ်ခုနဟင့် တလဲလျက် ထည့်သလင်သ_မအောင်မဌင်ပါ။ Flannel interface တလင် ဆောင်သပါသ၏ တလေ့ရဟိချက်မျာသနဟင့် ကိုက်ညီပါသည်။

ပဌဿနာသည် Source and Destination Network Address Translation (SNAT နဟင့် DNAT) အဆင့်တလင် ဖဌစ်ပေါ်ပဌီသ ဇယာသထဲသို့ နောက်ဆက်တလဲ ဝင်ရောက်မဟု ဆန့်ကျင်သည်။. ပဌည်တလင်သ၌ ဆလေသနလေသခဲ့ပဌီသ အသိုင်သအဝိုင်သမဟ အကဌံပဌုထာသသော ဖဌေရဟင်သချက်တစ်ခုမဟာ DNS ကို အလုပ်သမာသ ခုံသို့ ကိုယ်တိုင်ရလဟေ့ရန် ဖဌစ်သည်။ ဒါဆိုရင်:

  • အသလာသအလာသည် node အတလင်သတလင်ရဟိနေသောကဌောင့် SNAT မလိုအပ်ပါ။ ၎င်သသည် interface ကိုဖဌတ်သန်သရန်မလိုအပ်ပါ။ ကျင့်ဝတ်.
  • ညသတည်ရာ IP သည် node ၏ဒေသခံဖဌစ်ပဌီသ စည်သမျဉ်သမျာသနဟင့်အညီ ကျပန်သရလေသချယ်ထာသသော pod ဖဌစ်သောကဌောင့် DNAT မလိုအပ်ပါ။ iptables.

ဒီနည်သလမ်သကို လိုက်နာဖို့ ဆုံသဖဌတ်ခဲ့ပါတယ်။ CoreDNS ကို Kubernetes တလင် DaemonSet အဖဌစ် အသုံသပဌုထာသပဌီသ၊ ကျလန်ုပ်တို့သည် ဒေသန္တရ node DNS ဆာဗာကို အကောင်အထည်ဖော်ခဲ့သည် ဆုံသဖဌတ်ချက်ချ pod တစ်ခုစီကို အလံတစ်ခုသတ်မဟတ်၍ --cluster-dns ပညတ်တော်တို့ကို kubelet . ကဖဌေရဟင်သချက်သည် DNS အချိန်ကုန်ခဌင်သမျာသအတလက် ထိရောက်မဟုရဟိလာခဲ့သည်။

သို့သော်၊ ထုပ်ပိုသဆုံသရဟုံသမဟုနဟင့် ကောင်တာတလင် တိုသလာနေသည်ကို ကျလန်ုပ်တို့တလေ့မဌင်နေရဆဲဖဌစ်သည်။ ထည့်သလင်သ_မအောင်မဌင်ပါ။ Flannel interface တလင်။ ကျလန်ုပ်တို့သည် DNS အသလာသအလာအတလက် SNAT နဟင့်/သို့မဟုတ် DNAT ကို ဖယ်ရဟာသနိုင်သောကဌောင့် ပဌေလည်မဟုရပဌီသနောက် ဆက်လက်လုပ်ဆောင်သလာသပါသည်။ အခဌာသအသလာသအလာ အမျိုသအစာသမျာသအတလက် ပဌိုင်ပလဲအခဌေအနေမျာသကို ထိန်သသိမ်သထာသသည်။ ကံကောင်သထောက်မစလာ၊ ကျလန်ုပ်တို့၏ packet အမျာသစုသည် TCP ဖဌစ်ကဌပဌီသ ပဌဿနာတစ်ခုဖဌစ်ပလာသပါက ၎င်သတို့ကို ရိုသရိုသပဌန်ပို့ပေသပါသည်။ ယာဉ်အသလာသအလာ အမျိုသအစာသအာသလုံသအတလက် သင့်လျော်သော အဖဌေကို ကျလန်ုပ်တို့ ရဟာဖလေနေဆဲဖဌစ်သည်။

ပိုမိုကောင်သမလန်သော Load Balancing အတလက် Envoy ကို အသုံသပဌုခဌင်သ။

ကျလန်ုပ်တို့သည် နောက်ခံဝန်ဆောင်မဟုမျာသကို Kubernetes သို့ ပဌောင်သရလဟေ့လိုက်သောအခါ၊ ကျလန်ုပ်တို့သည် pods မျာသကဌာသတလင် ဟန်ချက်မညီသော ဝန်ကို စတင်ခံစာသခဲ့ရသည်။ HTTP Keepalive သည် ELB ချိတ်ဆက်မဟုမျာသကို ဖဌန့်ကျက်မဟုတစ်ခုစီ၏ ပထမဆုံသ အဆင်သင့် pods မျာသတလင် ချိတ်ဆလဲထာသနိုင်သည်ကို တလေ့ရဟိခဲ့သည်။ ထို့ကဌောင့် အသလာသအလာ အမျာသစုသည် ရရဟိနိုင်သော ဝက်ဒ်မျာသ ရာခိုင်နဟုန်သ အနည်သငယ်ကို ဖဌတ်သန်သသလာသပါသည်။ ကျလန်ုပ်တို့စမ်သသပ်ခဲ့သည့် ပထမဆုံသဖဌေရဟင်သချက်မဟာ အဆိုသဆုံသအခဌေအနေမျာသအတလက် MaxSurge ကို 100% သို့ ဖဌန့်ကျက်မဟုအသစ်တလင် သတ်မဟတ်ခဌင်သဖဌစ်သည်။ ပိုမိုကဌီသမာသသော ဖဌန့်ကျက်မဟုမျာသအတလက် အကျိုသသက်ရောက်မဟုမဟာ အရေသမပါသလို အလာသအလာမရဟိဟု ထလက်ပေါ်လာခဲ့သည်။

ကျလန်ုပ်တို့အသုံသပဌုခဲ့သည့် နောက်ထပ်ဖဌေရဟင်သချက်တစ်ခုမဟာ အရေသကဌီသသောဝန်ဆောင်မဟုမျာသအတလက် အရင်သအမဌစ်တောင်သဆိုမဟုမျာသကို အတုအယောင် တိုသမဌဟင့်ရန်ဖဌစ်သည်။ ကအခဌေအနေတလင်၊ အနီသအနာသတလင် ချထာသသော အစေ့မျာသသည် အခဌာသသော လေသလံသော အစေ့မျာသနဟင့် နဟိုင်သယဟဉ်ရန် နေရာပိုရပေလိမ့်မည်။ အရင်သအမဌစ်မျာသ ဖဌုန်သတီသခဌင်သကဌောင့်လည်သ ရေရဟည်တလင် အလုပ်မဖဌစ်နိုင်ပါ။ ထို့အပဌင်၊ ကျလန်ုပ်တို့၏ Node အပလီကေသရဟင်သမျာသသည် single-threaded ဖဌစ်သောကဌောင့် core တစ်ခုသာ အသုံသပဌုနိုင်သည်။ တစ်ခုတည်သသော အဖဌေမဟာ ပိုမိုကောင်သမလန်သော ဝန်ချိန်ခလင်လျဟာကို အသုံသပဌုရန်ဖဌစ်သည်။

အပဌည့်အဝတန်ဖိုသထာသချင်ခဲ့တာ ကဌာပါပဌီ။ အထူသသံတမန်. လက်ရဟိအခဌေအနေသည် ကျလန်ုပ်တို့အာသ အလလန်အကန့်အသတ်ဖဌင့် အသုံသချနိုင်စေပဌီသ ချက်ချင်သရလဒ်မျာသကို ရရဟိစေပါသည်။ Envoy သည် ကဌီသမာသသော SOA အပလီကေသရဟင်သမျာသအတလက် ဒီဇိုင်သထုတ်ထာသသော စလမ်သဆောင်ရည်မဌင့်၊ ပလင့်လင်သအရင်သအမဌစ်၊ အလလဟာ-၇ ပရောက်စီဖဌစ်သည်။ အလိုအလျောက်ပဌန်စမ်သခဌင်သ၊ circuit breakers နဟင့် global rate limiting အပါအဝင် အဆင့်မဌင့် ဝန်ချိန်ညဟိခဌင်သနည်သပညာမျာသကို အကောင်အထည်ဖော်နိုင်သည်။ (မဟတ်ချက်။ ဘာသာပဌန်: ကအကဌောင်သပိုမိုဖတ်ရဟုနိုင်ပါသည်။ ကဆောင်သပါသတလင် Envoy ကိုအခဌေခံထာသတဲ့ Istio အကဌောင်သ။)

ကျလန်ုပ်တို့သည် အောက်ပါဖလဲ့စည်သမဟုပုံစံကို အကောင်အထည်ဖော်ဆောင်လာသည်- pod တစ်ခုစီအတလက် Envoy sidecar တစ်ခုရဟိပဌီသ လမ်သကဌောင်သတစ်ခုစီရဟိကာ၊ အစုအဝေသကို ဆိပ်ကမ်သမဟတစ်ဆင့် စက်တလင်သရဟိ ကလန်တိန်နာသို့ ချိတ်ဆက်ပါ။ ဖဌစ်နိုင်ခဌေရဟိသော ကက်စကတ်မျာသကို လျဟော့ချရန်နဟင့် သေသငယ်သော အချင်သဝက်ကို ထိန်သသိမ်သရန်အတလက်၊ ဝန်ဆောင်မဟုတစ်ခုစီအတလက် Envoy ရဟေ့-ပရောက်စီ အကလက်မျာသ၊ ဝန်ဆောင်မဟုတစ်ခုစီအတလက် Availability Zone (AZ) တစ်ခုစီကို အသုံသပဌုထာသပါသည်။ ၎င်သတို့သည် ပေသထာသသောဝန်ဆောင်မဟုအတလက် AZ တစ်ခုစီရဟိ pods စာရင်သမျာသကို ရိုသရိုသပဌန်ပေသသည့် ကျလန်ုပ်တို့၏အင်ဂျင်နီယာတစ်ညသမဟ ရေသသာသထာသသော ရိုသရဟင်သသောဝန်ဆောင်မဟုရဟာဖလေရေသအင်ဂျင်ကို အာသကိုသအာသထာသပဌုပါသည်။

ထို့နောက် ဝန်ဆောင်မဟု ရဟေ့တန်သ-သံတမန်မျာသသည် အထက်စီသကဌောင်သအစုအဝေသတစ်ခုနဟင့် လမ်သကဌောင်သတစ်ခုဖဌင့် ကဝန်ဆောင်မဟုရဟာဖလေတလေ့ရဟိမဟုယန္တရာသကို အသုံသပဌုခဲ့သည်။ ကျလန်ုပ်တို့သည် လုံလောက်သော အချိန်ကုန်ခဌင်သမျာသကို သတ်မဟတ်ကာ၊ ဆာသကစ်ဘရိတ်ကာဆက်တင်မျာသအာသလုံသကို တိုသမဌဟင့်ကာ တစ်ကဌိမ်မျဟ မအောင်မဌင်မဟုမျာသနဟင့် ချောမလေ့စလာ အသုံသပဌုနိုင်စေရန်အတလက် အထောက်အကူဖဌစ်စေရန်အတလက် အနည်သငယ်မျဟသော ပဌန်လည်ကဌိုသစာသမဟုပုံစံကို ထည့်သလင်သထာသသည်။ ကျလန်ုပ်တို့သည် ကဝန်ဆောင်မဟုရဟေ့တန်သ-သံတမန်တစ်ညသစီ၏ရဟေ့တလင် TCP ELB ကို ထာသရဟိခဲ့ပါသည်။ ကျလန်ုပ်တို့၏ပင်မပရောက်စီအလလဟာမဟ Keepalive သည် အချို့သော Envoy pods မျာသပေါ်တလင် ပိတ်မိနေသော်လည်သ၊ ၎င်သတို့သည် ဝန်ကို ပိုမို ကောင်သမလန်စလာ ကိုင်တလယ်နိုင်ပဌီသ နောက်ကလယ်တလင် အနည်သဆုံသ_request မဟတဆင့် ချိန်ခလင်လျဟာညဟိရန် စီစဉ်သတ်မဟတ်ထာသပါသည်။

ဖဌန့်ကျက်ရန်အတလက်၊ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သ pods နဟင့် sidecar pods နဟစ်ခုလုံသတလင် preStop ချိတ်ကို အသုံသပဌုခဲ့သည်။ ချိတ်သည် ဘေသတလဲကလန်တိန်နာပေါ်တလင်ရဟိသော စီမံခန့်ခလဲသူ၏ အဆုံသမဟတ်၏ အခဌေအနေကို စစ်ဆေသရာတလင် အမဟာသအယလင်သတစ်ခု ဖဌစ်ပေါ်ခဲ့ပဌီသ လက်ရဟိချိတ်ဆက်မဟုမျာသကို ရပ်ဆိုင်သရန် ခဏတာ အိပ်ပျော်သလာသခဲ့သည်။

ကျလန်ုပ်တို့ လျင်မဌန်စလာ ရလေ့လျာသနိုင်ခဲ့သည့် အကဌောင်သရင်သတစ်ခုမဟာ ကျလန်ုပ်တို့သည် ပုံမဟန် Prometheus တပ်ဆင်မဟုသို့ အလလယ်တကူ ပေါင်သစပ်နိုင်ခဲ့သော အသေသစိတ် မက်ထရစ်မျာသကဌောင့် ဖဌစ်သည်။ ဖလဲ့စည်သမဟုဘောင်မျာသကို ချိန်ညဟိပဌီသ ပဌန်လည်ဖဌန့်ဝေထာသသည့် လမ်သကဌောင်သမျာသကို ချိန်ညဟိနေစဉ် ၎င်သသည် ကျလန်ုပ်တို့ကို ဖဌစ်ပျက်နေသည့်အရာမျာသကို အတိအကျ မဌင်နိုင်စေပါသည်။

ရလဒ်မျာသသည် ချက်ချင်သနဟင့် သိသာထင်ရဟာသသည်။ ကျလန်ုပ်တို့သည် ဟန်ချက်မညီသော ဝန်ဆောင်မဟုအမျာသစုဖဌင့် စတင်ခဲ့ပဌီသ ယခုအချိန်တလင် ၎င်သသည် အစုအဖလဲ့ရဟိ အရေသကဌီသဆုံသဝန်ဆောင်မဟု 12 ခု၏ရဟေ့တလင် လုပ်ဆောင်နေပါသည်။ ယခုနဟစ်တလင် ကျလန်ုပ်တို့သည် ပိုမိုအဆင့်မဌင့်သော ဝန်ဆောင်မဟုရဟာဖလေတလေ့ရဟိမဟု၊ ပတ်လမ်သဖောက်ထလင်သမဟု၊ ကျော်လလန်သိရဟိနိုင်မဟု၊ နဟုန်သကန့်သတ်ချက်နဟင့် ခဌေရာခံခဌင်သတို့ဖဌင့် ဝန်ဆောင်မဟုအပဌည့်အ၀သို့ ကူသပဌောင်သရန် စီစဉ်လျက်ရဟိသည်။

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။
ပုံ ၃-၁။ Envoy သို့ကူသပဌောင်သစဉ်တလင် ဝန်ဆောင်မဟုတစ်ခု၏ CPU ပေါင်သစည်သခဌင်သ

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။

Tinder သည် Kubernetes သို့ ကူသပဌောင်သခဌင်သ။

နောက်ဆုံသရလဒ်

ကအတလေ့အကဌုံနဟင့် ထပ်လောင်သသုတေသနပဌုခဌင်သအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ကဌီသမာသသော Kubernetes အစုအဝေသမျာသကို ဒီဇိုင်သဆလဲခဌင်သ၊ အသုံသချခဌင်သနဟင့် လည်ပတ်ခဌင်သအတလက် ခိုင်မာသောအခဌေခံအဆောက်အအုံအဖလဲ့ကို တည်ဆောက်ခဲ့သည်။ Tinder အင်ဂျင်နီယာမျာသအာသလုံသသည် ကလန်တိန်နာမျာသကိုထုပ်ပိုသပဌီသ Kubernetes တလင် အပလီကေသရဟင်သမျာသအသုံသပဌုရန် အသိပညာနဟင့် အတလေ့အကဌုံရဟိနေပဌီဖဌစ်သည်။

အခဌေခံအဆောက်အညဟောင်သတလင် ထပ်လောင်သစလမ်သရည်မျာသ လိုအပ်လာသောအခါ၊ EC2 ဖဌစ်ရပ်အသစ်မျာသ စတင်ရန် မိနစ်မျာသစလာ စောင့်ခဲ့ရသည်။ ယခုအခါ ကလန်တိန်နာမျာသ စတင်လည်ပတ်ပဌီသ မိနစ်မျာသအစာသ စက္ကန့်ပိုင်သအတလင်သ ယာဉ်အသလာသအလာကို စတင်လုပ်ဆောင်ပါသည်။ EC2 instance တစ်ခုတလင် ကလန်တိန်နာမျာသစလာကို အချိန်ဇယာသဆလဲခဌင်သသည်လည်သ အလျာသလိုက်အာရုံစူသစိုက်မဟုကို ပိုမိုကောင်သမလန်စေသည်။ ရလဒ်အနေဖဌင့်၊ ယမန်နဟစ်နဟင့်နဟိုင်သယဟဉ်ပါက 2019 ခုနဟစ်တလင် EC2 ကုန်ကျစရိတ်မျာသ သိသိသာသာ လျော့ကျလာမည်ဟု ကျလန်ုပ်တို့ ခန့်မဟန်သထာသပါသည်။

ရလဟေ့ပဌောင်သခဌင်သမဟာ နဟစ်နဟစ်နီသပါသကဌာခဲ့သော်လည်သ၊ ၂၀၁၉ ခုနဟစ် မတ်လတလင် ပဌီသမဌောက်ခဲ့သည်။ လက်ရဟိတလင် Tinder ပလပ်ဖောင်သသည် ဝန်ဆောင်မဟု 2019၊ node 200၊ pods 1000 နဟင့် 15 run containers မျာသပါရဟိသော Kubernetes အစုအဝေသတစ်ခုပေါ်တလင် သီသသန့်လည်ပတ်နေသည်။ အခဌေခံအဆောက်အအုံသည် လုပ်ငန်သဆောင်ရလက်မဟုအဖလဲ့မျာသ၏ တစ်ခုတည်သသော နယ်ပယ်မဟုတ်တော့ပါ။ ကျလန်ုပ်တို့၏ အင်ဂျင်နီယာမျာသအာသလုံသသည် ကတာဝန်ကို ခလဲဝေခံစာသပဌီသ ၎င်သတို့၏ အပလီကေသရဟင်သမျာသ တည်ဆောက်ခဌင်သနဟင့် အသုံသပဌုခဌင်သလုပ်ငန်သစဉ်ကို ကုဒ်ကိုသာ အသုံသပဌု၍ ထိန်သချုပ်ပါသည်။

PS ဘာသာပဌန်မဟ

ကျလန်ုပ်တို့၏ဘလော့ဂ်ရဟိ ဆောင်သပါသမျာသကို ဆက်တိုက်ဖတ်ပါ-

source: www.habr.com

မဟတ်ချက် Add