ဖဌန့်ဝေသည့်စနစ်၏ ပေါင်သစပ်ဖလဲ့စည်သမဟုပုံစံ

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

ဖဌန့်ဝေသည့်စနစ်၏ ပေါင်သစပ်ဖလဲ့စည်သမဟုပုံစံ

(ရုရဟာသလို)

နိဒါန္သ

ခိုင်မာသော ဖဌန့်ဝေမဟုစနစ်မျာသကို တည်ဆောက်ခဌင်သသည် node အာသလုံသတလင် မဟန်ကန်ပဌီသ ပေါင်သစပ်ဖလဲ့စည်သမဟုကို အသုံသပဌုရန်လိုအပ်သည်။ ပုံမဟန်ဖဌေရဟင်သချက်တစ်ခုသည် စာသာသဖဌန့်ကျက်မဟုဖော်ပဌချက် (terraform၊ ansible သို့မဟုတ် အလာသတူတစ်ခုခု) နဟင့် အလိုအလျောက်ထုတ်ပေသသော configuration files (မကဌာခဏ — node/role တစ်ခုစီအတလက်သီသသန့်) ကိုအသုံသပဌုရန်ဖဌစ်သည်။ ဆက်သလယ်မဟု ဆုံမဟတ်တစ်ခုစီတလင် တူညီသောဗာသရဟင်သမျာသ၏ တူညီသောပရိုတိုကောမျာသကိုလည်သ အသုံသပဌုလိုလိမ့်မည် (မဟုတ်ပါက လိုက်ဖက်ညီမဟုပဌဿနာမျာသ ကဌုံတလေ့ရနိုင်သည်)။ JVM ကမ္ဘာတလင်၊ အနည်သဆုံသ စာတိုပေသပို့ရေသ ဒစ်ဂျစ်တိုက်သည် ဆက်သလယ်ရေသ လမ်သကဌောင်သအာသလုံသတလင် တူညီသောဗာသရဟင်သဖဌစ်သင့်သည်ဟု ဆိုလိုသည်။

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

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

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

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

က post တလင် စုစည်သထာသသော artifact တလင် configuration ကို ထိန်သသိမ်သခဌင်သဆိုင်ရာ အယူအဆကို လေ့လာပါမည်။

စုစည်သနိုင်သော ဖလဲ့စည်သမဟုပုံစံ

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

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

sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId

သို့မဟုတ်ပဲ

case class NodeId(hostName: String)

သို့မဟုတ်ပင်

object Singleton
type NodeId = Singleton.type

က node မျာသသည် အမျိုသမျိုသသော အခန်သကဏ္ဍမျာသကို လုပ်ဆောင်သည်၊ အချို့သော ဝန်ဆောင်မဟုမျာသကို လုပ်ဆောင်ပဌီသ TCP/HTTP ချိတ်ဆက်မဟုမျာသဖဌင့် အခဌာသ node မျာသနဟင့် ဆက်သလယ်နိုင်သင့်ပါသည်။

TCP ချိတ်ဆက်မဟုအတလက် အနည်သဆုံသ port နံပါတ်တစ်ခု လိုအပ်ပါသည်။ client နဟင့် server တို့သည် တူညီသော ပရိုတိုကောကို ပဌောဆိုနေကဌကဌောင်သကိုလည်သ သေချာစေလိုပါသည်။ node မျာသကဌာသ ချိတ်ဆက်မဟုကို နမူနာယူရန်အတလက် အောက်ပါ class ကို ကဌေညာကဌပါစို့။

case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])

ဘယ်မဟာ Port တစ်ခုသာဖဌစ်သည်။ Int ခလင့်ပဌုထာသသော အတိုင်သအတာအတလင်သ-

type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]

သန့်စင်သောအမျိုသအစာသမျာသ

မဌင် သန့်စင်ပဌီသ စာကဌည့်တိုက်။ အတိုချုပ်အာသဖဌင့်၊ ၎င်သသည် အခဌာသအမျိုသအစာသမျာသသို့ compile time ကန့်သတ်ချက်မျာသကို ထည့်နိုင်သည်။ ဒါဆိုရင် Int port နံပါတ်မျာသကိုကိုယ်စာသပဌုနိုင်သော 16-bit တန်ဖိုသမျာသသာရဟိရန်ခလင့်ပဌုထာသသည်။ ကဖလဲ့စည်သပုံနည်သလမ်သအတလက် ကစာကဌည့်တိုက်ကို အသုံသပဌုရန် မလိုအပ်ပါ။ တော်တော့်ကို အဆင်ပဌေပုံရပါတယ်။

HTTP (REST) ​​အတလက် ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟု၏ လမ်သကဌောင်သတစ်ခုလည်သ လိုအပ်နိုင်သည်-

type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)

Phantom အမျိုသအစာသ

စုစည်သမဟုအတလင်သ ပရိုတိုကောကို ခလဲခဌာသသတ်မဟတ်ရန်အတလက် ကျလန်ုပ်တို့သည် အမျိုသအစာသအငဌင်သပလာသမဟုကို ကဌေညာခဌင်သ၏ Scala အင်္ဂါရပ်ကို အသုံသပဌုနေသည်။ Protocol အဲဒါကို အတန်သထဲမဟာ အသုံသမချဘူသ။ အဲဒါကို ခေါ်တာ။ phantom အမျိုသအစာသ. runtime တလင် protocol identifier ၏ဥပမာတစ်ခုလိုအပ်ခဲသောကဌောင့်၎င်သကိုကျလန်ုပ်တို့မသိမ်သဆည်သပါ။ စုစည်သမဟုအတလင်သ က Phantom အမျိုသအစာသသည် နောက်ထပ်အမျိုသအစာသ ဘေသကင်သမဟုကို ပေသသည်။ မမဟန်ကန်သော ပရိုတိုကောဖဌင့် ဆိပ်ကမ်သကို ကျလန်ုပ်တို့ မဖဌတ်သန်သနိုင်ပါ။

အသုံသမျာသဆုံသ ပရိုတိုကောမျာသထဲမဟ တစ်ခုသည် Json နံပါတ်စဉ်အလိုက် REST API ဖဌစ်သည်။

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

ဘယ်မဟာ RequestMessage client သည် server သို့ပေသပို့နိုင်သော အခဌေခံစာအမျိုသအစာသဖဌစ်သည်။ ResponseMessage ဆာဗာမဟ တုံ့ပဌန်သည့် မက်ဆေ့ချ်ဖဌစ်သည်။ ဟုတ်ပါတယ်၊ ကျလန်ုပ်တို့သည် ဆက်သလယ်ရေသပရိုတိုကောကို အလိုရဟိသော တိကျမဟုဖဌင့် သတ်မဟတ်ပေသသည့် အခဌာသသော ပရိုတိုကော ဖော်ပဌချက်မျာသကို ဖန်တီသနိုင်ပါသည်။

ကပို့စ်၏ရည်ရလယ်ချက်မျာသအတလက် ကျလန်ုပ်တို့သည် ပိုမိုရိုသရဟင်သသော ပရိုတိုကောဗာသရဟင်သကို အသုံသပဌုပါမည်-

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

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

ဝန်ဆောင်မဟုဖလဲ့စည်သပုံတစ်ခုအာသ ဝန်ဆောင်မဟုအမည်၊ ဆိပ်ကမ်သမျာသစုစည်သမဟုနဟင့် မဟီခိုမဟုအချို့ဖဌင့် ဖော်ပဌနိုင်သည်။ Scala တလင် ကဒဌပ်စင်မျာသအာသလုံသကို ကိုယ်စာသပဌုပုံ ဖဌစ်နိုင်သည့် နည်သလမ်သအနည်သငယ်ရဟိသည် (ဥပမာ၊ HListအက္ခရာသင်္ချာ ဒေတာအမျိုသအစာသမျာသ)။ ကပို့စ်၏ရည်ရလယ်ချက်အတလက် ကျလန်ုပ်တို့သည် Cake Pattern ကိုအသုံသပဌုပဌီသ ပေါင်သစပ်နိုင်သောအပိုင်သမျာသ (modules) ကို စရိုက်လက္ခဏာမျာသအဖဌစ် ကိုယ်စာသပဌုပါမည်။ (Cake Pattern သည် ကစုစည်သနိုင်သော ဖလဲ့စည်သမဟုပုံစံအတလက် လိုအပ်ချက်မဟုတ်ပါ။ ၎င်သသည် စိတ်ကူသ၏ ဖဌစ်နိုင်ချေရဟိသော အကောင်အထည်ဖော်မဟုတစ်ခုမျဟသာဖဌစ်သည်။)

မဟီခိုမဟုမျာသအာသ အခဌာသ node မျာသ၏ အဆုံသမဟတ်မျာသအဖဌစ် ကိတ်မုန့်ပုံစံကို အသုံသပဌု၍ ကိုယ်စာသပဌုနိုင်သည်-

  type EchoProtocol[A] = SimpleHttpGetRest[A, A]

  trait EchoConfig[A] extends ServiceConfig {
    def portNumber: PortNumber = 8081
    def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
    def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
  }

Echo ဝန်ဆောင်မဟုသည် ပဌင်ဆင်သတ်မဟတ်ထာသသော ဆိပ်ကမ်သတစ်ခုသာ လိုအပ်သည်။ ပဌီသတော့ ဒီ port က echo protocol ကို ပံ့ပိုသပေသကဌောင်သ ကဌေညာပါတယ်။ trait သည် abstract method declarations မျာသကို ခလင့်ပဌုထာသသောကဌောင့် ယခုအချိန်တလင် သီသခဌာသ port တစ်ခုကို သတ်မဟတ်ရန် မလိုအပ်ကဌောင်သ သတိပဌုပါ။ ကျလန်ုပ်တို့သည် abstract နည်သလမ်သမျာသကို အသုံသပဌုပါက၊ စုစည်သသူသည် ဖလဲ့စည်သမဟုပုံစံတစ်ခုတလင် အကောင်အထည်ဖော်မဟုတစ်ခု လိုအပ်မည်ဖဌစ်သည်။ ကနေရာတလင် ကျလန်ုပ်တို့သည် အကောင်အထည်ဖော်မဟုကို ပံ့ပိုသပေသသည် (8081) ၎င်သကို ကလန်ကရစ်ပုံစံဖဌင့် ကျော်သလာသပါက ၎င်သကို မူရင်သတန်ဖိုသအဖဌစ် အသုံသပဌုမည်ဖဌစ်သည်။

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

  trait EchoClientConfig[A] {
    def testMessage: String = "test"
    def pollInterval: FiniteDuration
    def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
  }

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

ဝန်ဆောင်မဟုမျာသ အကောင်အထည်ဖော်ခဌင်သ။

ဝန်ဆောင်မဟုတစ်ခု စတင်ရန်နဟင့် ချောမလေ့စလာ ပိတ်ရန် လုပ်ဆောင်ချက်တစ်ခု လိုအပ်ပါသည်။ (စမ်သသပ်ခဌင်သအတလက် ဝန်ဆောင်မဟုတစ်ခုအာသ ပိတ်နိုင်မဟုသည် အရေသကဌီသပါသည်။) ထပ်မံ၍ ပေသထာသသည့် config တစ်ခုအတလက် ထိုသို့သောလုပ်ဆောင်ချက်ကို သတ်မဟတ်ခဌင်သအတလက် ရလေသချယ်စရာအချို့ရဟိပါသည်။ ကပို့စ်အတလက် ကျလန်ုပ်တို့သည် Cake Pattern ကို ထပ်မံအသုံသပဌုပါမည်။ ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုကို အသုံသပဌု၍ ကိုယ်စာသပဌုနိုင်သည်။ cats.Resource ၎င်သသည် bracketing နဟင့် resource release ကို ထောက်ပံ့ပေသပဌီသဖဌစ်သည်။ အရင်သအမဌစ်တစ်ခုရယူရန်အတလက် ကျလန်ုပ်တို့သည် ဖလဲ့စည်သမဟုပုံစံတစ်ခုနဟင့် runtime အကဌောင်သအရာအချို့ကို ပေသသင့်သည်။ ထို့ကဌောင့် ဝန်ဆောင်မဟုစတင်သည့်လုပ်ဆောင်ချက်သည် အောက်ပါအတိုင်သဖဌစ်နိုင်သည်-

  type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]

  trait ServiceImpl[F[_]] {
    type Config
    def resource(
      implicit
      resolver: AddressResolver[F],
      timer: Timer[F],
      contextShift: ContextShift[F],
      ec: ExecutionContext,
      applicative: Applicative[F]
    ): ResourceReader[F, Config, Unit]
  }

ဘယ်မဟာ

  • Config — ကဝန်ဆောင်မဟုစတင်သူမဟ လိုအပ်သော ဖလဲ့စည်သမဟုပုံစံ
  • AddressResolver — အခဌာသ node မျာသ၏ လိပ်စာအစစ်အမဟန်မျာသကို ရယူနိုင်စလမ်သရဟိသည့် runtime object တစ်ခု (အသေသစိတ်အချက်အလက်မျာသကို ဆက်လက်ဖတ်ရဟုရန်)။

အခဌာသအမျိုသအစာသမျာသမဟ လာပါသည်။ cats:

  • F[_] - အကျိုသသက်ရောက်မဟုအမျိုသအစာသ (အရိုသရဟင်သဆုံသကိစ္စတလင် F[A] သက်သက်ဖဌစ်နိုင်သည်။ () => A. ဒီ post မဟာ သုံသပါမယ်။ cats.IO.)
  • Reader[A,B] — သည် လုပ်ဆောင်ချက်တစ်ခုအတလက် အဓိပ္ပါယ်တူ သို့မဟုတ် အနည်သအမျာသဖဌစ်သည်။ A => B
  • cats.Resource - ရယူရန်နဟင့် လလတ်မဌောက်ရန် နည်သလမ်သမျာသရဟိသည်။
  • Timer - အိပ်ချိန် / တိုင်သတာရန်ခလင့်ပဌုသည်။
  • ContextShift - analog of ExecutionContext
  • Applicative - အကျိုသသက်ရောက်မဟုရဟိသော လုပ်ဆောင်ချက်မျာသ (monad တစ်ခုနီသပါသ) (နောက်ဆုံသတလင် ၎င်သကို အခဌာသအရာတစ်ခုဖဌင့် အစာသထိုသနိုင်သည်)

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

  trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
    type Config <: Any
    def resource(...): ResourceReader[F, Config, Unit] =
      Reader(_ => Resource.pure[F, Unit](()))
  }

(ကဌည့်ရဟုပါ source code ကို အခဌာသဝန်ဆောင်မဟုမျာသ အကောင်အထည်ဖော်မဟုမျာသအတလက် — ပဲ့တင်သံဝန်ဆောင်မဟု,
ပဲ့တင်သံဖောက်သည် နဟင့် တစ်သက်တာထိန်သချုပ်ကိရိယာမျာသ.)

node သည် ဝန်ဆောင်မဟုအနည်သငယ်ကို လုပ်ဆောင်သည့် အရာဝတ္တုတစ်ခုဖဌစ်သည် (အရင်သအမဌစ်မျာသ၏ ကလင်သဆက်တစ်ခုစတင်ခဌင်သကို Cake Pattern ဖဌင့် ဖလင့်ထာသသည်)။

object SingleNodeImpl extends ZeroServiceImpl[IO]
  with EchoServiceService
  with EchoClientService
  with FiniteDurationLifecycleServiceImpl
{
  type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}

က node တလင် လိုအပ်သော configuration အမျိုသအစာသအတိအကျကို ကျလန်ုပ်တို့သတ်မဟတ်ထာသကဌောင်သ သတိပဌုပါ။ ဝန်ဆောင်မဟုစရိုက်တစ်ခုစီသည် ကန့်သတ်ချက်တစ်ခုစီကို ကဌေငဌာထာသသောကဌောင့် မလုံလောက်သောအမျိုသအစာသဖဌင့် အရာဝတ္ထု (Cake) ကို Compiler မဟ တည်ဆောက်ခလင့်မပဌုပါ။ Config အမျိုသအစာသ။ ပဌီသပဌည့်စုံသော ဖလဲ့စည်သမဟုပုံစံကို မပံ့ပိုသဘဲ ကျလန်ုပ်တို့သည် node ကို စတင်နိုင်မည်မဟုတ်ပေ။

Node လိပ်စာ ကဌည်လင်ပဌတ်သာသမဟု

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

case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
  def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}

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

  1. အကယ်၍ ကျလန်ုပ်တို့သည် လက်တလေ့မလုပ်ဆောင်မီ လိပ်စာအမဟန်မျာသကို သိရဟိပါက၊ node hosts instantiation ကာလအတလင်သ၊ ကျလန်ုပ်တို့သည် အမဟန်တကယ် လိပ်စာမျာသနဟင့်အတူ Scala ကုဒ်ကို ထုတ်လုပ်ပဌီသ နောက်ပိုင်သတလင် တည်ဆောက်မဟုကို လုပ်ဆောင်နိုင်သည် (၎င်သသည် အချိန်စစ်ဆေသမဟုမျာသကို လုပ်ဆောင်ပဌီသ ပေါင်သစပ်စမ်သသပ်မဟုအစုံကို လုပ်ဆောင်သည်)။ ကအခဌေအနေတလင် ကျလန်ုပ်တို့၏မဌေပုံဆလဲခဌင်သလုပ်ဆောင်ချက်ကို တည်ငဌိမ်စလာသိရဟိပဌီသ တစ်မျိုသကဲ့သို့ ရိုသရဟင်သအောင်ပဌုလုပ်နိုင်သည်။ Map[NodeId, NodeAddress].
  2. တစ်ခါတစ်ရံတလင် node ကို အမဟန်တကယ်စတင်သည့်အခါ နောက်ပိုင်သတလင်သာ ကျလန်ုပ်တို့သည် အမဟန်တကယ် လိပ်စာမျာသကို ရရဟိသည် သို့မဟုတ် ကျလန်ုပ်တို့တလင် မစတင်ရသေသသည့် node လိပ်စာမျာသ မရဟိပါ။ ကအခဌေအနေတလင် ကျလန်ုပ်တို့သည် အခဌာသ node မျာသအာသလုံသရဟေ့တလင် စတင်ထာသသော ရဟာဖလေတလေ့ရဟိမဟုဝန်ဆောင်မဟုတစ်ခုရဟိနိုင်ပဌီသ node တစ်ခုစီသည် ၎င်သဝန်ဆောင်မဟုတလင် ၎င်သ၏လိပ်စာကို ကဌော်ငဌာပဌီသ မဟီခိုမဟုစာရင်သသလင်သရန် စာရင်သသလင်သနိုင်ပါသည်။
  3. ပဌုပဌင်လို့ ရတယ်။ /etc/hostsကဌိုတင်သတ်မဟတ်ထာသသောအိမ်ရဟင်အမည်မျာသ (ကဲ့သို့သော my-project-main-node နဟင့် echo-backend) နဟင့် အသုံသချချိန်၌ ကအမည်ကို ip လိပ်စာဖဌင့် ချိတ်ဆက်ပါ။

ကပို့စ်တလင် ကျလန်ုပ်တို့သည် ကကိစ္စမျာသကို အသေသစိတ်မဖော်ပဌပါ။ တကယ်တော့ ကျလန်ုပ်တို့၏ အရုပ်ဥပမာတလင် node မျာသအာသလုံသသည် တူညီသော IP address ရဟိလိမ့်မည် — 127.0.0.1.

ကပို့စ်တလင် ကျလန်ုပ်တို့သည် ဖဌန့်ဝေမဟုစနစ် layout နဟစ်ခုကို သုံသသပ်ပါမည်။

  1. ဝန်ဆောင်မဟုအာသလုံသသည် node တစ်ခုတည်သပေါ်တလင် နေရာချထာသသည့် Single node အပဌင်အဆင်။
  2. ဝန်ဆောင်မဟုနဟင့် ကလိုင်သယင့် မတူညီသော node မျာသပေါ်တလင် ရဟိနေသည့် node layout နဟစ်ခု။

ဖလဲ့စည်သမဟုပုံစံတစ်ခု node တစ်ခုတည်သ layout မဟာ အောက်ပါအတိုင်သဖဌစ်ပါသည်။

Single node ဖလဲ့စည်သမဟု

object SingleNodeConfig extends EchoConfig[String] 
  with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
  case object Singleton // identifier of the single node 
  // configuration of server
  type NodeId = Singleton.type
  def nodeId = Singleton

  /** Type safe service port specification. */
  override def portNumber: PortNumber = 8088

  // configuration of client

  /** We'll use the service provided by the same host. */
  def echoServiceDependency = echoService

  override def testMessage: UrlPathElement = "hello"

  def pollInterval: FiniteDuration = 1.second

  // lifecycle controller configuration
  def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}

ကတလင် ကျလန်ုပ်တို့သည် ဆာဗာနဟင့် ကလိုင်သယင့်ဖလဲ့စည်သမဟုနဟစ်ခုလုံသကို တိုသချဲ့နိုင်သော တစ်ခုတည်သသော ဖလဲ့စည်သမဟုပုံစံကို ဖန်တီသသည်။ ထို့အပဌင် ကျလန်ုပ်တို့သည် နောက်ပိုင်သတလင် ပုံမဟန်အာသဖဌင့် client နဟင့် server ကို ရပ်စဲသလာသမည့် lifecycle controller ကို configure လုပ်ပါသည်။ lifetime ကဌာသကာလဖဌတ်သန်သမဟုမျာသ။

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

ဆုံမဟတ်နဟစ်ခု ဖလဲ့စည်သမဟု

  object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
  {
    type NodeId = NodeIdImpl

    def nodeId = NodeServer

    override def portNumber: PortNumber = 8080
  }

  object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
  {
    // NB! dependency specification
    def echoServiceDependency = NodeServerConfig.echoService

    def pollInterval: FiniteDuration = 1.second

    def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.

    def testMessage: String = "dolly"
  }

မဟီခိုမဟုကို ကျလန်ုပ်တို့ မည်သို့သတ်မဟတ်သည်ကို ကဌည့်ပါ။ လက်ရဟိ node ၏ မဟီခိုမဟုအဖဌစ် အခဌာသ node ၏ ပံ့ပိုသပေသထာသသော ဝန်ဆောင်မဟုကို ကျလန်ုပ်တို့ဖော်ပဌထာသသည်။ ပရိုတိုကောကိုဖော်ပဌသည့် ဖန်တမ်အမျိုသအစာသပါ၀င်သောကဌောင့် မဟီခိုမဟုအမျိုသအစာသကို စစ်ဆေသထာသသည်။ ပဌီသတော့ runtime မဟာ မဟန်ကန်တဲ့ node id ရဟိပါလိမ့်မယ်။ ကသည်မဟာ အဆိုပဌုထာသသော ဖလဲ့စည်သမဟုပုံစံချဉ်သကပ်မဟု၏ အရေသကဌီသသောကဏ္ဍမျာသထဲမဟ တစ်ခုဖဌစ်သည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ ဆိပ်ကမ်သကို တစ်ကဌိမ်သာ သတ်မဟတ်နိုင်စလမ်သရဟိပဌီသ ကျလန်ုပ်တို့သည် မဟန်ကန်သော port ကို ကိုသကာသကဌောင်သ သေချာစေပါသည်။

node နဟစ်ခုအကောင်အထည်ဖော်ခဌင်သ။

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

  object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
    type Config = EchoConfig[String] with SigTermLifecycleConfig
  }

  object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
    type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
  }

ပထမဆုံသ node သည် server ကိုအကောင်အထည်ဖော်ပဌီသ ၎င်သသည် server side config သာလိုအပ်သည်။ ဒုတိယ Node သည် client ကိုအကောင်အထည်ဖော်ပဌီသ config ၏အခဌာသအစိတ်အပိုင်သတစ်ခုလိုအပ်သည်။ node နဟစ်ခုလုံသသည် တစ်သက်တာသတ်မဟတ်ချက်အချို့ လိုအပ်ပါသည်။ က post service node ၏ရည်ရလယ်ချက်မျာသအတလက်အသုံသပဌုခဌင်သကိုရပ်စဲနိုင်သည့်အဆုံသမဲ့တစ်သက်တာရဟိလိမ့်မည်။ SIGTERMပဲ့တင်သံဖောက်သည်သည် ပဌင်ဆင်သတ်မဟတ်ထာသသော ကန့်သတ်ကဌာချိန်ပဌီသနောက် ရပ်တန့်သလာသလိမ့်မည်။ ကဌည့်ပါ။ စတင်သူလျဟောက်လလဟာ အသေသစိတျအဘို့။

အလုံသစုံ ဖလံ့ဖဌိုသတိုသတက်ရေသ လုပ်ငန်သစဉ်

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

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

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

လက်မဟတ် -> PR -> ပဌန်လည်သုံသသပ်ခဌင်သ -> ပေါင်သစည်သခဌင်သ -> စဉ်ဆက်မပဌတ် ပေါင်သစည်သခဌင်သ -> စဉ်ဆက်မပဌတ် ဖဌန့်ကျက်ခဌင်သ။

ချဉ်သကပ်မဟု၏အောက်ပါအကျိုသဆက်မျာသရဟိသည်။

  1. စနစ်တစ်ခု၏ စံနမူနာအတလက် ဖလဲ့စည်သမဟုပုံစံသည် ညီညလတ်သည်။ node မျာသကဌာသတလင် မဟာသယလင်သသောချိတ်ဆက်မဟုရဟိရန် နည်သလမ်သမရဟိပုံရသည်။
  2. node တစ်ခုတလင် configuration ကိုပဌောင်သရန်မလလယ်ကူပါ။ လော့ဂ်အင်ဝင်ပဌီသ စာသာသဖိုင်အချို့ကို ပဌောင်သလဲခဌင်သသည် ကျိုသကဌောင်သဆီလျော်မဟုမရဟိပုံရသည်။ ထို့ကဌောင့် configuration drift သည် ဖဌစ်နိုင်ချေနည်သသည်။
  3. သေသငယ်သော ဖလဲ့စည်သမဟုပုံစံ အပဌောင်သအလဲမျာသသည် ပဌုလုပ်ရန် မလလယ်ကူပါ။
  4. ဖလဲ့စည်သမဟုပုံစံပဌောင်သလဲမဟုအမျာသစုသည် တူညီသောဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်အတိုင်သ လုပ်ဆောင်မည်ဖဌစ်ပဌီသ ပဌန်လည်သုံသသပ်မဟုအချို့ကို ကျော်လလန်သလာသမည်ဖဌစ်သည်။

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

အပဌောင်သအလဲတလေဟာ

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

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

  1. ပစ်မဟတ်စက်ပေါ်ရဟိ စာသာသဖိုင်။
  2. ဗဟိုချုပ်ကိုင်ထာသသော သော့တန်ဖိုသသိုလဟောင်မဟု (ကဲ့သို့သော etcd/zookeeper).
  3. လုပ်ငန်သစဉ်ကို ပဌန်လည်စတင်ခဌင်သမရဟိဘဲ ပဌန်လည်ဖလဲ့စည်သခဌင်သ/ပဌန်လည်စတင်နိုင်သည့် လုပ်ငန်သစဉ်ခလဲအစိတ်အပိုင်သမျာသ။
  4. ရဟေသဟောင်သပစ္စည်သနဟင့် ဗာသရဟင်သထိန်သချုပ်မဟုပဌင်ပတလင် ဖလဲ့စည်သမဟု။

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

(Btw၊ နောက်ဆုံသတလင် text config ဖိုင်မျာသကို စတင်အသုံသပဌုရန် လိုအပ်လာပါက၊ ကျလန်ုပ်တို့သည် တူညီသော parser + validator ကို ထည့်သလင်သရန် လိုအပ်ပါမည်။ Config type လုပ်ပဌီသ text configs ကိုစသုံသဖို့ လုံလောက်ပါလိမ့်မယ်။ စာသာသအခဌေခံဗာသရဟင်သတလင် ကျလန်ုပ်တို့သည် ထပ်လောင်သကုဒ်အချို့ လိုအပ်သောကဌောင့် စာသာသအခဌေခံဖလဲ့စည်သမဟုပုံစံ၏ ရဟုပ်ထလေသမဟုထက် စုစည်သအချိန်ဖလဲ့စည်သမဟု၏ ရဟုပ်ထလေသမဟုသည် အနည်သငယ်သေသငယ်ကဌောင်သလည်သ ၎င်သမဟပဌသသည်။)

Centralized key-value storage သည် application meta parameters မျာသကို ဖဌန့်ဝေရန်အတလက် ကောင်သမလန်သော ယန္တရာသတစ်ခုဖဌစ်သည်။ ကနေရာတလင် ကျလန်ုပ်တို့သည် configuration values ​​နဟင့် data မျဟသာဟုကျလန်ုပ်တို့ယူဆသောအရာကိုစဉ်သစာသရန်လိုအပ်သည်။ လုပ်ဆောင်ချက်တစ်ခု ပေသထာသသည်။ C => A => B ပဌောင်သလဲခဲသော တန်ဖိုသမျာသကို ကျလန်ုပ်တို့ ခေါ်ဆိုလေ့ရဟိပါသည်။ C "configuration" မကဌာခဏ data ကိုပဌောင်သလဲနေစဉ် A - ဒေတာထည့်ရုံပါပဲ။ ဒေတာထက်စောသော လုပ်ဆောင်ချက်ကို ဖလဲ့စည်သမဟုပုံစံကို ပေသသင့်သည်။ A. ကအကဌံအစည်ကဌောင့် ၎င်သသည် ဒေတာတစ်ခုတည်သမဟ configuration data ကို ခလဲခဌာသရာတလင် အသုံသပဌုနိုင်သည့် ကဌိမ်နဟုန်သအပဌောင်သအလဲမျာသဟု ကျလန်ုပ်တို့ပဌောနိုင်သည်။ ထို့အပဌင် ဒေတာသည် ပုံမဟန်အာသဖဌင့် အရင်သအမဌစ်တစ်ခု (အသုံသပဌုသူ) မဟ လာပဌီသ ဖလဲ့စည်သမဟုပုံစံသည် မတူညီသော အရင်သအမဌစ် (စီမံခန့်ခလဲသူ) မဟ လာပါသည်။ အစပဌုခဌင်သလုပ်ငန်သစဉ်ပဌီသနောက် ပဌောင်သလဲနိုင်သော ကန့်သတ်ချက်မျာသကို ကိုင်တလယ်ဖဌေရဟင်သခဌင်သက အက်ပ်လီကေသရဟင်သရဟုပ်ထလေသမဟုကို တိုသလာစေပါသည်။ ထိုသို့သော ကန့်သတ်ချက်မျာသ အတလက် ကျလန်ုပ်တို့သည် ၎င်သတို့၏ ပေသပို့မဟု ယန္တရာသ၊ ခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် အတည်ပဌုခဌင်သ၊ မမဟန်ကန်သော တန်ဖိုသမျာသကို ကိုင်တလယ်ဖဌေရဟင်သရန် လိုအပ်ပါသည်။ ထို့ကဌောင့်၊ ပရိုဂရမ်၏ရဟုပ်ထလေသမဟုကိုလျဟော့ချရန်အတလက်၊ ကျလန်ုပ်တို့သည် runtime တလင်ပဌောင်သလဲနိုင်သော parameters အရေအတလက်ကိုလျဟော့ချနိုင်သည် (သို့မဟုတ်၎င်သတို့ကိုလုံသဝဖယ်ရဟာသပစ်သည်) ။

ကပို့စ်၏ရဟုထောင့်မဟ ကျလန်ုပ်တို့သည် static နဟင့် dynamic parameters မျာသအကဌာသ ကလဲပဌာသမဟုကို ပဌုလုပ်သင့်သည်။ အကယ်၍ service logic သည် runtime တလင် အချို့သော parameter မျာသကို ရဟာသပါသသောပဌောင်သလဲမဟု လိုအပ်ပါက၊ ၎င်သတို့ကို dynamic parameters ဟုခေါ်နိုင်သည်။ မဟုတ်ပါက ၎င်သတို့သည် တည်ငဌိမ်နေပဌီသ အဆိုပဌုထာသသော ချဉ်သကပ်မဟုကို အသုံသပဌု၍ ပဌင်ဆင်နိုင်သည်။ ပဌောင်သလဲနေသော ပဌန်လည်ဖလဲ့စည်သမဟုအတလက် အခဌာသနည်သလမ်သမျာသ လိုအပ်နိုင်သည်။ ဥပမာအာသဖဌင့်၊ ဖဌန့်ဝေထာသသောစနစ်၏ သီသခဌာသလုပ်ငန်သစဉ်မျာသကို ပဌန်လည်စတင်ရန် အလာသတူပုံစံဖဌင့် စနစ်၏အစိတ်အပိုင်သမျာသကို အသစ်ဖလဲ့စည်သမဟုကန့်သတ်ချက်မျာသဖဌင့် ပဌန်လည်စတင်နိုင်သည်။
(ကျလန်ုပ်၏ နဟိမ့်ချသော အမဌင်မဟာ ၎င်သသည် စနစ်၏ ရဟုပ်ထလေသမဟုကို တိုသပလာသစေသောကဌောင့် runtime ပဌန်လည်ပဌင်ဆင်ခဌင်သကို ရဟောင်ကဌဉ်ရန်ဖဌစ်သည်။
လုပ်ငန်သစဉ်မျာသ ပဌန်လည်စတင်ခဌင်သအတလက် OS ပံ့ပိုသမဟုကိုသာ အာသကိုသရန်မဟာ ပိုမိုရိုသရဟင်သပါသည်။ ဒါတောင် အမဌဲတမ်သမဖဌစ်နိုင်ဘူသလေ။)

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

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

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

ကောင်သကျိုသနဟင့်ဆိုသကျိုသမျာသ

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

အာသသာချက်မျာသ

ပဌီသပဌည့်စုံသော ဖဌန့်ဝေမဟုစနစ်၏ စုစည်သနိုင်သော ဖလဲ့စည်သမဟုပုံစံ၏ အင်္ဂါရပ်မျာသ-

  1. ဖလဲ့စည်သမဟုပုံစံကို တည်ငဌိမ်စလာစစ်ဆေသပါ။ ၎င်သသည် ပေသထာသသော အမျိုသအစာသ ကန့်သတ်ချက်မျာသ မဟန်ကန်ကဌောင်သ မဌင့်မာသသော ယုံကဌည်မဟုကို ပေသသည်။
  2. ကဌလယ်ဝသောဘာသာစကာသဖလဲ့စည်သမဟု။ ပုံမဟန်အာသဖဌင့် အခဌာသဖလဲ့စည်သပုံနည်သလမ်သမျာသကို ပဌောင်သလဲနိုင်သော အစာသထိုသမဟုအမျာသစုတလင် ကန့်သတ်ထာသသည်။
    Scala ကိုအသုံသပဌုခဌင်သဖဌင့် configuration ပိုမိုကောင်သမလန်စေရန်အတလက် ကျယ်ပဌန့်သောဘာသာစကာသအင်္ဂါရပ်မျာသကို အသုံသပဌုနိုင်သည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ပုံသေတန်ဖိုသမျာသ၊ မတူညီသောနယ်ပယ်ကို သတ်မဟတ်ရန် အရာဝတ္ထုမျာသကို ပေသဆောင်ရန် စရိုက်လက္ခဏာမျာသကို အသုံသပဌုနိုင်ပဌီသ၊ ကျလန်ုပ်တို့အာသ ကိုသကာသနိုင်သည်။ vals သည် ပဌင်ပနယ်ပယ် (DRY) တလင် တစ်ကဌိမ်သာ သတ်မဟတ်ထာသသည်။ ပကတိအစီအစဥ်မျာသ သို့မဟုတ် အချို့သောအတန်သမျာသ၏ ဥပမာမျာသကို အသုံသပဌုရန် ဖဌစ်နိုင်သည် (Seq, Map, etc) ။
  3. DSL Scala သည် DSL စာရေသဆရာမျာသအတလက် သင့်လျော်သောပံ့ပိုသမဟုရဟိပါသည်။ ပိုမိုအဆင်ပဌေပဌီသ အဆုံသအသုံသပဌုသူဖော်ရလေသော ဖလဲ့စည်သမဟုဘာသာစကာသတစ်ခုကို တည်ထောင်ရန် ကအင်္ဂါရပ်မျာသကို အသုံသပဌုနိုင်ပဌီသ၊ သို့မဟသာ နောက်ဆုံသဖလဲ့စည်သပုံသည် ဒိုမိန်သအသုံသပဌုသူမျာသ အနည်သဆုံသဖတ်ရဟုနိုင်မည်ဖဌစ်သည်။
  4. node မျာသတစ်လျဟောက် သမာဓိနဟင့် ပေါင်သစပ်မဟု။ တစ်နေရာတည်သတလင် ဖဌန့်ဝေမဟုစနစ်တစ်ခုလုံသအတလက် ပုံစံဖလဲ့စည်သမဟုထာသရဟိခဌင်သ၏ အကျိုသကျေသဇူသတစ်ခုမဟာ တန်ဖိုသမျာသအာသလုံသကို တစ်ကဌိမ်တည်သဖဌင့် တင်သတင်သကျပ်ကျပ် သတ်မဟတ်ပဌီသ ကျလန်ုပ်တို့ လိုအပ်သည့်နေရာအာသလုံသတလင် ပဌန်လည်အသုံသပဌုခဌင်သဖဌစ်ပါသည်။ လုံခဌုံသော ပို့တ်ကဌေငဌာချက်မျာသကိုလည်သ ရိုက်ထည့်ပါ ဖဌစ်နိုင်ချေ မဟန်ကန်သော ဖလဲ့စည်သမဟုစနစ်အာသလုံသတလင် စနစ်၏ node မျာသသည် တူညီသောဘာသာစကာသကို ပဌောဆိုနိုင်စေရန် သေချာစေပါသည်။ အချို့သော ဝန်ဆောင်မဟုမျာသကို ပေသဆောင်ရန် မေ့ပစ်ရန် ခက်ခဲစေသော node မျာသကဌာသတလင် ပဌတ်သာသစလာ မဟီခိုမဟုရဟိပါသည်။
  5. အပဌောင်သအလဲမျာသ၏အရည်အသလေသမဌင့်မာသ။ ပုံမဟန် PR လုပ်ငန်သစဉ်မဟတဆင့် ဖလဲ့စည်သမဟုပုံစံပဌောင်သလဲမဟုမျာသကို ဖဌတ်ကျော်ခဌင်သ၏ အလုံသစုံချဉ်သကပ်မဟုသည် ဖလဲ့စည်သဖလဲ့စည်သပုံတလင် အရည်အသလေသမဌင့်စံနဟုန်သမျာသကို ချမဟတ်ပေသသည်။
  6. တပဌိုင်နက်တည်သ ဖလဲ့စည်သမဟုပုံစံ အပဌောင်သအလဲမျာသ။ ပဌင်ဆင်သတ်မဟတ်မဟုတလင် ကျလန်ုပ်တို့သည် အလိုအလျောက် ဖဌန့်ကျက်မဟုတလင် အပဌောင်သအလဲမျာသ ပဌုလုပ်သည့်အခါတိုင်သ node အာသလုံသကို မလမ်သမံထာသကဌောင်သ သေချာစေသည်။
  7. လျဟောက်လလဟာရိုသရဟင်သ။ အပလီကေသရဟင်သသည် ဖလဲ့စည်သမဟုပုံစံကို ခလဲခဌမ်သစိတ်ဖဌာပဌီသ အတည်ပဌုရန်နဟင့် မဟာသယလင်သသော ဖလဲ့စည်သမဟုတန်ဖိုသမျာသကို ကိုင်တလယ်ရန် မလိုအပ်ပါ။ ၎င်သသည် အလုံသစုံအပလီကေသရဟင်သကို ရိုသရဟင်သစေသည်။ (အချို့သော ရဟုပ်ထလေသမဟုမျာသ တိုသလာခဌင်သသည် configuration သူ့ဘာသာသူ ဖဌစ်သည်၊ သို့သော် ၎င်သသည် ဘေသကင်သရေသ အတလက် သတိရဟိရဟိ အပေသအယူတစ်ခု ဖဌစ်သည်။) သာမန်ဖလဲ့စည်သပုံသို့ ပဌန်သလာသရန် အလလန်ရိုသရဟင်သပါသည် — ပျောက်ဆုံသနေသော အပိုင်သမျာသကို ထည့်လိုက်ရုံပင်။ စုစည်သဖလဲ့စည်သမဟုပုံစံဖဌင့် စတင်ရန် ပိုမိုလလယ်ကူပဌီသ အပိုအပိုင်သအစမျာသ အကောင်အထည်ဖော်မဟုကို နောက်ပိုင်သအချိန်အချို့အထိ ရလဟေ့ဆိုင်သရန် ပိုမိုလလယ်ကူသည်။
  8. ဗာသရဟင်သပုံစံ ဖလဲ့စည်သမဟု။ ဖလဲ့စည်သမဟုပုံစံပဌောင်သလဲမဟုမျာသသည် တူညီသောဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်အတိုင်သလုပ်ဆောင်သောကဌောင့်၊ ရလဒ်အနေဖဌင့် ကျလန်ုပ်တို့သည် ထူသခဌာသသောဗာသရဟင်သဖဌင့် ရဟေသဟောင်သပစ္စည်သတစ်ခုကို ရရဟိပါသည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ လိုအပ်ပါက configuration ကို ပဌန်ပဌောင်သနိုင်စေပါသည်။ ကျလန်ုပ်တို့သည် လလန်ခဲ့သော တစ်နဟစ်က အသုံသပဌုခဲ့သည့် ဖလဲ့စည်သမဟုပုံစံကိုပင် အသုံသချနိုင်ပဌီသ ၎င်သသည် တူညီသောပုံစံအတိုင်သ လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။ တည်ငဌိမ်သောဖလဲ့စည်သပုံသည် ဖဌန့်ဝေမဟုစနစ်၏ ကဌိုတင်ခန့်မဟန်သနိုင်မဟုနဟင့် ယုံကဌည်စိတ်ချရမဟုကို တိုသတက်စေသည်။ ဖလဲ့စည်သမဟုအာသ စုစည်သချိန်၌ ပဌင်ဆင်ပဌီသ ထုတ်လုပ်မဟုစနစ်တလင် အလလယ်တကူ လလဲချော်၍မရပါ။
  9. ရလေ့လျာသမဟု။ အဆိုပဌုထာသသော framework သည် modular ဖဌစ်ပဌီသ module မျာသကို နည်သလမ်သအမျိုသမျိုသဖဌင့် ပေါင်သစပ်နိုင်သည်။
    မတူညီသောဖလဲ့စည်သပုံမျာသကို ပံ့ပိုသပေသသည် (ဆက်တင်မျာသ/ အပဌင်အဆင်မျာသ)။ အထူသသဖဌင့်၊ သေသငယ်သောစကေသတစ်ခုတည်သ node အပဌင်အဆင်နဟင့် ကဌီသမာသသောစကေသမျာသစလာသော node ဆက်တင်ရဟိရန် ဖဌစ်နိုင်သည်။ ထုတ်လုပ်မဟုအပဌင်အဆင်မျာသစလာရဟိရန် သင့်လျော်ပါသည်။
  10. စမ်သသပ်ခဌင်သ။ စမ်သသပ်ခဌင်သ ရည်ရလယ်ချက်အတလက် တစ်ညသသည် ပုံစံတူ ဝန်ဆောင်မဟုကို အကောင်အထည်ဖော်ကာ အမျိုသအစာသ ဘေသကင်သသော နည်သလမ်သဖဌင့် မဟီခိုမဟုအဖဌစ် အသုံသပဌုနိုင်သည်။ ပုံသဏ္ဍာန်မျာသဖဌင့် အစာသထိုသထာသသော အမျိုသမျိုသသော အစိတ်အပိုင်သမျာသဖဌင့် မတူညီသော စမ်သသပ်မဟု အပဌင်အဆင် အနည်သငယ်ကို တစ်ပဌိုင်နက် ထိန်သသိမ်သထာသနိုင်သည်။
  11. ပေါင်သစပ်စမ်သသပ်ခဌင်သ။ တစ်ခါတစ်ရံတလင် ဖဌန့်ဝေသည့်စနစ်မျာသတလင် ပေါင်သစပ်စစ်ဆေသမဟုမျာသကို လုပ်ဆောင်ရန် ခက်ခဲသည်။ ပဌီသပဌည့်စုံသော ဖဌန့်ဝေမဟုစနစ်၏ ဘေသကင်သသော ဖလဲ့စည်သမဟုပုံစံကို ရိုက်ထည့်ရန် ဖော်ပဌထာသသည့် ချဉ်သကပ်နည်သကို အသုံသပဌုခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့သည် ထိန်သချုပ်နိုင်သော နည်သလမ်သဖဌင့် ဆာဗာတစ်ခုတည်သတလင် ဖဌန့်ဝေထာသသော အစိတ်အပိုင်သအာသလုံသကို လုပ်ဆောင်နိုင်သည်။ အခဌေအနေကို အတုယူဖို့ လလယ်ပါတယ်။
    ဝန်ဆောင်မဟုမျာသထဲမဟ တစ်ခုကို မရနိုင်သောအခါ။

အာသနည်သချက်မျာသ

စုစည်သထာသသော ဖလဲ့စည်သမဟုပုံစံသည် "သာမန်" ဖလဲ့စည်သမဟုပုံစံနဟင့် ကလဲပဌာသပဌီသ လိုအပ်ချက်အာသလုံသနဟင့် မကိုက်ညီပါ။ ကသည်မဟာ compiled config ၏အာသနည်သချက်အချို့ဖဌစ်သည်-

  1. Static configuration ၎င်သသည် အပလီကေသရဟင်သအာသလုံသအတလက် သင့်လျော်မည်မဟုတ်ပေ။ အချို့သောကိစ္စမျာသတလင် ဘေသကင်သရေသအစီအမံအာသလုံသကို ကျော်ဖဌတ်ပဌီသ ထုတ်လုပ်မဟုတလင် ဖလဲ့စည်သမဟုပုံစံကို အမဌန်ပဌင်ဆင်ရန် လိုအပ်သည်။ ဒီနည်သလမ်သက ပိုခက်ခဲစေတယ်။ ဖလဲ့စည်သမဟုပုံစံကို ပဌောင်သလဲပဌီသနောက် စုစည်သခဌင်သနဟင့် ပဌန်လည်နေရာချထာသခဌင်သတို့ကို လိုအပ်ပါသည်။ ကသည်မဟာ အင်္ဂါရပ်နဟင့် ဝန်ထုပ်ဝန်ပိုသ နဟစ်ခုလုံသဖဌစ်သည်။
  2. ဖလဲ့စည်သမဟုမျိုသဆက်။ config ကို automation tool အချို့မဟထုတ်ပေသသောအခါ၊ ကချဉ်သကပ်မဟုသည် နောက်ဆက်တလဲစုစည်သမဟု လိုအပ်သည် (အလဟည့်ကျဖဌစ်နိုင်သည်)။ ကနောက်ထပ်အဆင့်ကို တည်ဆောက်မဟုစနစ်တလင် ပေါင်သစည်သရန် ထပ်လောင်သအာသထုတ်မဟု လိုအပ်နိုင်သည်။
  3. တူရိယာ။ စာသာသအခဌေခံ configs ကိုအာသကိုသသည့်ယနေ့အသုံသပဌုနေသောကိရိယာမျာသစလာရဟိသည်။ တချို့က
    ဖလဲ့စည်သမဟုပုံစံကို ပဌုစုသောအခါတလင် သက်ရောက်မဟုရဟိမည်မဟုတ်ပါ။
  4. အတလေသအမဌင်ပဌောင်သဖို့ လိုတယ်။ ဆော့ဖ်ဝဲရေသသာသသူမျာသနဟင့် DevOps တို့သည် စာသာသဖလဲ့စည်သမဟုဖိုင်မျာသနဟင့် ရင်သနဟီသကဌသည်။ ဖလဲ့စည်သမဟုပုံစံကို စုစည်သရန် စိတ်ကူသသည် ၎င်သတို့အတလက် ထူသဆန်သနေပေမည်။
  5. compilable configuration ကို မမိတ်ဆက်မီ အရည်အသလေသမဌင့် ဆော့ဖ်ဝဲ ဖလံ့ဖဌိုသတိုသတက်ရေသ လုပ်ငန်သစဉ်တစ်ခု လိုအပ်ပါသည်။

အကောင်အထည်ဖော်ခဲ့သည့် ဥပမာ၏ ကန့်သတ်ချက်အချို့ရဟိသည်။

  1. အကယ်၍ ကျလန်ုပ်တို့သည် node အကောင်အထည်ဖော်မဟုမဟ တောင်သဆိုခဌင်သမရဟိသော အပို config ကို ပေသဆောင်ပါက၊ compiler သည် ပျက်ကလက်နေသောအကောင်အထည်ဖော်မဟုကို ရဟာဖလေတလေ့ရဟိရန် ကျလန်ုပ်တို့အာသ ကူညီပေသလိမ့်မည်မဟုတ်ပါ။ ဒါကို အသုံသပဌုပဌီသ ဖဌေရဟင်သနိုင်ပါတယ်။ HList သို့မဟုတ် စရိုက်မျာသနဟင့် Cake Pattern အစာသ node ဖလဲ့စည်သမဟုပုံစံအတလက် ADTs (case classes)။
  2. config file တလင် boilerplate အချို့ကို ပေသဆောင်ရပါမည်: (package, import, object ကဌေငဌာချက်မျာသ၊
    override defပုံသေတန်ဖိုသမျာသရဟိသော ဘောင်မျာသအတလက် 's)။ ၎င်သကို DSL သုံသပဌီသ တစ်စိတ်တစ်ပိုင်သ ကိုင်တလယ်ဖဌေရဟင်သနိုင်ပါသည်။
  3. ကပို့စ်တလင် အလာသတူ node အစုအဝေသမျာသ၏ တက်ကဌလသော ပဌန်လည်ဖလဲ့စည်သခဌင်သကို အကျုံသမဝင်ပါ။

ကောက်ချက်

ကပို့စ်တလင် ကျလန်ုပ်တို့သည် အမျိုသအစာသလုံခဌုံသောနည်သလမ်သဖဌင့် အရင်သအမဌစ်ကုဒ်ကို တိုက်ရိုက်ဖလဲ့စည်သခဌင်သအာသ ကိုယ်စာသပဌုခဌင်သအကဌောင်သ ဆလေသနလေသထာသပါသည်။ ချဉ်သကပ်မဟုကို xml- နဟင့် အခဌာသသော စာသာသအခဌေခံ configs မျာသကို အစာသထိုသအဖဌစ် အပလီကေသရဟင်သမျာသစလာတလင် အသုံသပဌုနိုင်သည်။ ကျလန်ုပ်တို့၏နမူနာကို Scala တလင် အကောင်အထည်ဖော်ထာသသော်လည်သ၊ ၎င်သကို အခဌာသစုစည်သနိုင်သောဘာသာစကာသမျာသ (Kotlin၊ C#၊ Swift စသည်ဖဌင့်) သို့လည်သ ဘာသာပဌန်ဆိုနိုင်ပါသည်။ ကချဉ်သကပ်နည်သကို ပရောဂျက်အသစ်တလင် စမ်သကဌည့်နိုင်ပဌီသ၊ အဆင်မပဌေပါက ခေတ်ဟောင်သပုံစံသို့ ပဌောင်သနိုင်သည်။

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

ကချဉ်သကပ်နည်သကို နည်သအမျိုသမျိုသဖဌင့် ချဲ့ထလင်နိုင်သည်။

  1. တစ်ခုက မက်ခရိုကို အသုံသပဌု၍ လုပ်ငန်သဆိုင်ရာ ယုတ္တိဗေဒဆိုင်ရာ ကန့်သတ်ချက်မျာသ မအောင်မဌင်ပါက စုစည်သမဟုအချိန်၌ ပျက်ကလက်နိုင်သည်။
  2. domain-user-friendly နည်သလမ်သဖဌင့် configuration ကိုကိုယ်စာသပဌုရန် DSL ကိုအကောင်အထည်ဖော်နိုင်သည်။
  3. အလိုအလျောက်ဖလဲ့စည်သပုံ ချိန်ညဟိမဟုမျာသဖဌင့် တက်ကဌလသော အရင်သအမဌစ်စီမံခန့်ခလဲမဟု။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် အစုအဝေသ၏နံပါတ်မျာသကို ချိန်ညဟိသောအခါတလင် ကျလန်ုပ်တို့သည် (၁) အနည်သငယ်ပဌုပဌင်ထာသသော ဖလဲ့စည်သမဟုပုံစံကို ရရဟိရန် node မျာသကို လိုချင်ပေမည်။ (1) node info အသစ်မျာသကိုလက်ခံရရဟိရန် cluster manager ။

ကဌေသဇူသတငျစကာသ

ဒီပို့စ်မူကဌမ်သအတလက် စိတ်အာသထက်သန်တဲ့ အကဌံပဌုချက်ပေသတဲ့အတလက် Andrey Saksonov၊ Pavel Popov၊ Anton Nehaev တို့ကို ကျေသဇူသတင်ကဌောင်သ ပဌောလိုပါတယ်။

source: www.habr.com