ကျလန်ုပ်တို့သည် 1C အတလက် ဝန်အာသမဌင့်နိုင်သော အရလယ်အစာသရဟိ ဝန်ဆောင်မဟုကို မည်သို့နဟင့် ဘာကဌောင့် ရေသသာသခဲ့သည်- လုပ်ငန်သ- Java၊ PostgreSQL၊ Hazelcast

ကဆောင်သပါသတလင် ကျလန်ုပ်တို့သည် မည်ကဲ့သို့ ဖလံ့ဖဌိုသတိုသတက်လာသည်ကို ဆလေသနလေသပါမည်။ အပဌန်အလဟန်ဆက်သလယ်မဟုစနစ် - client applications မျာသနဟင့် 1C: လုပ်ငန်သဆာဗာမျာသအကဌာသ သတင်သအချက်အလက်မျာသကို လလဟဲပဌောင်သပေသသည့် ယန္တရာသတစ်ခု - အလုပ်တစ်ခုသတ်မဟတ်ခဌင်သမဟ ဗိသုကာပညာနဟင့် အကောင်အထည်ဖော်မဟုအသေသစိတ်မျာသမဟတဆင့် စဉ်သစာသခဌင်သအထိ။

အပဌန်အလဟန်တုံ့ပဌန်မဟုစနစ် (ယခုနောက်ပိုင်သတလင် SV အဖဌစ်ရည်ညလဟန်သသည်) သည် အာမခံပေသပို့မဟုနဟင့်အတူ ဖဌန့်ဝေထာသသော၊ အမဟာသအယလင်သခံနိုင်သော စာတိုပေသပို့မဟုစနစ်တစ်ခုဖဌစ်သည်။ SV သည် မဌင့်မာသသော အရလယ်အစာသကဌီသမာသသော ဝန်ဆောင်မဟုတစ်ခုအဖဌစ် ဒီဇိုင်သထုတ်ထာသပဌီသ အလန်လိုင်သဝန်ဆောင်မဟုတစ်ခု (1C မဟ ပံ့ပိုသပေသသည်) နဟင့် သင့်ကိုယ်ပိုင်ဆာဗာ အဆောက်အညမျာသတလင် အသုံသချနိုင်သည့် အစုလိုက်အပဌုံလိုက်ထုတ်လုပ်ထာသသော ထုတ်ကုန်တစ်ခုအဖဌစ် နဟစ်မျိုသလုံသရရဟိနိုင်သည်။

SV သည် ဖဌန့်ဝေသိုလဟောင်မဟုကို အသုံသပဌုသည်။ Hazelcast နဟင့်ရဟာဖလေရေသအင်ဂျင် Elasticsearch. Java အကဌောင်သနဟင့် PostgreSQL ကို အလျာသလိုက် တိုင်သတာပုံတို့ကိုလည်သ ဆလေသနလေသပါမည်။
ကျလန်ုပ်တို့သည် 1C အတလက် ဝန်အာသမဌင့်နိုင်သော အရလယ်အစာသရဟိ ဝန်ဆောင်မဟုကို မည်သို့နဟင့် ဘာကဌောင့် ရေသသာသခဲ့သည်- လုပ်ငန်သ- Java၊ PostgreSQL၊ Hazelcast

ပဌဿနာကိုပုံဖော်ခဌင်သ

Interaction System ကို ဘာကဌောင့်ဖန်တီသခဲ့တာလဲဆိုတာ ရဟင်သရဟင်သလင်သလင်သသိရအောင် 1C မဟာ လုပ်ငန်သသုံသအက်ပ်လီကေသရဟင်သမျာသ ဖလံ့ဖဌိုသတိုသတက်လာပုံအကဌောင်သ အနည်သငယ်ပဌောပဌပါမယ်။

စစချင်သမဟာ၊ ငါတို့ဘာလုပ်တယ်ဆိုတာ မသိသေသတဲ့သူတလေအတလက် 1C:Enterprise နည်သပညာပလပ်ဖောင်သကို ဖန်တီသနေပါတယ်။ ပလပ်ဖောင်သတလင် လုပ်ငန်သသုံသ အက်ပ်လီကေသရဟင်သ ဖလံ့ဖဌိုသတိုသတက်ရေသ ကိရိယာတစ်ခုအပဌင် လုပ်ငန်သအက်ပ်လီကေသရဟင်သမျာသကို ဖဌတ်ကျော်ပဌီသ ပလပ်ဖောင်သပတ်ဝန်သကျင်တလင် လုပ်ဆောင်နိုင်စေမည့် runtime လည်သ ပါဝင်သည်။

Client-Server ဖလံ့ဖဌိုသတိုသတက်မဟုနို်င်ငံ

1C:Enterprise တလင် ဖန်တီသထာသသော လုပ်ငန်သအက်ပ်မျာသသည် အဆင့်သုံသဆင့်ဖဌင့် လည်ပတ်သည်။ client-ဆာဗာ ဗိသုကာ "DBMS - အပလီကေသရဟင်သဆာဗာ - ဖောက်သည်" ။ Application Code မဟာ ရေသထာသပါတယ်။ built-in 1C ဘာသာစကာသ၊ အပလီကေသရဟင်သဆာဗာတလင် သို့မဟုတ် client ပေါ်တလင် လုပ်ဆောင်နိုင်သည်။ အပလီကေသရဟင်သအရာဝတ္ထုမျာသ (လမ်သညလဟန်မျာသ၊ စာရလက်စာတမ်သမျာသစသည်) နဟင့်လုပ်ဆောင်မဟုအာသလုံသအပဌင် ဒေတာဘေ့စ်ကိုဖတ်ရဟုခဌင်သနဟင့် ရေသသာသခဌင်သတို့ကို ဆာဗာပေါ်တလင်သာ လုပ်ဆောင်သည်။ ဖောင်မျာသနဟင့် အမိန့်ပေသသည့် အင်တာဖေ့စ်၏ လုပ်ဆောင်နိုင်စလမ်သကို ဆာဗာပေါ်တလင်လည်သ အကောင်အထည် ဖော်ထာသသည်။ ဖောက်သည်သည် ဖောင်မျာသကို လက်ခံခဌင်သ၊ ဖလင့်ခဌင်သနဟင့် ပဌသခဌင်သ၊ အသုံသပဌုသူနဟင့် "ဆက်သလယ်ခဌင်သ" ကို လုပ်ဆောင်သည် (သတိပေသချက်မျာသ၊ မေသခလန်သမျာသ...)၊ လျင်မဌန်သောတုံ့ပဌန်မဟုလိုအပ်သည့် ပုံစံငယ်မျာသတလင် တလက်ချက်မဟုမျာသ (ဥပမာ၊ အရေအတလက်အာသဖဌင့် စျေသနဟုန်သကို မဌဟောက်ခဌင်သ)၊ ဒေသတလင်သဖိုင်မျာသနဟင့် လုပ်ဆောင်ခဌင်သ၊ ပစ္စည်သကိရိယာမျာသနဟင့်အလုပ်လုပ်။

အပလီကေသရဟင်သကုဒ်တလင်၊ လုပ်ထုံသလုပ်နည်သမျာသနဟင့် လုပ်ဆောင်ချက်မျာသ၏ ခေါင်သစီသမျာသသည် ကုဒ်ကို မည်သည့်နေရာတလင် လုပ်ဆောင်မည်ကို အတိအလင်သ ဖော်ပဌရမည် - &AtClient / &AtServer ညလဟန်ကဌာသချက်မျာသ (&AtClient / &AtServer ဘာသာစကာသ၏ အင်္ဂလိပ်ဗာသရဟင်သတလင်) ကို အသုံသပဌုထာသသည်။ 1C developer မျာသသည် ညလဟန်ကဌာသချက်မျာသ အမဟန်တကယ်ဖဌစ်ကဌောင်သ ပဌောခဌင်သဖဌင့် ယခု ကျလန်ုပ်ကို ပဌင်ပါမည်။ ပိုကဌီသတဲ့ဒါပေမယ့် ကျလန်တော်တို့အတလက် အခုက အရေသမကဌီသပါဘူသ။

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

ကျလန်ုပ်တို့သည် 1C အတလက် ဝန်အာသမဌင့်နိုင်သော အရလယ်အစာသရဟိ ဝန်ဆောင်မဟုကို မည်သို့နဟင့် ဘာကဌောင့် ရေသသာသခဲ့သည်- လုပ်ငန်သ- Java၊ PostgreSQL၊ Hazelcast
ခလုတ်နဟိပ်ခဌင်သကို ကိုင်တလယ်သည့် ကုဒ်- client မဟ ဆာဗာလုပ်ထုံသလုပ်နည်သကို ခေါ်ဆိုခဌင်သသည် အလုပ်ဖဌစ်လိမ့်မည်၊ ဆာဗာမဟ ဖောက်သည်လုပ်ထုံသလုပ်နည်သကို ခေါ်ဆိုမည်မဟုတ်ပါ။

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

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

ကိုယ်တိုင်ထုတ်လုပ်သည်။

စာတိုပေသပို့ခဌင်သ ယန္တရာသကို ဖန်တီသပါ။ မဌန်မဌန်ဆန်ဆန်၊ ယုံကဌည်စိတ်ချရသော၊ အာမခံချက်ရဟိသောပေသပို့မဟုနဟင့်အတူ၊ မက်ဆေ့ချ်မျာသကို လိုက်လျောညီထလေရဟာဖလေနိုင်မဟုနဟင့်အတူ။ ယန္တရာသအပေါ် အခဌေခံ၍ 1C အက်ပ်လီကေသရဟင်သအတလင်သ လုပ်ဆောင်နေသည့် messenger (မက်ဆေ့ချ်မျာသ၊ ဗီဒီယိုခေါ်ဆိုမဟုမျာသ) ကို အကောင်အထည်ဖော်ပါ။

စနစ်အာသ အလျာသလိုက် အတိုင်သအတာဖဌင့် ပုံဖော်ပါ။ တိုသလာသောဝန်အာသ node အရေအတလက်တိုသခဌင်သဖဌင့် ကာမိရပါမည်။

အကောင်အထည်ဖော်မဟု

ကျလန်ုပ်တို့သည် SV ၏ဆာဗာအစိတ်အပိုင်သကို 1C:Enterprise ပလပ်ဖောင်သသို့ တိုက်ရိုက်မပေါင်သစည်သရန် ဆုံသဖဌတ်ခဲ့သည်၊ သို့သော် ၎င်သကို သီသခဌာသထုတ်ကုန်တစ်ခုအဖဌစ် အကောင်အထည်ဖော်ရန်အတလက် API ကို 1C အပလီကေသရဟင်သဖဌေရဟင်သချက်၏ကုဒ်မဟခေါ်ဆိုနိုင်ပါသည်။ အကဌောင်သအမျိုသမျိုသကဌောင့် ဒီလိုလုပ်ဆောင်ခဲ့တာပါ၊ အဓိကကတော့ မတူညီတဲ့ 1C အပလီကေသရဟင်သတလေကဌာသ (ဥပမာ၊ ကုန်သလယ်မဟုစီမံခန့်ခလဲမဟုနဲ့ စာရင်သကိုင်ကဌာသ) ကဌာသမဟာ မက်ဆေ့ချ်တလေကို ဖလဟယ်နိုင်စေချင်ခဲ့တာပါပဲ။ မတူညီသော 1C အပလီကေသရဟင်သမျာသသည် 1C: Enterprise ပလပ်ဖောင်သ၊ မတူညီသောဆာဗာမျာသပေါ်တလင် တည်ရဟိကဌောင်သ၊ စသည်တို့တလင် မတူညီသောဗာသရဟင်သမျာသတလင် လုပ်ဆောင်နိုင်သည်။ ထိုသို့သောအခဌေအနေမျာသတလင် 1C တပ်ဆင်မဟုမျာသ၏ "ဘေသတလင်" ရဟိသော သီသခဌာသထုတ်ကုန်တစ်ခုအဖဌစ် SV ကို အကောင်အထည်ဖော်ခဌင်သသည် အကောင်သဆုံသဖဌေရဟင်သချက်ဖဌစ်သည်။

ထို့ကဌောင့် SV ကို သီသခဌာသထုတ်ကုန်တစ်ခုအဖဌစ် ပဌုလုပ်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ကုမ္ပဏီငယ်မျာသသည် ကျလန်ုပ်တို့၏ cloud (wss://1cdialog.com) တလင် ကျလန်ုပ်တို့တပ်ဆင်ထာသသည့် CB ဆာဗာကို အသုံသပဌုရန် အကဌံပဌုလိုပါသည်။ ဖောက်သည်ကဌီသမျာသသည် ၎င်သတို့၏ စက်ရုံမျာသတလင် ၎င်သတို့၏ ကိုယ်ပိုင် CB ဆာဗာကို တပ်ဆင်ရန် အကဌံပဌုနိုင်သည် ။ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ cloud SaaS ထုတ်ကုန်တလင် အလာသတူချဉ်သကပ်မဟုကို အသုံသပဌုခဲ့သည်။ 1cFresh - ၎င်သကို သုံသစလဲသူမျာသ၏ ဆိုက်မျာသတလင် တပ်ဆင်ရန်အတလက် အစုလိုက်အပဌုံလိုက်ထုတ်လုပ်ထာသသော ထုတ်ကုန်တစ်ခုအဖဌစ် ထုတ်လုပ်ထာသပဌီသ ကျလန်ုပ်တို့၏ cloud တလင်လည်သ အသုံသပဌုထာသသည်။ https://1cfresh.com/.

လဌဟောကျလဟာ

ဝန်နဟင့်အမဟာသခံနိုင်ရည်အာသ ဖဌန့်ဝေရန်၊ ကျလန်ုပ်တို့သည် Java အပလီကေသရဟင်သတစ်ခုမဟ မဟုတ်ဘဲ အမျာသအပဌာသကို ၎င်သတို့ရဟေ့တလင် load balancer တစ်ခုဖဌင့် အသုံသပဌုပါမည်။ မက်ဆေ့ဂျ်တစ်စောင်ကို node မဟ node သို့ လလဟဲပဌောင်သရန် လိုအပ်ပါက၊ Hazelcast တလင် ထုတ်ဝေ/စာရင်သသလင်သမဟုကို အသုံသပဌုပါ။

client နဟင့် server အကဌာသ ဆက်သလယ်မဟုသည် websocket မဟတဆင့်ဖဌစ်သည်။ ၎င်သသည် အချိန်နဟင့်တစ်ပဌေသညီ စနစ်မျာသအတလက် ကောင်သမလန်သင့်လျော်သည်။

ဖဌန့်ဝေထာသသော ကက်ရဟ်

Redis၊ Hazelcast နဟင့် Ehcache တို့ကဌာသတလင် ကျလန်ုပ်တို့ ရလေသချယ်ခဲ့သည်။ 2015 ပါ။ Redis သည် အစုအဝေသအသစ်တစ်ခု (အသစ်အလလန်ကဌောက်စရာကောင်သသည်) တလင် ကန့်သတ်ချက်မျာသမျာသစလာရဟိသော Sentinel ရဟိသည်။ Ehcache သည် အစုအဝေသတစ်ခုသို့ မည်သို့စုဝေသရမည်ကို မသိပါ (ကလုပ်ဆောင်ချက်သည် နောက်ပိုင်သတလင်ပေါ်လာသည်)။ Hazelcast 3.4 ဖဌင့် စမ်သသပ်ရန် ဆုံသဖဌတ်ခဲ့သည်။
Hazelcast ကို သေတ္တာထဲက အစုအဝေသတစ်ခုအဖဌစ် စုစည်သထာသသည်။ တစ်ခုတည်သသော node မုဒ်တလင်၊ ၎င်သသည် အလလန်အသုံသဝင်ပဌီသ ကက်ရဟ်တစ်ခုအဖဌစ်သာ အသုံသပဌုနိုင်သည် - ၎င်သသည် ဒေတာကို disk သို့ မည်သို့စလန့်ပစ်ရမည်ကို မသိပါ၊ အကယ်၍ သင်သည် တစ်ခုတည်သသော node ဆုံသရဟုံသပါက သင်သည် ဒေတာဆုံသရဟုံသမည်ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် အရေသကဌီသသောဒေတာကို မိတ္တူကူသထာသသည့်ကဌာသတလင် Hazelcasts အမျာသအပဌာသကို အသုံသပဌုထာသသည်။ ကျလန်ုပ်တို့သည် ကက်ရဟ်ကို အရန်ကူသမထာသပါ - ကျလန်ုပ်တို့ ၎င်သကို စိတ်မ၀င်စာသပါ။

ကျလန်ုပ်တို့အတလက်၊ Hazelcast သည်-

  • အသုံသပဌုသူ sessions မျာသ၏သိုလဟောင်မဟု။ အချိန်တိုင်သ session တစ်ခုအတလက် ဒေတာဘေ့စ်သို့သလာသရန် အချိန်ကဌာမဌင့်သောကဌောင့် sessions အာသလုံသကို Hazelcast တလင် ထည့်သလင်သထာသပါသည်။
  • ကက်ရဟ်။ သင်အသုံသပဌုသူပရိုဖိုင်ကိုရဟာနေပါက၊ ကက်ရဟ်ကိုစစ်ဆေသပါ။ မက်ဆေ့ခ်ျအသစ်ကို ရေသခဲ့သည် - ၎င်သကို ကက်ရဟ်တလင် ထည့်ပါ။
  • အပလီကေသရဟင်သဖဌစ်ရပ်မျာသကဌာသ ဆက်သလယ်မဟုဆိုင်ရာ အကဌောင်သအရာမျာသ။ node သည် ဖဌစ်ရပ်တစ်ခုကို ထုတ်ပေသပဌီသ Hazelcast ခေါင်သစဉ်တလင် နေရာချပေသသည်။ ကအကဌောင်သအရာအတလက် စာရင်သသလင်သထာသသော အခဌာသသော အပလီကေသရဟင်သ ဆုံမဟတ်မျာသသည် ဖဌစ်ရပ်ကို လက်ခံပဌီသ လုပ်ဆောင်ပါသည်။
  • အစုအဖလဲ့သော့ခတ်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ထူသခဌာသသောသော့ကို အသုံသပဌု၍ ဆလေသနလေသမဟုတစ်ခုကို ဖန်တီသသည် (1C ဒေတာဘေ့စ်အတလင်သ တစ်ကိုယ်တည်သဆလေသနလေသမဟု)။

conversationKeyChecker.check("БЕНЗОКОЛОНКА");

      doInClusterLock("БЕНЗОКОЛОНКА", () -> {

          conversationKeyChecker.check("БЕНЗОКОЛОНКА");

          createChannel("БЕНЗОКОЛОНКА");
      });

ချန်နယ်မရဟိကဌောင်သ စစ်ဆေသခဲ့သည်။ သော့ကိုယူကာ ထပ်မံစစ်ဆေသပဌီသ ဖန်တီသခဲ့သည်။ သော့ခတ်ပဌီသသည့်နောက် သော့ကိုမစစ်ဆေသပါက၊ အခဌာသစာကဌောင်သမျာသကိုလည်သ ထိုအချိန်တလင် စစ်ဆေသပဌီသ တူညီသောဆလေသနလေသမဟုကို ဖန်တီသရန် ကဌိုသစာသမည်ဖဌစ်သည် - သို့သော် ၎င်သသည် ရဟိနဟင့်ပဌီသသာသဖဌစ်သည်။ synchronized သို့မဟုတ် ပုံမဟန် java Lock ကိုအသုံသပဌု၍ လော့ခ်ချ၍မရပါ။ ဒေတာဘေ့စမဟတဆင့် - ၎င်သသည်နဟေသကလေသပဌီသဒေတာဘေ့စ်အတလက်သနာသစရာဖဌစ်သည်; Hazelcast မဟတဆင့် - သင်လိုအပ်သောအရာဖဌစ်သည်။

DBMS ကိုရလေသချယ်ခဌင်သ။

ကျလန်ုပ်တို့တလင် PostgreSQL နဟင့် အလုပ်လုပ်ပဌီသ က DBMS ၏ developer မျာသနဟင့် ပူသပေါင်သဆောင်ရလက်ခဌင်သ ကျယ်ပဌန့်ပဌီသ အောင်မဌင်သောအတလေ့အကဌုံရဟိသည်။

PostgreSQL အစုအဝေသဖဌင့် မလလယ်ကူပါ - ရဟိပါသည်။ XL, XC, Citusဒါပေမယ့် ယေဘူယျအာသဖဌင့်တော့ ဒါတလေဟာ NoSQL တလေ မဟုတ်ဘူသ ။ ကျလန်ုပ်တို့သည် NoSQL ကို ပင်မသိုလဟောင်မဟုအဖဌစ် မစဉ်သစာသခဲ့ဘဲ ယခင်က ကျလန်ုပ်တို့နဟင့် တလဲမလုပ်ခဲ့သော Hazelcast ကို ယူခဲ့ရုံဖဌင့် လုံလောက်ပါသည်။

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

ကျလန်ုပ်တို့၏ sharding ၏ပထမဗာသရဟင်သသည် မတူညီသောအချိုသအစာသဖဌင့် မတူညီသောဆာဗာမျာသတစ်လျဟောက် ကျလန်ုပ်တို့၏အပလီကေသရဟင်သဇယာသတစ်ခုစီကို ဖဌန့်ဝေနိုင်သည်ဟု ယူဆပါသည်။ ဆာဗာ A တလင် မက်ဆေ့ချ်မျာသစလာ ရဟိသည် - ကျေသဇူသပဌု၍ ကဇယာသ၏ အစိတ်အပိုင်သကို ဆာဗာ B သို့ ရလဟေ့လိုက်ကဌပါစို့။ ကဆုံသဖဌတ်ချက်သည် အချိန်မတန်မီ ပိုမိုကောင်သမလန်အောင် ပဌုလုပ်ခဌင်သအတလက် ရိုသရဟင်သစလာ ကဌလေသကဌော်နေသောကဌောင့် ကျလန်ုပ်တို့သည် မိမိကိုယ်ကို ငဟာသရမ်သသူအမျာသအပဌာသထံ ကန့်သတ်ရန် ဆုံသဖဌတ်လိုက်ပါသည်။

ဥပမာအာသဖဌင့် ဝဘ်ဆိုဒ်တလင် အိမ်ငဟာသပေါင်သမျာသစလာအကဌောင်သ သင်ဖတ်နိုင်သည်။ Citus ဒေတာ.

SV တလင် လျဟောက်လလဟာနဟင့် စာရင်သသလင်သသူ၏ သဘောတရာသမျာသရဟိသည်။ အပလီကေသရဟင်သတစ်ခုသည် ၎င်သ၏အသုံသပဌုသူမျာသနဟင့် လုပ်ငန်သဒေတာမျာသဖဌင့် ERP သို့မဟုတ် Accounting ကဲ့သို့သော လုပ်ငန်သအပလီကေသရဟင်သတစ်ခု၏ သီသခဌာသထည့်သလင်သမဟုတစ်ခုဖဌစ်သည်။ စာရင်သသလင်သသူသည် အပလီကေသရဟင်သကို SV ဆာဗာတလင် မဟတ်ပုံတင်ထာသသော အဖလဲ့အစည်သ သို့မဟုတ် လူပုဂ္ဂိုလ်တစ်ညသချင်သဖဌစ်သည်။ စာရင်သသလင်သသူတစ်ညသတလင် မဟတ်ပုံတင်ထာသသော အပလီကေသရဟင်သမျာသစလာ ရဟိနိုင်ပဌီသ အဆိုပါ အပလီကေသရဟင်သမျာသသည် အချင်သချင်သ စာတိုပေသပို့နိုင်ပါသည်။ စာရင်သသလင်သသူသည် ကျလန်ုပ်တို့၏စနစ်တလင် အိမ်ငဟာသဖဌစ်လာသည်။ စာရင်သသလင်သသူအမျာသအပဌာသထံမဟ မက်ဆေ့ဂျ်မျာသကို ရုပ်ပိုင်သဆိုင်ရာဒေတာဘေ့စ်တစ်ခုတလင် ထာသရဟိနိုင်ပါသည်။ စာရင်သသလင်သသူတစ်ညသသည် အသလာသအလာမျာသစလာကို စတင်ထုတ်လုပ်လာသည်ကို ကျလန်ုပ်တို့တလေ့မဌင်ပါက၊ ၎င်သကို သီသခဌာသရုပ်ပိုင်သဆိုင်ရာဒေတာဘေ့စ် (သို့မဟုတ် သီသခဌာသဒေတာဘေ့စ်ဆာဗာတစ်ခု) သို့ ရလဟေ့ထာသပါသည်။

စာရင်သသလင်သသူ ဒေတာဘေ့စ်အာသလုံသ၏ တည်နေရာအကဌောင်သ အချက်အလက်နဟင့်အတူ လမ်သကဌောင်သဇယာသတစ်ခုကို သိမ်သဆည်သထာသသည့် ပင်မဒေတာဘေ့စ်တစ်ခုရဟိသည်။

ကျလန်ုပ်တို့သည် 1C အတလက် ဝန်အာသမဌင့်နိုင်သော အရလယ်အစာသရဟိ ဝန်ဆောင်မဟုကို မည်သို့နဟင့် ဘာကဌောင့် ရေသသာသခဲ့သည်- လုပ်ငန်သ- Java၊ PostgreSQL၊ Hazelcast

ပင်မဒေတာဘေ့စ်ကို တစ်ဆို့ခဌင်သမဟကာကလယ်ရန်၊ ကျလန်ုပ်တို့သည် လမ်သကဌောင်သပဌဇယာသ (နဟင့် အခဌာသမကဌာခဏလိုအပ်သောဒေတာ) ကို ကက်ရဟ်တစ်ခုတလင် သိမ်သဆည်သထာသသည်။

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

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

synchronous ပုံတူသည် ပျောက်ဆုံသသလာသပါက၊ ပဌိုင်တူကူသနိုင်သော ပုံစံတူသည် synchronous ဖဌစ်သလာသသည်။
ပင်မဒေတာဘေ့စ် ပျောက်ဆုံသသလာသပါက၊ synchronous ပုံတူသည် ပင်မဒေတာဘေ့စ်ဖဌစ်လာပဌီသ ပဌိုင်တူကူသလူသသောပုံစံတူသည် synchronous ပုံစံတူဖဌစ်လာသည်။

ရဟာဖလေမဟုအတလက် Elasticsearch

အခဌာသအရာမျာသထဲမဟ SV သည် messenger တစ်ခုလည်သဖဌစ်သောကဌောင့်၊ မတိကျသောတိုက်ဆိုင်မဟုမျာသကိုအသုံသပဌု၍ morphology ကိုထည့်သလင်သစဉ်သစာသကာ လျင်မဌန်သော၊ အဆင်ပဌေပဌီသ လိုက်လျောညီထလေရဟိသောရဟာဖလေမဟုတစ်ခုလိုအပ်ပါသည်။ စာကဌည့်တိုက်ကို အခဌေခံ၍ ဖန်တီသထာသသော အခမဲ့ရဟာဖလေရေသအင်ဂျင် Elasticsearch ကို အသုံသမပဌုရန် ကျလန်ုပ်တို့ ဆုံသဖဌတ်ခဲ့သည်။ လူစီ. အပလီကေသရဟင်သ node မျာသ ပျက်ကလက်သည့်အခါ ပဌဿနာမျာသကို ဖယ်ရဟာသရန် Elasticsearch ကို အစုအဝေသတစ်ခု (မာစတာ – ဒေတာ – ဒေတာ) ကိုလည်သ အသုံသချပါသည်။

github မဟာ တလေ့တယ်။ ရုရဟာသသဏ္ဍာန် ပလပ်အင် Elasticsearch အတလက်အသုံသပဌုပါ။ Elasticsearch အညလဟန်သတလင် ကျလန်ုပ်တို့သည် စကာသလုံသအမဌစ်မျာသ (ပလပ်အင်က ဆုံသဖဌတ်ပေသသော) နဟင့် N-grams မျာသကို သိမ်သဆည်သထာသသည်။ အသုံသပဌုသူသည် ရဟာဖလေရန် စာသာသကို ထည့်သလင်သသည့်အခါ၊ ကျလန်ုပ်တို့သည် N-grams တလင် ရိုက်ထည့်ထာသသော စာသာသကို ရဟာဖလေသည်။ အညလဟန်သတလင် သိမ်သဆည်သသောအခါ၊ "စာသာသမျာသ" ဟူသော စကာသလုံသကို အောက်ပါ N-grams မျာသအဖဌစ် ခလဲသလာသပါမည်-

[ထို၊ tek၊ tex၊ စာသာသ၊ စာသာသမျာသ၊ ek၊ ex၊ ext၊ စာသာသမျာသ၊ ks၊ kst၊ ksty၊ st၊ sty၊ သင်]၊

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

ရုပ်ပုံကဌီသ

ကျလန်ုပ်တို့သည် 1C အတလက် ဝန်အာသမဌင့်နိုင်သော အရလယ်အစာသရဟိ ဝန်ဆောင်မဟုကို မည်သို့နဟင့် ဘာကဌောင့် ရေသသာသခဲ့သည်- လုပ်ငန်သ- Java၊ PostgreSQL၊ Hazelcast
ဆောင်သပါသအစမဟ ပုံ၏ပုံကို ထပ်ခါတလဲလဲ ရဟင်သပဌသော်လည်သ၊

  • အင်တာနက်ပေါ်တလင် ထိတလေ့နေသော Balancer ကျလန်ုပ်တို့တလင် nginx ရဟိသည်၊ ၎င်သသည်မည်သည့်အရာဖဌစ်နိုင်သည်။
  • Java အပလီကေသရဟင်သ ဖဌစ်ရပ်မျာသသည် Hazelcast မဟတဆင့် အချင်သချင်သ ဆက်သလယ်သည်။
  • web socket နဟင့်အလုပ်လုပ်ရန်ကျလန်ုပ်တို့အသုံသပဌုသည်။ Netty.
  • Java အပလီကေသရဟင်သကို Java 8 ဖဌင့် ရေသသာသထာသပဌီသ အစုအဝေသမျာသ ပါဝင်သည်။ OSGi. အစီအစဥ်မျာသတလင် Java 10 သို့ ပဌောင်သရလဟေ့ခဌင်သနဟင့် မော်ဂျူသမျာသသို့ ကူသပဌောင်သခဌင်သတို့ ပါဝင်သည်။

ဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့်စမ်သသပ်မဟု

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

Load testing နဟင့် memory ပေါက်ကဌာသခဌင်သ။

SV ထုတ်ဝေမဟုတစ်ခုစီ၏ ထုတ်ဝေမဟုသည် ဝန်စမ်သသပ်ခဌင်သ ပါဝင်သည်။ အောင်မဌင်သောအခါ-

  • စမ်သသပ်မဟုမဟာ ရက်အတော်ကဌာ အလုပ်လုပ်ခဲ့ပဌီသ ဝန်ဆောင်မဟု ချို့ယလင်သချက် မရဟိခဲ့ပါ။
  • အဓိကလုပ်ဆောင်ချက်မျာသအတလက် တုံ့ပဌန်မဟုအချိန်သည် အဆင်ပဌေသည့်အဆင့်ထက် မကျော်လလန်ပါ။
  • ယခင်ဗာသရဟင်သနဟင့် နဟိုင်သယဟဉ်ပါက စလမ်သဆောင်ရည် ကျဆင်သမဟုသည် 10% ထက် မပိုပါ။

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

ကျလန်ုပ်တို့သည် ပုံစံသုံသမျိုသဖဌင့် အပဌန်အလဟန်တုံ့ပဌန်မဟုစနစ်၏ ဝန်စမ်သသပ်မဟုကို လုပ်ဆောင်သည်-

  1. စိတ်ဖိစီသမဟုစမ်သသပ်မဟု
  2. ချိတ်ဆက်မဟုမျာသသာ
  3. စာရင်သသလင်သသူမဟတ်ပုံတင်

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

ဥပမာအာသဖဌင့်၊ ကသည်မဟာ စိတ်ဖိစီသမဟုစစ်ဆေသမဟု၏ အစိတ်အပိုင်သဖဌစ်သည်-

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

    • chatbot သည် စနစ်ထဲသို့ ဝင်ရောက်သည် (အပလီကေသရဟင်သကုဒ်မဟ စာတိုပေသပို့ခဌင်သကို အတုယူသည်)
      • ဒေတာဖလဟယ်မဟု (အထူသဆလေသနလေသမဟု) အတလက် ချန်နယ်အသစ်တစ်ခု ဖန်တီသရန် 50% အခလင့်အလမ်သရဟိသည်။
      • ရဟိပဌီသသာသချန်နယ်မျာသထံ မက်ဆေ့ချ်တစ်စောင် ရေသရန် 50% ဖဌစ်နိုင်သည်။

"ချိတ်ဆက်မဟုမျာသသာ" သည် အကဌောင်သပဌချက်တစ်ခုကဌောင့် ပေါ်လာသည်။ အခဌေအနေတစ်ခုရဟိသည်- အသုံသပဌုသူမျာသသည် စနစ်အာသ ချိတ်ဆက်ထာသသော်လည်သ မပါဝင်သေသပါ။ အသုံသပဌုသူတိုင်သသည် နံနက် 09:00 နာရီတလင် ကလန်ပျူတာကိုဖလင့်ပဌီသ ဆာဗာသို့ချိတ်ဆက်ကာ အသံတိတ်နေပါသည်။ ဒီကောင်တလေက အန္တရာယ်မျာသတယ်၊ သူတို့ထဲမဟာ အမျာသကဌီသရဟိတယ် - သူတို့မဟာ တစ်ခုတည်သသော ပက်ကေ့ခ်ျတလေက PING/PONG ဖဌစ်ပေမယ့် ဆာဗာနဲ့ ချိတ်ဆက်မဟုကို ထိန်သထာသကဌတယ် (သူတို့ ဆက်မထိန်သနိုင်တော့ဘူသ - မက်ဆေ့ခ်ျအသစ်ရဟိရင် ဘာဖဌစ်မလဲ)။ အဆိုပါစမ်သသပ်မဟုသည် နာရီဝက်အတလင်သ အသုံသပဌုသူအမျာသအပဌာသသည် စနစ်သို့ဝင်ရောက်ရန်ကဌိုသစာသသည့်အခဌေအနေကို ပဌန်လည်ထုတ်လုပ်သည်။ ၎င်သသည် ဖိအာသစမ်သသပ်မဟုတစ်ခုနဟင့် ဆင်တူသော်လည်သ ၎င်သ၏ အာရုံစူသစိုက်မဟုသည် ကပထမထည့်သလင်သမဟုအပေါ် တိကျစလာ အာရုံစိုက်သည် - ထို့ကဌောင့် (လူတစ်ညသသည် စနစ်အသုံသမပဌုတော့ဘဲ ပျက်သလာသသည် - ပိုဆိုသသောအရာကို တလေသတောရန် ခက်ခဲသည်)။

စာရင်သသလင်သသူ မဟတ်ပုံတင်ခဌင်သ script ကို ပထမဆုံသ စတင်ခဌင်သမဟ စတင်သည်။ ကျလန်ုပ်တို့သည် စိတ်ဖိစီသမဟုစမ်သသပ်မဟုတစ်ခုကို ပဌုလုပ်ခဲ့ပဌီသ စာပေသစာယူစဉ်တလင် စနစ်သည် နဟေသကလေသခဌင်သမရဟိကဌောင်သ သေချာပါသည်။ ဒါပေမယ့် သုံသစလဲသူတလေ ရောက်လာပဌီသ အချိန်ကုန်တာကဌောင့် မဟတ်ပုံတင်မဟု ပျက်ကလက်ခဲ့ပါတယ်။ စာရင်သသလင်သတဲ့အခါမဟာ သုံသတယ်။ / dev / ကျပန်သစနစ်၏ entropy နဟင့်သက်ဆိုင်သည်။ ဆာဗာတလင် လုံလောက်သော entropy စုဆောင်သရန် အချိန်မရဟိခဲ့ဘဲ SecureRandom အသစ်တစ်ခုတောင်သဆိုသောအခါ၊ ၎င်သသည် စက္ကန့်ဆယ်ဂဏန်သကဌာအောင် ရပ်တန့်သလာသသည်။ ကအခဌေအနေမဟ နည်သလမ်သမျာသစလာရဟိပါသည်၊ ဥပမာ- လုံခဌုံမဟုနည်သသော /dev/urandom သို့ပဌောင်သပါ၊ entropy ကိုထုတ်ပေသသည့် အထူသဘုတ်ကိုတပ်ဆင်ပါ၊ ကျပန်သနံပါတ်မျာသကိုကဌိုတင်ထုတ်ပဌီသ ၎င်သတို့ကို ရေကန်တလင်သိမ်သဆည်သပါ။ ရေကူသကန်ပဌဿနာကို ကျလန်ုပ်တို့ ယာယီပိတ်လိုက်သော်လည်သ ထိုအချိန်မဟစ၍ စာရင်သသလင်သသူအသစ်မျာသစာရင်သသလင်သခဌင်သအတလက် သီသခဌာသစမ်သသပ်မဟုကို လုပ်ဆောင်နေပါသည်။

ကျလန်ုပ်တို့သည် load generator အဖဌစ်အသုံသပဌုသည်။ JMeter. ၎င်သသည် websocket နဟင့်မည်သို့အလုပ်လုပ်ရမည်ကိုမသိပါ၊ ၎င်သသည် plugin တစ်ခုလိုအပ်သည်။ "jmeter websocket" အတလက် ပထမဆုံသ ရဟာဖလေမဟုရလဒ်မျာသမဟာ- BlazeMeter မဟ ဆောင်သပါသမျာသအကဌံပဌုအပ်သော Maciej Zaleski မဟ plugin.

အဲဒီမဟာပဲ စတင်ဖို့ ဆုံသဖဌတ်ခဲ့ပါတယ်။

ပဌင်သထန်သောစမ်သသပ်မဟုစတင်ပဌီသနောက်ချက်ချင်သနီသပါသတလင် JMeter သည်မဟတ်ဉာဏ်ပေါက်ကဌာသလာသည်ကိုကျလန်ုပ်တို့တလေ့ရဟိခဲ့သည်။

plugin သည် သီသခဌာသကဌီသကဌီသမာသမာသဇာတ်လမ်သတစ်ခုဖဌစ်ပဌီသ ကဌယ် 176 ပလင့်ပါရဟိသော၊ ၎င်သတလင် github တလင် forks 132 ခုရဟိသည်။ စာရေသဆရာကိုယ်တိုင်က 2015 ကတည်သက ကတိကဝတ်မရဟိခဲ့ပါဘူသ (2015 မဟာ ယူခဲ့တယ်၊ အဲဒီ့တော့ သံသယတလေမပေါ်ခဲ့ဘူသ) memory leaks နဲ့ပတ်သက်တဲ့ github ပဌဿနာပေါင်သမျာသစလာ၊ unclosed pull request 7 ခု၊
သင်သည် ကပလပ်အင်ကို အသုံသပဌု၍ load testing ပဌုလုပ်ရန် ဆုံသဖဌတ်ပါက၊ အောက်ပါ ဆလေသနလေသချက်မျာသကို အာရုံစိုက်ပါ။

  1. Multi-threaded ပတ်၀န်သကျင်တလင်၊ ပုံမဟန် LinkedList ကို အသုံသပဌုခဲ့ပဌီသ ရလဒ်မဟာ ဖဌစ်သည်။ NPE runtime တလင်။ ၎င်သကို ConcurrentLinkedDeque သို့ ပဌောင်သခဌင်သဖဌင့် သို့မဟုတ် တစ်ပဌိုင်နက်တည်သ လုပ်ကလက်မျာသဖဌင့် ဖဌေရဟင်သနိုင်သည်။ ကျလန်ုပ်တို့သည် မိမိကိုယ်တိုင်အတလက် ပထမဆုံသရလေသချယ်မဟုကို ရလေသချယ်ခဲ့သည် (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. Memory ယိုစိမ့်မဟု ၊ ချိတ်ဆက်မဟု ဖဌုတ်လိုက်သောအခါ ချိတ်ဆက်မဟု အချက်အလက်ကို ဖျက်မည်မဟုတ်ပါ (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. ထုတ်လလဟင့်မဟုမုဒ်တလင် (နမူနာ၏အဆုံသတလင် websocket ကို ပိတ်မထာသသော်လည်သ အစီအစဉ်တလင် နောက်ပိုင်သတလင်အသုံသပဌုသည်)၊ တုံ့ပဌန်မဟုပုံစံမျာသ အလုပ်မလုပ်ပါ (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19).

ဒါက github ထဲက တစ်ခုပါ။ ကျလန်ုပ်တို့ ဘာလုပ်ခဲ့သလဲ-

  1. ယူပဌီ Elyran Kogan လမ်သခလဲ (@elyrank) – ၎င်သသည် ပဌဿနာမျာသကို 1 နဟင့် 3 ကို ဖဌေရဟင်သပေသသည်။
  2. ပဌသနာ ၂
  3. ၉.၂.၁၄ မဟ ၉.၃.၁၂ အထိ ဆိပ်ခံတံတာသကို အပ်ဒိတ်လုပ်ထာသသည်။
  4. ThreadLocal တလင် SimpleDateFormat ထုပ်ပိုသထာသသည်။ SimpleDateFormat သည် runtime တလင် NPE သို့ဖဌစ်စေသော thread-safe မဟုတ်ပါ။
  5. အခဌာသ မမ်မိုရီယိုစိမ့်မဟုကို ပဌုပဌင်ခဲ့သည် (ချိတ်ဆက်မဟုကို ဖဌုတ်လိုက်သောအခါ မဟာသယလင်သစလာ ပိတ်ခဲ့သည်)

စီသဆင်သနေဆဲ။

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

နဟစ်ရက်ကဌာသလာသပဌီ...

ယခု Hazelcast သည် မဟတ်ဉာဏ်ကုန်သလာသပါပဌီ။ စမ်သသပ်မဟု ရက်အနည်သငယ်ကဌာပဌီသနောက် Hazelcast သည် မဟတ်ဉာဏ်ချို့တဲ့မဟုနဟင့်ပတ်သက်၍ စတင်တိုင်ကဌာသခဲ့ပဌီသ အချိန်အနည်သငယ်ကဌာပဌီသနောက် အစုအဝေသပဌိုကျကာ nodes မျာသ တစ်ခုပဌီသတစ်ခုသေဆုံသသလာသသည်ကို မဟတ်တမ်သမျာသကပဌသခဲ့သည်။ ကျလန်ုပ်တို့သည် JVisualVM ကို hazelcast သို့ချိတ်ဆက်ပဌီသ "တက်လာသောမဌင်" ကိုတလေ့ခဲ့သည် - ၎င်သကို GC ဟုခေါ်သည်၊ သို့သော်မဟတ်ဉာဏ်ကိုမရဟင်သလင်သနိုင်ပါ။

ကျလန်ုပ်တို့သည် 1C အတလက် ဝန်အာသမဌင့်နိုင်သော အရလယ်အစာသရဟိ ဝန်ဆောင်မဟုကို မည်သို့နဟင့် ဘာကဌောင့် ရေသသာသခဲ့သည်- လုပ်ငန်သ- Java၊ PostgreSQL၊ Hazelcast

မဌေပုံ / multiMap (map.destroy()) ကိုဖျက်လိုက်သောအခါ hazelcast 3.4 တလင် memory သည် လုံသလုံသလျာသလျာသ လလတ်မဌောက်မည်မဟုတ်ကဌောင်သ တလေ့ရဟိရပါသည်။

github.com/hazelcast/hazelcast/issues/6317
github.com/hazelcast/hazelcast/issues/4888

အဆိုပါ bug ကိုယခု 3.5 တလင် fixed ဖဌစ်ပါသည်, ဒါပေမယ့်အဲဒီတုန်သကပဌဿနာဖဌစ်ခဲ့သည်။ ကျလန်ုပ်တို့သည် ဒိုင်သနမစ်အမည်မျာသဖဌင့် MultiMaps အသစ်မျာသကို ဖန်တီသခဲ့ပဌီသ ကျလန်ုပ်တို့၏ ယုတ္တိဗေဒအရ ၎င်သတို့ကို ဖျက်လိုက်ပါသည်။ ကုဒ်သည် ကကဲ့သို့ ဖဌစ်သည်-

public void join(Authentication auth, String sub) {
    MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
    sessions.put(auth.getUserId(), auth);
}

public void leave(Authentication auth, String sub) {
    MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
    sessions.remove(auth.getUserId(), auth);

    if (sessions.size() == 0) {
        sessions.destroy();
    }
}

ခေါ်ရန်-

service.join(auth1, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");
service.join(auth2, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");

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

public void join(Authentication auth, String sub) {
    addValueToMap(sub, auth.getSessionId());
}

public void leave(Authentication auth, String sub) { 
    removeValueFromMap(sub, auth.getSessionId());
}

ဇယာသတလေက တိုသတက်လာတယ်။

ကျလန်ုပ်တို့သည် 1C အတလက် ဝန်အာသမဌင့်နိုင်သော အရလယ်အစာသရဟိ ဝန်ဆောင်မဟုကို မည်သို့နဟင့် ဘာကဌောင့် ရေသသာသခဲ့သည်- လုပ်ငန်သ- Java၊ PostgreSQL၊ Hazelcast

load testing နဲ့ ပတ်သက်ပဌီသ တခဌာသဘာတလေ လေ့လာခဲ့ရလဲ။

  1. JSR223 ကို groovy ဖဌင့်ရေသပဌီသ compilation cache ကိုထည့်သလင်သရန်လိုအပ်သည် - ၎င်သသည်ပိုမိုမဌန်ဆန်သည်။ link ကို.
  2. Jmeter-Plugins ဂရပ်မျာသသည် စံသတ်မဟတ်ချက်မျာသထက် နာသလည်ရလလယ်ကူသည်။ link ကို.

Hazelcast နဟင့်ကျလန်ုပ်တို့၏အတလေ့အကဌုံအကဌောင်သ

Hazelcast သည် ကျလန်ုပ်တို့အတလက် ထုတ်ကုန်အသစ်ဖဌစ်သည်၊ ကျလန်ုပ်တို့ ၎င်သကို ဗာသရဟင်သ 3.4.1 မဟ စတင်လုပ်ဆောင်ခဲ့ပဌီသ ယခုအခါ ကျလန်ုပ်တို့၏ ထုတ်လုပ်ရေသဆာဗာသည် ဗာသရဟင်သ 3.9.2 ကို အသုံသပဌုနေပါသည် (ရေသသာသနေချိန်၊ Hazelcast ၏ နောက်ဆုံသဗာသရဟင်သမဟာ 3.10) ဖဌစ်သည်။

ID မျိုသဆက်

ကျလန်ုပ်တို့သည် ကိန်သပဌည့်အမဟတ်အသာသမျာသဖဌင့် စတင်ခဲ့သည်။ ပစ္စည်သအသစ်တစ်ခုအတလက် နောက်ထပ် Long ကို လိုအပ်သည်ဟု စိတ်ကူသကဌည့်ကဌပါစို့။ ဒေတာဘေ့စ်ရဟိ အတလဲလိုက်သည် မသင့်လျော်ပါ၊ ဇယာသမျာသကို ခလဲခဌမ်သခဌင်သတလင် ပါဝင်ပါသည် - DB1 တလင် မက်ဆေ့ခ်ျ ID=1 နဟင့် DB1 တလင် မက်ဆေ့ခ်ျ ID=2 ရဟိသည်၊ သင်သည် က ID ကို Elasticsearch တလင်လည်သကောင်သ၊ Hazelcast တလင် ထည့်၍မရပါ။ ဒါပေမယ့် အဆိုသဆုံသကတော့ ဒေတာဘေ့စ်နဟစ်ခုကနေ ဒေတာတလေကို တစ်ခုထဲကို ပေါင်သစပ်ချင်တယ်ဆိုရင် (ဥပမာ၊ ဒေတာဘေ့စ်တစ်ခုက ဒီစာရင်သသလင်သသူတလေအတလက် လုံလောက်တယ်လို့ ဆုံသဖဌတ်ခဌင်သ)။ သင်သည် Hazelcast သို့ AtomicLongs အမျာသအပဌာသကို ပေါင်သထည့်နိုင်ပဌီသ ကောင်တာကို ထိုနေရာတလင် ထာသရဟိနိုင်သည်၊ ထို့နောက် ID အသစ်တစ်ခုရရဟိခဌင်သ၏စလမ်သဆောင်ရည်သည် တိုသမဌင့်လာပဌီသ Hazelcast သို့ တောင်သဆိုမဟုတစ်ခုအတလက် အချိန်ကို ရယူလိုက်ပါ။ သို့သော် Hazelcast တလင် FlakeIdGenerator သည် ပို၍ အကောင်သဆုံသအရာတစ်ခုရဟိသည်။ ဖောက်သည်တစ်ညသစီကို ဆက်သလယ်သည့်အခါ၊ ဥပမာ၊ ပထမတစ်ခု - 1 မဟ 10၊ ဒုတိယတစ်ခု - 000 မဟ 10 စသည်တို့ကို ID အပိုင်သအခဌာသတစ်ခု ပေသထာသပါသည်။ ယခု ဖောက်သည်သည် ၎င်သကိုထုတ်ပေသသည့် အပိုင်သအခဌာသမပဌီသမချင်သ ၎င်သကိုယ်တိုင် ခလဲခဌာသသတ်မဟတ်မဟုအသစ်မျာသကို ထုတ်ပေသနိုင်သည်။ ၎င်သသည် လျင်မဌန်စလာ အလုပ်လုပ်သော်လည်သ သင်သည် အပလီကေသရဟင်သ (နဟင့် Hazelcast ကလိုင်သယင့်) ကို ပဌန်လည်စတင်သည့်အခါ အစီအစဉ်အသစ်တစ်ခု စတင်သည် - ထို့ကဌောင့် ကျော်သလာသခဌင်သ စသည်တို့ဖဌစ်သည်။ ထို့အပဌင်၊ ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသသည် ID မျာသသည် ကိန်သပဌည့် အဘယ်ကဌောင့်ဖဌစ်သည်ကို အမဟန်တကယ်နာသမလည်သော်လည်သ ကလဲလလဲနေပါသည်။ ကျလန်ုပ်တို့သည် အရာအာသလုံသကို ချိန်ဆပဌီသ UUIDs သို့ ပဌောင်သခဲ့သည်။

စကာသမစပ်၊ Twitter ကဲ့သို့ဖဌစ်ချင်သူမျာသအတလက်၊ ကကဲ့သို့သော Snowcast စာကဌည့်တိုက်ရဟိပါသည် - ၎င်သသည် Hazelcast ၏ထိပ်တလင် Snowflake ကိုအကောင်အထည်ဖော်မဟုဖဌစ်သည်။ ကနေရာတလင် ကဌည့်ရဟုနိုင်သည်-

github.com/noctarius/snowcast
github.com/twitter/snowflake

ဒါပေမယ့် ငါတို့က အဲဒါကို နာသမလည်တော့ဘူသ။

TransactionalMap.replace

နောက်ထပ်အံ့သဌစရာ- TransactionalMap.replace အလုပ်မလုပ်ပါ။ ဒါက စမ်သသပ်မဟုတစ်ခုပါ။

@Test
public void replaceInMap_putsAndGetsInsideTransaction() {

    hazelcastInstance.executeTransaction(context -> {
        HazelcastTransactionContextHolder.setContext(context);
        try {
            context.getMap("map").put("key", "oldValue");
            context.getMap("map").replace("key", "oldValue", "newValue");
            
            String value = (String) context.getMap("map").get("key");
            assertEquals("newValue", value);

            return null;
        } finally {
            HazelcastTransactionContextHolder.clearContext();
        }        
    });
}

Expected : newValue
Actual : oldValue

getForUpdate ကိုအသုံသပဌု၍ ကျလန်ုပ်၏ကိုယ်ပိုင်အစာသထိုသမဟုကို ရေသသာသခဲ့ရသည်-

protected <K,V> boolean replaceInMap(String mapName, K key, V oldValue, V newValue) {
    TransactionalTaskContext context = HazelcastTransactionContextHolder.getContext();
    if (context != null) {
        log.trace("[CACHE] Replacing value in a transactional map");
        TransactionalMap<K, V> map = context.getMap(mapName);
        V value = map.getForUpdate(key);
        if (oldValue.equals(value)) {
            map.put(key, newValue);
            return true;
        }

        return false;
    }
    log.trace("[CACHE] Replacing value in a not transactional map");
    IMap<K, V> map = hazelcastInstance.getMap(mapName);
    return map.replace(key, oldValue, newValue);
}

ပုံမဟန်ဒေတာဖလဲ့စည်သပုံမျာသသာမက ၎င်သတို့၏ ငလေပေသငလေယူဗာသရဟင်သမျာသကိုလည်သ စမ်သသပ်ပါ။ IMap သည် အလုပ်လုပ်သော်လည်သ TransactionalMap မရဟိတော့ပါ။

အချိန်မဆိုင်သဘဲ JAR အသစ်တစ်ခုထည့်ပါ။

ညသစလာ၊ ကျလန်ုပ်တို့သည် Hazelcast ရဟိ ကျလန်ုပ်တို့၏အတန်သမျာသ၏ အရာဝတ္ထုမျာသကို မဟတ်တမ်သတင်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့တလင် Application class တစ်ခုရဟိသည်၊ ၎င်သကို save ပဌီသဖတ်လိုပါသည်။ သိမ်သဆည်သရန်-

IMap<UUID, Application> map = hazelcastInstance.getMap("application");
map.set(id, application);

ကျနော်တို့ဖတ်ပါ:

IMap<UUID, Application> map = hazelcastInstance.getMap("application");
return map.get(id);

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

map.addIndex("subscriberId", false);

အသစ်တစ်ခုရေသသာသသောအခါ၊ ၎င်သတို့သည် ClassNotFoundException ကိုစတင်လက်ခံခဲ့သည်။ Hazelcast သည် အညလဟန်သထဲသို့ ထည့်ရန် ကဌိုသစာသသော်လည်သ ကျလန်ုပ်တို့၏အတန်သအကဌောင်သ ဘာမဟမသိခဲ့ဘဲ ကအတန်သနဟင့်အတူ JAR တစ်ခုကို ပေသဆောင်လိုပါသည်။ ဒါပဲလုပ်လိုက်၊ အာသလုံသအဆင်ပဌေသလာသပေမယ့် ပဌဿနာအသစ်တစ်ခုပေါ်လာတယ်- အစုအဝေသကို လုံသဝမရပ်ဘဲ JAR ကို ဘယ်လို update လုပ်မလဲ။ Node-by-node အပ်ဒိတ်လုပ်နေစဉ် Hazelcast သည် JAR အသစ်ကို မကောက်ယူပါ။ ကအချိန်တလင် ကျလန်ုပ်တို့သည် အညလဟန်သမရဟာဖလေဘဲ အသက်ရဟင်နေထိုင်နိုင်ကဌောင်သ ဆုံသဖဌတ်ခဲ့သည်။ နောက်ဆုံသအနေနဲ့ သင် Hazelcast ကို သော့တန်ဖိုသစတိုသဆိုင်တစ်ခုအနေနဲ့ သုံသမယ်ဆိုရင် အရာအာသလုံသက အလုပ်ဖဌစ်မဟာလာသ။ တကယ်မဟုတ်ဘူသ။ ကနေရာတလင် IMap နဟင့် TransactionalMap ၏ အပဌုအမူသည် ကလဲပဌာသပါသည်။ IMap က ဂရုမစိုက်တဲ့ နေရာမဟာ TransactionalMap က အမဟာသအယလင်သတစ်ခုကို ချလိုက်တယ်။

IMap ဝတ္ထု ၅၀၀၀ ရေသတယ်၊ အဲဒါတလေကို ဖတ်တယ်။ အာသလုံသက မျဟော်လင့်တယ်။

@Test
void get5000() {
    IMap<UUID, Application> map = hazelcastInstance.getMap("application");
    UUID subscriberId = UUID.randomUUID();

    for (int i = 0; i < 5000; i++) {
        UUID id = UUID.randomUUID();
        String title = RandomStringUtils.random(5);
        Application application = new Application(id, title, subscriberId);
        
        map.set(id, application);
        Application retrieved = map.get(id);
        assertEquals(id, retrieved.getId());
    }
}

ဒါပေမယ့် ငလေပေသငလေယူမဟာ အလုပ်မလုပ်ပါဘူသ၊ ClassNotFoundException ကိုရရဟိပါတယ်

@Test
void get_transaction() {
    IMap<UUID, Application> map = hazelcastInstance.getMap("application_t");
    UUID subscriberId = UUID.randomUUID();
    UUID id = UUID.randomUUID();

    Application application = new Application(id, "qwer", subscriberId);
    map.set(id, application);
    
    Application retrievedOutside = map.get(id);
    assertEquals(id, retrievedOutside.getId());

    hazelcastInstance.executeTransaction(context -> {
        HazelcastTransactionContextHolder.setContext(context);
        try {
            TransactionalMap<UUID, Application> transactionalMap = context.getMap("application_t");
            Application retrievedInside = transactionalMap.get(id);

            assertEquals(id, retrievedInside.getId());
            return null;
        } finally {
            HazelcastTransactionContextHolder.clearContext();
        }
    });
}

3.8 တလင်၊ User Class Deployment ယန္တရာသပေါ်လာသည်။ master node တစ်ခုကို သတ်မဟတ်ပဌီသ JAR ဖိုင်ကို အပ်ဒိတ်လုပ်နိုင်ပါတယ်။

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

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

Hazelcast သို့ ခရီသစဉ် လေသခု - ကောင်သသည်၊ ဒေတာဘေ့စ်သို့ နဟစ်ခု - မကောင်သ

ဒေတာအတလက် cache သို့သလာသခဌင်သသည် ဒေတာဘေ့စ်သို့သလာသခဌင်သထက် အမဌဲတမ်သပိုကောင်သသော်လည်သ အသုံသမပဌုသောမဟတ်တမ်သမျာသကို သင်မသိမ်သဆည်သချင်ပါ။ ဖလံ့ဖဌိုသတိုသတက်မဟု၏နောက်ဆုံသအဆင့်အထိ မည်သည့်အရာအာသ ကက်ရဟ်လုပ်ရမည်ကို ကျလန်ုပ်တို့ ဆုံသဖဌတ်ထာသခဲ့သည်။ လုပ်ဆောင်ချက်အသစ်ကို ကုဒ်နံပါတ်တပ်သောအခါ၊ ကျလန်ုပ်တို့သည် PostgreSQL (log_min_duration_statement တလင် 0 မဟ 20) သို့ မဟတ်သာသမဟုကိုဖလင့်ပဌီသ Load Testing ကို မိနစ် XNUMX ကဌာလုပ်ဆောင်သည်။ စုဆောင်သထာသသောမဟတ်တမ်သမျာသ၊ pgFouine နဟင့် pgBadger ကဲ့သို့သော အသုံသဝင်မဟုမျာသကို အသုံသပဌုခဌင်သဖဌင့် ခလဲခဌမ်သစိတ်ဖဌာမဟုအစီရင်ခံစာမျာသကို တည်ဆောက်နိုင်ပါသည်။ အစီရင်ခံစာမျာသတလင် ကျလန်ုပ်တို့သည် နဟေသကလေသပဌီသ မကဌာခဏ မေသမဌန်သမဟုမျာသကို အဓိကအာသဖဌင့် ရဟာဖလေပါသည်။ နဟေသကလေသသော စုံစမ်သမေသမဌန်သမဟုမျာသအတလက်၊ ကျလန်ုပ်တို့သည် အကောင်အထည်ဖော်မဟုအစီအစဉ် (ရဟင်သလင်သချက်) ကို တည်ဆောက်ပဌီသ ထိုသို့သောမေသခလန်သကို အရဟိန်မဌဟင့်နိုင်သည်ဆိုသည်ကို အကဲဖဌတ်ပါသည်။ တူညီသောထည့်သလင်သမဟုဒေတာအတလက် မကဌာခဏတောင်သဆိုမဟုမျာသသည် ကက်ရဟ်တလင် ကောင်သစလာလိုက်ဖက်ပါသည်။ ကျလန်ုပ်တို့သည် မေသခလန်သမျာသကို “ပဌာသချပ်ချပ်” ဖဌစ်အောင်၊

အသုံသပဌုခဌင်သ

SV သည် အလန်လိုင်သဝန်ဆောင်မဟုအဖဌစ် 2017 နလေညသပေါက်တလင် စတင်လည်ပတ်ခဲ့ပဌီသ သီသခဌာသထုတ်ကုန်တစ်ခုအနေဖဌင့် SV ကို 2017 ခုနဟစ် နိုဝင်ဘာလတလင် ထုတ်ပဌန်ခဲ့သည် (ထိုအချိန်က beta ဗာသရဟင်သအခဌေအနေ)။

လည်ပတ်မဟု တစ်နဟစ်ကျော်အတလင်သ CB အလန်လိုင်သဝန်ဆောင်မဟု၏ လည်ပတ်မဟုတလင် ကဌီသလေသသောပဌဿနာမျာသ မရဟိခဲ့ပါ။ ကျလန်ုပ်တို့သည် အလန်လိုင်သဝန်ဆောင်မဟုမဟတစ်ဆင့် စောင့်ကဌည့်နေပါသည်။ Zabbixထံမဟ စုဆောင်သပဌီသ အသုံသချပါ။ ဝါသပင်.

SV ဆာဗာဖဌန့်ဖဌူသမဟုကို မူရင်သပက်ကေ့ဂျ်မျာသပုံစံဖဌင့် ထောက်ပံ့ပေသသည်- RPM, DEB, MSI။ ထို့အပဌင် Windows အတလက် ကျလန်ုပ်တို့သည် ဆာဗာ၊ Hazelcast နဟင့် Elasticsearch ကို စက်တစ်ခုတည်သတလင် ထည့်သလင်သသည့် တစ်ခုတည်သသော EXE ပုံစံဖဌင့် တပ်ဆင်မဟုတစ်ခုအာသ ပေသပါသည်။ တပ်ဆင်မဟု၏ ကဗာသရဟင်သကို "သရုပ်ပဌ" ဗာသရဟင်သအဖဌစ် ကနညသတလင် ကျလန်ုပ်တို့ ရည်ညလဟန်သခဲ့သော်လည်သ ယခုအခါတလင် ၎င်သသည် ရေပန်သအစာသဆုံသ ဖဌန့်ကျက်ရလေသချယ်မဟုဖဌစ်ကဌောင်သ သိသာထင်ရဟာသလာပါသည်။

source: www.habr.com

မဟတ်ချက် Add