بیا د کیلي ړنګول "/very" په ړنګولو بدلیږي "/u00very" او حد ["/very/", "/very0")، او د ټولو ماشومانو ترلاسه کول - د رینج څخه د کلیدونو په غوښتنه کې ["/very/u00", "/very/u01").
په ZooKeeper کې د کیلي لرې کول
لکه څنګه چې ما مخکې یادونه وکړه، په ZooKeeper کې تاسو نشئ کولی نوډ حذف کړئ که چیرې دا ماشومان ولري. موږ غواړو د فرعي ونې سره کیلي حذف کړو. زه باید څه وکړم؟ موږ دا په خوشبینۍ سره کوو. لومړی، موږ په تکراري توګه د فرعي درختې څخه تیر شو، د هرې برخې ماشومان د جلا پوښتنې سره ترلاسه کوو. بیا موږ یو لیږد رامینځته کوو چې هڅه کوي د فرعي ونې ټول نوډونه په سم ترتیب کې حذف کړي. البته، بدلونونه د فرعي ونې د لوستلو او حذف کولو تر منځ واقع کیدی شي. په دې حالت کې، معامله به ناکامه شي. برسېره پردې، فرعي بڼ ممکن د لوستلو پروسې په جریان کې بدلون ومومي. د راتلونکي نوډ ماشومانو لپاره غوښتنه ممکن یوه تېروتنه راوباسي که د مثال په توګه ، دا نوډ دمخه حذف شوی وي. په دواړو حالتونو کې، موږ ټول بهیر بیا تکرار کوو.
دا طریقه د کیلي حذف کول خورا اغیزمن کوي که چیرې دا ماشومان ولري، او حتی نور هم که چیرې غوښتنلیک د فرعي بڼ سره کار ته دوام ورکړي، د کیلي ړنګول او رامینځته کول. په هرصورت، دې موږ ته اجازه راکړه چې په etcd او Consul کې د نورو میتودونو پلي کولو پیچلي کولو څخه مخنیوی وکړو.
په ZooKeeper کې تنظیم شوی
په ZooKeeper کې جلا میتودونه شتون لري چې د ونې جوړښت سره کار کوي (create, delete, getChildren) او دا چې په نوډونو (setData, getData) کې د ډیټا سره کار کوي. سربیره پردې ، ټولې میتودونه سخت شرایط لري: رامینځته کول به یوه تېروتنه راوباسي که چیرې نوډ دمخه شتون ولري. ډیټا رامینځته شوی ، حذف کړئ یا تنظیم کړئ - که دا دمخه شتون نلري. موږ یو ټاکل شوي میتود ته اړتیا درلوده چې د کیلي شتون په اړه فکر کولو پرته ویل کیدی شي.
یو انتخاب دا دی چې خوشبین چلند غوره کړئ، لکه څنګه چې د حذف کولو سره. وګورئ چې نوډ شتون لري. که شتون ولري، setData ته زنګ ووهئ، که نه نو جوړ کړئ. که وروستی میتود یوه تېروتنه راوباسي، دا ټول بیا تکرار کړئ. د یادولو وړ لومړی شی دا دی چې د وجود ازموینه بې معنی ده. تاسو کولی شئ سمدستي جوړ کړئ. بریالي بشپړیدل به پدې معنی وي چې نوډ شتون نه درلود او رامینځته شوی. که نه نو ، رامینځته کول به مناسبه تېروتنه راوباسي ، له هغې وروسته تاسو اړتیا لرئ د سیټ ډیټا زنګ ووهئ. البته، د زنګونو په منځ کې، یو عمودی د سیالي کونکي زنګ لخوا حذف کیدی شي، او setData به یوه تېروتنه بیرته راولي. په دې حالت کې، تاسو کولی شئ دا ټول بیا ترسره کړئ، مګر ایا دا ارزښت لري؟
که دواړه میتودونه یوه تېروتنه راوباسي، نو موږ د ډاډ لپاره پوهیږو چې سیالي ړنګه شوې. راځئ تصور وکړو چې دا حذف کول د زنګ وهلو وروسته پیښ شوي. بیا هر هغه معنی چې موږ یې د رامینځته کولو هڅه کوو دمخه له مینځه وړل کیږي. دا پدې مانا ده چې موږ فرض کولی شو دا سیټ په بریالیتوب سره اعدام شوی، حتی که په حقیقت کې هیڅ شی نه وي لیکل شوی.
نور تخنیکي توضیحات
پدې برخه کې به موږ د توزیع شوي سیسټمونو څخه وقفه واخلو او د کوډ کولو په اړه وغږیږو.
د پیرودونکي یو له اصلي اړتیاو څخه کراس پلیټ فارم و: لږترلږه یو له خدماتو څخه باید په لینکس ، MacOS او وینډوز کې ملاتړ شي. په پیل کې، موږ یوازې د لینکس لپاره وده کړې، او وروسته یې په نورو سیسټمونو کې ازموینه پیل کړه. دا د ډیرو ستونزو لامل شوی، کوم چې د یو څه وخت لپاره په بشپړه توګه روښانه نه و چې څنګه چلند وکړي. د پایلې په توګه، ټول درې د همغږۍ خدمتونه اوس په لینکس او MacOS کې ملاتړ کیږي، پداسې حال کې چې یوازې Consul KV په وینډوز کې ملاتړ کیږي.