Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala と Microservices でつくる 証券会社とスタートアップ / FOLIO in JJUG CCC 2018 Fall

Scala と Microservices でつくる 証券会社とスタートアップ / FOLIO in JJUG CCC 2018 Fall

Takuya "Mura-Mi" Murakami

December 13, 2018
Tweet

More Decks by Takuya "Mura-Mi" Murakami

Other Decks in Programming

Transcript

  1. 4DBMBה.JDSPTFSWJDFTדאֻ׷
    鏾ⵙ⠓爡הأة٦ز،حف
    2018/12/15 JJUG CCC 2018 Fall #jjug_ccc #ccc_c7
    ଜ্୓໵ (ΉΒΈΜ)

    View Slide

  2. 募♳䬪⛲
    -FBEPG#BDLFOE&OHJOFFSTJO'0-*0
    䎃剢חآّ؎ٝ
    ֿ׸תד
    ˖ 4JNQMFY _

    ˖ $ZCFS"HFOU"E5FDI4UVEJP
    _

    XIPBNJ

    View Slide

  3. View Slide

  4. ➙傈ծֶ鑧ׅ׷ֿה

    View Slide

  5. View Slide

  6. أة٦ز،حفד֮׶זָ׵
    鏾ⵙ⠓爡ד׮֮׷
    '0-*0׾
    4DBMBהو؎ؙٗ؟٦ؽأָ
    וֲ佄ִגְ׷ַ

    View Slide

  7. '0-*0חֶֽ׷4DBMB

    View Slide

  8. ˖ و؎ؙٗ؟٦ؽأ،٦ؗذؙثٍד圓䧭׃גְ׷կ
    ˖ ך؟٦ؽأךֲ׍ָ4DBMBד剅ַ׸גְ׷կ
    ˖ غحؙؒٝسؒٝآص،כせ
    '0-*0ךغحؙؒٝسءأذي
    ˞αʔϏε਺͸(JU-BCͷϨϙδτϦ਺ɻ਺ࣈ͸೥݄ॳ࣌఺

    View Slide

  9. +BWB+7.ؒ؝ءأذيך㸜䗰䠬
    ˖ ($ 橆㞮⣛㶷ך㼰זׁ ٓ؎ـٓٔך⯍㹋 FUD
    ˖ ꆃ輐禸䞔㜠كٝت٦װꆃ輐暴剣ךفٗز؝ٕח㼎䘔׃׋4%,װٓ
    ؎ـٓٔך⯍㹋
    +BWB 4DBMB $MPKVSF ֮׋׶דך䪮遭鼅䫛
    ˖ 䪮遭鼅㹀׾׃׋䔲儗כ؟٦غ٦؟؎س,PUMJOךظؐعؐ׮㼰זַ׏
    ׋
    4DBMBָ鼅ל׸׋✲䞔

    View Slide

  10. ˖ ꆃ輐הְֲ醱꧟זسً؎ٝ
    ̔邌植⸂
    ˖ 荜ㄏ涸ז꟦麩ְ׾⸬桦涸ח鼘ֽ׋ְ
    ̔㘗ءأذيָ׮׋׵ׅ㸜Ⰻׁ
    ˖ أة٦ز،حف暴剣ךأؾ٦س䠬٥㼭㔐׶ך葺ׁ
    ̔꫼涸㘗➰ֽ鎉铂ד֮׷ֿהח״׷չ䚈ָל㔐׸պ
    '0-*0ך铬겗חؿ؍حزׅ׷4DBMB

    View Slide

  11. 鸐䌢ךDMBTT㹀纏ח⸇ִ䎗אַך堣腉ָ鷄⸇ׁ׸׋ؙ
    ٓأկ⟃♴ך״ֲז暴䗙ָ֮׷կ
    ˖ UP4USJOH IBTI$PEF FRVBMTכ荈⹛ד㹋鄲ׁ׸׷
    ˖ ؿ؍٦ٕسכ♶㢌 זךדծDBTFDMBTT荈⡤׮㛇劤涸ח♶㢌

    ˖ ػة٦ٝوحثؚٝ ➙㔐כ铡僇׃תׇ׿
    דⵃ欽דֹ׷
    ˖ ,PUMJOךEBUBDMBTT +BWBך-PNCPL،ظذ٦ءّ
    ٝⰋ鿇鯹ׇ♶㢌ؙٓأָ؎ً٦آ涸ח鵚ְַկ
    4DBMB㛇燉濼陎DBTFDMBTT

    View Slide

  12. DBTFDMBTTדך7BMVF0CKFDU㹀纏
    ˞࣮ࡍͷϓϩμΫγϣϯίʔυͰ͸͋Γ·ͤΜ

    View Slide

  13. 㘗ד縧ֹ꟦麩ְ׾꣇ּ

    View Slide

  14. %#أؗ٦وח㼎䘔׃׋ٌرٕ♳דכ㘗ד农〾⻉׾爙ׅ
    ˞࣮ࡍͷϓϩμΫγϣϯίʔυͦͷ··Ͱ͸͋Γ·ͤΜ

    View Slide

  15. 农〾⻉Ⳣ椚׾぀׷㘗ؙٓأ׾欽䠐ׅ׷
    ˞࣮ࡍͷϓϩμΫγϣϯίʔυͦͷ··Ͱ͸͋Γ·ͤΜ

    View Slide

  16. ⚥縧鎸岀דQSJNJUJWFז侧㶵׏שֻ䪔ֲ
    ˞࣮ࡍͷϓϩμΫγϣϯίʔυͦͷ··Ͱ͸͋Γ·ͤΜ

    View Slide

  17. ⚥縧鎸岀

    View Slide

  18. ⚥縧鎸岀דQSJNJUJWFז侧㶵׏שֻ䪔ֲ
    ˞࣮ࡍͷϓϩμΫγϣϯίʔυͦͷ··Ͱ͸͋Γ·ͤΜ

    View Slide

  19. ⚥縧鎸岀

    View Slide

  20. 䠐㄂ך麩ֲ侧㶵ָ幉ׂ׵זְ״ֲחׅ׷
    ˞࣮ࡍͷϓϩμΫγϣϯίʔυͦͷ··Ͱ͸͋Γ·ͤΜ
    ˞1OM1SPpUBOE-PTT ଛӹ

    View Slide

  21. 怴皾穠卓ך䠐㄂׾邌ׅ
    ˞࣮ࡍͷϓϩμΫγϣϯίʔυͦͷ··Ͱ͸͋Γ·ͤΜ
    ˞1O-1SPpUBOE-PTT ଛӹ

    View Slide

  22. ˖ ⡦״׶㘗ך䛷䜋׾「ֽ׵׸׷
    String DoubleװBigDecimalךתת䪔ֲהծ怴皾〳
    やװծ怴皾ך穠卓ך䠐㄂ך邌植ָ⳿勻זְ
    㹑鎉涸ז鎸鶢ח״׷꟦麩ְך䫇姺
    ˖ 邌植ך䌴ָ嫰鯰涸䎢ְ
    DBTFDMBTTח״׷瘝⣣ⴻ㹀ך嚂ׁװظ؎ؤך㼰זׁ
    4DBMBָ׮׋׵ׅسً؎ٝך鎸鶢⸂

    View Slide

  23. ػح؛٦آ圓鸡כ걼籕ח鋅湫ׅ

    View Slide

  24. ˖ ؝ٝػ؎ٕכ儗꟦ַַָ׷ֽ׸ו׮ծ⥂鏾דֹ
    ׷眔㔲ָ䎢ְ
    ˖ *%&ך⸂׾⢪׏גػح؛٦آ圓䧭װㄏせ倯ꆙך
    㣐ղ涸ז㢌刿׾遤ֲֿה׮嫰鯰涸㸜䗰
    *%&ך⸂׾⦵׶׋أؾ٦س䠬ה㛙暕ׁךغٓٝأ

    View Slide

  25. '0-*0ה.JDSPTFSWJDFT

    View Slide

  26. ˖ 鏾ⵙ噟⹡ءأذيך䬐ֲ眔㔲כהחַֻ䌴䎢ְկ
    Ⰻג׾濼׷ֿהךꨇ僒䏝כ噰׭ג넝ְ
    ؒٔ،׀הח噟⹡鏣鎘噟歲濼陎䚍腉銲⟝זוך䚍呓ָ麩ֲ
    ˖ 㢩鿇ءأذي٥؟٦ؽأח׮㣐ֹֻ⣛㶷ׅ׷
    䋐屣ꂁ⥋ծꋒ遤䮶鴥ח״׷Ⰵꆃծ《䒷䨽䱸竲˘
    ז׷ץֻ毙穠さח׃׋ְկ
    ˖ ꥺ㹱ך䕦갟眔㔲ך僇然⻉הꣲ㹀
    אךꥺ㹱דⰋגךֶ㹏圫ח鶳䞨׾ֶַֽ׃זְ
    ♧㹀⟃♳ךꥺ㹱ָ饯ֹ׸לծ䕦갟곁㹏➂侧׾幐ִג遤佟堣ꟼח㜠
    デ׾ׅ׷䗳銲ָ֮׷
    ꆃ輐堣ꟼךءأذيח実׭׵׸׷䚍呓

    View Slide

  27. 䋐屣鸞㜠
    䲿⣘⟰噟
    8FC؟٦ؽأ
    չؿؓٔؔպ
    ٌغ؎ٕ،فٔ
    չؿؓٔؔպ
    ޱ࠲։ઃ ސ٬৘ใ ϚΠϖʔδ޲͚"1*
    ςʔϚ৘ใ؅ཧ
    ஫จड஫
    ஫จ؅ཧࣥߦ
    ˞͔ͳΓ؆ུԽ͍ͯ͠·͢
    ࢒ߴ؅ཧ ࢒ߴཤྺ؅ཧ
    Ⰵ⳿ꆃ؟٦ؽأ
    ⹞㹀禸ءأذي
    Ձ֨഑৴
    ചങ৹ࠪ
    䫎项䨌殛
    ؕأةو٦؟ه٦ز ؝ٝفٓ؎،ٝأ
    《䒷䨽ـٗ٦ؕ٦
    ೖग़ۚ
    צఆ؅ཧ
    ꆃ輐堣ꟼ׾و؎ؙٗ؟٦ؽأה䯝ִ׷
    〡䏟Ꟛ鏣
    㻢叨䬐䔲

    View Slide

  28. ˖ Ꟛ涪ث٦ي׾ⴓֽגسً؎ٝ濼陎׾帾׭װֻׅ׃׋׶ծ暴䚍ח䘔
    ׄ׋䪮遭鼅㹀װ،٦ؗذؙثٍ׾〳腉חׅ׷կ
    ˖ ٔٔ٦أ؟؎ؙٕװ2"ךװ׶倯׾ⴓֽ׷կ

    稆傍ֻٔٔ٦أדֹ׷׮ךכ⳿ׅկׄ׏ֻ׶2"ׅ׷׮ךכׅ׷կ
    ˖ 㢩鿇ءأذيח㼎ׅ׷臰侁꣇姺㾴׾؟٦ؽأהׅ׷կ
    ˖ ꥺ㹱ך㽷䨽⻉կ֮׷堣腉ךꥺ㹱ָ饯ֹג׮Ⰻגךֶ㹏圫ח䕦갟׾
    「ׇֽׁזְկ

    FY〡䏟Ꟛ鏣㻢叨חꥺ㹱ָ֮׏ג׮傀㶷ךֶ㹏圫כ㡰顠ָ⳿勻זֻגכְֽזְ

    و؎ؙٗ؟٦ؽأ⻉ח״׷ًٔحز

    View Slide

  29. و؎ؙٗ؟٦ؽأך⚥חכ噟⹡鏣鎘װ噟⹡濼陎ָꬊ䌢ח醱꧟ז
    ׮ךָ֮׷կ
    سً؎ٌٝرؚٔٝ׾鸐ׄ׋噟⹡椚鍑ה濼陎Ⱏ剣ח《׶穈׿ד
    ְ׷կ
    ٌرٕ〳鋔⻉ך麓玎ד钠陎ך麩ְװ倜׃ְ孡➰ֹ׾֮ע׶⳿ׅ
    濼陎Ⱏ剣ך׋׭ךٌرؚٔٝ穠卓הفٗتؙءّٝ؝٦سךꟼ
    ⤘׾וֲًٝذشٝأׅ׷ךַָ➙ך铬겗կ
    سً؎ٌٝرؚٔٝ

    View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. 'JOBHMF5XJUUFSח״׷31$ؿٖ٦يٙ٦ؙ
    'JOBUSB'JOBHMFך♳ח⡲׵׸׋4DBMB؟٦
    ؽأؿٖ٦يٙ٦ؙ
    《䖤דֹ׷ًزؙٔأָ鞢㺡
    ⴓ侔زٖ٦ءؚٝ橆㞮׾㺁僒ח圓眠דֹ׷
    ٔزٓ؎װ#BDL1SFTTVSFⵖ䖴׮״׃זח
    װ׏גֻ׸׷
    5ISJGUח״׷*%-盖椚הך鋵ㄤ䚍ָ葺ְ
    'JOBHMF'JOBUSB

    View Slide

  34. exception ResourceNotFound {
    1: string message
    }
    typedef i64 UserId
    struct User {
    /**
    * ϢʔβID
    */
    1: required UserId id
    /**
    * Ϣʔβ໊
    */
    2: required string name
    /**
    * ϢʔβͷϝʔϧΞυϨε
    */
    3: optional string email
    }
    service AccountService {
    /**
    * Ϣʔβݕࡧ
    */
    User findUser (
    1: required UserId userId
    ) throws (1: ResourceNotFound resourceNotFound)
    }
    ˞࣮ࡍʹαʔϏεʹ࢖ΘΕ͍ͯΔίʔυͱ͸ҟͳΓ·͢

    View Slide

  35. 3&45"1*
    3&45"1*
    ٌغ؎ٕ،فٔ
    չؿؓٔؔպ
    8FC؟٦ؽأ
    չؿؓٔؔպ
    5ISJGU31$
    5ISJGU31$
    31$1SPUPDPMTBNPOH'SPOU#''#BDLFOE
    #BDLFOEGPS
    'SPOUFOE

    View Slide

  36. 圫ղזًزؙٔأָ知⽃ח䩛חⰅ׷

    View Slide

  37. 圫ղזًزؙٔأָ知⽃ח䩛חⰅ׷
    ͋ΔϚΠΫϩαʔϏεͷ
    "1*͝ͱͷ-BUFODZͷ
    QFSDFOUJMF

    View Slide

  38. 圫ղזًزؙٔأָ知⽃ח䩛חⰅ׷
    ͋ΔϚΠΫϩαʔϏεͷ
    "1*͝ͱͷݺͼग़͠ճ਺

    View Slide

  39. ⴓ侔زٖ٦ءؚٝ

    View Slide

  40. ⴓ侔زٖ٦ءؚٝ
    ϚΠΫϩαʔϏεͷ
    "1*ݺͼग़͕͠
    ॎʹฒͿ

    View Slide

  41. ⴓ侔زٖ٦ءؚٝ ԣ࣠͸
    "1*͝ͱͷ
    ॴཁ࣌ؒ

    View Slide

  42. ⴓ侔زٖ٦ءؚٝ
    ΍͚ʹ௕͘૸ͬͯΔ!

    View Slide

  43. ⴓ侔زٖ٦ءؚٝ
    ࡉ͔͍͚Ͳେྔʹ
    42-ଧͬͯΔ͚Ͳ
    େৎ෉͔ͳ"

    View Slide

  44. ⰻ醡خ٦ٕ纇
    _儗꟦ך鏩ׅꣲ׶稱➜_

    View Slide

  45. 爡ⰻ橆㞮ꣲ㹀דUISJGU醡"1*׾⟣䠐ך䒷侧ד㹋遤׃ծٖأ
    هٝأ׾+40/MJLFז䕎䒭ד「ֽ《׸׷رغحؚ欽$-*
    +4醡
    UISJGUDMJ

    View Slide

  46. $ thrift-cli
    # list available microservices
    thrift-cli$ ls
    - account
    - portfolio
    - financial-data
    - (and so on…)
    # choose microservice to use
    thrift-cli$ portfolio> use account
    # list available methods
    thrift-cli$ account> methods
    - findUser
    - findUserByExternalAuthenticationId
    - findExternalAuthentications
    - (and so on…)
    # run method
    thrift-cli$ account> run findUser 1

    View Slide

  47. 䎃植㖈ծ㹀劍آّـװرفٗ؎آّـכ+FOLJOTד
    盖椚٥㹋遤׃גְ׷կ
    醱侧橆㞮דآّـך鏣㹀ⰻ㺁׾♧顐ׇׁ׷׋׭חծ$POH
    BTB$PEF׾㹋植ׇׁ׷׋׭ך%4-׾ⵃ欽׃גְ׷կ
    (SPPWZד剅ֻךדծ稢ְַ蔓װⰟ鸐⻉׮ⶴה䖤䠐կ
    ⿫罋IUUQTNBSDFTIFSDPNKFOLJOTBTDPEFDSFBUJOH
    KFOLJOTKPCTXJUIUFYUOPUDMJDLT
    +FOLJOT+PC%4-

    View Slide

  48. $POTVM ؟٦ؽأر؍أؕغٔ
    ח㉏ְさ׻ׇגぐو؎ؙ
    ٗ؟٦ؽأךغ٦آّٝװ*1،سٖأזו׾侄ִגֻ׸
    ׷4MBDLCPU
    $POTVM荈⡤ָ(Pד剅ַ׸גְגծ"1*$MJFOU׮(Pד䲿
    ⣘ׁ׸גְ׷ךד(P醡
    [email protected]

    View Slide

  49. View Slide

  50. IUUQTBEWFOUBSPSHDBMFOEBST
    ➙䎃׮"EWFOU$BMFOEBSװ׏גתׅ

    View Slide

  51. $PODMVTJPO

    View Slide

  52. ˖ '0-*0כꆃ輐堣ꟼח実׭׵׸׷㛙暕ׁהأة٦
    ز،حفךأؾ٦س䠬װ堣佴ׁ׾䖤׷׋׭ח
    4DBMB׾崞欽׃גְתׅկ
    ˖ ꆃ輐堣ꟼךءأذي׾و؎ؙٗ؟٦ؽأ،٦ؗذ
    ؙثٍד㹋鄲ׅ׷ֿהדծ実׭׵׸׷堣腉ך䲿⣘
    ח黝׃׋穈籼׾⡲׹ֲה׃גְתׅկ
    תה׭

    View Slide

  53. 4DBMBדغحؙؒٝسءأذيꟚ涪׾ׅ׷⟗꟦׾⹫꧊׃גְתׅ

    View Slide

  54. 醱꧟זسً؎ٝ׾《׶䪔ֲاؿزؐؑ،׾ծ

    噟⹡ءأذي׾⢪ֲِ٦ؠ٦הה׮ח⡲׶♳־׋
    ְ➂
    ֿ׸תדך穗꿀׾崞ַ׃אא4DBMBװو؎ؙٗ
    ؟٦ؽأꟚ涪ח䮋䨌׃ג׫׋ְ➂
    و؎ؙٗ؟٦ؽأד֮׶זָ׵♧顐䚍װءأذي
    ך㸜㹀䚍׾מ׋ׅ׵鷄実׃׋ְ倯
    孡חז׏׋ծ׉ֿך،شة

    View Slide

  55. 窫额䱰欽崞⹛⚥דׅ

    View Slide

  56. فٗآؙؑزوط٦آٍ٦⹫꧊׮װ׏גתׅ

    View Slide

  57. 8FCؿٗٝزؒٝآص،ָغح
    ؙؒٝسؒٝآص،ח鯄魦׃׋⢽
    ׮֮׶תׅ
    莆㄂ָ֮׸ל'0-*05ءٍخ
    ػ٦ؕ٦׾滠גְ׷ًٝغ٦ח孡
    鯪ח鑧׃ַֽגֻ׌ְׁ
    㼰׃ד׮孡חז׏׋׵

    View Slide

  58. View Slide