第1回ウェブシステムアーキテクチャ(WSA)研究会@京都
TimeFuzeΞʔΩςΫνϟߏͯͳ id:y_uuki / @y_uuk12017/12/23 ୈ1ճΣϒγεςϜΞʔΩςΫνϟ(WSA)ݚڀձ@ژॲཧͱσʔλͱλΠϚʔΛҰମԽͨ͠σʔλύΠϓϥΠϯ
View Slide
id:y_uuki / @y_uuk1Yuuki TSUBOUCHIhttps://yuuk.io/ͯͳͷΣϒΦϖϨʔγϣϯΤϯδχΞWSAݚڀձ ཧࣄ?෭ࠪ?
TimeFuze?
࣌ݶ৴Time Fuze
ىരஔ+Րༀ+λΠϚʔ
ॲཧ+σʔλ+λΠϚʔ
TimeFuzeΞʔΩςΫνϟ
͘͡1. എܠͱత2. TimeFuzeΞʔΩςΫνϟ3. ߟ4. Ή͢ͼ
1. എܠͱత
WebαʔϏεͷσʔλॲཧཁٻͷෳࡶԽ• ϦΫΤετʹରͯ͠HTMLͷϨεϙϯεΛฦ٫͢ΔҎ֎ͷϫʔΫϩʔυͷଟ༷Խ͕ਐΜͰ͍Δ• ੑೳಛੑͷҟͳΔσʔλετΞͷซ༻ɺػցֶशʹΑΔ࣌ؒपظͰͷେنͳσʔλॲཧΛٻΊΒΕ͍ͯΔ• εέʔϧ͍ͤ͢͞σʔλύΠϓϥΠϯॲཧ͕ඞཁ
ҰൠͷσʔλύΠϓϥΠϯDataSourceDataDestinationόονॲཧλΠϜεέδϡʔϥʔىಈ
ҰൠͷσʔλύΠϓϥΠϯͷ՝• σʔλྔ૿େʹ͋ΘͤͨεέʔϦϯάӡ༻ͷ͠͞• όονॲཧ్தͷΤϥʔॲཧͷ͠͞• λΠϜεέδϡʔϥͦͷͷͷӡ༻ͷࡶ͞• ࣮ߦසઃఆͷॊೈੑͷ͞
σʔλ λΠϚʔσʔλͱॲཧͱλΠϚʔͷҰମԽϞσϧͷఏҊॲཧDataSourceσʔλ λΠϚʔ ॲཧDataDestination
ҰൠͷσʔλύΠϓϥΠϯͷ՝ͷղܾ• σʔλྔ૿େʹ͋ΘͤͨεέʔϦϯάӡ༻ͷ͠͞• ࠷ॳ͔ΒฒߦॲཧΛલఏͱͨ͠ΞʔΩςΫνϟͰղܾ• όονॲཧ్தͷΤϥʔॲཧͷ͠͞• όονॲཧͰͳ͘Ϩίʔυ୯ҐͰδϣϒఆٛͰղܾ• λΠϜεέδϡʔϥͦͷͷͷӡ༻ͷࡶ͞• σʔλετΞͷTTLʹΑΓεέδϡʔϥϗετ͕ෆཁ• ࣮ߦසઃఆͷॊೈੑͷ͞• λΠϚʔઃఆͷཻΛϨίʔυ୯ҐͰઃఆ͢Δ͜ͱͰղܾ
http://blog.yuuk.io/entry/the-rebuild-of-tsdb-on-cloud
֊ܕσʔλετΞߏͷ࣌ܥྻσʔλϕʔεΠϯϝϞϦDBΦϯσΟεΫDBΦϒδΣΫτετϨʔδ৽ ݹߴ ҆
֊ܕσʔλετΞͷ͍͠ͱ͜Ζͱղܾ• σʔλετΞؒͷσʔλҠಈύΠϓϥΠϯͷεέʔϥϏϦςΟ• ಛఆͷϨίʔυͷΈɺσʔλετΞҠಈλΠϛϯάΛ੍ޚ͢Δ• ͜ΕΒΛTimeFuzeΞʔΩςΫνϟʹΑΓղܾ• DynamoDBͷTTLͱLambda TriggerʹΑΔ࣮
ͦͷଞͷTimeFuzeͷద༻ΞϓϦέʔγϣϯྫ• ࣌ܥྻσʔλҟৗݕͷֶशϞσϧͷఆظߋ৽• Ϛϧνςφϯτڥʹ͓͚ΔେنͳSSL/TLSূ໌ॻߋ৽
2. TimeFuzeΞʔΩςΫνϟ
1. insertDataSourcerecordDataTTLDataDestinationTriggerOtherAPI/DataStorerecord2. expire 3. insert or update
TimeFuzeͷϝϦοτ• ฒߦॲཧΛલఏͱͨ͠ΞʔΩςΫνϟͰ͋Δ͜ͱ• Τϥʔ͔Βͷճ෮ॲཧ͕༰қͰ͋Δ͜ͱ• λΠϜεέδϡʔϥͱόονॲཧͷͨΊͷϗετ͘͠Ϋϥελͷߏஙɾӡ༻͕ෆཁͰ͋Δ͜ͱ• Ϩίʔυ୯ҐλΠϚʔʹΑΓɺδϣϒͷ࣮ߦසΛϨίʔυ୯ҐͰௐՄೳͰ͋Δ͜ͱ
AWSʹΑΔ࣮
DynamoDB TTL + Lambda Trigger• DynamoDB: ϑϧϚωʔδυܕͷNoSQLσʔλϕʔεαʔϏεɻTTLΛαϙʔτ͍ͯ͠Δɻ• Lambda: ΠϕϯτൃՐΛܖػʹFunctionΛݺͼग़ͤΔ• DynamoDB্ͷϨίʔυʹର͢ΔTTLظݶΕΠϕϯτΛܖػʹɺLambda FunctionΛτϦΨʔͱ࣮ͯ͠ߦ
1. insertDynamoDBrecordDataTTLDynamoDB,S3,…LambdaOtherAPI/DataStorerecord2. expire 3. insert or update
ΦϯϓϨϛεڥͰͷ࣮
Redis Keyspace௨ + ϝοηʔδΩϡʔ• RedisͷKeyspace௨ػೳʹΑΓTTLΠϕϯτΛߪಡͰ͖Δ• ͨͩ͠ɺ҆શͳτϦΨʔॲཧͷͨΊʹɺߪಡͨ͠ΠϕϯτΛϝοηʔδΩϡʔʹΑΓӬଓԽ͢Δඞཁ͕͋Δ• ݴޠΘͣར༻͍͢͠ϝοηʔδΩϡʔͱͯ͠Fireworq͕͋Δ
TimeFuzeͷ۩ମతͳΞϓϦέʔγϣϯͷద༻
࣌ܥྻσʔλͷҟৗݕ• ऩूͨ͠ϝτϦοΫܥྻʹରͯ͠ɺֶशϞσϧΛߏங• ৽نϝτϦοΫͷରԠͷͨΊϞσϧΛఆظతʹߋ৽͢Δ• ଞͷσʔλετΞʹҠಈ͢ΔΘ͚Ͱͳ͘ɺDataSourceͱDataDestinationಉҰͷσʔλετΞΛར༻• ֶ֤शϞσϧͷϨίʔυʹTTLΛઃఆ͠ɺTriggerͰֶशॲཧޙɺϞσϧΛߋ৽͢Δ
1. insertDataSourcerecordMetricTTLTrigger࣌ܥྻσʔλϕʔε2. expire3. updateֶशॲཧ
େنSSL/TLSূ໌ॻཧ• ϒϩάαʔϏεͳͲͰେྔͷSSL/TLSূ໌ॻΛཧ͠ɺϲ݄͝ͱʹߋ৽͢Δέʔε• ূ໌ॻΛσʔλϕʔεʹ֨ೲ͠ಈతऔಘ͢ΔΞʔΩςΫνϟΛલఏͱ͢Δ• ֤υϝΠϯʹର͢Δূ໌ॻϨίʔυʹTTLΛઃఆ͠ɺTrigger͕ূ໌ॻΛ࠶औಘ͠ɺDataDestination্ॻ͖
1. insertDataSourcerecordূ໌ॻTTLTrigger Let’s Encrypt2. expire3. updateূ໌ॻߋ৽ॲཧ
3. ߟ
TimeFuzeͷσϝϦοτ• ΞʔΩςΫνϟϨϕϧ• DataSource্ͷෳͷϨίʔυΛϚʔδ͢ΔॲཧΛͮ͠Β͍• ࣮Ϩϕϧ• Ұ࣌తʹϨίʔυ͕আ͞ΕΔͨΊɺσʔλͷҰ؏ੑͷ͕ඞཁ• TTLظݶ͔Βআॲཧ։࢝·ͰͷσΟϨΠ͕࣌ؒϕετΤϑΥʔτͳͨΊɺִ࣌ؒؒ
TimeFuzeͷσϝϦοτղܾҊ• TTLΛར༻ͤͣɺTime to EventػೳΛσʔλετΞʹΈࠐΉ• Time to Eventػೳઃఆͨ࣌͠ࠁΛܦաͨ͠ΠϕϯτͷΈΛൃߦ͠ɺϨίʔυআ͠ͳ͍
4. Ή͢ͼ
Ή͢ͼ• εέʔϧ͍ͤ͢͞σʔλύΠϓϥΠϯΞʔΩςΫνϟ͕WebαʔϏε։ൃʹٻΊΒΕ͍ͯΔ• ୯ҰͷλΠϜεέδϡʔϥʔʹΑΔσʔλύΠϓϥΠϯͷ՝ΛɺσʔλͱॲཧͱλΠϚʔͷҰମԽʹΑΓղܾ͢Δख๏ΛఏҊͨ͠• ࣮ͷʹΑΓɺݱஈ֊Ͱ࣮ӡ༻͢ΔͨΊʹΞϓϦέʔγϣϯͷ͕ඞཁͱͳΔ
ࠓޙͷऔΓΈ• طଘͷఆظσʔλύΠϓϥΠϯͷ՝ΛαʔϕΠ͠ཧ• طଘσʔλετΞ࣮ͷTTLσΟϨΠ࣌ؒͷௐࠪ• طଘͷσʔλετΞͷTime to EventͷΈࠐΈ
ࣗੑͷ͋ΔσʔλॲཧͷՄೳੑ• VM => ίϯςφ, ίϯςφ => εϨου• σʔλϕʔε => ςʔϒϧ, ςʔϒϧ => σʔλϨίʔυ
SRE/ΦϖϨʔγϣϯΤϯδχΞͷઓ• TimeFuzeͷΑ͏ͳσʔλॲཧΞʔΩςΫνϟΛࣄʹ͍ͯ͠ͳ͍• ۙͰ͍ͬͯΔ͜ͱɺΠϯϑϥετϥΫνϟࣗମͷมߋΛ࠷େԽ͢Δࣄ• ج൫ͷந͕͕͋ΔʹͭΕɺSREͷࣄ͕ΑΓࣄۀʹۙ͘ͳ͍ͬͯ͘• ࣄۀʹ͍ۙ΄ͲɺநԽ͕͘͠ͳΓج൫Ͱٵऩͮ͠Β͘ͳΔ• ෳͷσʔλετΞΛ͏·͘׆༻ͨ͠ΓɺෳͷϫʔΫϩʔυΛ͏·͍͍ͯ͘͘͞ΞʔΩςΫνϟʹؔ৺͕͋Δ