Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

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

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

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

မသက်ဆိုင်ကဌောင်သရဟင်သလင်သချက်- ကဆောင်သပါသသည် HighLoad++ တလင် 2018 ခုနဟစ် နိုဝင်ဘာလတလင် Sergey ကျင်သပခဲ့သော အစည်သအဝေသမဟ အကဌောင်သအရာမျာသကို အခဌေခံထာသသည်။ Kafka နဟင့် အလုပ်လုပ်သည့် Lamoda ၏ တိုက်ရိုက်အတလေ့အကဌုံသည် အချိန်ဇယာသရဟိ အခဌာသအစီရင်ခံစာမျာသထက် နာသထောင်သူမျာသကို ဆလဲဆောင်ခဲ့သည်။ ကအရာသည် သင်စိတ်တူကိုယ်တူလူမျာသကို အမဌဲရဟာဖလေနိုင်ပဌီသ HighLoad++ ၏စီစဉ်သူမျာသသည် ၎င်သအတလက် သင့်လျော်သောလေထုကိုဖန်တီသရန် ဆက်လက်ကဌိုသစာသသလာသမည့်အချက်၏ အကောင်သဆုံသဥပမာတစ်ခုဖဌစ်သည်။

ဖဌစ်စဉ်အကဌောင်သ

Lamoda သည် ၎င်သ၏ကိုယ်ပိုင်အဆက်အသလယ်စင်တာ၊ ပေသပို့ခဌင်သဝန်ဆောင်မဟု (လုပ်ငန်သခလဲမျာသစလာ)၊ ဓာတ်ပုံစတူဒီယို၊ ဂိုဒေါင်ကျယ်ကဌီသတစ်ခုနဟင့် ၎င်သ၏ကိုယ်ပိုင်ဆော့ဖ်ဝဲလ်ပေါ်တလင် လုပ်ဆောင်သည့် ကဌီသမာသသော e-commerce ပလပ်ဖောင်သတစ်ခုဖဌစ်သည်။ ငလေပေသချေမဟုနည်သလမ်သ ဒါဇင်မျာသစလာရဟိပါတယ်၊ b2b ပါတနာမျာသသည် ကဝန်ဆောင်မဟုအချို့ သို့မဟုတ် အာသလုံသကို အသုံသပဌုပဌီသ ၎င်သတို့၏ထုတ်ကုန်မျာသနဟင့်ပတ်သက်သော နောက်ဆုံသပေါ်အချက်အလက်မျာသကို သိရဟိလိုသော bXNUMXb ပါတနာမျာသဖဌစ်သည်။ ထို့အပဌင် Lamoda သည် ရုရဟာသဖက်ဒရေသရဟင်သမဟလလဲ၍ နိုင်ငံသုံသနိုင်ငံ၌ လည်ပတ်နေပဌီသ အရာအာသလုံသမဟာ အနည်သငယ်ကလဲပဌာသသည်။ စုစုပေါင်သ၊ အမဟာစာအသစ်ကို စီစဉ်သတ်မဟတ်ရန် နည်သလမ်သပေါင်သ တစ်ရာကျော်ရဟိနိုင်သည်၊ ၎င်သကို ၎င်သ၏ကိုယ်ပိုင်နည်သလမ်သဖဌင့် လုပ်ဆောင်ရမည်ဖဌစ်သည်။ ကအရာအာသလုံသသည် တစ်ခါတစ်ရံတလင် ထင်ထင်ရဟာသရဟာသမဟုတ်သော နည်သလမ်သမျာသဖဌင့် ဆက်သလယ်နိုင်သည့် ဒါဇင်ပေါင်သမျာသစလာသော ဝန်ဆောင်မဟုမျာသ၏အကူအညီဖဌင့် လုပ်ဆောင်သည်။ အဓိကတာဝန်ရဟိမဟုမဟာ အမိန့်အဆင့်အတန်သမျာသရဟိသည့် ဗဟိုစနစ်လည်သ ရဟိပါသည်။ ငါတို့သူမကို BOB လို့ခေါ်တယ်၊ ငါသူမနဲ့အလုပ်လုပ်တယ်။

ဖဌစ်ရပ်မျာသ-မောင်သနဟင်သော API ဖဌင့် ပဌန်အမ်သသည့်ကိရိယာ

Events-driven ဟူသော စကာသလုံသသည် အတော်လေသ hackneyed ဖဌစ်သည်၊ ၎င်သကို ဆိုလိုသည့် အဓိပ္ပါယ်ကို နောက်ထပ်အသေသစိတ် ထပ်မံဖော်ပဌပါမည်။ Kafka ရဟိ ဖဌစ်ရပ်မျာသ မောင်သနဟင်သည့် API ချဉ်သကပ်မဟုကို စမ်သကဌည့်ရန် ဆုံသဖဌတ်ခဲ့သည့် အကဌောင်သအရာနဟင့် စတင်ပါမည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

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

ဒါပေမယ့် ဥပဒေအပဌောင်သအလဲတလေကဌောင့် ပဌန်ရတာ ပိုရဟုပ်ထလေသလာပဌီသ အဲဒါအတလက် သီသခဌာသ microservice တစ်ခုကို အကောင်အထည်ဖော်ခဲ့ရပါတယ်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

ကျလန်ုပ်တို့၏လဟုံ့ဆော်မဟု-

  1. ဥပဒေ FZ-54 - အတိုချုပ်ပဌောရလျဟင် ဥပဒေသည် မိနစ်အနည်သငယ်အတလင်သ SLA တိုတောင်သသော SLA တစ်ခုအတလင်သ ငလေကဌေသလလဟဲပဌောင်သမဟုတိုင်သ၊ ပဌေစာဖဌစ်စေ၊ ပဌေစာဖဌစ်စေ အခလန်ရုံသသို့ အစီရင်ခံရန် လိုအပ်သည်။ ကျလန်ုပ်တို့သည် e-commerce ကုမ္ပဏီတစ်ခုအနေဖဌင့် လုပ်ငန်သဆောင်ရလက်မဟုမျာသစလာကို ဆောင်ရလက်ပါသည်။ နည်သပညာအရ၊ ၎င်သသည် တာဝန်သစ် (ထို့ကဌောင့် ဝန်ဆောင်မဟုအသစ်) နဟင့် ပတ်သက်သည့် စနစ်မျာသအာသလုံသတလင် တိုသတက်မဟုမျာသကို ဆိုလိုသည်။
  2. BOB ကလဲသလာသတယ်။ BOB ၏ အဓိကမဟုတ်သောတာဝန်ဝတ္တရာသမျာသမဟ ကင်သလလတ်စေရန်နဟင့် ၎င်သ၏ အလုံသစုံရဟုပ်ထလေသမဟုကို လျဟော့ချရန် ကုမ္ပဏီတလင်သ ပရောဂျက်တစ်ခုဖဌစ်သည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

ကပုံကဌမ်သသည် အဓိက Lamoda စနစ်မျာသကို ပဌသထာသသည်။ အခု အမျာသစုက ပိုမျာသတယ်။ ကျုံ့နေသော monolith ပတ်လည်တလင် 5-10 microservices ကဌယ်စုတစ်ခု. ၎င်သတို့သည် တဖဌည်သဖဌည်သကဌီသထလာသလာသော်လည်သ အလယ်တလင်ရလေသချယ်ထာသသောအပိုင်သအစကို ဖဌန့်ကျက်ချထာသခဌင်သသည် ကဌောက်စရာကောင်သသောကဌောင့် ၎င်သတို့ကို သေသငယ်အောင်ပဌုလုပ်ရန် ကျလန်ုပ်တို့ကဌိုသစာသနေပါသည်။ ကျလန်ုပ်တို့သည် လဲလဟယ်မဟုအာသလုံသ (မဌဟာသမျာသ) ကို သီသသန့်ထာသရန် ခိုင်သစေကာ ၎င်သတို့ထဲမဟ တစ်ခုမဟ မရရဟိနိုင်တော့ကဌောင်သ ထည့်သလင်သစဉ်သစာသပါသည်။

BOB တလင် ငလေပေသချေမဟုစနစ်မျာသ၊ ပေသပို့မဟုစနစ်မျာသ၊ အသိပေသချက်စနစ်မျာသ စသည်တို့လည်သ အမျာသအပဌာသရဟိသည်။

နည်သပညာအရ BOB သည်-

  • ကုဒ်၏ ~ 150k လိုင်သမျာသ + စမ်သသပ်မဟု ~ 100k လိုင်သမျာသ။
  • php7.2 + Zend 1 & Symfony Components 3;
  • > 100 APIs & ~50 အပဌင်ထလက်ပေါင်သစည်သမဟုမျာသ။
  • ၄င်သတို့သည် ကိုယ်ပိုင်စီသပလာသရေသ ယုတ္တိရဟိသော နိုင်ငံဖဌစ်သည်။

BOB ကို အသုံသပဌုခဌင်သသည် စျေသကဌီသပဌီသ နာကျင်စေသည်၊ ၎င်သဖဌေရဟင်သနိုင်သော ကုဒ်ပမာဏနဟင့် ပဌဿနာမျာသသည် ၎င်သတို့အာသလုံသကို ၎င်သတို့၏ခေါင်သထဲသို့ မည်သူမျဟ ထည့်မသလင်သနိုင်ပေ။ ယေဘူယျအာသဖဌင့် ၎င်သကိုရိုသရဟင်သစေရန် အကဌောင်သပဌချက်မျာသစလာရဟိသည်။

Return Process

ကနညသတလင်၊ BOB နဟင့် ငလေပေသချေမဟု လုပ်ငန်သစဉ်တလင် စနစ်နဟစ်ခု ပါဝင်ပါသည်။ ယခု နောက်ထပ် နဟစ်ခုပေါ်လာသည်-

  • ပဌင်ပဝန်ဆောင်မဟုမျာသနဟင့် ဆက်သလယ်မဟုဆိုင်ရာ ပဌဿနာမျာသကို ဂရုစိုက်ပေသမည့် Fiscalization Service။
  • BOB ကို မဖောင်သပလစေရန် ရိုသရဟင်သစလာ လဲလဟယ်မဟုအသစ်မျာသပါရဟိသော ငလေပဌန်အမ်သသည့်ကိရိယာ။

ယခု လုပ်ငန်သစဉ်သည် ကကဲ့သို့ ဖဌစ်ပုံရသည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

  1. BOB သည် ပဌန်အမ်သငလေအတလက် တောင်သဆိုချက်ကို လက်ခံရရဟိသည် ။
  2. BOB က ဒီ Refund Tool အကဌောင်သ ဆလေသနလေသထာသပါတယ်။
  3. ပဌန်အမ်သငလေတူသလ်က ငလေပေသချေမဟုကို ပဌောသည်- “ငလေပဌန်ပေသ”။
  4. ငလေပေသချေမဟုက ငလေကို ပဌန်ပေသပါတယ်။
  5. ပဌန်အမ်သငလေတူသလ်နဟင့် BOB သည် လက်ရဟိအခဌေအနေမျာသကို ၎င်သတို့နဟစ်ညသစလုံသ လိုအပ်သောကဌောင့် အချင်သချင်သ ထပ်တူပဌုပါသည်။ BOB တလင် UI ရဟိပဌီသ စာရင်သကိုင်ဆိုင်ရာ အစီရင်ခံစာမျာသနဟင့် ယေဘုယျအာသဖဌင့် အလလယ်တကူ လလဟဲပဌောင်သမရနိုင်သည့် ဒေတာအမျာသအပဌာသရဟိသောကဌောင့် ပဌန်အမ်သငလေတူသလ်သို့ လုံသလုံသပဌောင်သရန် ကျလန်ုပ်တို့ အဆင်သင့်မဖဌစ်သေသပါ။ ကုလာသထိုင်နဟစ်လုံသပေါ်ထိုင်ရမယ်။
  6. ဘဏ္ဍာငလေတောင်သခံမဟု မရဟိတော့ပါ။

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် အရာအာသလုံသစတင်ခဲ့သည့် Kafka - event-bus တလင် event bus တစ်မျိုသကို ပဌုလုပ်ခဲ့သည်။ ဟာသရေ၊ အခု ကျလန်တော်တို့မဟာ ကျရဟုံသမဟု (sarcasm) တစ်ခုတည်သရဟိတယ်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

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

Event-driven API ဆိုတာဘာလဲ

ကမေသခလန်သအတလက် အဖဌေကောင်သတစ်ခုသည် Martin Fowler (GOTO 2017) ၏ အစီရင်ခံစာတလင် ရဟိသည်။ "ဖဌစ်ရပ်-မောင်သနဟင်သော ဗိသုကာ၏ အဓိပ္ပါယ်မျာသစလာ".

အတိုချုံသပဌီသ ကျလန်တော်တို့ လုပ်ခဲ့တာတလေ၊

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

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

ပဌန်အမ်သငလေ တူသလ် ဝန်ဆောင်မဟု မတင်ပါ။ထို့ကဌောင့် Kafka သည် လိုအပ်သည်ထက် ဘောပင်၏အရသာက ပိုမဟန်သည်။ ပဌန်အမ်သငလေဝန်ဆောင်မဟုသည် မဌင့်မာသသောပရောဂျက်တစ်ခုဖဌစ်လာပါက လုပ်ငန်သသည် ပျော်ရလဟင်မည်ဟု မထင်ပါ။

Async လဲလဟယ်မဟု AS IS

asynchronous ဖလဟယ်မဟုမျာသအတလက် PHP ဌာနသည် မျာသသောအာသဖဌင့် RabbitMQ ကို အသုံသပဌုသည်။ တောင်သဆိုချက်အတလက် ဒေတာကို ကျလန်ုပ်တို့ စုဆောင်သပဌီသ တန်သစီထာသကာ တူညီသော ဝန်ဆောင်မဟုကို အသုံသပဌုသူက ၎င်သကို ဖတ်ပဌီသ ပေသပို့ခဌင်သ (သို့မဟုတ် မပို့ခဲ့ပါ)။ API ကိုယ်တိုင်အတလက်၊ Lamoda သည် Swagger ကိုတက်ကဌလစလာအသုံသပဌုသည်။ ကျလန်ုပ်တို့သည် API တစ်ခုကို ဒီဇိုင်သဆလဲကာ Swagger တလင် ဖော်ပဌကာ သုံသစလဲသူနဟင့် ဆာဗာကုဒ်ကို ထုတ်လုပ်ပါသည်။ ကျလန်ုပ်တို့သည် အနည်သငယ်အဆင့်မဌဟင့်ထာသသော JSON RPC 2.0 ကိုလည်သ အသုံသပဌုပါသည်။

အချို့နေရာမျာသတလင် ESB ဘတ်စ်ကာသမျာသကို အသုံသပဌုကဌပဌီသ အချို့မဟာ activeMQ တလင် နေထိုင်ကဌသော်လည်သ ယေဘုယျအာသဖဌင့်၊ RabbitMQ - စံ.

Async လဲလဟယ်မဟု TO BE

ဖဌစ်ရပ်မျာသ-ဘတ်စ်မဟတစ်ဆင့် ဖလဟယ်ခဌင်သကို ဒီဇိုင်သဆလဲသည့်အခါ၊ ဥပမာတစ်ခုအာသ ခဌေရာခံနိုင်သည်။ ကျလန်ုပ်တို့သည် ဖဌစ်ရပ်ဖလဲ့စည်သပုံဖော်ပဌချက်မျာသမဟတစ်ဆင့် အနာဂတ်ဒေတာဖလဟယ်မဟုကို အလာသတူဖော်ပဌပါသည်။ yaml ဖော်မတ်၊ ကျလန်ုပ်တို့ကိုယ်တိုင်ကုဒ်ထုတ်လုပ်ခဌင်သကိုလုပ်ဆောင်ရမည်ဖဌစ်ပဌီသ၊ ဂျင်နရေတာသည် သတ်မဟတ်ချက်မျာသအရ DTO မျာသကိုဖန်တီသကာ သုံသစလဲသူမျာသနဟင့်ဆာဗာမျာသကို ၎င်သတို့နဟင့်အလုပ်လုပ်ရန် သင်ကဌာသပေသသည်။ မျိုသဆက်သည် ဘာသာစကာသနဟစ်မျိုသသို့ ပဌောင်သလဲသလာသသည်- golang နဟင့် php. ၎င်သသည် စာကဌည့်တိုက်မျာသကို တသမတ်တည်သရဟိနေစေရန် ကူညီပေသသည်။ ဂျင်နရေတာအာသ ဂိုလန်ဖဌင့် ရေသသာသထာသသောကဌောင့် ဂေါဂီဟူသော အမည်ကို ရခဲ့သည်။

Kafka တလင် Event-sourcing သည် ပုံမဟန်အရာတစ်ခုဖဌစ်သည်။ Kafka Confluent ၏အဓိကလုပ်ငန်သဗာသရဟင်သမဟအဖဌေတစ်ခုရဟိပါသည်။ nakadiကျလန်ုပ်တို့၏ဒိုမိန်သညီအစ်ကို Zalando မဟဖဌေရဟင်သချက်။ ကျလန်တော်တို့ရဲ့ vanilla Kafka ဖဌင့်စတင်ရန်လဟုံ့ဆော်မဟု - ကသည်မဟာ နေရာတိုင်သတလင် အသုံသပဌုမည်လာသ မဆုံသဖဌတ်မချင်သ ဖဌေရဟင်သချက်အာသ အခမဲ့ ချန်ထာသခဲ့ကာ လေ့ကျင့်မဟုနဟင့် တိုသတက်မဟုမျာသအတလက် မိမိကိုယ်ကို ချန်ထာသခဲ့သည်- ကျလန်ုပ်တို့၏ ပံ့ပိုသကူညီမဟုကို လိုချင်ပါသည်။ JSON RPC 2.0ဘာသာစကာသနဟစ်ခုအတလက် ဂျင်နရေတာမျာသနဟင့် အခဌာသဘာကို ကဌည့်ကဌပါစို့။

အကဌမ်သဖျင်သအလာသတူ စီသပလာသရေသလုပ်ငန်သတစ်ခုရဟိသည့်အခါမျိုသတလင်ပင် Zalando သည် အကဌမ်သဖျင်သအလာသတူဖဌေရဟင်သချက်တစ်ခုကို ဖန်တီသထာသသောကဌောင့် ကျလန်ုပ်တို့သည် ၎င်သကို ထိထိရောက်ရောက်အသုံသမပဌုနိုင်သည်မဟာ ကမောက်ကမဖဌစ်စရာပင်။

လလဟင့်တင်ချိန်တလင် ဗိသုကာပုံစံမဟာ အောက်ပါအတိုင်သဖဌစ်သည်- ကျလန်ုပ်တို့သည် Kafka မဟ တိုက်ရိုက်ဖတ်သော်လည်သ Event-bus မဟတဆင့်သာ ရေသပါ။ Kafka တလင်ဖတ်ရန်အဆင်သင့်အမျာသကဌီသရဟိပါသည်- ပလဲစာသမျာသ၊ ချိန်ခလင်လျဟာညဟိသူမျာသ၊ ၎င်သသည်အလျာသလိုက်စကေသချဲ့ရန်အတလက်အနည်သနဟင့်အမျာသအဆင်သင့်ဖဌစ်နေသည်၊ ကအရာကိုသိမ်သဆည်သထာသလိုပါသည်။ ကျလန်ုပ်တို့သည် Gateway ဟုခေါ်သော Events-bus မဟတဆင့် ရိုက်ကူသမဟုကို အပဌီသသတ်ချင်သည်၊ ကသည်မဟာ အဘယ်ကဌောင့်နည်သ။

အဲ့ဒါနဲ့ ဘတ်စ်ကာသ

ဒါမဟမဟုတ် ပလဲအတလက် ဘတ်စ်ကာသ။ ကသည်မဟာ ရိုသရဟင်သစလာပင် နိုင်ငံမဲ့ http gateway ဖဌစ်ပဌီသ၊ အရေသကဌီသသော အခန်သကဏ္ဍမျာသစလာကို လုပ်ဆောင်သည်-

  • ထုတ်လုပ်ခဌင်သ Validation â€” ပလဲမျာသသည် ကျလန်ုပ်တို့၏ သတ်မဟတ်ချက်မျာသနဟင့် ကိုက်ညီမဟုရဟိမရဟိ စစ်ဆေသပါ။
  • ပလဲမာစတာစနစ်ဆိုလိုသည်မဟာ၊ ကသည်မဟာ မည်သည့်ဖလဲ့စည်သပုံမျာသနဟင့် အကျုံသဝင်သည်ဟု ယူဆသနည်သဟူသော မေသခလန်သကို ဖဌေပေသသည့် ကုမ္ပဏီရဟိ အဓိကနဟင့် တစ်ခုတည်သသော စနစ်ဖဌစ်သည်။ မဟန်ကန်ကဌောင်သ အတည်ပဌုခဌင်သသည် အကဌောင်သအရာကို တိတိကျကျ သတ်မဟတ်ရန် ဒေတာအမျိုသအစာသမျာသနဟင့် စာရင်သမျာသ ပါဝင်ပါသည်။
  • Hash လုပ်ဆောင်ချက် sharding အတလက် - Kafka မက်ဆေ့ချ်ဖလဲ့စည်သပုံသည် သော့တန်ဖိုသဖဌစ်ပဌီသ သော့၏ hash ကိုအသုံသပဌု၍ ၎င်သကို မည်သည့်နေရာတလင် ထည့်ရမည်ကို တလက်ချက်သည်။

အဘယ်ကဌောင့်

ကျလန်ုပ်တို့သည် ချောမလေ့သောလုပ်ငန်သစဉ်ဖဌင့် ကုမ္ပဏီကဌီသတစ်ခုတလင် အလုပ်လုပ်ပါသည်။ ဘာကဌောင့် တစ်ခုခုကို ပဌောင်သလဲတာလဲ။ ဒါက စမ်သသပ်မဟုတစ်ခုပါ။အကျိုသအမဌတ်မျာသစလာ ရိတ်သိမ်သရန် ကျလန်ုပ်တို့ မျဟော်လင့်ပါသည်။

1:n+1 ဖလဟယ်မဟုမျာသ (တစ်ခုမဟ အမျာသအပဌာသ)

Kafka သည် သုံသစလဲသူအသစ်မျာသကို API သို့ ချိတ်ဆက်ရန် အလလန်လလယ်ကူစေသည်။

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

BOB ၏အပိုင်သအစဖဌစ်သည့် ပဌန်အမ်သငလေ-တူသလ်ကိစ္စတလင်၊ ၎င်သတို့ကို Kafka မဟတစ်ဆင့် ထပ်တူပဌုထာသရန် ကျလန်ုပ်တို့အတလက် အဆင်ပဌေပါသည်။ ငလေပဌန်ပေသသည်ဟုဆိုသည်- BOB၊ RT သည် ကအကဌောင်သသိရဟိပဌီသ ၎င်သတို့၏အခဌေအနေမျာသကို ပဌောင်သလဲလိုက်သည်၊ ကအကဌောင်သကို Fiscalization Service မဟ သိရဟိပဌီသ ချက်လက်မဟတ်တစ်ခုထုတ်ပေသပါသည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

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

ဒေတာ - မောင်သနဟင်

စနစ်မျာသကဌာသရဟိ သတင်သအချက်အလက်မျာသသည် ပလင့်လင်သမဌင်သာမဟုဖဌစ်လာသည် - သင့်တလင် မည်သည့် “သလေသစလန်သသောလုပ်ငန်သ” နဟင့် သင်၏ backlog မည်မျဟပင် မျာသပဌာသနေပါစေ။ Lamoda တလင် စနစ်မျာသမဟ ဒေတာမျာသကို စုဆောင်သပဌီသ လုပ်ငန်သအတလက်ရော ဉာဏ်ရည်ထက်မဌက်သော စနစ်မျာသအတလက်ပါ ပဌန်လည်အသုံသပဌုနိုင်သည့် ပုံစံတစ်ခုအဖဌစ် ထည့်သလင်သပေသသည့် Data Analytics ဌာနတစ်ခုရဟိသည်။ Kafka သည် သင့်အာသ ၎င်သတို့အာသ ဒေတာမျာသစလာကို လျင်မဌန်စလာ ပေသစလမ်သနိုင်ပဌီသ ထိုအချက်အလက်မျာသ စီသဆင်သမဟုကို ခေတ်မီအောင် ထိန်သသိမ်သနိုင်စေပါသည်။

ပုံတူမဟတ်တမ်သ

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

ကူသယူမဟုမဟတ်တမ်သ၏ သိုလဟောင်မဟုကာလသည် ကအကဌောင်သအရာအတလက် ရေသသာသမဟုပဌင်သထန်မဟုအပေါ် မူတည်သည်၊ Kafka သည် သင့်အာသ သိုလဟောင်မဟုအချိန်နဟင့် ဒေတာပမာဏအပေါ် ကန့်သတ်ချက်မျာသကို လိုက်လျောညီထလေစလာ သတ်မဟတ်နိုင်စေပါသည်။ ပဌင်သထန်သောအကဌောင်သအရာမျာသအတလက်၊ အချိန်တိုအတလင်သ လုပ်ဆောင်နိုင်စလမ်သမရဟိသည့်အခဌေအနေတလင်ပင် သုံသစလဲသူအာသလုံသသည် အချက်အလက်မပျောက်မီ အချိန်ယူဖတ်ရဟုရန် အရေသကဌီသပါသည်။ ၎င်သသည် အမျာသအာသဖဌင့် ဒေတာမျာသကို သိမ်သဆည်သရန် ဖဌစ်နိုင်သည်။ á€›á€€á€ºá€šá€°á€”စ်အထောက်အပံ့အတလက် လုံလောက်ပါတယ်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

ထို့နောက် Kafka နဟင့် မရင်သနဟီသသောသူမျာသအတလက် (ပုံသည် စာရလက်စာတမ်သမဟလည်သဖဌစ်သည်)၊

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

Kafka တလင် အလာသတူ စိတ်ကူသတစ်ခုရဟိသည်။ အကလောငျသသင်ရေသထာသတဲ့စာတလေကို ဖတ်ပဌီသရင် မပျောက်ပါဘူသ။ ပုံမဟန်အာသဖဌင့်၊ သင်သည် Kafka သို့ ချိတ်ဆက်သောအခါ၊ သင်သည် မက်ဆေ့ဂျ်မျာသအာသလုံသကို လက်ခံရရဟိပဌီသ သင်ချန်ထာသခဲ့သည့်နေရာကို သိမ်သဆည်သရန် ရလေသချယ်ခလင့်ရဟိသည်။ ဆိုလိုသည်မဟာ သင်သည် ဆက်တိုက်ဖတ်သည်၊ သင်သည် စာကိုဖတ်ပဌီသဟု အမဟတ်အသာသပဌုမည်မဟုတ်သော်လည်သ သင်ဆက်လက်ဖတ်ရဟုနိုင်သည့် id ကို သိမ်သဆည်သပါ။ သင်သတ်မဟတ်ထာသသော Id ကို offset ဟုခေါ်ပဌီသ ယန္တရာသသည် commit offset ဖဌစ်သည်။

ထို့ကဌောင့် ကလဲပဌာသခဌာသနာသသော ယုတ္တိဗေဒကို အကောင်အထည်ဖော်နိုင်သည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့တလင် မတူညီသောနိုင်ငံမျာသအတလက် ဥပမာ 4 ခုတလင် BOB ရဟိသည် - Lamoda သည် ရုရဟာသ၊ ကာဇက်စတန်၊ ယူကရိန်သ၊ Belarus တလင်ရဟိသည်။ ၎င်သတို့ကို သီသခဌာသစီအသုံသပဌုထာသသောကဌောင့်၊ ၎င်သတို့တလင် အနည်သငယ်ကလဲပဌာသသော configs နဟင့် ၎င်သတို့၏ ကိုယ်ပိုင်လုပ်ငန်သဆိုင်ရာ ယုတ္တိရဟိသည်။ ကျလန်ုပ်တို့သည် မည်သည့်နိုင်ငံကိုရည်ညလဟန်သကဌောင်သ မက်ဆေ့ချ်တလင် ဖော်ပဌသည်။ နိုင်ငံတစ်ခုစီရဟိ BOB သုံသစလဲသူတိုင်သသည် မတူညီသော groupId ဖဌင့်ဖတ်ကဌပဌီသ မက်ဆေ့ချ်သည် ၎င်သတို့နဟင့်မသက်ဆိုင်ပါက ၎င်သတို့သည် ၎င်သကို ကျော်သလာသသည် ၊ ဆိုလိုသည်မဟာ၊ ချက်ခဌင်သ offset +1 ကျူသလလန်သည်။ ကျလန်ုပ်တို့၏ငလေပေသချေမဟုဝန်ဆောင်မဟုမဟ တူညီသောအကဌောင်သအရာကို ဖတ်ပါက၊ ၎င်သသည် သီသခဌာသအုပ်စုတစ်ခုနဟင့် ပဌုလုပ်သောကဌောင့်၊ အော့ဖ်ဆက်မျာသသည် ဖဌတ်တောက်မည်မဟုတ်ပါ။

ပလဲလိုအပ်ချက်မျာသ-

  • ဒေတာပဌည့်စုံမဟု။ ဖဌစ်စဉ်ကို စီမံဆောင်ရလက်နိုင်ရန် ဒေတာအလုံအလောက်ရဟိစေလိုပါသည်။

  • သမာဓိ။ ကျလန်ုပ်တို့သည် Events-bus သို့ လလဟဲအပ်ပေသပါသည်။
  • အမိန့်က အရေသကဌီသတယ်။ ပဌန်လာရတဲ့ကိစ္စမဟာ ကျလန်တော်တို့က သမိုင်သနဲ့ တလဲလုပ်ရတော့မယ်။ အကဌောင်သကဌာသချက်မျာသနဟင့်အတူ၊ အမဟာစာသည် အရေသမကဌီသပါ၊ ၎င်သတို့သည် တစ်သာသတည်သရဟိနေသည့် အကဌောင်သကဌာသချက်မျာသဖဌစ်ပါက မည်သည့်အမဟာစာသည် ပထမရောက်ရဟိသည်ဖဌစ်စေ အီသမေသလ်သည် တူညီမည်ဖဌစ်ပါသည်။ ပဌန်အမ်သငလေကိစ္စတလင် ရဟင်သလင်သသော လုပ်ငန်သစဉ်တစ်ခု ရဟိသည်၊ ကျလန်ုပ်တို့သည် အမဟာစာကို ပဌောင်သလဲပါက ခဌလင်သချက်မျာသ ပေါ်ပေါက်လာမည်ဖဌစ်ပဌီသ ပဌန်အမ်သငလေကို ဖန်တီသခဌင်သ သို့မဟုတ် လုပ်ဆောင်မည်မဟုတ်ပါ - ကျလန်ုပ်တို့သည် မတူညီသော အခဌေအနေတလင် ကုန်ဆုံသသလာသပါမည်။
  • ရဟေ့နောက်ညီညလတ်မဟု။ ကျလန်ုပ်တို့တလင် စတိုသတစ်ခုရဟိပဌီသ ယခု ကျလန်ုပ်တို့သည် API တစ်ခုအစာသ ပလဲမျာသကို ဖန်တီသပါသည်။ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုမျာသသို့ အဖဌစ်အပျက်အသစ်မျာသနဟင့် ရဟိပဌီသသာသအရာမျာသဆီသို့ ပဌောင်သလဲမဟုမျာသအကဌောင်သ အချက်အလက်မျာသကို လျင်မဌန်စလာနဟင့် ဈေသပေါပေါဖဌင့် ပေသပို့ရန် နည်သလမ်သတစ်ခု လိုအပ်ပါသည်။ သီသခဌာသ git repository နဟင့် code generator မျာသတလင် ဘုံသတ်မဟတ်ချက်တစ်ခုအာသဖဌင့် ၎င်သကို အောင်မဌင်သည်။ ထို့ကဌောင့်၊ မတူညီသော ဝန်ဆောင်မဟုမျာသရဟိ ဖောက်သည်မျာသနဟင့် ဆာဗာမျာသကို ညဟိနဟိုင်သဆောင်ရလက်ပါသည်။

Lamoda ရဟိ Kafka

ကျလန်ုပ်တို့တလင် Kafka တပ်ဆင်မဟု သုံသခုရဟိသည်။

  1. မဟတ်တမ်သမျာသ;
  2. R&D;
  3. အဲ့ဒါနဲ့ ဘတ်စ်ကာသ။

ယနေ့ကျလန်ုပ်တို့သည် နောက်ဆုံသအချက်အကဌောင်သကိုသာ ပဌောနေကဌသည်။ ပလဲစာသ-ဘတ်စ်ကာသမျာသတလင်၊ ကျလန်ုပ်တို့တလင် အလလန်ကဌီသမာသသော တပ်ဆင်မဟုမျာသ မရဟိပါ။ ပလဲစာသ (ဆာဗာ ၃ ခု) နဟင့် အကဌောင်သအရာ ၂၇ ခုသာရဟိသည်။ စည်သကမ်သအရ၊ အကဌောင်သအရာတစ်ခုသည် လုပ်ငန်သစဉ်တစ်ခုဖဌစ်သည်။ ဒါပေမယ့် ဒါက သိမ်မလေ့တဲ့အချက်ဖဌစ်ပဌီသ အခုပဲ ကျလန်တော်တို့ ထိတလေ့လိုက်မယ်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

အပေါ်က rps ဂရပ်ပါ။ ပဌန်အမ်သငလေလုပ်ငန်သစဉ်ကို စိမ်သပဌာရောင်မျဉ်သဖဌင့် အမဟတ်အသာသပဌုထာသပဌီသ (ဟုတ်ပါတယ်၊ X ဝင်ရိုသပေါ်ရဟိ)၊ ပန်သရောင်လိုင်သသည် အကဌောင်သအရာ အပ်ဒိတ်လုပ်ငန်သစဉ်ဖဌစ်သည်။

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

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

Lamoda Events တလေမဟာ သုံသပါတယ်။

အောက်ပါလုပ်ငန်သမျာသအတလက် ကျလန်ုပ်တို့သည် တည်ဆောက်ထာသသော ဗိသုကာပညာကို အသုံသပဌုသည်-

  • အခဌေအနေကို ခဌေရာခံပါ။: ပါဝင်ပတ်သက်သည့် စနစ်အာသလုံသမဟ ခေါ်ဆိုမဟုလုပ်ဆောင်ရန်နဟင့် အခဌေအနေခဌေရာခံခဌင်သ။ ငလေပေသချေမဟု၊ အခဌေအနေမျာသ၊ ငလေစာရင်သရဟင်သတမ်သမျာသ၊ အသိပေသချက်မျာသ။ ကတလင် ကျလန်ုပ်တို့သည် ချဉ်သကပ်နည်သကို စမ်သသပ်ခဲ့ပဌီသ၊ ကိရိယာမျာသပဌုလုပ်ကာ၊ ချို့ယလင်သချက်အာသလုံသကို စုဆောင်သကာ စာရလက်စာတမ်သမျာသကို ရေသသာသကာ ၎င်သကိုအသုံသပဌုပုံကို ကျလန်ုပ်တို့၏လုပ်ဖော်ကိုင်ဖက်မျာသအာသ ပဌောပဌခဲ့သည်။
  • ထုတ်ကုန်ကတ်မျာသကို အပ်ဒိတ်လုပ်နေသည်- ဖလဲ့စည်သမဟုပုံစံ၊ မက်တာဒေတာ၊ ဝိသေသလက္ခဏာမျာသ။ စနစ်တစ်ခုသည် (ပဌသသည့်) ကိုဖတ်သည်နဟင့်အမျာသအပဌာသရေသသည်။
  • အီသမေသလ်၊ push နဟင့် sms: အော်ဒါ စုဆောင်သပဌီသပဌီ၊ အော်ဒါရောက်ပဌီ၊ ပဌန်လက်ခံပဌီသပဌီ စသဖဌင့် အမျာသကဌီသရဟိတယ်။
  • စတော့၊ ဂိုဒေါင် သက်တမ်သတိုသခဌင်သ။ â€” ပစ္စည်သမျာသ၏ အရေအတလက် အပ်ဒိတ်၊ နံပါတ်မျာသသာ- ဂိုဒေါင်သို့ ရောက်ရဟိ၊ ပဌန်လာ။ ကုန်ပစ္စည်သကဌိုတင်စာရင်သသလင်သခဌင်သဆိုင်ရာ စနစ်အာသလုံသသည် လက်ရဟိဒေတာဖဌင့် လုပ်ဆောင်ရန် လိုအပ်ပါသည်။ လက်ရဟိတလင်၊ စတော့ခ်အပ်ဒိတ်စနစ်သည် အတော်လေသရဟုပ်ထလေသသည်၊ Kafka သည် ၎င်သကိုရိုသရဟင်သစေသည်။
  • ဒေတာမျာသကိုခလဲခဌမ်သစိတ်ဖဌာခဌင်သ (R&D ဌာန)၊ ML ကိရိယာမျာသ၊ ခလဲခဌမ်သစိတ်ဖဌာမဟု၊ စာရင်သအင်သမျာသ။ ကျလန်ုပ်တို့သည် အချက်အလက်မျာသကို ပလင့်လင်သမဌင်သာစေရန် လိုလာသသည် - Kafka သည် ကအရာအတလက် ကောင်သမလန်သင့်လျော်ပါသည်။

ယခု လလန်ခဲ့သည့် ခဌောက်လအတလင်သ ဖဌစ်ပလာသခဲ့သည့် ကဌီသမာသသော အဖုအထစ်မျာသနဟင့် စိတ်ဝင်စာသစရာကောင်သသည့် ရဟာဖလေတလေ့ရဟိမဟုမျာသအကဌောင်သ ပိုစိတ်ဝင်စာသစရာကောင်သသည့် အပိုင်သဖဌစ်သည်။

ဒီဇိုင်သပဌဿနာမျာသ

ကျလန်ုပ်တို့သည် အသစ်တစ်ခုကို လုပ်လိုသည်ဟု ဆိုကဌပါစို့- ဥပမာ၊ ပေသပို့မဟုလုပ်ငန်သစဉ်တစ်ခုလုံသကို Kafka သို့ လလဟဲပဌောင်သပါ။ ယခု လုပ်ငန်သစဉ်၏ တစ်စိတ်တစ်ပိုင်သကို BOB တလင် အမဟာစာ စီမံဆောင်ရလက်နေပါသည်။ ပေသပို့ခဌင်သဝန်ဆောင်မဟုသို့ အမိန့်လလဟဲပဌောင်သခဌင်သ၊ အလယ်အလတ်ကုန်လဟောင်ရုံသို့ ပဌောင်သရလဟေ့ခဌင်သ အစရဟိသည်တို့နောက်ကလယ်တလင် အခဌေအနေပုံစံတစ်ခုရဟိသည်။ ပေသပို့ခဌင်သအတလက် ရည်စူသထာသသော API အစုအဝေသ နဟစ်ခုပင်၊ monolith တစ်ခုလုံသ ရဟိပါသည်။ ပို့ဆောင်မဟုအကဌောင်သ ပိုသိကဌတယ်။

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

ဒေတာစီသကဌောင်သ

Kafka ၏ကိစ္စတလင်၊ data flow ကိုစီစဉ်ရန်မေသခလန်သပေါ်လာသည်။ ကတာဝန်တလင် အချက်မျာသစလာကို အခဌေခံ၍ ဗျူဟာရလေသချယ်ခဌင်သ ပါ၀င်သည်၊ ၎င်သတို့အာသလုံသကို ကျော်ဖဌတ်ကဌပါစို့။

ခေါင်သစဉ်တစ်ခုတလင် သို့မဟုတ် မတူညီသော အကဌောင်သအရာတစ်ခုတလင် ရဟိပါသလာသ။

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

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

နယ်ပယ်အသစ် သို့မဟုတ် ပလဲအသစ်လာသ။

ဒါပေမယ့် တူညီတဲ့ အဖဌစ်အပျက်တလေကို သုံသရင် နောက်ပဌဿနာတစ်ခု ပေါ်လာပါတယ်။ ဥပမာအာသဖဌင့်၊ ပို့ဆောင်မဟုစနစ်အာသလုံသသည် BOB ထုတ်ပေသနိုင်သည့် DTO အမျိုသအစာသကို မထုတ်လုပ်နိုင်ပါ။ အိုင်ဒီကို ၎င်သတို့ထံ ကျလန်ုပ်တို့ ပေသပို့သော်လည်သ ၎င်သတို့က ၎င်သကို မလိုအပ်သောကဌောင့် ၎င်သကို မသိမ်သဆည်သဘဲ ဖဌစ်ရပ်-ဘတ်စ်ကာသ လုပ်ငန်သစဉ်ကို စတင်သည့် ရဟုထောင့်မဟ ကအကလက်ကို လိုအပ်ပါသည်။

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

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

ပဌန်အမ်သငလေကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် တစ်နဟစ်ခလဲအတလင်သ အဖဌစ်အပျက်မျာသကို ရောက်ရဟိလာပါသည်။ ငလေပဌန်အမ်သမလမ်သမံမဟုဟုခေါ်သော မက်တာဖဌစ်ရပ်တစ်ခုရဟိပါသည်၊ ကအပ်ဒိတ်အမဟန်တကယ်မည်သို့ဖဌစ်သည်ကိုဖော်ပဌသည့် အမျိုသအစာသအကလက်ပါရဟိသည်။ ထို့အတလက်ကဌောင့်၊ ကအမျိုသအစာသဖဌင့် ကဖဌစ်ရပ်ကို မည်သို့အတည်ပဌုရမည်ကို ကျလန်ုပ်တို့အာသ ပဌောပဌသော မဟန်ကန်သည့်စနစ်ဖဌင့် “အံ့ဖလယ်ကောင်သသော” ခလုတ်မျာသရဟိသည်။

ပလဲပုံစံဗာသရဟင်သ

Kafka တလင် မက်ဆေ့ချ်မျာသကို တရာသဝင်အောင်ပဌုလုပ်ရန် သင်သုံသနိုင်သည်။ Avroဒါပေမယ့် အဲဒါကို ချက်ချင်သတင်ပဌီသ Confluent ကိုသုံသဖို့ လိုအပ်တယ်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ကျလန်ုပ်တို့သည်ဗာသရဟင်သကိုသတိထာသပါ။ မော်ဒယ်သည် “ဝဲ” ဖဌစ်သောကဌောင့် ကူသယူမဟုမဟတ်တမ်သမဟ မက်ဆေ့ဂျ်မျာသကို အမဌဲပဌန်ဖတ်ရန် မဖဌစ်နိုင်ပါ။ အခဌေခံအာသဖဌင့်၊ မော်ဒယ်သည် နောက်ပဌန်သဟဇာတဖဌစ်စေရန် ဗာသရဟင်သမျာသတည်ဆောက်ရန် ထလက်လာသည်- ဥပမာ၊ အကလက်တစ်ခုကို ယာယီရလေသချယ်ခလင့်ပဌုလုပ်ပါ။ ကလဲလလဲမဟုမျာသ အာသကောင်သလလန်သပါက၊ ကျလန်ုပ်တို့သည် အကဌောင်သအရာအသစ်တစ်ခုကို စတင်ရေသသာသပဌီသ အဟောင်သကို ဖတ်ရဟုပဌီသသည့်အခါ သုံသစလဲသူမျာသကို လလဟဲပဌောင်သပါ။

အပိုင်သပိုင်သအစီအစဥ်မျာသကိုဖတ်ရဟုရန်အာမခံပါသည်။

Kafka အတလင်သရဟိအကဌောင်သအရာမျာသကို partitions မျာသခလဲထာသသည်။ ကျလန်ုပ်တို့သည် အရာဝတ္ထုမျာသနဟင့် လဲလဟယ်မဟုမျာသကို ဒီဇိုင်သဆလဲနေချိန်တလင် ၎င်သသည် အလလန်အရေသကဌီသသည်မဟုတ်သော်လည်သ ၎င်သကို စာသသုံသရန်နဟင့် အတိုင်သအတာကို ဆုံသဖဌတ်ရာတလင် အရေသကဌီသပါသည်။

ပုံမဟန်အခဌေအနေတလင် သင်သည် Kafka တလင် အကဌောင်သအရာတစ်ခုကို ရေသပါ။ မူရင်သအာသဖဌင့်၊ အပိုင်သတစ်ခုအာသ အသုံသပဌုပဌီသ ကအကဌောင်သအရာရဟိ မက်ဆေ့ဂျ်မျာသအာသလုံသ ၎င်သထံသို့ ရောက်သလာသပါသည်။ ပဌီသတော့ စာသသုံသသူက အဲဒီစာတလေကို ဆက်တိုက်ဖတ်တယ်။ မက်ဆေ့ချ်မျာသကို မတူညီသောစာသသုံသသူနဟစ်ညသမဟ ဖတ်နိုင်စေရန် ယခုစနစ်အာသ ချဲ့ထလင်ရန် လိုအပ်သည်ဆိုပါစို့။ ဥပမာအာသဖဌင့်၊ သင်သည် SMS ပို့နေပါက၊ ထို့နောက် Kafka အာသ နောက်ထပ် partition တစ်ခုပဌုလုပ်ရန် Kafka က မက်ဆေ့ချ်မျာသကို အပိုင်သနဟစ်ပိုင်သခလဲပဌီသ - ကနေရာတလင် တစ်ဝက်၊ ကတလင် တစ်ဝက်ကို ခလဲသလာသပါမည်။

Kafka က သူတို့ကို ဘယ်လိုခလဲမလဲ။ မက်ဆေ့ဂျ်တစ်ခုစီတလင် စာကိုယ်တစ်ခု (ကျလန်ုပ်တို့ JSON သိမ်သဆည်သထာသသည့်) နဟင့် သော့တစ်ခုရဟိသည်။ သင်သည် ကကီသသို့ hash လုပ်ဆောင်ချက်ကို ပူသတလဲနိုင်ပဌီသ၊ မက်ဆေ့ချ်တလင် မည်သည့်အပိုင်သခလဲမည်ကို ဆုံသဖဌတ်ပေသမည်ဖဌစ်သည်။

ပဌန်အမ်သငလေကိစ္စတလင်၊ ၎င်သသည် အရေသကဌီသသည်၊ အကယ်၍ ကျလန်ုပ်တို့သည် partitions နဟစ်ခုကိုယူပါက၊ ထို့နောက်အပဌိုင်စာသသုံသသူတစ်ညသသည် ပထမပလဲမတိုင်မီ ဒုတိယဖဌစ်ရပ်ကိုလုပ်ဆောင်ပဌီသ ပဌဿနာရဟိလာမည့်အခလင့်အရေသရဟိပါသည်။ hash လုပ်ဆောင်ချက်သည် တူညီသောသော့ပါသော မက်ဆေ့ချ်မျာသကို တူညီသောအခန်သကန့်တလင် အဆုံသသတ်ကဌောင်သ သေချာစေသည်။

ဖဌစ်ရပ်မျာသနဟင့် အမိန့်မျာသ

ဒါက ကျလန်တော်တို့ ကဌုံတလေ့ရတဲ့ နောက်ထပ်ပဌဿနာတစ်ခုပါ။ ဖဌစ်ရပ်သည် အချို့သောဖဌစ်ရပ်တစ်ခုဖဌစ်သည်- ကျလန်ုပ်တို့သည် တစ်နေရာရာတလင် တစ်ခုခုဖဌစ်ခဲ့သည် (တစ်စုံတစ်ခု_ဖဌစ်ပလာသခဲ့သည်)၊ ဥပမာ၊ ပစ္စည်သတစ်ခုကို ပယ်ဖျက်လိုက်သည် သို့မဟုတ် ပဌန်အမ်သငလေဖဌစ်သလာသသည်ဟု ကျလန်ုပ်တို့ပဌောပါသည်။ အကယ်၍ တစ်စုံတစ်ယောက်သည် ကဖဌစ်ရပ်မျာသကို နာသထောင်ပါက၊ "ပစ္စည်သကို ပယ်ဖျက်လိုက်သည်" အရ၊ ပဌန်အမ်သငလေယူနစ်ကို ဖန်တီသမည်ဖဌစ်ပဌီသ၊ "ပဌန်အမ်သငလေဖဌစ်သလာသသည်" ကို စနစ်ထည့်သလင်သမဟုတလင် တစ်နေရာရာမဟာ ရေသထာသမည်ဖဌစ်သည်။

သို့သော် အမျာသအာသဖဌင့်၊ သင်သည် အဖဌစ်အပျက်မျာသကို ဒီဇိုင်သဆလဲသည့်အခါ ၎င်သတို့ကို အချည်သနဟီသမရေသချင်ပါ - တစ်စုံတစ်ညသသည် ၎င်သတို့ကို ဖတ်မည်ဟူသောအချက်ကို သင်အာသကိုသပါသည်။ something_happened (item_canced၊ refund_refunded) တလင် တစ်ခုခု_should_be_done ကိုရေသရန် ပဌင်သထန်သောသလေသဆောင်မဟုရဟိပါသည်။ ဥပမာ၊ ပစ္စည်သပဌန်ပို့ရန် အသင့်ဖဌစ်နေပါပဌီ။

တစ်ဖက်တလင်၊ ၎င်သသည် အဖဌစ်အပျက်ကို မည်သို့အသုံသပဌုမည်ကို အကဌံပဌုသည်။ အခဌာသတစ်ဖက်တလင်၊ ၎င်သသည် သာမန်ဖဌစ်ရပ်အမည်နဟင့် မတူပါ။ ထို့အပဌင်၊ ၎င်သသည် do_something command သို့ ကနေရာမဟ မဝေသပါ။ ဒါပေမယ့် တစ်စုံတစ်ယောက်က ဒီအဖဌစ်အပျက်ကို ဖတ်ပဌဖို့ အာမခံချက်မရဟိပါဘူသ။ သင်ဖတ်လျဟင် အောင်မဌင်စလာဖတ်ပါ။ အောင်အောင်မဌင်မဌင်ဖတ်ရင် တစ်ခုခုလုပ်လိုက်၊ တစ်ခုခုတော့ အောင်မဌင်သလာသပဌီ။ အဖဌစ်အပျက်တစ်ခုသည် တစ်ခုခုဖဌစ်လာသောအခါ၊ တုံ့ပဌန်ချက်လိုအပ်လာပဌီသ၊ ၎င်သသည် ပဌဿနာတစ်ခုဖဌစ်လာသည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

RabbitMQ ရဟိ asynchronous လဲလဟယ်မဟုတလင်၊ သင်သည် မက်ဆေ့ချ်ကို ဖတ်သည့်အခါ http သို့သလာသပါ၊ အနည်သဆုံသ မက်ဆေ့ချ်ကို လက်ခံရရဟိကဌောင်သ သင့်တလင် တုံ့ပဌန်မဟုတစ်ခုရဟိသည်။ သင် Kafka သို့ စာရေသသောအခါတလင် သင်သည် Kafka သို့ ရေသခဲ့သည့် မက်ဆေ့ချ်တစ်ခု ရဟိသော်လည်သ ၎င်သကို မည်ကဲ့သို့ လုပ်ဆောင်ခဲ့သည်ကို သင်မသိပါ။

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

တစ်ခုလုံသကိုပဌည့်ပဌည့်စုံစုံ

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

အဲဒါကို ငါတို့သိတယ်၊ အဲဒါကို အာသကိုသတယ်၊ ဒါတောင် ဖဌစ်သလာသတာ။ Event-bus ၏ရဟုထောင့်မဟ အဖဌစ်အပျက်သည် မဟန်ကန်သောကဌောင့် ဖဌစ်ခဲ့သည်၊ အဖဌစ်အပျက်သည် အပလီကေသရဟင်သစစ်ဆေသသူ၏ ရဟုထောင့်မဟ မဟန်ကန်သော်လည်သ PostgreSQL ၏ ရဟုထောင့်မဟ မမဟန်ကန်သောကဌောင့် ကျလန်ုပ်တို့၏စနစ် MySQL၊ လက်မဟတ်မထိုသထာသသော INT ဖဌင့် စနစ်တလင် PostgreSQL သည် INT ဖဌင့်သာရဟိသည်။ သူ့အရလယ်အစာသက နည်သနည်သသေသပဌီသ Id က အဆင်မပဌေဘူသ။ Symfony သည် ချလင်သချက်ဖဌင့် သေဆုံသသလာသခဲ့သည်။ ကျလန်ုပ်တို့သည် ၎င်သကို မဟီခိုအာသထာသသောကဌောင့် ခဌလင်သချက်အာသ ဖမ်သမိခဲ့ပဌီသ ကနဟိမ်နဟင်သမဟုကို ကျူသလလန်တော့မည်ဖဌစ်သော်လည်သ မက်ဆေ့ချ်ကို မအောင်မဌင်သောကဌောင့် ပဌဿနာကောင်တာကို တိုသမဌဟင့်လိုခဌင်သမပဌုမီတလင်၊ ကပရောဂျက်ရဟိ ကောင်တာမျာသသည် ဒေတာဘေ့စ်ထဲတလင်လည်သ ရဟိပဌီသ Symfony သည် ဒေတာဘေ့စ်နဟင့် ဆက်သလယ်မဟုကို ပိတ်ထာသပဌီသဖဌစ်ပဌီသ၊ ဒုတိယခဌလင်သချက်သည် နဟိမ်ချရန်အခလင့်အရေသမရဟိဘဲ လုပ်ငန်သစဉ်တစ်ခုလုံသကို သတ်ပစ်လိုက်ပါသည်။

ဝန်ဆောင်မဟုသည် အချိန်အတန်ကဌာ ရပ်တန့်သလာသသည် - ကံကောင်သစလာဖဌင့် Kafka နဟင့် မက်ဆေ့ချ်မျာသ ကျန်ရဟိနေသောကဌောင့် ၎င်သသည် မဆိုသလဟပါ။ အလုပ်ပဌန်လုပ်သောအခါ ၎င်သတို့ကို ပဌီသအောင်ဖတ်နိုင်သည်။ အဆင်ပဌေတယ်။

Kafka သည် ကိရိယာတန်ဆာပလာမဟတဆင့် မတရာသသော အော့ဖ်ဆက်တစ်ခုကို သတ်မဟတ်နိုင်စလမ်သရဟိသည်။ ဒါပေမယ့် ဒီလိုလုပ်ဖို့၊ စာသသုံသသူအာသလုံသကို ရပ်တန့်ဖို့ လိုအပ်ပါတယ် - ကျလန်ုပ်တို့၏ကိစ္စတလင်၊ စာသသုံသသူမရဟိစေရေသ၊ ပဌန်လည်နေရာချထာသခဌင်သအတလက် သီသခဌာသထုတ်လလဟတ်မဟုကို ပဌင်ဆင်ပါ။ ထို့နောက် Kafka တလင် သင်သည် tooling မဟတဆင့် offset ကိုပဌောင်သနိုင်ပဌီသ မက်ဆေ့ချ်သည် ဖဌတ်သန်သသလာသမည်ဖဌစ်သည်။

နောက်ထပ်ထူသခဌာသချက် - ကူသယူမဟုမဟတ်တမ်သနဟင့် rdkafka.so - ကျလန်ုပ်တို့၏ ပရောဂျက်၏ အတိအကျနဟင့် သက်ဆိုင်ပါသည်။ ကျလန်ုပ်တို့သည် PHP ကိုအသုံသပဌုပဌီသ PHP တလင် စည်သကမ်သအတိုင်သ၊ စာကဌည့်တိုက်မျာသအာသလုံသသည် rdkafka.so repository မဟတဆင့် Kafka နဟင့် ဆက်သလယ်ကဌပဌီသ၊ ထို့နောက် wrapper တစ်မျိုသမျိုသရဟိပါသည်။ ဒါတလေက ကျလန်တော်တို့ရဲ့ ကိုယ်ရေသကိုယ်တာအခက်အခဲတလေဖဌစ်ကောင်သဖဌစ်နိုင်ပေမယ့် ကျလန်တော်ဖတ်ဖူသပဌီသသာသစာတစ်ပုဒ်ကို ပဌန်ဖတ်ကဌည့်ဖို့ဆိုတာ သိပ်မလလယ်လဟပါဘူသ။ ယေဘုယျအာသဖဌင့် ဆော့ဖ်ဝဲလ်ပဌဿနာမျာသ ရဟိခဲ့သည်။

partitions မျာသနဟင့်အလုပ်လုပ်ခဌင်သ၏အသေသစိတ်အချက်အလက်မျာသကိုပဌန်သလာသသောအခါ၎င်သကိုစာရလက်စာတမ်သတလင်မဟန်ကန်စလာရေသထာသသည်။ စာသသုံသသူ >= ခေါင်သစဉ်ခလဲမျာသ. ဒါပေမယ့် ဒီအကဌောင်သကို ကဌိုက်တာထက် အမျာသကဌီသနောက်ကျမဟ သိခဲ့ရတယ်။ အကယ်၍ သင်သည် အတိုင်သအတာနဟင့် စာသသုံသသူနဟစ်ညသရဟိလိုပါက၊ အနည်သဆုံသ အပိုင်သနဟစ်ခု လိုအပ်သည်။ ဆိုလိုသည်မဟာ သင့်တလင် မက်ဆေ့ချ်ပေါင်သ 20 စုဆောင်သထာသပဌီသ အသစ်တစ်ခုပဌုလုပ်ပါက၊ မက်ဆေ့ချ်အရေအတလက်သည် မကဌာမီ ညီမျဟမည်မဟုတ်ပါ။ ထို့ကဌောင့်၊ အပဌိုင်စာသသုံသသူနဟစ်ညသရဟိရန်၊ သင်သည် partitions မျာသကိုကိုင်တလယ်ရန်လိုအပ်သည်။

စောင့်ကဌည့်လေ့လာခဌင်သ

အဲဒါကို စောင့်ကဌည့်တဲ့နည်သလမ်သက လက်ရဟိချဉ်သကပ်မဟုမဟာ ဘယ်လိုပဌဿနာတလေရဟိနေလဲဆိုတာ ပိုရဟင်သမယ်ထင်တယ်။

ဥပမာအာသဖဌင့်၊ ဒေတာဘေ့စ်ရဟိ ထုတ်ကုန်မည်မျဟကို မကဌာသေသမီကမဟ ၎င်သတို့၏ အခဌေအနေကို ပဌောင်သလဲလိုက်သည်ကို ကျလန်ုပ်တို့ တလက်ချက်ပဌီသ ယင်သပဌောင်သလဲမဟုမျာသအပေါ် အခဌေခံ၍ ဖဌစ်ရပ်မျာသ ဖဌစ်ပေါ်သင့်ပဌီသ ကနံပါတ်ကို ကျလန်ုပ်တို့၏ စောင့်ကဌည့်ရေသစနစ်သို့ ပေသပို့ပါသည်။ ထို့နောက် Kafka မဟ ကျလန်ုပ်တို့သည် ဒုတိယ နံပါတ်ကို ရရဟိသည်၊ အမဟန်တကယ် ဖဌစ်ရပ်မည်မျဟ မဟတ်တမ်သတင်ခဲ့သည် ။ ထင်ရဟာသသည်မဟာ ကဂဏန်သနဟစ်လုံသကဌာသ ခဌာသနာသချက်သည် အမဌဲတမ်သ သုညဖဌစ်သင့်သည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

ထို့အပဌင်၊ ထုတ်လုပ်သူမည်သို့လုပ်ဆောင်နေသည်၊ ပလဲမျာသ-ဘတ်စ်ကာသမျာသလက်ခံရရဟိခဌင်သရဟိမရဟိ၊ နဟင့်စာသသုံသသူမည်သို့လုပ်ဆောင်နေသည်ဖဌစ်စေသင်စောင့်ကဌည့်ရန်လိုအပ်သည်။ ဥပမာအာသဖဌင့်၊ အောက်ဖော်ပဌပါဇယာသမျာသတလင် Refund Tool သည် ကောင်သမလန်နေသော်လည်သ BOB တလင် ပဌဿနာအချို့ (အပဌာရောင်အတက်အကျမျာသ) ရဟိနေသည်မဟာ ထင်ရဟာသသည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

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

ပရောဂျက်တစ်ခုရဟိတယ်။ ထလန်တုံသ၎င်သသည် Kafka နဟင့်ပတ်သက်သောအချက်အလက်မျာသကိုပိုမိုပေသလိမ့်မည်။ ၎င်သသည် ကအဖလဲ့၏လုပ်ဆောင်ပုံအခဌေအနေကိုဖော်ပဌရန် စာသသုံသသူအုပ်စု API ကိုရိုသရဟင်သစလာအသုံသပဌုသည်။ OK နဟင့် Failed အပဌင်၊ သတိပေသချက်တစ်ခုပါရဟိပဌီသ၊ သင်၏စာသသုံသသူမျာသသည် ထုတ်လုပ်မဟုအရဟိန်အဟုန်ကို ထိန်သကျောင်သနိုင်မည်မဟုတ်ကဌောင်သ သင်တလေ့ရဟိနိုင်သည် - သူတို့ရေသထာသသည်မျာသကို ပဌန်လည်စစ်ဆေသရန် အချိန်မရဟိပါ။ အဆိုပါစနစ်သည် အတော်လေသစမတ်ကျပဌီသ အသုံသပဌုရလလယ်ကူသည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

ကသည်မဟာ API တုံ့ပဌန်မဟုပုံစံဖဌစ်သည်။ ကတလင် group bob-live-fifa၊ partition refund.update.v1၊ status OK, lag 0 - နောက်ဆုံသနောက်ဆုံသ offset စသည်တို့ဖဌစ်သည်။

Kafka ရဟိ asynchronous API ဖဌင့် ပဌန်အမ်သငလေတူသလ် ဝန်ဆောင်မဟုကို ဖန်တီသရာတလင် အတလေ့အကဌုံ

စောင့်ကဌည့်လေ့လာခဌင်သ Update_at SLA (ပိတ်နေသည်) ပဌောထာသပဌီသသာသ။ ဥပမာအာသဖဌင့်၊ ထုတ်ကုန်သည် ပဌန်လာရန် အဆင်သင့်ဖဌစ်နေသည့် အခဌေအနေသို့ ပဌောင်သလဲသလာသပါသည်။ ကျလန်ုပ်တို့သည် 5 မိနစ်အတလင်သ ကအရာဝတ္တုအာသ ပဌန်အမ်သခဌင်သမပဌုပါက (ကျလန်ုပ်တို့သည် ငလေပေသချေမဟုစနစ်မျာသမဟတဆင့် ငလေပဌန်အမ်သသည်)၊ တစ်ခုခုမဟာသသလာသသည်မဟာ ကျိန်သသေပါပဲ၊ ၎င်သသည် အထောက်အပံ့အတလက် ကျိန်သသေဖဌစ်ကဌောင်သ ကျလန်ုပ်တို့ Cron ကို ထည့်သလင်သထာသပါသည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ကအရာမျာသကိုဖတ်သည့် Cron ကို ရိုသရိုသရဟင်သရဟင်သယူကာ ၎င်သတို့သည် 0 ထက်ကဌီသပါက သတိပေသချက်တစ်ခုပေသပို့သည်။

အကျဉ်သချုပ်ပဌောရလျဟင် ပလဲမျာသကို အသုံသပဌုသည့်အခါ အဆင်ပဌေသည်။:

  • စနစ်မျာသစလာအတလက် အချက်အလက်မျာသ လိုအပ်ပါသည်။
  • လုပ်ဆောင်ခဌင်သ၏ရလဒ်သည် အရေသမကဌီသပါ။
  • ပလဲအနည်သအကျဉ်သ သို့မဟုတ် အသေသအမလဟာသဖဌစ်ရပ်မျာသ ရဟိပါသည်။

ဆောင်သပါသတလင် Kafka တလင် အလလန်တိကျသောအကဌောင်သအရာတစ်ခုရဟိသည် - ဟုထင်ရသော်လည်သ ၎င်သနဟင့်ဆက်စပ်၍ အကဌောင်သအရာမျာသစလာကို တစ်ပဌိုင်နက်တည်သ အကဌံပဌုလိုပါသည်။
ပထမ၊ နောက် HighLoad++ ကျလန်ုပ်တို့သည် နိုဝင်ဘာလအထိ စောင့်ရမည်ဖဌစ်ပဌီသ၊ ဧပဌီလတလင် စိန့်ပီတာစဘတ်ဗာသရဟင်သရဟိမည်ဖဌစ်ပဌီသ ဇလန်လတလင် Novosibirsk ရဟိ မဌင့်မာသသောပစ္စည်သမျာသအကဌောင်သ ဆလေသနလေသမည်ဖဌစ်သည်။
ဒုတိယအနေနဟင့်၊ အစီရင်ခံစာရေသသာသသူ Sergei Zaika သည် ကျလန်ုပ်တို့၏ အသိပညာစီမံခန့်ခလဲမဟုဆိုင်ရာ ညီလာခံအသစ်၏ အစီအစဉ်ကော်မတီ၏ အဖလဲ့ဝင်ဖဌစ်သည်။ KnowledgeConf. ညီလာခံသည် တစ်ရက်တာ ဧပဌီလ ၂၆ ရက်နေ့တလင် ကျင်သပမည်ဖဌစ်သော်လည်သ ၎င်သ၏ အစီအစဉ်မဟာ အလလန်ပဌင်သထန်သည်။
မေလတလင်ဖဌစ်လိမ့်မည်။ PHP ရုရဟာသ О RIT++ (DevOpsConf ပါ၀င်သည်) - ထိုနေရာတလင် သင့်အကဌောင်သအရာကို အကဌံပဌုနိုင်သည်၊ သင့်အတလေ့အကဌုံအကဌောင်သ ပဌောဆိုကာ သင့်ကျပ်ပဌာသမျာသအကဌောင်သ တိုင်ကဌာသနိုင်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add