rng-apiをサーバレス化した時の話 / rng-api-Serverless

00766b8e1f9c2665cf7fd29f9cf558df?s=47 odanado
April 16, 2018

rng-apiをサーバレス化した時の話 / rng-api-Serverless

00766b8e1f9c2665cf7fd29f9cf558df?s=128

odanado

April 16, 2018
Tweet

Transcript

  1. rng-apiΛ αʔόϨεԽͨ࣌͠ͷ࿩ Gotanda.pm #17

  2. ஫ҙ Perlͱؔ܎ͳ͍࿩Λ͠·͢

  3. ࣗݾ঺հ • Twitter @odan3240 • Perlྺ 1೔ • ීஈ͸ϙέϞϯʹؔ͢ΔπʔϧΛݸਓ։ൃ •

    ࠓճ΋ͦΕʹؔ͢Δ΋ͷ • ࠷ۙ͸ͯͳϒοΫϚʔΫͷςΫϊϩδʔͰਓؾΤϯτϦೖΓ • poke2vec Ͱݕࡧ 2
  4. rng-api ͱ͸ • ϙέϞϯͷήʔϜ಺ͷٖࣅཚ਺ͷ ॳظγʔυΛಛఆ͢ΔREST API • ൒೥ؒͰ60ສճୟ͔ΕͨAPIΛެ։ͨ͠࿩ / rng-api

    • ݩʑ͸͘͞ΒVPSͰӡ༻ • Ұ೥൒Ͱ400ສճར༻͞Εͨ • ٖࣅཚ਺ͷॳظγʔυΛಛఆ→ཚ਺ௐ੔Λߦ͏ͨΊ • ϙέϞϯͷରઓΨν੎͸ ڧ͍ϙέϞϯΛٻΊͯཚ਺ௐ੔Λߦ͏ • ͜Ε͕౰ͨΓલͷੈք͕͋Δ 3
  5. ॳظγʔυಛఆͷ࢓૊Έ • ಛఆ͢Δͷʹඞཁͳલఏ • ٖࣅཚ਺ΞϧΰϦζϜ͸ಛఆࡁΈ (આ໌ॻʹϥΠηϯεදه) • ٖࣅཚ਺ͷॳظγʔυ͸32bit (࣮ݧతʹ໌Β͔ʹ) •

    ࿈ଓ͢Δཚ਺ྻΛ؍ଌ͢Δํ๏͸ཱ֬ࡁΈ • ཚ਺ྻΛ؍ଌ͢Δํ๏ • ήʔϜதͷϩʔσΟϯάը໘ʹ࢖༻͞ΕΔ ࣌ܭͷ਑ͷ։࢝Ґஔ͕ཚ਺ʹΑܾͬͯఆ͞Ε͍ͯΔ 4 0 1 16 ɾɾɾ
  6. ॳظγʔυಛఆͷ࢓૊Έ • ࿈ଓ͢Δ8ݸͷ਑Λ؍ଌ͢Ε͹ॳظγʔυΛಛఆՄೳ •  2 ** 32 < 17

    ** 8 • ಛఆͷͨΊʹ࣍ͷલॲཧΛߦ͏ 1. [ॳظγʔυ, ରԠ͢Δ8ݸͷ਑ྻ] Λ2**32௨Γܭࢉ 2. ↑ͷϖΞΛ ”ରԠ͢Δ8ݸͷ਑ྻ” Ͱιʔτ • ͜ΕʹΑΓɺݕࡧ࣌ʹೋ෼୳ࡧͰݕࡧՄೳ • ൺֱճ਺͸ߴʑ32ճ • ྫ • https://rng-api.odanado.com/usm/sfmt/seed? needle=9,10,7,11,12,15,7,7 • {"results": [{"seed": "c31a2f06", "encoded_needle": "0dd53f07", "step": 477}]} 5
  7. αʔόϨεԽͷಈػ • ͘͞ΒVPSΛղ໿͍ͨ͠ • αʔόӡ༻͢Δͷ໘౗ • ӡ༻ίετΛ཈͍͑ͨ • αʔόϨεʹṖͷಌΕ 6

  8. αʔόϨεԽͰͷ໰୊఺ • DB (όΠφϦϑΝΠϧ) ͷαΠζ͕32GBͱڊେ • aws lambda͸5ඵͷ੍࣌ؒݶ͕͋Γ S3͔Βͷσʔλͷసૹ࣌ؒͰͦΕ͕ऴΘΔ •

    DynamoDB Ͱ΋΍͹͍ • DB࡞੒࣌ʹ 2**32ճͷ write ͕ඞཁ 7
  9. ͜Ε·Ͱͷ࿩Λ੔ཧ͢Δͱ…

  10. ղܾ͍ͨ͠໰୊ Read Onlyͳkey-valueͷ ૊Έ߹ΘͤΛAWS Lambda͔Β ݕࡧ͍ͨ͠ 9 ໰୊఺ • σʔλαΠζ͕32GBͱڊେ

    • S3͔Βͷసૹ͕5ඵҎ಺ʹऴΘΒͳ͍ • ࡞੒࣌ʹେྔͷWrite͕ൃੜ →DynamoDBͷ՝ۚྔ orz
  11. ࠷ऴతͳղܾࡦ • γϯϓϧ • ํ๏ • ਑ͷྻΛ਺஋ʹΤϯίʔυ • 9,10,7,11,12,15,7,7 ->

    0x0dd53f07 • Τϯίʔυͨ͠਺஋ͷmod 16 ͰϑΝΠϧ෼ׂΛ4ճߦ͏ • LinuxͰಉ࣌ʹ։͚ΔϑΝΠϧ͸100ݸ·Ͱ • ͜ΕʹΑΓ1ͭͷϑΝΠϧͷαΠζ͕ ߴʑ256KBʹͳΔ • ݕࡧ࣌͸ର৅ϑΝΠϧΛಛఆͨ͠ޙʹೋ෼୳ࡧ • ಛఆ͸ϑΝΠϧύεͰߦ͑Δ 10 32GB ͷBD (όΠφϦϑΝΠϧ) Λ 16**4౳෼ʹ෼ׂͯ͠S3ʹ഑ஔ͢Δ
  12. ͜ΕʹΑΓAWS Lambdaʹ ҠߦͰ͖ͨ Ҡߦͯ͠1ϲ݄ա͚͗ͨͲ ࠓͷͱ͜Ζ໰୊ͳ͠

  13. ·ͱΊ • ϙέϞϯͷήʔϜதͷٖࣅཚ਺ͷॳظγʔυΛ ಛఆ͢ΔAPIΛ͘͞ΒVPS͔ΒAWS LambdaʹҠߦͨ͠ • DBͷαΠζ͕ڊେ (32GB) ͳͷ͕໰୊ʹͳͬͨ •

    S3 -> Lambdaͷసૹʹ5ඵҎ্͔͔Δ • DynamoDB ʹ഑ஔ͢ΔͱDB࡞੒࣌ͷ Writeճ਺͕େྔʹൃੜ͠՝ۚࢮ • DBΛࡉ੾Εʹ͢Δ͜ͱͰసૹ࣌ؒͷ໰୊Λղܾ • 16**4ݸͷϑΝΠϧʹ෼ׂ • ϑΝΠϧύεͰର৅ϑΝΠϧΛಛఆ • ϑΝΠϧ1ͭ͸ߴʑ256KB 12