Try to understand Database State Machine Approach
(SPVQ3FQMJDBUJPO ͱ %BUBCBTF4UBUF.BDIJOF"QQSPBDI[email protected]@CP .Z42-$BTVBM5BMLT0OMJOF HBNNB7PM
View Slide
%BUBCBTF4UBUF.BDIJOF"QQSPBDI ͷ จΛಡΜͰΈͨ[email protected]@CP .Z42-$BTVBM5BMLT0OMJOF HBNNB7PM
tom__bo• .Z42-ྺͪΐ͏Ͳ ͓ࣄͱͯ͠• 0QFSBUJPOͱࣗಈԽγεςϜ։ൃͳͲ• աڈͷ$BTVBM .Z/"ͷൃද• $BTVBMWPMUBCMFTJ[FFTUJNBUPS• .Z/" TZTCFODINZTRMUFTUFS• $BTVBMWPMCJOMPHΛআ͘• $BTVBMWPMPSDIFTUSBUPSೖ• IUUQTTQFBLFSEFDLDPNUPNCP• .Z42-8FFLMZIUUQTNZTRMXFFLMZIBUFOBCMPHDPN[email protected]@CP[email protected]@CP
త• (SPVQSFQMJDBUJPOͷΈΛ͔ͬͯΒ͍͍ͨ• յΕํʹͲ͏͍͏Մೳੑ͕͋Δ͔• յΕͨ߹ͳʹΛ෮چ͢ΕΑ͍͔• ύϑΥʔϚϯεͱোੑͷόϥϯεΛͲ͜ͰͲ͏औΔ͔• ϨϓϦέʔγϣϯ͕Ԇ͍ͯͯ͠1BYPTͷ߹ҙ͕Ͱ͖Δͱʁ• Ͳ͏Β%BUBCBTF4UBUF.BDIJOF"QQSPBDIͱؔ࿈͕ڧ͍༷ࢠ
Group ReplicationͱDatabase State Machine Approach• .Z42-)JHI"WBJMBCJMJUZ#MPHͳͲʹग़ͯ͘Δ• IUUQTNZTRMIJHIBWBJMBCJMJUZDPNNZTRMHSPVQSFQMJDBUJPOIFMMPXPSME• A5IJTJT UPTPNFFYUFOU TJNJMBSUPUIFEBUBCBTFTUBUFNBDIJOFBQQSPBDIUPSFQMJDBUJPO %#4.<>A• 0SBDMFࢿྉ ʮୈճؔ%#ษڧձʯͰͷߨԋࢿྉ• MJOLPGUIFTMJEF• AάϧʔϓɾϨϓϦέʔγϣϯɾϥΠϒϥϦA• A3FQMJDBUFE%BUBCBTF4UBUF.BDIJOF MJOLͷ࣮A• A.Z42-($41BYPTΛϕʔεʹ࣮A
จʹ͍ͭͯ• 1FEPOF ' (VFSSBPVJ 34DIJQFS "5IF%BUBCBTF4UBUF.BDIJOF"QQSPBDI%JTUSJCVUFEBOE1BSBMMFM%BUBCBTFT r • IUUQTEPJPSH"• IUUQTXXXJOGVTJDIGBDVMUZQFEPOF1BQFS%1%5QEG• "༻ࢴϖʔδ
จͷষཱͯ *OUSPEVDUJPO 3FQMJDBUFE%BUBCBTFNPEFMͷಋೖ %FGFSSFEVQEBUFSFQMJDBUJPOͷઆ໌ %FGFSSFEVQEBUFΛTUBUFNBDIJOFSFQMJDBUJPOʹಋೖ͢Δํ๏ "CPSUΛݮΒ͢ख๏ SFPSEFSJOH ධՁͷͨΊͷγϛϡϨʔγϣϯํ๏ɺ݁Ռɺߟ SFMBUFEXPSLT $PODMVTJPOࠓճষ·Ͱͷ༰Λத৺ʹհ
%BUBCBTF4UBUF.BDIJOF"QQSPBDIͱ• 3FQMJDBUJPOͷҰൠతͳख๏ͱͯ͠ఏҊ͞ΕͨTUBUFNBDIJOFBQQSPBDIΛ %BUBCBTFͷSFQMJDBUJPOʹద༻• %BUBCBTF4UBUF.BDIJOFͰԆߋ৽ %FGFSSFEVQEBUFख๏ʹج͍ͮͯ5YΛॲཧ͢Δ• ҧ͍ͱͯ͠ैདྷͷBUPNJDDPNNJUNFOUͷΑ͏ͳEJTUSJCVUFE5YΛΘͳ͍• %FGFSSFEVQEBUFଈ࣌ߋ৽ JNNFEJBUFVQEBUFͳͲͷख๏ͱൺͯҎԼͷϝϦοτ͕༗ΔҰํͰ"CPSU͕ߴ͘ͳΔσϝϦοτ͕༗Δ• ύϑΥʔϚϯε͕ྑ͍• োੑͷαϙʔτ͕ྑ͍• σουϩοΫ͕͍• %4.BQQSPBDIͰ"CPSUͷߴ͞ΛSFPSEFSJOHDFSUJGJDBUJPOUFTUʹΑͬͯݮ͍ͯ͠Δ
4ZTUFN.PEFMBOE%FGJOJUJPOT• γεςϜෳͷTJUFͷू߹ TFUЄPGTJUFT͔ΒͳΔͱ͢Δ• TJUF.Z42-Ͱ͍͏NZERMEϓϩηε• TJUFNFTTBHFQBTTJOHΛհͯ͠ΓऔΓ͠ɺڞ༗ϝϞϦڞ௨ͷ࣌ܭDPNNPODMPDLΛ࣋ͨͳ͍• TJUFނোʹΑͬͯಥવյΕΔͷͱ͠ɺ#Z[BOUJOFނোΛఆ͠ͳ͍• 5Yͷ࣮ߦPOFDPQZTFSJBMJ[BCJMJUZ 43Λͬͯਖ਼͍͠ͱ͢Δ
4UBUF.BDIJOF"QQSPBDI• தԝूݖͰͳ͍ OPODFOUSBMJ[FEͳSFQMJDBUJPODPPSEJOBUJPOςΫχοΫ• ,FZDPODFQUશͯͷSFQMJDB͕ಉ͡ΫΤϦ࣮ߦͷϦΫΤετΛड͚Δ͜ͱ• ͜͜ͰϦΫΤετ͕ཁٻ͢Δͷ• "HSFFNFOU ϝοηʔδ͕ಧ͍͔ͨͷಉҙ• 0SEFS ࣮ߦॱং • ϦΫΤετʹҙຯใ ͲͷσʔλΛߋ৽͢Δ͔ͳͲ͕Ճ͞Ε͍ͯΔ͜ͱΛલఏͱ͢Δ .Z42-Ͱ͍͏1,&ͱߟ͑ͯྑͦ͞͏• ͜ͷใ͕͋Δ͜ͱͰɺґଘؔͷͳ͍σʔλʹର͢ΔϦΫΤετͰ͋Ε ͷPSEFSͷ੍ΛकΔඞཁ͕ͳ͘ͳΔ
"UPNJD#SPBEDBTU• "UPNJD#SPBEDBTUʹΑͬͯɺෳͷTJUFʹશͯͷTJUF͕ϝοηʔδͷ ू߹ mͱͦͷॱংʹಉҙͨ͜͠ͱΛอূ͢Δ͜ͱ͕Ͱ͖Δ• "UPNJD#SPBEDBTUbroadcast(m)ͱdeliver(m)͔ΒͳΓɺ ҎԼͷੑ࣭Λอূ͢Δ "HSFFNFOU͋ΔͭͷTJUF͕ϝοηʔδmΛड͚औͬͨΒɺ શͯͷTJUFT͕ϝοηʔδmΛड͚औΔ͜ͱ 0SEFSશͯͷTJUFT͕ಉ͡ॱংͰmΛड͚औΔ 5FSNJOBUJPO͋ΔͭͷTJUF͕mΛ৴ͯ͠ɺͦΕ͕ࣦഊ͠ͳ͚Εɺ ͯ͢ͷTJUF͕͍ͣΕmΛड͚औΔ
%FGFSSFE6QEBUF3FQMJDBUJPO• ·ͣϩʔΧϧͰ5YΛ࣮ߦͯͦ͠ͷؒଞͷTJUFͱ૬ޓ࡞༻͠ͳ͍• ϩʔΧϧͰTUSJDUUXPQIBTFMPDLTDIFEVMFSʹΑ࣮ͬͯߦ• DMJFOU͕DPNNJUΛཁٻͨ͠ΒTYͷߋ৽ SFEPMPHͳͲΛଞTJUFʹൖͤ͞Δ• DFSUJGJFEͰ͖ͨΒDPNNJU
5FSNJOBUJPOQSPUPDPM• %FGFSSFE6QEBUFͷ͓͍ͯɺDPNNJUཁٻ͔Β࢝·ΔϓϩηεΛ TFSNJOBUJPOQSPUPDPMͱ͍͏• Termination protocolҎԼͷ͔ͭΒͳΔ• ଞͷTJUFTͷ5Yͷൖ• ͦͷݕূ DFSUJGZJOH• $FSUJGJDBUJPOUFTUPOFDPQZTFSJBMJ[BCJMJUZΛอূ͢Δ͜ͱ͕త• 5Yͷ࣮ߦʹΑͬͯ߹ੑ่͕ΕΔ߹ʹ"CPSU
5SBOTBDUJPO4UBUFT• 5Yͷ࣮ߦҎԼͷΑ͏ͳ4UBUFΛ௨Δ• ϩʔΧϧͰ࣮ߦதExecuting• DMJFOU͔ΒDPNNJUΛड͚ͨΒCommittingʹભҠ• ଞͷTJUFͱ߹ҙͰ͖ͨΒCommitted͔ɺAbortedʹભҠ
%FGFSSFEVQEBUFSFQMJDBUJPO"MHPSJUIN͋Δ$MJFOUCk͕ͭͷTJUFSiʹ5YtaΛ࣮ߦ͍ͯ͠ΔྫͰઆ໌͢Δ Ck͕SiʹtaΛϦΫΤετ͢ΔͱSiExecuting4UBUFʹೖΓɺTUSJDUQIBTFMPDLJOHͰ࣮ߦ͢Δ Ck͕taͷDPNNJUΛཁٻͨ࣌͠SFBE5YͳΒ͙͢ʹDPNNJU͠ɺͦ͏Ͱͳ͚ΕCommittingTUBUFʹਐΉɺ ͦͯ͠SiUFSNJOBUJPOQSPUPDPMΛ࣮ߦ͠ɺଞͷEBUBCBTFTJUFʹ5YͷSFBEXSJUFTFUΛૹΔ ঃʑʹɺଞͷTJUFSjͰta͕ݕূ͞ΕΔͱ͖ʹɺDFSUJGJDBUJPOUFTUͰtaͱDPOGMJDU͢Δ%BUBΛѻ͏5YtbͳͲΛߟྀ͢Δ (શͯͷTJUF͕taʹؔͯ͠ಉ͡GJOBMTUBUF Committed͔AbortedʹͨͲΓண͘ʹɺAUPNJD$PNNJUQSPUPDPM ఏҊ͢Δ4UBUF.BDIJOF"QQSPBDIͷΑ͏ͳTJUFؒͷDPPSEJOBUJPO͕ඞཁ) ͠DFSUJGJDBUJPO͕ޭͨ͠Βɺͯ͢ͷVQEBUFΛద༻ͯ͠ɺtaͱಉ͡σʔλʹରͯ͠ϩοΫΛऔ͍ͬͯΔSjͷtbΛBCPSU͢Δ CkSi͕taΛDPNNJU͢Δ͔BCPSU͢Δ͔ܾఆͰ͖ͨ࣌Ͱ݁ՌΛड͚औΔ4UBUFPG%BUBCBTF4JUF
5SBOTBDUJPO%FQFOEFODJFT• 5Ytaͱtbʹରͯ͠ɺztb͕taͱconflict͢Δzͱɺ• ྆ऀ͕ผʑͷ5Y• ಉ͡σʔλΛૢ࡞͢Δ• ͲͪΒ͔͕XSJUFૢ࡞Ͱtb͕taʹઌΜ͡ͳ͍ tbEPFTOPUQSFDFEFta• taͱtbʹ͓͚ΔQSFDFEFSFMBUJPO ॱংؔ
5SBOTBDUJPO%FQFOEFODJFT• ͜͜Ͱ• site(t) 5YU͕࣮ߦ͞ΕͨTJUF• Committing(t) : 5YU͕DPNNJUཁٻΛड͚ͨλΠϛϯά• Commit(t) Sj:5YUΛSj͕DPNNJUͨ͠λΠϛϯά• FΠϕϯτCommitting(t)ͱCommit(t)ʹର͢ΔMPDBM UPUBMPSEFSͷؔΛද͢• %FGFSSFEVQEBUFSFQMJDBUJPO࣮ߦதʹ5YΛTZOD͢ΔͨΊͷEJTUSJCVUFEMPDLJOHQSPUPDPMΛશ͘ඞཁͱ͠ͳ͍(?)ͷͰɺEJTUSJCVUFEEFBEMPDLΛݮΒͤΔɻ• ҰํͰACPSU্͕ΔͷͰɺ࣍ͰରࡦΛࣔ͢
5IF%BUBCBTF4UBUF.BDIJOF"QQSPBDI• ͜͜·ͰͰઆ໌ͨ͠%FGFSSFE6QEBUFͷςΫχοΫҎԼͷΑ͏ʹͯ͠ SUBUFNBDIJOFͱߟ͑Δ͜ͱ͕Ͱ͖Δ• ͋ΔDMJFOU͕5YͷDPNNJUΛཁٻͨ͠Βɺͦͷ5YશͯͷTJUFʹBUPNJDʹ CSPBEDBTU͢Δ• TJUFSUBUFNBDIJOFͷΑ͏ʹৼΔ͍ɺͦΕʹඞཁͳಉҙͱॱংอূ "UPNJDCSPBEDBTUʹΑͬͯߦ͏• ౸ୡͨ͠TxΛॱ൪ʹద༻͢Δ͜ͱͰͦΕͧΕͷsiteಉ͡stateʹ౸ୡ͢Δ͜ͱ͕ อূ͞ΕΔ• State Machineͱͯ͠ͷΑΓৄࡉͳTermination Protocolʹ͍ͭͯݟ͍ͯ͘
%#.PEVMF• $FSUJGJFS"UPNJD#SPBEDBTUNPEVMF͔Βಧ͘5YΛ ड͚औͬͯɺͦΕͷDFSUJGJDBUJPOUFTUΛ࣮ߦ͢Δ• 5YͷDFSUJGJDBUJPO• $FSUJGJFS%BUB.BOBHFSʹDPNNJUࡁΈͷ σʔλΛ֬ೝ• ݕূʹޭ͢Ε-PDL.BOBHFSʹҠߦ• ߋ৽ͷద༻• $FSUJGJFS͕DPOGMJDU͢Δߋ৽ͷదԠॱংʹ͍ͭͯ อূ͢ΔͷͰɺશͯTJUFͰ࠷ऴతʹಉ͡TUBUFʹ ͳΔ͜ͱ͕อূ͞ΕΔɻ
5FSNJOBUJPO"MHPSJUIN• 5Yta͕TJUFSiͰ࣮ߦ͞ΕΔͱ͖ɺͦΕͧΕͷTJUFSjͰta͕ಧ͍ͨޙʹCertification TestͱCommitmentͷ2ͭΛߦ͏• ͜ͷͱ͖5Yta84 8SJUF4FU34 3FBE4FUΛ۠ผ͠ɺରͱ͢ΔϨίʔυͷJEFOUJGJFSΛใͱ͍ͯ࣋ͬͯ͠Δͷͱ͢Δ ਤ
$FSUJGJDBUJPO5FTU• SjͰ͢ͰʹDPNNJUͨ͠5Ytb͕taͱDPOGMJDU͠ͳ͚ΕɺtaΛCommittingTUBUF͔ΒCommittedTUBUFʹҠߦ͢Δ• DPOGMJDUͷఆٛ(ຊεϥΠυp17)Λ֬ೝ• ͜ͷͱ͖DPOGMJDUͷ੍ऑΊΒΕɺXSJUFSFBEDPOGMJDU͚ͩΛߟྀ͢Εྑ͍• 38DPOGMJDU: taͷDFSUJGJDBUJPOUFTUͰߟ͑Δඞཁ͕ͳ͍• 88DPOGMJDU: ͦͷ࣌ࠁ·Ͱʹ࣮ߦ͞Εͨߋ৽·Ͱ࣮ߦͨ͠ޙʹtaΛ࣮ߦ͢Δ͜ͱΛอূ͢Δ͜ͱͰɺղܾͰ͖Δʢʁʣ• ͜ͷ݅Λຬͨ͞ͳ͍߹BCPSU͢Δ
$PNNJUNFOU• ta͕BCPSU͞Εͳ͚ΕXSJUFMPDLΛͱͬͯద༻͢Δ ͜ͷͱ͖ɺҎԼͷͭͷ͜ͱʹҙ͢Δඞཁ͕͋Δ• BSjͰ࣮ߦ͍ͯ͠ΔtbͱSFBEPSXSJUFMPDL͕͔ͿͬͨΒ tbBCPSUͯͦ͠ͷMPDLSFMFBTF͢Δ• CSjͰ࣮ߦͯ͠DPNNJUཁٻΛड͚͕ͨɺ5FSNJOBUJPOQSPUPDPMͷ్தʹ͋Δ5Y͕ taͱಉ͡σʔλʹϩοΫΛऔ͍ͬͯΔ߹ɺXSJUFMPDLΛཁٻ͢Δඞཁɺ ߋ৽Λ࣮ߦ͢Δඞཁͳ͍ ͜ͷ͋ͱtb͕DFSUJGJDBUJPOUFTUʹམͪͨΓͨ͠Βɺtbͷͳ͍ঢ়ଶʹ෮ݩ͢ΕΑ͍• DDFSUJGJDBUJPOUFTUʹ௨ͬͨtb͕·ͩMPDLΛ։์͍ͯ͠ͳ͍߹୯७ʹͭ
$PNNJUNFOU• ͜͜ͰॏཁͳTJUFؒͷJOUFSBDUJPO"UPNJD#SPBEDBTU͚ͩͳ͜ͱ• "UPNJD#SPBEDBTUʹΑͬͯશͯͷTJUF͕taͱͦΕҎલͷ5Yͷ࣮ߦʹ͍ͭͯอূ͞Ε͍ͯΔ • ͦΕͧΕͷTJUFͰ͜ͷΑ͏ͳηοτΛߏங͢ΔͨΊʹҎԼͷΑ͏ʹ͢Δ• taͱtb͕ಉ͡TJUFͰ࣮ߦ͞ΕͨͳΒMPDBMͷUJNFTUBNQʹैͬͯMPDBMͰ࣮ߦ͢Δ• taͱtb͕ผͷTJUFͰ࣮ߦ͞ΕͨͳΒɺͯ͢ͷ5YUDPNNJUཁٻΛड͚ͯCommittingʹͳͬͨMPDBM࣌ࠁͷCommitting(t)ͷΛBUPNJDCSPBEDBTUͰͯ͢ͷTJUFͰ͜Εͱ5Y͕ಉ͡ͷͰ͋Δ͜ͱΛอূ͢Δ(ཁ֬ೝ• SjͰtaΛDFSUJGJDBUJPOUFTU͢Δͱ͖SjͷMPDBMͰCommitting(ta)ΑΓେ͖͍Λ࣋ͭ$PNNJUUFE5Yͱ͚ͩൺֱ͢Εྑ͍͜ͱʹͳΔ
3FPSEFSJOH$FSUJGJDBUJPO5FTU• ta͕ಧ͍ͨॱ൪ͷҐஔͱผͷҐஔSFPSEFSJOH͢Δ͜ͱΛՄೳʹͯ͠ɺ taΛDPNNJU͢ΔՄೳੑΛ্͛Δ• 3FPSEFS-JTU• DFSUJGJDBUJPOUFTUCommittedͰߋ৽͕ద༻͞ΕͨͷͱɺCommitted͕ͩద༻͞Ε͍ͯͳ͍3FPSEFS-JTUʹ͋ΔͷΛ۠ผ͢Δ• -JTUͷ͞3FPSEFS'BDUPSͱͯ͠ఆͰܾΊΔ• -JTU͕͍ͬͺ͍ʹͳͬͨΒࠨͷͷΛద༻͢Δ
5IF5FSNJOBUJPO1SPUPDPMCBTFEPO3FPSEFSJOH• %BUBCBTFTJUFSiΛ࣌ࠁНʹ͓͚ΔTJUFSiͰద༻͞Εͨ5Yͱ3FPSEFS-JTUʹؚ·ΕΔ5Yͷฒͼͱߟ͑Δ database Si = t(0) o t(1) o … o t(last Si(τ)) • 5YUͷEBUBCBTFSiͷதͷҐஔΛpos(t)ͱͯ࣍͠ͷΑ͏ʹ5FSNJOBUJPO1SPUPDPM $FSUJGJDBUJPOUFTU$PNNJUNFOUΛ֦ு͢Δ
$FSUJGJDBUJPOUFTU SFPSEFSJOH• TJUFSjtaΛ3FPSEFS-JTUʹૠೖͰ͖Δͱ͖ʹDPNNJU͢Δ ta͕ૠೖͰ͖Δॴp ҎԼͷͭͷ݅Λຬͨ͢ॴͱ͢Δ• B3FPSEFS-JTUʹ͋Δશͯͷ5Ytbʹରͯ͠ɺpos(tb) < p ͜Εtb͕taʹઌΜ͡Δ tbQSFDFEFTta͘͠ɺtatb͕ॻ͍ͨσʔλΛಡ·ͳ͍߹• C3FPSEFS-JTUʹ͋Δશͯͷ5Ytbʹରͯ͠ɺpos(tb) >= p ͜Ε CtbtaʹઌΜ͡ͳ͍ɺ͘͠tatb͕ॻ͍ͨσʔλΛಡ·ͳ͍ɺ ͭ Ctatb͕ಡΉσʔλΛߋ৽͠ͳ͍
$FSUJGJDBUJPOUFTU SFPSEFSJOH• database Si = t(0) o t(1) o … o t(last Si(τ))• ࣌ࠁНʹ͓͚ΔTJUFSiͰద༻͞Εͨ5Yͱ3FPSEFS-JTUʹؚ·ΕΔ5Yͷฒͼ• 5YUͷEBUBCBTFSiͷதͷҐஔΛpos(t)ͱͯ͠5FSNJOBUJPO1SPUPDPMΛ֦ு
$PNNJUNFOU SFPSEFSJOH• ͠taΛ3FPSEFS-JTUʹૠೖͯ͠ɺ-JTUͷ͕͞3FPSEFS'BDUPSΛ͑ͨ ߹Ұ൪ࠨͷ5YΛద༻͢Δ
ষҎ߱• ධՁ࣮ݧͷϞσϧɾઃఆͱ݁Ռɾߟ͕ଓ͘• ͍ΘΏΔϚϧνϚελʔͳΫϥελ dʹର͢ΔϕϯνϚʔΫ• "UPNJD#SPBEDBTUͷΫϥεΛDMBTTL DMBTTLO DMBTTʿʹྨ͠ɺͦΕΒͷੑೳධՁ• αʔόOʹରͯ͠3FPSEFSGBDUPSΛมԽͤͨ͞߹ͷੑೳධՁ ࢀߟ3FPSEFSGBDUPSO͕Ұ൪ྑ͔ͬͨ• etc…
·ͱΊ• State Machine approach, Atomic broadcast, Deffered update replicationΛ Databaseʹద༻ͨ͠”Database State Machine Approach”ͷ֓ཁ͕ (ূ໌ͳͲΛআ͖ɺͳΜͱͳ͘) Θ͔ͬͨ • Multi MasterڥͰ߹ੑΛऔΓͭͭτϥϯβΫγϣϯΛॲཧ͢ΔͨΊͷ Certification test, Commitmentͷॲཧ͕(ͳΜͱͳ͘)Θ͔ͬͨ
ݱঢ়ͷࢲͷࢀߟจݙ• 5)&5)&03:0'%"5"#"4&$0/$633&/$:$0/530-• TRANSACTIONAL INFORMATION SYSTEMS• DISTRIBUTED COMPUTING
(SPVQSFQMJDBUJPOʹཱͪฦͬͯ • "UPNJDCSPBEDBTUͷ෦ΛQBYPTͰอূ͍ͯͦ͠͏• SFQMJDBUJPOԆ͕ൃੜ͍ͯͯ͠1BYPTͷίϯηϯαεΛऔΕΔཧ༝ ͳΜͱͳ͘Θ͔ͬͨؾ͕͢Δ(reorder listͷૠೖ͕Ͱ͖Εྑ͍)• ٙ• Atomic broad castͷDMBTTL DMBTTLODMBTTʿͬͯͳʹʁ• 5Yதͷ4&-&$5݁Ռͷ1,&ϨϓϦέʔτ͢Δʁ XSJUFͷ1,&Ͱे