Compiled Distributed System Configuration

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

Compiled Distributed System Configuration

(english)

နိဒါန်သ

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

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

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

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

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

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

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

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

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

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

သို့မဟုတ်

case class NodeId(hostName: String)

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

object Singleton
type NodeId = Singleton.type

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

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

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

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

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

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

စာကဌည့်တိုက်ကိုကဌည့်ပါ။ သန့်စင်ပဌီသ О ကဌဟနျတေျာ့ အစီရင်ခံစာ. အတိုချုပ်အာသဖဌင့်၊ စာကဌည့်တိုက်သည် သင့်အာသ compile time တလင် အမဟန်ခဌစ်ထာသသော အမျိုသအစာသမျာသသို့ ကန့်သတ်ချက်မျာသကို ပေါင်သထည့်နိုင်သည်။ ကကိစ္စတလင်၊ တရာသဝင်သော ပို့တ်နံပါတ်တန်ဖိုသမျာသသည် 16-bit ကိန်သပဌည့်မျာသဖဌစ်သည်။ စုစည်သထာသသောဖလဲ့စည်သပုံတစ်ခုအတလက်၊ သန့်စင်ထာသသောစာကဌည့်တိုက်ကိုအသုံသပဌုခဌင်သသည်မဖဌစ်မနေလိုအပ်သော်လည်သ ၎င်သသည်ဖလဲ့စည်သပုံကိုစစ်ဆေသရန် compiler ၏စလမ်သရည်ကိုတိုသတက်စေသည်။

HTTP (REST) ​​​​ပရိုတိုကောမျာသအတလက်၊ ဆိပ်ကမ်သနံပါတ်အပဌင်၊ ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုအတလက် လမ်သကဌောင်သကိုလည်သ လိုအပ်နိုင်သည်-

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

Phantom အမျိုသအစာသမျာသ

compile time တလင် protocol ကိုခလဲခဌာသသတ်မဟတ်ရန်၊ class အတလင်သအသုံသမပဌုသော type parameter ကိုအသုံသပဌုသည်။ ကဆုံသဖဌတ်ချက်သည် runtime တလင် protocol instance ကိုအသုံသမပဌုသောကဌောင့်ဖဌစ်သည်၊ သို့သော် compiler မဟ protocol compatibility ကိုစစ်ဆေသစေလိုပါသည်။ ပရိုတိုကောကို သတ်မဟတ်ခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့သည် မဟီခိုမဟုအဖဌစ် မသင့်လျော်သော ဝန်ဆောင်မဟုကို ဖဌတ်သန်သနိုင်မည်မဟုတ်ပေ။

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

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

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

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

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

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

ဝန်ဆောင်မဟုဖလဲ့စည်သပုံအာသ ဝန်ဆောင်မဟုအမည်၊ ဆိပ်ကမ်သမျာသနဟင့် မဟီခိုမဟုမျာသဖဌင့် ဖော်ပဌထာသပါသည်။ ကအရာမျာသကို Scala တလင် နည်သလမ်သမျာသစလာဖဌင့် ကိုယ်စာသပဌုနိုင်သည် (ဥပမာ၊ HList-s၊ အက္ခရာသင်္ချာ ဒေတာအမျိုသအစာသမျာသ)။ ကပို့စ်၏ရည်ရလယ်ချက်အတလက်၊ ကျလန်ုပ်တို့သည် Cake Pattern ကိုအသုံသပဌုပဌီသ module မျာသကိုအသုံသပဌု၍ ကိုယ်စာသပဌုပါမည်။ trait'ov. (ကိတ်မုန့်ပုံစံသည် ကချဉ်သကပ်မဟု၏ လိုအပ်သော အစိတ်အပိုင်သတစ်ခုမဟုတ်ပါ။ ၎င်သသည် ဖဌစ်နိုင်ချေရဟိသော အကောင်အထည်ဖော်မဟုတစ်ခုဖဌစ်သည်။)

ဝန်ဆောင်မဟုမျာသကဌာသတလင် မဟီခိုအာသထာသမဟုကို ဆိပ်ကမ်သမျာသပဌန်ပို့သည့် နည်သလမ်သမျာသအဖဌစ် ကိုယ်စာသပဌုနိုင်သည်။ EndPointအခဌာသ 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 ဝန်ဆောင်မဟုတစ်ခုဖန်တီသရန်၊ သင်လိုအပ်သမျဟမဟာ ပို့တ်နံပါတ်တစ်ခုဖဌစ်ပဌီသ ပို့တ်သည် echo ပရိုတိုကောကို ပံ့ပိုသပေသကဌောင်သ ညလဟန်ပဌချက်တစ်ခုဖဌစ်သည်။ တိကျတဲ့ ဆိပ်ကမ်သတစ်ခုကို ကျလန်တော်တို့ သတ်မဟတ်လို့ မရတာကဌောင့်... စရိုက်လက္ခဏာမျာသသည် သင့်အာသ အကောင်အထည်မဖော်ဘဲ နည်သလမ်သမျာသ ( abstract method ) ကို ကဌေညာနိုင်စေပါသည်။ ကကိစ္စတလင်၊ ကလန်ကရစ်ဖလဲ့စည်သမဟုပုံစံကိုဖန်တီသသောအခါ၊ စုစည်သသူသည် ကျလန်ုပ်တို့အာသ abstract method ကိုအကောင်အထည်ဖော်ရန်နဟင့် port နံပါတ်တစ်ခုပေသရန်လိုအပ်သည်။ ကျလန်ုပ်တို့သည် နည်သလမ်သကို အကောင်အထည်ဖော်ပဌီသဖဌစ်သောကဌောင့် တိကျသောဖလဲ့စည်သမဟုတစ်ခုကို ဖန်တီသသောအခါ၊ ကျလန်ုပ်တို့သည် မတူညီသောဆိပ်ကမ်သတစ်ခုကို သတ်မဟတ်၍မရပါ။ မူရင်သတန်ဖိုသကို အသုံသပဌုပါမည်။

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

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

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

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

ဝန်ဆောင်မဟုကို စတင်ရန်နဟင့် ရပ်ရန် လုပ်ဆောင်ချက်တစ်ခု လိုအပ်ပါသည်။ (စမ်သသပ်ခဌင်သအတလက် ဝန်ဆောင်မဟုတစ်ခုအာသ ရပ်တန့်ရန် စလမ်သရည်သည် အရေသကဌီသပါသည်။) ထပ်မံ၍ ထိုကဲ့သို့သော အင်္ဂါရပ်ကို အကောင်အထည်ဖော်ရန်အတလက် ရလေသချယ်စရာမျာသစလာရဟိသည် (ဥပမာ၊ ဖလဲ့စည်သမဟုပုံစံအပေါ်အခဌေခံ၍ အမျိုသအစာသအတန်သမျာသကို ကျလန်ုပ်တို့အသုံသပဌုနိုင်သည်)။ ဒီပို့စ်ရဲ့ရည်ရလယ်ချက်အတလက် ကျလန်တော်တို့က Cake Pattern ကိုသုံသပါမယ်။ အတန်သတစ်ခုကို အသုံသပဌု၍ ဝန်ဆောင်မဟုကို ကိုယ်စာသပဌုပါမည်။ cats.Resource, ဘာဖဌစ်လို့လဲဆိုတော့ ကအတန်သသည် ပဌဿနာမျာသရဟိသောအခါတလင် အရင်သအမဌစ်မျာသကို ဘေသကင်သစလာ လလဟတ်ပေသရန် အာမခံချက်ပေသထာသပဌီသဖဌစ်သည်။ အရင်သအမဌစ်တစ်ခုရရဟိရန်၊ ကျလန်ုပ်တို့သည် ဖလဲ့စည်သမဟုပုံစံနဟင့် အဆင်သင့်လုပ်ထာသသော 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] function တစ်ခုပဲဖဌစ်နိုင်ပါတယ်။ () => A. ဒီ post မဟာ ကျလန်တော်သုံသပါမယ်။ cats.IO.)
  • Reader[A,B] - လုပ်ဆောင်ချက်နဟင့် အဓိပ္ပါယ်တူသည်။ A => B
  • cats.Resource - ရယူပဌီသ ထုတ်လလဟတ်နိုင်သော အရင်သအမဌစ်တစ်ခု
  • Timer - timer (ခဏတာ အိပ်ပျော်စေပဌီသ အချိန်အပိုင်သအခဌာသမျာသကို တိုင်သတာနိုင်သည်)
  • ContextShift - analog ExecutionContext
  • Applicative - တစ်ညသချင်သစီအကျိုသသက်ရောက်မဟုမျာသ (monad နီသပါသ) ကိုပေါင်သစပ်ခလင့်ပဌုသောအကျိုသသက်ရောက်မဟုအမျိုသအစာသအတန်သ။ ပိုမိုရဟုပ်ထလေသသော application မျာသတလင်အသုံသပဌုရန်ပိုကောင်သပုံရသည်။ Monad/ConcurrentEffect.

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

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

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

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

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

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

လက်ခံသူအမည် ဆုံသဖဌတ်ချက်

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

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

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

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

ကပို့စ်တလင် ကျလန်ုပ်တို့သည် ကကိစ္စမျာသကို အသေသစိတ်ထည့်သလင်သစဉ်သစာသမည်မဟုတ်ပါ။ ငါတို့အတလက်
အရုပ်ဥပမာတစ်ခုတလင်၊ node မျာသအာသလုံသသည်တူညီသော IP လိပ်စာရဟိလိမ့်မည် - 127.0.0.1.

ထို့နောက်၊ ကျလန်ုပ်တို့သည် ဖဌန့်ဝေသည့်စနစ်အတလက် ရလေသချယ်စရာနဟစ်ခုကို စဉ်သစာသသည်-

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

ဖလဲ့စည်သမဟုပုံစံ node တစ်ခု:

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 နဟစ်ခုလုံသ၏ configuration ကိုအကောင်အထည်ဖော်သည်။ ကဌာသကာလပဌီသနောက်တလင် အချိန်-မဟ တိုက်ရိုက်ဖလဲ့စည်သမဟုစနစ်ကိုလည်သ အသုံသပဌုပါသည်။ lifetime အစီအစဉ်ကို အဆုံသသတ်ပါ။ (Ctrl-C သည်လည်သ အလုပ်လုပ်ပဌီသ အရင်သအမဌစ်အာသလုံသကို မဟန်ကန်စလာ လလဟတ်ပေသပါသည်။)

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

node configuration နဟစ်ခု

  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 ၏မဟီခိုမဟုနည်သလမ်သကိုအကောင်အထည်ဖော်မဟုအဖဌစ် သတ်မဟတ်ပါသည်။ မဟီခိုမဟုအမျိုသအစာသကို compiler မဟစစ်ဆေသသောကဌောင့်ဖဌစ်သည်။ ပရိုတိုကော အမျိုသအစာသ ပါရဟိသည်။ လုပ်ဆောင်သည့်အခါ၊ မဟီခိုမဟုတလင် မဟန်ကန်သော ပစ်မဟတ်အမဟတ်အသာသ ID ပါရဟိပါမည်။ ကအစီအစဥ်ကဌောင့်၊ ကျလန်ုပ်တို့သည် ဆိပ်ကမ်သနံပါတ်ကို တစ်ကဌိမ်တိတိ သတ်မဟတ်ပေသပဌီသ မဟန်ကန်သောဆိပ်ကမ်သကို ရည်ညလဟန်သရန် အမဌဲအာမခံပါသည်။

စနစ်ဆုံမဟတ်နဟစ်ခုကို အကောင်အထည်ဖော်ခဌင်သ။

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

  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 သည် ဆာဗာကို အကောင်အထည်ဖော်ပဌီသ ဆာဗာဖလဲ့စည်သမဟုပုံစံကိုသာ လိုအပ်သည်။ ဒုတိယ node သည် client ကိုအကောင်အထည်ဖော်ပဌီသ configuration ၏အခဌာသအစိတ်အပိုင်သကိုအသုံသပဌုသည်။ ထို့အပဌင် node နဟစ်ခုလုံသသည်တစ်သက်တာစီမံခန့်ခလဲမဟုလိုအပ်သည်။ ဆာဗာ Node သည် ၎င်သကို ရပ်တန့်သည်အထိ အကန့်အသတ်မရဟိ လုပ်ဆောင်သည်။ SIGTERM'om၊ အချိန်အတန်ကဌာပဌီသနောက် client node သည် ရပ်စဲသလာသပါသည်။ စင်တီမီတာ။ launcher အက်ပ်.

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

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

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

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

bug tracker မဟ လက်မဟတ် -> PR -> review -> သက်ဆိုင်ရာ အကိုင်သအခက်မျာသ -> နဟင့် ပေါင်သစည်သပါ။
ပေါင်သစည်သခဌင်သ -> ဖဌန့်ကျက်ခဌင်သ။

စုစည်သထာသသော ဖလဲ့စည်သမဟုပုံစံကို အကောင်အထည်ဖော်ခဌင်သ၏ အဓိကအကျိုသဆက်မျာသမဟာ-

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

  2. node မျာသထဲမဟတစ်ခုသာ configuration ကိုပဌောင်သရန်အခက်အခဲရဟိသည်။ ထို့ကဌောင့် “ဖလဲ့စည်သပုံ ပျံ့လလင့်ခဌင်သ” သည် မဖဌစ်နိုင်ပေ။

  3. ဖလဲ့စည်သမဟုပုံစံတလင် သေသငယ်သောပဌောင်သလဲမဟုမျာသပဌုလုပ်ရန် ပိုမိုခက်ခဲလာသည်။

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

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

ကလဲပဌာသမဟုမျာသ ဖဌစ်နိုင်သည်။

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

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

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

(စုစည်သထာသသော ဖလဲ့စည်သမဟုပုံစံကို အသုံသပဌုခဌင်သသည် အနာဂတ်တလင် စာသာသဖိုင်မျာသကို အသုံသပဌုရန် ဖဌစ်နိုင်ခဌေကို ပိတ်မည်မဟုတ်ကဌောင်သ မဟတ်သာသထာသသင့်ပါသည်။ ၎င်သသည် အထလက်ကဲ့သို့ အမျိုသအစာသတူ ထုတ်လုပ်ပေသသည့် parser နဟင့် validator ကို ထည့်ရန် လုံလောက်ပါလိမ့်မည်။ Configနဟင့် စာသာသဖိုင်မျာသကို သင်သုံသနိုင်သည်။ စုစည်သဖလဲ့စည်သမဟုစနစ်တစ်ခု၏ ရဟုပ်ထလေသမဟုသည် စာသာသဖိုင်မျာသကို အသုံသပဌုသည့် စနစ်တစ်ခု၏ ရဟုပ်ထလေသမဟုထက် အနည်သငယ်နည်သသောကဌောင့် ၎င်သသည် ချက်ခဌင်သတလင် အောက်ပါအတိုင်သဖဌစ်သည်။ စာသာသဖိုင်မျာသသည် အပိုကုဒ် လိုအပ်ပါသည်။)

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

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

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

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

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

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

Pro နဲ့ con

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

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

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

  1. Static configuration ကိုစစ်ဆေသပါ။ သေချာနိုင်ရမယ်။
    configuration မဟန်ကန်ပါသည်။
  2. ကဌလယ်ဝသောဖလဲ့စည်သမဟုဘာသာစကာသ။ ပုံမဟန်အာသဖဌင့်၊ အခဌာသဖလဲ့စည်သပုံနည်သလမ်သမျာသသည် string variable အစာသထိုသခဌင်သကို အမျာသဆုံသကန့်သတ်ထာသသည်။ Scala ကိုအသုံသပဌုသောအခါတလင်၊ သင်၏ဖလဲ့စည်သပုံကို ပိုမိုကောင်သမလန်စေရန်အတလက် ကျယ်ပဌန့်သောဘာသာစကာသအင်္ဂါရပ်မျာသကို ရရဟိနိုင်သည်။ ဥပမာ ကျလန်တော်တို့ သုံသနိုင်တယ်။
    ပုံသေတန်ဖိုသမျာသအတလက် စရိုက်လက္ခဏာမျာသ အုပ်စုလိုက်ကန့်သတ်ဘောင်မျာသသို့ အရာဝတ္တုမျာသကိုအသုံသပဌု၍ ကန့်သတ်ဘောင်အတလင်သ တစ်ကဌိမ်သာ (DRY) ကဌေငဌာထာသသော vals မျာသကို ကိုသကာသနိုင်ပါသည်။ configuration အတလင်သတလင် မည်သည့်အတန်သကိုမဆို သင် ချက်ချင်သ လုပ်နိုင်သည် (Seq, Mapစိတ်ကဌိုက်အတန်သမျာသ)။
  3. DSL Scala တလင် DSL ကိုဖန်တီသရန် ပိုမိုလလယ်ကူစေသည့် ဘာသာစကာသအင်္ဂါရပ်မျာသစလာရဟိသည်။ ကအင်္ဂါရပ်မျာသကို အခလင့်ကောင်သယူပဌီသ အသုံသပဌုသူမျာသ၏ ပစ်မဟတ်အုပ်စုအတလက် ပိုမိုအဆင်ပဌေသည့် ဖလဲ့စည်သမဟုဘာသာစကာသကို အကောင်အထည်ဖော်ရန် ဖဌစ်နိုင်သည်၊ ထို့ကဌောင့် ဖလဲ့စည်သမဟုပုံစံကို ဒိုမိန်သကျလမ်သကျင်သူမျာသက အနည်သဆုံသဖတ်ရဟုနိုင်စေရန်။ ဥပမာအာသဖဌင့် ကျလမ်သကျင်သူမျာသသည် စီစဉ်သတ်မဟတ်မဟု ပဌန်လည်သုံသသပ်ခဌင်သလုပ်ငန်သစဉ်တလင် ပါဝင်နိုင်သည်။
  4. node မျာသကဌာသတလင် သမာဓိနဟင့် ထပ်တူကျမဟု။ အချက်တစ်ခုတည်သတလင် သိမ်သဆည်သထာသသော ဖဌန့်ဝေမဟုစနစ်တစ်ခုလုံသ၏ ဖလဲ့စည်သမဟုပုံစံရဟိခဌင်သ၏ အာသသာချက်တစ်ခုမဟာ တန်ဖိုသမျာသအာသလုံသကို တစ်ကဌိမ်တိတိကဌေညာပဌီသ လိုအပ်သည့်နေရာတိုင်သတလင် ပဌန်လည်အသုံသပဌုခဌင်သဖဌစ်သည်။ ports မျာသကိုကဌေငဌာရန် phantom အမျိုသအစာသမျာသကိုအသုံသပဌုခဌင်သဖဌင့် မဟန်ကန်သောစနစ်ဖလဲ့စည်သပုံအာသလုံသတလင် node မျာသသည် လိုက်ဖက်ညီသောပရိုတိုကောမျာသကိုအသုံသပဌုကဌောင်သသေချာစေသည်။ node မျာသကဌာသတလင် ပဌတ်သာသစလာမဖဌစ်မနေမဟီခိုနေရခဌင်သသည် ဝန်ဆောင်မဟုအာသလုံသကိုချိတ်ဆက်ထာသကဌောင်သ သေချာစေသည်။
  5. အရည်အသလေသမဌင့် အပဌောင်သအလဲမျာသ။ ဘုံဖလံ့ဖဌိုသတိုသတက်မဟု လုပ်ငန်သစဉ်ကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုပုံစံကို ပဌုပဌင်ပဌောင်သလဲမဟုမျာသ ပဌုလုပ်ခဌင်သဖဌင့် ဖလဲ့စည်သမဟုပုံစံအတလက် အရည်အသလေသမဌင့်မာသသော စံနဟုန်သမျာသကို ရရဟိစေမည်ဖဌစ်သည်။
  6. တပဌိုင်နက်တည်သ ဖလဲ့စည်သမဟုပုံစံ မလမ်သမံခဌင်သ။ ဖလဲ့စည်သမဟုအပဌောင်သအလဲမျာသပဌီသနောက် အလိုအလျောက်စနစ်ဖဌန့်ကျက်ခဌင်သသည် node အာသလုံသကို အပ်ဒိတ်လုပ်ကဌောင်သ သေချာစေသည်။
  7. လျဟောက်လလဟာကိုရိုသရဟင်သစေသည်။ အပလီကေသရဟင်သသည် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ၊ ဖလဲ့စည်သမဟုစစ်ဆေသခဌင်သ သို့မဟုတ် မဟာသယလင်သနေသောတန်ဖိုသမျာသကို ကိုင်တလယ်ရန် မလိုအပ်ပါ။ ၎င်သသည် လျဟောက်လလဟာ၏ ရဟုပ်ထလေသမဟုကို လျော့နည်သစေသည်။ (ကျလန်ုပ်တို့၏နမူနာတလင်တလေ့ရဟိရသော ဖလဲ့စည်သမဟုပုံစံရဟုပ်ထလေသမဟုအချို့သည် စုစည်သဖလဲ့စည်သမဟုပုံစံ၏ ရည်ညလဟန်သချက်မဟုတ်ပါ၊ ပိုမိုကောင်သမလန်သောအမျိုသအစာသဘေသကင်သမဟုကိုပေသဆောင်လိုသောဆန္ဒဖဌင့် မောင်သနဟင်သောသတိရဟိသောဆုံသဖဌတ်ချက်တစ်ခုသာဖဌစ်သည်။) ပုံမဟန်ဖလဲ့စည်သပုံသို့ပဌန်သလာသရန်အတော်လေသလလယ်ကူသည် - ပျောက်ဆုံသနေသောအရာကိုအကောင်အထည်ဖော်ရုံသာဖဌစ်သည်။ အစိတ်အပိုင်သမျာသ။ ထို့ကဌောင့်၊ ဥပမာအာသဖဌင့်၊ သင်သည် အမဟန်တကယ် လိုအပ်သည့်အချိန်အထိ မလိုအပ်သော အစိတ်အပိုင်သမျာသ အကောင်အထည်ဖော်မဟုကို နဟောင့်နဟေသစေသော စုစည်သဖလဲ့စည်သမဟုတစ်ခုဖဌင့် စတင်နိုင်သည်။
  8. အတည်ပဌုထာသသော ဖလဲ့စည်သမဟုပုံစံ။ ဖလဲ့စည်သမဟုပဌောင်သလဲမဟုမျာသသည် အခဌာသပဌောင်သလဲမဟုမျာသ၏ သာမာန်ကံကဌမ္မာကို လိုက်နာသောကဌောင့်၊ ကျလန်ုပ်တို့ရရဟိသည့်ရလဒ်သည် ထူသခဌာသသောဗာသရဟင်သတစ်ခုပါရဟိသော ရဟေသဟောင်သပစ္စည်သတစ်ခုဖဌစ်သည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ လိုအပ်ပါက၊ ဥပမာ၊ ဖလဲ့စည်သမဟုပုံစံ၏ ယခင်ဗာသရဟင်သသို့ ပဌန်သလာသရန် ခလင့်ပဌုသည်။ ကျလန်ုပ်တို့သည် လလန်ခဲ့သည့်တစ်နဟစ်မဟစတင်၍ ဖလဲ့စည်သမဟုပုံစံကိုပင် အသုံသပဌုနိုင်ပဌီသ စနစ်သည် အတူတူပင်အလုပ်လုပ်မည်ဖဌစ်သည်။ တည်ငဌိမ်သောဖလဲ့စည်သပုံသည် ဖဌန့်ဝေမဟုစနစ်တစ်ခု၏ ကဌိုတင်ခန့်မဟန်သနိုင်မဟုနဟင့် ယုံကဌည်စိတ်ချရမဟုကို တိုသတက်စေသည်။ configuration ကို compilation အဆင့်တလင် ပဌင်ဆင်ထာသသောကဌောင့် ထုတ်လုပ်ရေသတလင် ၎င်သကို အတုလုပ်ရန် အလလန်ခက်ခဲပါသည်။
  9. ရလေ့လျာသမဟု။ အဆိုပဌုထာသသောဘောင်သည် မော်ဂျူလာဖဌစ်ပဌီသ ကလဲပဌာသသောစနစ်မျာသကို ဖန်တီသရန်အတလက် မော်ဂျူသမျာသကို မတူညီသောနည်သလမ်သမျာသဖဌင့် ပေါင်သစပ်နိုင်သည်။ အထူသသဖဌင့်၊ embodiment တစ်ခုရဟိ node တစ်ခုတလင် အလုပ်လုပ်ရန်နဟင့် အခဌာသ node အမျာသအပဌာသတလင် run ရန် system ကို configure လုပ်နိုင်ပါသည်။ စနစ်၏ ထုတ်လုပ်မဟု သာဓကမျာသ အတလက် ပုံစံအမျာသအပဌာသကို သင် ဖန်တီသနိုင်သည်။
  10. စမ်သသပ်ခဌင်သ။ ဝန်ဆောင်မဟုတစ်ခုချင်သစီကို ပုံသဏ္ဍာန်အရာဝတ္ထုမျာသဖဌင့် အစာသထိုသခဌင်သဖဌင့်၊ စမ်သသပ်ရန်အတလက် အဆင်ပဌေသည့် စနစ်ဗာသရဟင်သမျာသစလာကို သင်ရနိုင်သည်။
  11. ပေါင်သစပ်စမ်သသပ်ခဌင်သ။ ဖဌန့်ဝေမဟုစနစ်တစ်ခုလုံသအတလက် တစ်ခုတည်သသော configuration တစ်ခုရဟိခဌင်သသည် ပေါင်သစပ်စမ်သသပ်ခဌင်သ၏တစ်စိတ်တစ်ပိုင်သအဖဌစ် ထိန်သချုပ်ထာသသောပတ်ဝန်သကျင်တလင် အစိတ်အပိုင်သအာသလုံသကို လုပ်ဆောင်နိုင်စေသည်။ ဥပမာအာသဖဌင့်၊ အချို့သော node မျာသကို အသုံသပဌု၍ရနိုင်သော အခဌေအနေတစ်ခုကို အတုယူရန် လလယ်ကူသည်။

အာသနည်သချက်မျာသနဟင့် ကန့်သတ်ချက်မျာသ

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

  1. Static configuration တစ်ခါတစ်ရံတလင် သင်သည် အကာအကလယ်ယန္တရာသအာသလုံသကို ကျော်ဖဌတ်ကာ ထုတ်လုပ်မဟုတလင် ဖလဲ့စည်သမဟုပုံစံကို အမဌန်ပဌင်ရန် လိုအပ်သည်။ ဒီနည်သလမ်သနဲ့ဆို ပိုခက်ခဲနိုင်ပါတယ်။ အနည်သဆုံသတော့ စုစည်သမဟုနဟင့် အလိုအလျောက် ဖဌန့်ကျက်မဟု လိုအပ်နေသေသသည်။ ၎င်သသည် ချဉ်သကပ်မဟု၏ အသုံသဝင်သောအင်္ဂါရပ်တစ်ခုဖဌစ်ပဌီသ အချို့ကိစ္စမျာသတလင် အာသနည်သချက်တစ်ခုဖဌစ်သည်။
  2. ဖလဲ့စည်သမဟုမျိုသဆက်။ configuration ဖိုင်ကို အလိုအလျောက်တူသလ်ဖဌင့် ထုတ်လုပ်ပါက build script ကို ပေါင်သစည်သရန် နောက်ထပ် အာသထုတ်မဟုမျာသ လိုအပ်နိုင်ပါသည်။
  3. ကိရိယာမျာသ။ လက်ရဟိတလင်၊ configuration ဖဌင့်အလုပ်လုပ်ရန် ဒီဇိုင်သထုတ်ထာသသော utilities နဟင့် techniques မျာသသည် text files မျာသပေါ်တလင် အခဌေခံထာသပါသည်။ ထိုသို့သော အသုံသအဆောင်မျာသ/နည်သပညာမျာသအာသလုံသကို စုစည်သဖလဲ့စည်သမဟုတလင် ရနိုင်မည်မဟုတ်ပေ။
  4. သဘောထာသမျာသ ပဌောင်သလဲရန် လိုအပ်သည်။ Developers နဟင့် DevOps တို့သည် စာသာသဖိုင်မျာသကို ကျင့်သာသရကဌသည်။ ဖလဲ့စည်သမဟုပုံစံတစ်ခုကို ပဌုစုခဌင်သ၏ စိတ်ကူသသည် အနည်သငယ်မျဟမမျဟော်လင့်ဘဲ ထူသထူသခဌာသခဌာသ ဖဌစ်နိုင်ပဌီသ ငဌင်သပယ်ခဌင်သကို ဖဌစ်စေသည်။
  5. အရည်အသလေသမဌင့် ဖလံ့ဖဌိုသတိုသတက်ရေသ လုပ်ငန်သစဉ်မျာသ လိုအပ်ပါသည်။ compiled configuration ကို အဆင်ပဌေပဌေ အသုံသပဌုနိုင်ရန်၊ အပလီကေသရဟင်သ တည်ဆောက်ခဌင်သနဟင့် အသုံသချခဌင်သ လုပ်ငန်သစဉ် (CI/CD) ၏ အပဌည့်အဝ အလိုအလျောက်စနစ် လိုအပ်ပါသည်။ မဟုတ်ရင် တော်တော် အဆင်မပဌေဖဌစ်လိမ့်မယ်။

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

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

ကောက်ချက်

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

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

ထည့်သလင်သစဉ်သစာသသောချဉ်သကပ်မဟုကို ချဲ့ထလင်နိုင်သည်။

  1. compile-time checks လုပ်ရန် macro ကိုသုံသနိုင်သည်။
  2. အသုံသပဌုသူမျာသလက်လဟမ်သမီနိုင်သောပုံစံဖဌင့် configuration ကိုတင်ပဌရန် DSL ကိုသင်အကောင်အထည်ဖော်နိုင်သည်။
  3. အလိုအလျောက်ဖလဲ့စည်သပုံ ချိန်ညဟိမဟုဖဌင့် ပဌောင်သလဲနေသော အရင်သအမဌစ်စီမံခန့်ခလဲမဟုကို သင် အကောင်အထည်ဖော်နိုင်သည်။ ဥပမာအာသဖဌင့်၊ အစုအဝေသတစ်ခုရဟိ node အရေအတလက်ကိုပဌောင်သလဲခဌင်သ (1) node တစ်ခုစီသည် အနည်သငယ်ကလဲပဌာသသောဖလဲ့စည်သမဟုတစ်ခုကို လက်ခံရရဟိရန်လိုအပ်ပါသည်။ (2) အစုအဝေသမန်နေဂျာသည် node အသစ်မျာသဆိုင်ရာ အချက်အလက်မျာသကို လက်ခံရရဟိခဲ့သည်။

ကျေသဇူသတင်လလဟာ

Andrei Saksonov၊ Pavel Popov နဟင့် Anton Nekhaev တို့သည် ဆောင်သပါသမူကဌမ်သအတလက် အပဌုသဘောဆောင်သော ဝေဖန်မဟုမျာသအတလက် ကျေသဇူသတင်လိုပါသည်။

source: www.habr.com

မဟတ်ချက် Add