Memcached ကို အလျာသလိုက် စကေသချရန် mcroouter ကို အသုံသပဌုခဌင်သ။

Memcached ကို အလျာသလိုက် စကေသချရန် mcroouter ကို အသုံသပဌုခဌင်သ။

မည်သည့်ဘာသာစကာသဖဌင့်မဆို high-load ပရောဂျက်မျာသကို ဖော်ဆောင်ရာတလင် အထူသချဉ်သကပ်မဟုနဟင့် အထူသကိရိယာမျာသအသုံသပဌုမဟု လိုအပ်သော်လည်သ PHP တလင် အပလီကေသရဟင်သမျာသနဟင့်ပတ်သက်လာသောအခါတလင်၊ ဥပမာအာသဖဌင့် သင်ဖလံ့ဖဌိုသတိုသတက်ရန် လိုအပ်သည့်အခဌေအနေမဟာ ပိုမိုဆိုသရလာသလာနိုင်သည်။ ကိုယ်ပိုင် application server. ကမဟတ်စုတလင် ဖဌန့်ဝေထာသသော session storage နဟင့် memcached တလင် data caching နဟင့် “ward” ပရောဂျက်တစ်ခုတလင် ကပဌဿနာမျာသကို ကျလန်ုပ်တို့ဖဌေရဟင်သပုံအကဌောင်သ ဆလေသနလေသပါမည်။

အခါသမယ၏သူရဲကောင်သသည် symfony 2.3 framework ကိုအခဌေခံထာသသော PHP အပလီကေသရဟင်သတစ်ခုဖဌစ်ပဌီသ၊ အပ်ဒိတ်လုပ်မည့်လုပ်ငန်သအစီအစဉ်မျာသတလင်လုံသဝမပါဝင်ပါ။ အတော်လေသ စံသတ်မဟတ်ထာသသော သိုလဟောင်မဟုအပဌင်၊ ကပရောဂျက်ကို အပဌည့်အဝ အသုံသပဌုခဲ့သည်။ "အရာရာကို သိမ်သဆည်သခဌင်သ" မူဝါဒ memcached တလင်- ဒေတာဘေ့စ်နဟင့် API ဆာဗာမျာသသို့ တောင်သဆိုမဟုမျာသကို တုံ့ပဌန်မဟုမျာသ၊ အမျိုသမျိုသသော အလံမျာသ၊ ကုဒ်လုပ်ဆောင်မဟုကို ထပ်တူပဌုခဌင်သအတလက် သော့ခတ်မဟုမျာသနဟင့် အခဌာသအရာမျာသ။ ထိုသို့သောအခဌေအနေတလင်၊ memcached သည် အက်ပလီကေသရဟင်သ၏လည်ပတ်မဟုအတလက် အသက်အန္တရာယ်ဖဌစ်စေပါသည်။ ထို့အပဌင်၊ ကက်ရဟ်ဆုံသရဟုံသမဟုသည် ဆိုသရလာသသောအကျိုသဆက်မျာသကို ဖဌစ်ပေါ်စေသည်- DBMS သည် ချုပ်ရိုသမျာသကဌာသတလင် ပေါက်ကဌာသလာသည်၊ API ဝန်ဆောင်မဟုမျာသသည် တောင်သဆိုမဟုမျာသကို တာသမဌစ်ရန်စသည် အခဌေအနေတည်ငဌိမ်စေရန် မိနစ်ဆယ်နဟင့်ချီကဌာနိုင်ပဌီသ ကကာလအတလင်သ ဝန်ဆောင်မဟုသည် အလလန်နဟေသကလေသနေမည် သို့မဟုတ် လုံသဝမရနိုင်ပါ။

ပံ့ပိုသပေသရန် လိုအပ်ပါသည်။ အာသစိုက်ထုတ်မဟုအနည်သငယ်ဖဌင့် အပလီကေသရဟင်သကို ရေပဌင်ညီအတိုင်သ အတိုင်သအတာချနိုင်မဟု, i.e. အရင်သအမဌစ်ကုဒ်သို့ အနည်သငယ်သောပဌောင်သလဲမဟုနဟင့် လုပ်ဆောင်နိုင်စလမ်သ အပဌည့်အစုံကို ထိန်သသိမ်သထာသသည်။ ကက်ရဟ်သည် ကျရဟုံသမဟုမျာသကို ခံနိုင်ရည်ရဟိစေရုံသာမက ၎င်သမဟ ဒေတာဆုံသရဟုံသမဟုကို လျဟော့ချရန်လည်သ ကဌိုသစာသပါ။

Memcached ကိုယ်တိုင်က ဘာဖဌစ်နေတာလဲ။

ယေဘုယျအာသဖဌင့်၊ PHP အတလက် memcached extension သည် ဖဌန့်ဝေထာသသော data နဟင့် session storage ကို box မဟ ပံ့ပိုသပေသသည်။ တစ်သမတ်တည်သသော့ကို ဟက်ခဌင်သအတလက် ယန္တရာသသည် သင့်အာသ ဆာဗာမျာသစလာတလင် ဒေတာမျာသကို အညီအမျဟ ထာသရဟိနိုင်စေကာ၊ အုပ်စုမဟ သီသခဌာသဆာဗာတစ်ခုထံသို့ သီသခဌာသသော့တစ်ခုစီကို သီသခဌာသစီလိပ်စာပေသကာ တပ်ဆင်ထာသသော ပျက်ကလက်မဟုကိရိယာမျာသသည် ကက်ရဟ်ဝန်ဆောင်မဟုကို မဌင့်မာသစလာရရဟိနိုင်ကဌောင်သ သေချာစေသည် (သို့သော် ကံမကောင်သသည်မဟာ၊ ဒေတာမရဟိပါ။).

စက်ရဟင်သိုလဟောင်မဟုနဟင့်အတူ အရာမျာသသည် အနည်သငယ်ပိုကောင်သသည်- သင် configure လုပ်နိုင်ပါသည်။ memcached.sess_number_of_replicasဒေတာမျာသကို ဆာဗာမျာသစလာတလင် တစ်ပဌိုင်နက် သိမ်သဆည်သမည်ဖဌစ်ပဌီသ၊ memcached ဥပမာတစ်ခု၏ ချို့ယလင်သချက်တစ်ခုကဌောင့် ဒေတာကို အခဌာသသူမျာသထံမဟ လလဟဲပဌောင်သပေသမည်ဖဌစ်သည်။ သို့သော်၊ ဆာဗာသည် ဒေတာမပါဘဲ အလန်လိုင်သမဟ ပဌန်တက်လာပါက (ပုံမဟန်အတိုင်သ ပဌန်လည်စတင်ပဌီသနောက်တလင်) အချို့သော့မျာသကို ၎င်သ၏သဘောအရ ပဌန်လည်ဖဌန့်ဝေမည်ဖဌစ်သည်။ တကယ်တော့ ဒါက ဆိုလိုတာပါ။ session data ဆုံသရဟုံသမဟုလလဲချော်ပါက အခဌာသပုံစံတူသို့ "သလာသ" ရန် နည်သလမ်သမရဟိသောကဌောင့်ဖဌစ်သည်။

စံချိန်မီ စာကဌည့်တိုက်ကိရိယာမျာသကို အဓိကအာသဖဌင့် ရည်ရလယ်ပါသည်။ အလျာသလိုက် စကေသချဲ့ခဌင်သ- ၎င်သတို့သည် သင့်အာသ ကက်ရဟ်အာသ အလလန်ကဌီသမာသသော အရလယ်အစာသမျာသအထိ တိုသမဌဟင့်နိုင်ပဌီသ မတူညီသော ဆာဗာမျာသပေါ်တလင် လက်ခံထာသသည့် ကုဒ်မျာသမဟ ဝင်ရောက်ခလင့်ကို ပေသစလမ်သနိုင်မည်ဖဌစ်သည်။ သို့သော်၊ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ သိမ်သဆည်သထာသသောဒေတာပမာဏသည် မျာသစလာဂစ်ဂါဘိုက်ထက်မကျော်လလန်ပါ၊ နဟင့်တစ်ခု သို့မဟုတ် နဟစ်ခု node မျာသ၏စလမ်သဆောင်ရည်သည် လုံလောက်ပါသည်။ ထို့ကဌောင့်၊ အလုပ်လုပ်သည့်အခဌေအနေတလင် အနည်သဆုံသ cache instance တစ်ခုကို ထိန်သသိမ်သထာသစဉ်တလင် တစ်ခုတည်သသော အသုံသဝင်သော စံကိရိယာမျာသသည် memcached ရရဟိနိုင်မဟုကို သေချာစေရန် ဖဌစ်နိုင်သည်။ သို့သော်လည်သ ကအခလင့်အရေသကိုပင် အခလင့်ကောင်သယူရန် မဖဌစ်နိုင်ခဲ့ပေ... ကတလင် ပရောဂျက်တလင် အသုံသပဌုခဲ့သော မူဘောင်၏ ရဟေသယခင်ကကို ပဌန်လည်အမဟတ်ရရကျိုသနပ်သည်၊ ထို့ကဌောင့် ၎င်သအက်ပလီကေသရဟင်သကို ဆာဗာပေါင်သကန်ဖဌင့် လုပ်ဆောင်ရန် မဖဌစ်နိုင်သောကဌောင့် ဖဌစ်သည်။ စက်ရဟင်ဒေတာ ဆုံသရဟုံသမဟုကိုလည်သ မမေ့ပါနဟင့်- သုံသစလဲသူမျာသ၏ ကဌီသမာသသော အကောင့်မဟ ထလက်ခဌင်သမဟ ဖောက်သည်၏ မျက်လုံသမျာသ လဟုပ်ယမ်သသလာသပါသည်။

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

mcroouter

၎င်သသည် ၎င်သ၏ပဌဿနာမျာသကို ဖဌေရဟင်သရန် Facebook မဟ ဖန်တီသထာသသော memcached router ဖဌစ်သည်။ ၎င်သသည် ခလင့်ပဌုသော memcached စာသာသပရိုတိုကောကို ပံ့ပိုသပေသသည်။ အတိုင်သအတာ memcached ထည့်သလင်သမဟုမျာသ ရူသသလပ်သောအချိုသအစာသသို့။ mcroouter ၏အသေသစိတ်ဖော်ပဌချက်ကို တလင်တလေ့နိုင်သည်။ ဒီကဌေညာချက်. ပမာ ကျယ်ပဌန့်လုပ်ဆောင်နိုင်စလမ်သ ၎င်သသည် ကျလန်ုပ်တို့ လိုအပ်သည်မျာသကို လုပ်ဆောင်နိုင်သည်-

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

အလုပ်သလာသပါ။

mcroouter ဖလဲ့စည်သမဟု

ငါ config ကို တိုက်ရိုက်သလာသလိုက်မယ်

{
 "pools": {
   "pool00": {
     "servers": [
       "mc-0.mc:11211",
       "mc-1.mc:11211",
       "mc-2.mc:11211"
   },
   "pool01": {
     "servers": [
       "mc-1.mc:11211",
       "mc-2.mc:11211",
       "mc-0.mc:11211"
   },
   "pool02": {
     "servers": [
       "mc-2.mc:11211",
       "mc-0.mc:11211",
       "mc-1.mc:11211"
 },
 "route": {
   "type": "OperationSelectorRoute",
   "default_policy": "AllMajorityRoute|Pool|pool00",
   "operation_policies": {
     "get": {
       "type": "RandomRoute",
       "children": [
         "MissFailoverRoute|Pool|pool02",
         "MissFailoverRoute|Pool|pool00",
         "MissFailoverRoute|Pool|pool01"
       ]
     }
   }
 }
}

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

  • ကဖလဲ့စည်သပုံတလင်၊ mcrouter သည် တောင်သဆိုချက်အမိန့်ကို အခဌေခံ၍ တောင်သဆိုချက်ပေသပို့မည့်လမ်သကဌောင်သကို ရလေသချယ်သည်။ ကောင်လေသက သူ့ကို ဒီလိုပဌောပဌတယ်။ OperationSelectorRoute.
  • တောင်သဆိုချက်မျာသကို ကိုင်တလယ်သူထံသလာသပါ။ RandomRoute၎င်သသည် array အရာဝတ္ထုမျာသအကဌာသ ရေကူသကန် သို့မဟုတ် လမ်သကဌောင်သကို ကျပန်သရလေသချယ်သည်။ children. က array ၏ ဒဌပ်စင်တစ်ခုစီသည် ကိုင်တလယ်သူအဖဌစ် ပဌောင်သလဲပါသည်။ MissFailoverRouteဒေတာဖဌင့် တုံ့ပဌန်မဟုမရရဟိမချင်သ၊ ၎င်သသည် ကလိုင်သယင့်ထံ ပဌန်ပေသမည့် အစုအဝေသရဟိ ဆာဗာတစ်ခုစီကို ဖဌတ်သန်သသလာသမည်ဖဌစ်သည်။
  • သီသသန့်သုံသရင် MissFailoverRoute ဆာဗာ သုံသခုပေါင်သစုကာ၊ ထို့နောက် တောင်သဆိုချက်မျာသအာသလုံသသည် ပထမ memcached စံနမူနာသို့ ညသစလာရောက်ရဟိလာမည်ဖဌစ်ပဌီသ ကျန်အရာမျာသမဟာ ဒေတာမရဟိသည့်အခါ ကျန်ရဟိသော အခဌေခံတောင်သဆိုမဟုမျာသကို လက်ခံရရဟိမည်ဖဌစ်သည်။ ထိုသို့သော ချဉ်သကပ်မဟုမျိုသ ဖဌစ်ပေါ်လာမည်ဖဌစ်သည်။ စာရင်သထဲရဟိ ပထမဆုံသ ဆာဗာပေါ်တလင် အလလန်အကျလံ ဝန်တင်ခဌင်သ။ထို့ကဌောင့် မတူညီသော sequences မျာသပါရဟိသော ပေါင်သကူသကန်သုံသခုကို ထုတ်လုပ်ပဌီသ ၎င်သတို့ကို ကျပန်သရလေသချယ်ရန် ဆုံသဖဌတ်ခဲ့သည်။
  • အခဌာသတောင်သဆိုမဟုမျာသအာသလုံသကို (၎င်သသည် မဟတ်တမ်သတစ်ခုဖဌစ်သည်) ကိုအသုံသပဌု၍ လုပ်ဆောင်နေပါသည်။ AllMajorityRoute. ကကိုင်တလယ်သူသည် ရေကူသကန်အတလင်သရဟိ ဆာဗာမျာသအာသလုံသသို့ တောင်သဆိုမဟုမျာသကို ပေသပို့ပဌီသ ၎င်သတို့ထဲမဟ အနည်သဆုံသ N/2+1 ထံမဟ တုံ့ပဌန်မဟုမျာသကို စောင့်ဆိုင်သနေပါသည်။ အသုံသပဌုခဌင်သမဟ AllSyncRoute ကနည်သလမ်သသည် အပဌုသဘောဆောင်သော တုံ့ပဌန်မဟုလိုအပ်သောကဌောင့် စာရေသခဌင်သလုပ်ငန်သမျာသကို စလန့်လလဟတ်ခဲ့ရသည်။ всех အုပ်စုအတလင်သရဟိဆာဗာမျာသ - မဟုတ်ပါက၎င်သသည်ပဌန်လာလိမ့်မည်။ SERVER_ERROR. mcrouter သည် ရရဟိနိုင်သော ကက်ရဟ်မျာသသို့ ဒေတာကို ပေါင်သထည့်သော်လည်သ၊ PHP လုပ်ဆောင်ချက်ကို ခေါ်ဆိုသည်။ error တစ်ခုပဌန်ပေါ်လာလိမ့်မည်။ နဟင့်သတိပေသချက်ထုတ်ပဌန်လိမ့်မည်။ AllMajorityRoute တင်သကျပ်လလန်သပဌီသ အထက်တလင်ဖော်ပဌထာသသော ပဌဿနာမျာသမရဟိဘဲ ယူနစ်တစ်ဝက်အထိ ဝန်ဆောင်မဟုမဟ ဖယ်ရဟာသနိုင်မည်ဖဌစ်သည်။

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

NB: mcroouter သင်ယူခဌင်သအတလက် အသုံသဝင်သောလင့်ခ်မျာသကိုလည်သ သင်ရဟာဖလေနိုင်ပါသည်။ wiki တလင်စာရလက်စာတမ်သမျာသ О စီမံကိန်သကိစ္စမျာသ (အပိတ်မျာသ အပါအဝင်) အမျိုသမျိုသသောဖလဲ့စည်သပုံမျာသ၏ သိုလဟောင်ရုံတစ်ခုလုံသကို ကိုယ်စာသပဌုသည်။

mcroouter တည်ဆောက်ခဌင်သနဟင့်လည်ပတ်ခဌင်သ။

ကျလန်ုပ်တို့၏အပလီကေသရဟင်သ (နဟင့် memcached ကိုယ်တိုင်) Kubernetes တလင်အလုပ်လုပ်သည် - ထို့ကဌောင့်၊ mcrouter သည်လည်သထိုနေရာတလင်တည်ရဟိသည်။ ဘို့ ကလန်တိန်နာတပ်ဆင်ခဌင်သ။ ငါတို့သုံသတယ်။ werf၊ config သည်ကကဲ့သို့ဖဌစ်လိမ့်မည်-

NB: ဆောင်သပါသတလင် ပေသထာသသည့် စာရင်သမျာသကို သိုလဟောင်ခန်သတလင် ထုတ်ဝေထာသသည်။ မီသခိုသ/ မိုက်ခရိုတာ.

configVersion: 1
project: mcrouter
deploy:
 namespace: '[[ env ]]'
 helmRelease: '[[ project ]]-[[ env ]]'
---
image: mcrouter
from: ubuntu:16.04
mount:
- from: tmp_dir
 to: /var/lib/apt/lists
- from: build_dir
 to: /var/cache/apt
ansible:
 beforeInstall:
 - name: Install prerequisites
   apt:
     name: [ 'apt-transport-https', 'tzdata', 'locales' ]
     update_cache: yes
 - name: Add mcrouter APT key
   apt_key:
     url: https://facebook.github.io/mcrouter/debrepo/xenial/PUBLIC.KEY
 - name: Add mcrouter Repo
   apt_repository:
     repo: deb https://facebook.github.io/mcrouter/debrepo/xenial xenial contrib
     filename: mcrouter
     update_cache: yes
 - name: Set timezone
   timezone:
     name: "Europe/Moscow"
 - name: Ensure a locale exists
   locale_gen:
     name: en_US.UTF-8
     state: present
 install:
 - name: Install mcrouter
   apt:
     name: [ 'mcrouter' ]

(werf.yaml)

... ပုံကဌမ်သထုတ်ပါ။ ပဲ့စင်ဇယာသ. စိတ်ဝင်စာသစရာကောင်သတာက ပုံတူအရေအတလက်ပေါ်မူတည်ပဌီသ config generator တစ်ခုပဲရဟိပါတယ်။ (မည်သူမဆို ပို၍ ပေါ့ပါသပဌီသ အံဝင်ခလင်ကျရဟိသော ရလေသချယ်မဟုရဟိပါက comment တလင် မျဟဝေပါ):

{{- $count := (pluck .Values.global.env .Values.memcached.replicas | first | default .Values.memcached.replicas._default | int) -}}
{{- $pools := dict -}}
{{- $servers := list -}}
{{- /* ЗапПлМяеЌ  ЌассОв ЎвуЌя кПпОяЌО серверПв: "0 1 2 0 1 2" */ -}}
{{- range until 2 -}}
 {{- range $i, $_ := until $count -}}
   {{- $servers = append $servers (printf "mc-%d.mc:11211" $i) -}}
 {{- end -}}
{{- end -}}
{{- /* СЌещаясь пП ЌассОву, пПлучаеЌ N срезПв: "[0 1 2] [1 2 0] [2 0 1]" */ -}}
{{- range $i, $_ := until $count -}}
 {{- $pool := dict "servers" (slice $servers $i (add $i $count)) -}}
 {{- $_ := set $pools (printf "MissFailoverRoute|Pool|pool%02d" $i) $pool -}}
{{- end -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
 name: mcrouter
data:
 config.json: |
   {
     "pools": {{- $pools | toJson | replace "MissFailoverRoute|Pool|" "" -}},
     "route": {
       "type": "OperationSelectorRoute",
       "default_policy": "AllMajorityRoute|Pool|pool00",
       "operation_policies": {
         "get": {
           "type": "RandomRoute",
           "children": {{- keys $pools | toJson }}
         }
       }
     }
   }

(10-mcouter.yaml)

ကျလန်ုပ်တို့သည် ၎င်သကို စမ်သသပ်ပတ်ဝန်သကျင်တလင် ဖဌန့်ကျက်ပဌီသ စစ်ဆေသပါ-

# php -a
Interactive mode enabled

php > # ПрПверяеЌ запОсь О чтеМОе
php > $m = new Memcached();
php > $m->addServer('mcrouter', 11211);
php > var_dump($m->set('test', 'value'));
bool(true)
php > var_dump($m->get('test'));
string(5) "value"
php > # РабПтает! ТестОруеЌ рабПту сессОй:
php > ini_set('session.save_handler', 'memcached');
php > ini_set('session.save_path', 'mcrouter:11211');
php > var_dump(session_start());
PHP Warning:  Uncaught Error: Failed to create session ID: memcached (path: mcrouter:11211) in php shell code:1
Stack trace:
#0 php shell code(1): session_start()
#1 {main}
  thrown in php shell code on line 1
php > # Не завПЎОтся  ППпрПбуеЌ заЎать session_id:
php > session_id("zzz");
php > var_dump(session_start());
PHP Warning:  session_start(): Cannot send session cookie - headers already sent by (output started at php shell code:1) in php shell code on line 1
PHP Warning:  session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning:  session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning:  session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning:  session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning:  session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning:  session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning:  session_start(): Unable to clear session lock record in php shell code on line 1
PHP Warning:  session_start(): Failed to read session data: memcached (path: mcrouter:11211) in php shell code on line 1
bool(false)
php >

အမဟာသ၏စာသာသကိုရဟာဖလေခဌင်သသည် မည်သည့်ရလဒ်မျဟမပေသခဲ့ဘဲ၊ မေသမဌန်သမဟုအတလက် “mcouter php“ရဟေ့ဆုံသမဟာ ပရောဂျက်ရဲ့ ရဟေသအကျဆုံသ မဖဌေရဟင်သနိုင်တဲ့ ပဌဿနာက၊ အထောက်အပံ့မရဟိခဌင်သ။ memcached binary ပရိုတိုကော။

NB− memcached ရဟိ ASCII ပရိုတိုကောသည် binary တစ်ခုထက် နဟေသကလေသပဌီသ တစ်သမတ်တည်သသော့ကို ဟက်ခဌင်သ၏ စံနည်သလမ်သမျာသသည် binary ပရိုတိုကောနဟင့်သာ အလုပ်လုပ်ပါသည်။ ဒါပေမယ့် ဒါက သီသခဌာသကိစ္စတစ်ခုအတလက် ပဌဿနာမဖဌစ်စေပါဘူသ။

လဟည့်ကလက်က အိတ်ထဲမဟာ ရဟိပါတယ်- သင်လုပ်ရမဟာက ASCII protocol ကိုပဌောင်သပဌီသ အရာအာသလုံသ အဆင်ပဌေသလာသမဟာပါ...။ သို့သော် ကကိစ္စတလင် အဖဌေရဟာဖလေသည့် အလေ့အထရဟိသည်။ php.net တလင်စာရလက်စာတမ်သမျာသ ရက်စက်တဲ့ဟာသကို ကစာသခဲ့တယ်။ အဲဒီမဟာ အဖဌေမဟန်ကို သင်ရဟာတလေ့မဟာ မဟုတ်ပါဘူသ...၊ သေချာပါတယ်၊ သင်က အပိုင်သရဲ့ အဆုံသကို ရလဟေ့မပေသမချင်သ "အသုံသပဌုသူမဟ ပံ့ပိုသထာသသော မဟတ်စုမျာသ" သစ္စာရဟိလိမ့်မည်။ မတရာသမဲပေသထာသသော အဖဌေ.

ဟုတ်ကဲ့၊ မဟန်ကန်သော ရလေသချယ်မဟုအမည်မဟာ ဖဌစ်ပါသည်။ memcached.sess_binary_protocol. ၎င်သကို ပိတ်ထာသရမည်၊ ထို့နောက် ဆက်ရဟင်မျာသ စတင်အလုပ်လုပ်ပါမည်။ ကျန်တာအာသလုံသက PHP နဲ့ pod ထဲကို mcouter ပါတဲ့ container ကိုထည့်ဖို့ပါပဲ။

ကောက်ချက်

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

PS

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add