TimeFuzeアーキテクチャ構想 / The concept of TimeFuze Architecture

TimeFuzeアーキテクチャ構想 / The concept of TimeFuze Architecture

第1回ウェブシステムアーキテクチャ(WSA)研究会@京都

A658ec7f1badf73819dfa501165016c1?s=128

Yuuki Tsubouchi (yuuk1)

December 23, 2017
Tweet

Transcript

  1. TimeFuzeΞʔΩςΫνϟߏ૝ ͸ͯͳ id:y_uuki / @y_uuk1 2017/12/23 ୈ1ճ΢ΣϒγεςϜΞʔΩςΫνϟ(WSA)ݚڀձ@ژ౎ ॲཧͱσʔλͱλΠϚʔΛҰମԽͨ͠σʔλύΠϓϥΠϯ

  2. id:y_uuki / @y_uuk1 Yuuki TSUBOUCHI https://yuuk.io/ ͸ͯͳͷ΢ΣϒΦϖϨʔγϣϯΤϯδχΞ WSAݚڀձ ཧࣄ?෭ࠪ?

  3. TimeFuze?

  4. ࣌ݶ৴؅ Time Fuze

  5. ىര૷ஔ+Րༀ+λΠϚʔ

  6. ॲཧ+σʔλ+λΠϚʔ

  7. TimeFuze ΞʔΩςΫνϟ

  8. ΋͘͡ 1. എܠͱ໨త 2. TimeFuzeΞʔΩςΫνϟ 3. ߟ࡯ 4. Ή͢ͼ

  9. 1. എܠͱ໨త

  10. WebαʔϏεͷσʔλॲཧཁٻͷෳࡶԽ • ϦΫΤετʹରͯ͠HTMLͷϨεϙϯεΛฦ٫͢ΔҎ֎ ͷϫʔΫϩʔυͷଟ༷Խ͕ਐΜͰ͍Δ • ੑೳಛੑͷҟͳΔσʔλετΞͷซ༻΍ɺػցֶशʹΑ Δ࣌ؒपظͰͷେن໛ͳσʔλॲཧΛٻΊΒΕ͍ͯΔ • εέʔϧͤ͞΍͍͢σʔλύΠϓϥΠϯॲཧ͕ඞཁ

  11. ҰൠͷσʔλύΠϓϥΠϯ DataSource Data Destination όονॲཧ λΠϜεέδϡʔϥʔ ىಈ

  12. ҰൠͷσʔλύΠϓϥΠϯͷ՝୊ • σʔλྔ૿େʹ͋ΘͤͨεέʔϦϯάӡ༻ͷ೉͠͞ • όονॲཧ్தͷΤϥʔॲཧͷ೉͠͞ • λΠϜεέδϡʔϥͦͷ΋ͷͷӡ༻ͷ൥ࡶ͞ • ࣮ߦස౓ઃఆͷॊೈੑͷ௿͞

  13. σʔλ λΠϚʔ σʔλͱॲཧͱλΠϚʔͷҰମԽϞσϧͷఏҊ ॲཧ DataSource σʔλ λΠϚʔ ॲཧ DataDestination

  14. ҰൠͷσʔλύΠϓϥΠϯͷ՝୊ͷղܾ • σʔλྔ૿େʹ͋ΘͤͨεέʔϦϯάӡ༻ͷ೉͠͞ • ࠷ॳ͔ΒฒߦॲཧΛલఏͱͨ͠ΞʔΩςΫνϟͰղܾ • όονॲཧ్தͷΤϥʔॲཧͷ೉͠͞ • όονॲཧͰ͸ͳ͘Ϩίʔυ୯ҐͰδϣϒఆٛͰղܾ •

    λΠϜεέδϡʔϥͦͷ΋ͷͷӡ༻ͷ൥ࡶ͞ • σʔλετΞͷTTLʹΑΓεέδϡʔϥϗετ͕ෆཁ • ࣮ߦස౓ઃఆͷॊೈੑͷ௿͞ • λΠϚʔઃఆͷཻ౓ΛϨίʔυ୯ҐͰઃఆ͢Δ͜ͱͰղܾ
  15. http://blog.yuuk.io/entry/the-rebuild-of-tsdb-on-cloud

  16. ֊૚ܕσʔλετΞߏ଄ͷ࣌ܥྻσʔλϕʔε ΠϯϝϞϦ DB ΦϯσΟεΫ DB ΦϒδΣΫτ ετϨʔδ ৽ ݹ ߴ

    ҆ ஗ ଎
  17. ֊૚ܕσʔλετΞͷ೉͍͠ͱ͜Ζͱղܾ • σʔλετΞؒͷσʔλҠಈύΠϓϥΠϯͷεέʔϥϏ ϦςΟ • ಛఆͷϨίʔυͷΈɺσʔλετΞҠಈλΠϛϯάΛ੍ ޚ͢Δ • ͜ΕΒΛTimeFuzeΞʔΩςΫνϟʹΑΓղܾ •

    DynamoDBͷTTLͱLambda TriggerʹΑΔ࣮૷
  18. ͦͷଞͷTimeFuzeͷద༻ΞϓϦέʔγϣϯྫ • ࣌ܥྻσʔλҟৗݕ஌ͷֶशϞσϧͷఆظߋ৽ • Ϛϧνςφϯτ؀ڥʹ͓͚Δେن໛ͳSSL/TLSূ໌ॻߋ ৽

  19. 2. TimeFuzeΞʔΩςΫνϟ

  20. 1. insert DataSource record Data TTL DataDestination Trigger Other API/DataStore

    record 2. expire 3. insert or update
  21. TimeFuzeͷϝϦοτ • ฒߦॲཧΛલఏͱͨ͠ΞʔΩςΫνϟͰ͋Δ͜ͱ • Τϥʔ͔Βͷճ෮ॲཧ͕༰қͰ͋Δ͜ͱ • λΠϜεέδϡʔϥͱόονॲཧͷͨΊͷϗετ΋͘͠ ͸Ϋϥελͷߏஙɾӡ༻͕ෆཁͰ͋Δ͜ͱ • Ϩίʔυ୯ҐλΠϚʔʹΑΓɺδϣϒͷ࣮ߦස౓ΛϨίʔ

    υ୯ҐͰௐ੔ՄೳͰ͋Δ͜ͱ
  22. AWSʹΑΔ࣮૷

  23. DynamoDB TTL + Lambda Trigger • DynamoDB: ϑϧϚωʔδυܕͷNoSQLσʔλϕʔε αʔϏεɻTTLΛαϙʔτ͍ͯ͠Δɻ •

    Lambda: ΠϕϯτൃՐΛܖػʹFunctionΛݺͼग़ͤΔ • DynamoDB্ͷϨίʔυʹର͢ΔTTLظݶ੾ΕΠϕϯτ ΛܖػʹɺLambda FunctionΛτϦΨʔͱ࣮ͯ͠ߦ
  24. 1. insert DynamoDB record Data TTL DynamoDB,S3,… Lambda Other API/DataStore

    record 2. expire 3. insert or update
  25. ΦϯϓϨϛε؀ڥͰͷ࣮૷

  26. Redis Keyspace௨஌ + ϝοηʔδΩϡʔ • RedisͷKeyspace௨஌ػೳʹΑΓTTLΠϕϯτΛߪಡͰ͖ Δ • ͨͩ͠ɺ҆શͳτϦΨʔॲཧͷͨΊʹɺߪಡͨ͠Πϕϯ τΛϝοηʔδΩϡʔʹΑΓӬଓԽ͢Δඞཁ͕͋Δ

    • ݴޠ໰Θͣར༻͠΍͍͢ϝοηʔδΩϡʔͱͯ͠ Fireworq͕͋Δ
  27. TimeFuzeͷ ۩ମతͳΞϓϦέʔγϣϯ ͷద༻

  28. ࣌ܥྻσʔλͷҟৗݕ஌ • ऩूͨ͠ϝτϦοΫܥྻʹରͯ͠ɺֶशϞσϧΛߏங • ৽نϝτϦοΫͷରԠͷͨΊϞσϧΛఆظతʹߋ৽͢Δ • ଞͷσʔλετΞʹҠಈ͢ΔΘ͚Ͱ͸ͳ͘ɺDataSource ͱDataDestination͸ಉҰͷσʔλετΞΛར༻ • ֶ֤शϞσϧͷϨίʔυʹTTLΛઃఆ͠ɺTriggerͰֶश

    ॲཧޙɺϞσϧΛߋ৽͢Δ
  29. 1. insert DataSource record Metric TTL Trigger ࣌ܥྻ σʔλϕʔε 2.

    expire 3. update ֶशॲཧ
  30. େن໛SSL/TLSূ໌ॻ؅ཧ • ϒϩάαʔϏεͳͲͰେྔͷSSL/TLSূ໌ॻΛ؅ཧ͠ɺ ਺ϲ݄͝ͱʹߋ৽͢Δέʔε • ূ໌ॻΛσʔλϕʔεʹ֨ೲ͠ಈతऔಘ͢ΔΞʔΩςΫ νϟΛલఏͱ͢Δ • ֤υϝΠϯʹର͢Δূ໌ॻϨίʔυʹTTLΛઃఆ͠ɺ Trigger͕ূ໌ॻΛ࠶औಘ͠ɺDataDestination΁্ॻ͖

  31. 1. insert DataSource record ূ໌ॻ TTL Trigger Let’s Encrypt 2.

    expire 3. update ূ໌ॻ ߋ৽ॲཧ
  32. 3. ߟ࡯

  33. TimeFuzeͷσϝϦοτ • ΞʔΩςΫνϟϨϕϧ • DataSource্ͷෳ਺ͷϨίʔυΛϚʔδ͢ΔॲཧΛͮ͠Β͍ • ࣮૷Ϩϕϧ • Ұ࣌తʹϨίʔυ͕࡟আ͞ΕΔͨΊɺσʔλͷҰ؏ੑͷ޻෉ ͕ඞཁ

    • TTLظݶ͔Β࡟আॲཧ։࢝·ͰͷσΟϨΠ͕࣌ؒϕετΤ ϑΥʔτͳͨΊɺִ࣌ؒؒ
  34. TimeFuzeͷσϝϦοτղܾҊ • TTLΛར༻ͤͣɺTime to EventػೳΛσʔλετΞʹ૊ ΈࠐΉ • Time to Eventػೳ͸ઃఆͨ࣌͠ࠁΛܦաͨ͠Πϕϯτ

    ͷΈΛൃߦ͠ɺϨίʔυ࡟আ͸͠ͳ͍
  35. 4. Ή͢ͼ

  36. Ή͢ͼ • εέʔϧͤ͞΍͍͢σʔλύΠϓϥΠϯΞʔΩςΫνϟ͕ WebαʔϏε։ൃʹٻΊΒΕ͍ͯΔ • ୯ҰͷλΠϜεέδϡʔϥʔʹΑΔσʔλύΠϓϥΠϯͷ ՝୊ΛɺσʔλͱॲཧͱλΠϚʔͷҰମԽʹΑΓղܾ͢Δ ख๏ΛఏҊͨ͠ • ࣮૷ͷ໰୊ʹΑΓɺݱஈ֊Ͱ͸࣮ӡ༻͢ΔͨΊʹΞϓϦέʔ

    γϣϯͷ޻෉͕ඞཁͱͳΔ
  37. ࠓޙͷऔΓ૊Έ • طଘͷఆظσʔλύΠϓϥΠϯͷ՝୊ΛαʔϕΠ͠੔ཧ • طଘσʔλετΞ࣮૷ͷTTLσΟϨΠ࣌ؒͷௐࠪ • طଘͷσʔλετΞ΁ͷTime to Eventͷ૊ΈࠐΈ

  38. ࣗ཯ੑͷ͋ΔσʔλॲཧͷՄೳੑ • VM => ίϯςφ, ίϯςφ => εϨου • σʔλϕʔε

    => ςʔϒϧ, ςʔϒϧ => σʔλϨίʔυ
  39. SRE/ΦϖϨʔγϣϯΤϯδχΞͷઓ৔ • TimeFuzeͷΑ͏ͳσʔλॲཧΞʔΩςΫνϟΛ࢓ࣄʹ͸͍ͯ͠ͳ͍ • ௚ۙͰ΍͍ͬͯΔ͜ͱ͸ɺΠϯϑϥετϥΫνϟࣗମͷมߋ଎౓Λ࠷ େԽ͢Δ࢓ࣄ • ج൫ͷந৅౓͕͕͋ΔʹͭΕɺSREͷ࢓ࣄ͕ΑΓࣄۀʹۙ͘ͳ͍ͬͯ͘ • ࣄۀʹ͍ۙ΄Ͳɺந৅Խ͕೉͘͠ͳΓج൫Ͱٵऩͮ͠Β͘ͳΔ

    • ෳ਺ͷσʔλετΞΛ͏·͘׆༻ͨ͠Γɺෳ਺ͷϫʔΫϩʔυΛ͏· ͘͞͹͍͍ͯ͘ΞʔΩςΫνϟʹؔ৺͕͋Δ