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

はてなリモートインターンシップ2022 マイクロサービス 講義資料

Hatena
December 19, 2022

はてなリモートインターンシップ2022 マイクロサービス 講義資料

Hatena

December 19, 2022
Tweet

More Decks by Hatena

Other Decks in Programming

Transcript

  1. ϚΠΫϩαʔϏε
    #hatenaintern

    View Slide

  2. ☪仼סإ٭ٜ
    ˝ ם؆כםׂُؕؠٞئ٭لتֿלַֹֹ׵ס־؂־׾
    ˝ ُؕؠٞئ٭لتס榫鏤סꦬ㍱妳؂־׾

    View Slide

  3. ☪仼ס⫂㳊
    ˝ ُؕؠٞئ٭لتכע
    ˝ ٓؿٛت
    ˝ עיםמֽׄ׾ُؕؠٞئ٭لت
    ˝ ُؕؠٞئ٭لتס⮆Ⱏ亠嫎
    ˝ ُؕؠٞئ٭لتסوٚؠطؔت
    ˝ ئ٭لتْشبٖ
    ˝ ױכ״

    View Slide

  4. ֽ鎇׊םַ׆כ
    golang

    View Slide

  5. ُؕؠٞئ٭لت
    ُؕؠٞئ٭لتכע

    View Slide

  6. ُؕؠٞئ٭لت
    +

    View Slide

  7. ُؕؠٞئ٭لت
    +

    View Slide

  8. א׵א׵ئ٭لتכע
    service
    a system that provides something that the public needs,
    organized by the government or a private company
    Hatena REMOTE INTERNSHIP /
    ( ?)

    View Slide

  9. ُؕؠٞئ٭لتכע
    +
    https://martinfowler.com/articles/microservices.html
    2014
    DDD( )

    View Slide

  10. هٞءמ׻׾כ׆؀סُؕؠٞئ٭لت
    1
    HTTP API
    - https://martinfowler.com/articles/microservices.html
    

    View Slide

  11. 

    View Slide

  12. ُؕؠٞئ٭لت
    REST API GraphQL gRPC...
    /
    

    View Slide

  13. ةؘن٬يدتס䫍
    2002 Amazon
    1. ئ٭لتؕ٤ذ٭نؘ٭ت؅鵟׋י⪒יסظ٭ذכ嚀耆؅⪜ꝧ׌׾
    2. אסؕ٤ذ٭نؘ٭ت؅鵟׋י鵟⟓׊םׄ׿ףם׼םַ
    3.
    ؾشع٠٭ؠ飈׊סئ٭لتؕ٤ذ٭نؘ٭ت؅磬榺׊ג鵟⟓דֿׄ錉⺎׈׿׾ն
    4. ✳榫׌׾䤗软עゖ؂םַ HTTP Corba Pubsub ⛰ך׵荁ַ Bezos
    5.
    Steve Yegge Google
    

    View Slide

  14. ُؕؠٞئ٭لتס荁ַכ׆؀
    API
    

    View Slide

  15. ُؕؠٞئ٭لتס荁ַכ׆؀
    ˝ 邾丗סؓوٛآ٭ب٘٤ך⺱׋⭚杼؅㲔逷׌׾䑒釐ֿםׂם׾
    ˝ ❆ֻף鵟湳؅ُؕؠٞئ٭لت⴫׌׾כյ二׊ַؓوٛآ٭ب٘
    ٤ךעאסُؕؠٞئ٭لت׫סٛؠؙتعדׄך鵟湳ֿך׀׾
    ˝ ٚؕهٚٛך׵⺱׋׆כֿ⺎耆כַֻף⺎耆דֿյ銧鏤窜׽םל
    ֿ㰆㏇׊םַסֿَؕ٤ع
    ˝ ُؕؠٞئ٭لتׇכמز٭ّ؅⵱⮉׾׆כֿך׀׾
    ˝ 鵟湳םל؅ْ٤طػ٤ت׌׾㓹泅ز٭ّםל
    

    View Slide

  16. ُؕؠٞئ٭لتסח׼ַכ׆؀
    1 web
    2 20


    

    View Slide

  17. ם׏僃鲣孱车זיַ׾־
    ProtocolBu er gRPC GraphQL OpenAPI
    /
    

    View Slide

  18. עיםכُؕؠٞئ٭لت
    ˝ עיםך׵ُؕؠٞئ٭لت؅⮵榫׊יַױ׌
    ˝ 鐐ꄋئ٭لت
    ˝ هٞءذء
    ˝ 嚀危㰢綗
    ˝ ز٭ّꝴךסظ٭ذס׷׽⹦׽
    ˝ ؓوٛآ٭ب٘٤؅ُؕؠٞئ٭لتדׄך啶䡗׊יַ׾כַֹ׻׽յ釐碛釐碛؅ُ
    ؕؠٞئ٭لت⴫׊יַ׾
    ˝ ؓوٛآ٭ب٘٤舅⛮עٓؿٛت؅┊㴩מ鷞榫׊יַ׾◄ֿ㛡ַ
    

    View Slide

  19. ٓؿٛت
    ( ) 1
    ....
    WAF(WebApplicationFramework)
    

    View Slide

  20. ٓؿٛت
    1
    1
    1 1 DB
    DB
    

    View Slide

  21. ٓؿٛت
    1
    DB
    

    View Slide

  22. vs
    CI/CD
    2
    

    View Slide

  23. 1
    1
    

    View Slide

  24. ُؕؠٞئ٭لتס睦䈱
    ?
    No
    /
    

    View Slide

  25. 㗞槡טׄ׼׿גؤ٤ط؞تع
    DDD
    DB
    

    View Slide

  26. 磵⺬׻׽ꄆ邾׎׻
    /
    ...
    

    View Slide

  27. ُؕؠٞئ٭لتכظ٭ذ畘杼
    ˝ ظ٭ذي٭ت┕סظ٭ذ׵յُؕؠٞئ٭لتׇכמ斻玮׊י䧏ח׬׀
    ˝ ظ٭ذي٭ت؅⪦僗׌׾כյ㗞槡טׄ׼׿גؤ٤ط؞تعכַֹ䙫⽏ך׵ֵױ׽荁ׂםַ
    ˝ ظ٭ذي٭ت؅邾丗סُؕؠٞئ٭لتך⪦僗׌׾כյظ٭ذي٭تֿ磵㷀ⶡ┉꤃㲹憠
    מם׾
    ˝ ت؞٭ُ؅⪦僗׊יַג㕙⺬յֵ׾ئ٭لتך㚺催؅ⱶֻ׾כ☽ئ٭لت׵㚺催מ鴑
    䏼׌׾䑒釐ֵֿ׾
    ˝ ُؕؠٞئ٭لتׇכמ鸵⮉םظ٭ذي٭ت؅鹟䥃ך׀׾⮵憠׵ֵ׾
    ˝ ج؞ٖٛطؔ鈝憠׷鵭䈱鈝憠םלյ喋չ
    

    View Slide

  28. ُؕؠٞئ٭لتכظ٭ذ畘杼
    

    View Slide

  29. ?
    No
    API GateWay
    API PC API API
    DB
    DB 1
    

    View Slide

  30. ئ٭لتي٭تؓ٭؞طؠزٔ
    DB
    DB
    

    View Slide

  31. ُؕؠٞئ٭لتס⮆Ⱏ
    

    View Slide

  32. ُؕؠٞئ٭لتס⮆Ⱏ
    ˝ ُؕؠٞئ٭لت؅⛼זיַׂ꤀ע䑒׍յُؕؠٞئ٭لتס
    鞊ⳉ؅婊㲊׌׾⛼哅ֿ䑒釐מם׾
    ˝ ُؕؠٞئ٭لتס⮆Ⱏ
    ˝ ⪮⛮氳ם⮆Ⱏ亠嫎؅釤׾⯥מյُؕؠٞئ٭لتס⯥䬠؅䤰ֻ
    יֽ׀ױ׊׺ֹ
    

    View Slide

  33. ُؕؠٞئ٭لتס⯥䬠
    DB
    

    View Slide

  34. 8
    Fallacies of distributed computing ( 8 / )
    - 1994
    1.
    2.
    3.
    4.
    5.
    6. 1
    7.
    8.
    

    View Slide

  35. ⺎鈝峮䓪
    web
    /
    (Observability)
    

    View Slide

  36. ⺎鈝峮䓪
    mackerel
    

    View Slide

  37. ُؕؠٞئ٭لتס⮆Ⱏ
    ُؕؠٞئ٭لتס⮆Ⱏע荇չ孱孬ֿ㰆㏇׌׾
    ....
    -
    -
    僃鲣ךע⮆Ⱏ؅䣆Ⲃׄ׌׾ص٭ٜםלֿꝧ氦׈׿חחֵ׾
    

    View Slide

  38. 哅ⳉמ׻׾⮆Ⱏ
    ˝ 鏀錞
    ˝ よ⿁辐炐٬吾碟
    ˝ 鐐ꄋ
    ˝ ㏇䈻澬鏀
    ˝ ⭳蕔⛼哅
    ˝ 鑁姲
    

    View Slide

  39. 哅ⳉמ׻׾⮆Ⱏ
    ˝ ٗ٭ا٭ֿא׵א׵樟ם׾㗞槡
    ˝ ٗ٭ا٭ע⺱׋דֿյ姲״׾׵סֿ樟ם׾㗞槡
    

    View Slide

  40. 哅ⳉמ׻׾⮆Ⱏ
    /
    

    View Slide

  41. 㗞槡טׄ׼׿גؤ٤ط؞تعמ׻׾⮆Ⱏ
    DDD
    DDD
    DDD
    

    View Slide

  42. 㗞槡טׄ׼׿גؤ٤ط؞تعמ׻׾⮆Ⱏ
    (Entity Trap)
    -
    -
    -
    - DB ORM
    

    View Slide

  43. ؕطٝ٭طؔهמ䷉ャ׌׾
    1
    

    View Slide

  44. 攐䓪מ׻׾⮆Ⱏ
    /
    ( )
    1
    (Availability)
    (Continuity)
    (Performance) /
    /
    

    View Slide

  45. 攐䓪מ׻׾⮆Ⱏ
    ׷ײׂ׵מُؕؠٞئ٭لت؅縒ֻ׾⯥מյױ׍ע㵚霄סئ٭لت؅⮆冪׊յלס׻ֹםغْؕ
    ٤׷⣐ꪫֵֿ׾־؅釤哕״ױ׊׺ֹ
    /
    

    View Slide

  46. ❆ֻףج؞ٖٛطؔ
    ˝ ج؞ٖٛطؔמꄆ釐םظ٭ذ؅䣽ֹ׵סעئ٭لتכ׊י⮉׽
    ⭳׊ױ׊׺ֹ
    ˝ 斻玮׊גظ٭ذي٭ت
    ˝ ❆ֻף鵟䅻סئ٭لتכ鐐ꄋئ٭لت؅⮆ꦕ׌׾םל
    ˝ ⮯סئ٭لتכס鵟⟓ס倊⺘⴫׵吾鋀׊ױ׊׺ֹ
    

    View Slide

  47. ❆ֻף⫋⮵榫䓪
    ˝ ؓ؜ؗ٤ع㓹泅׷鵟湳յ婊岷嚀耆םל
    ˝ ⺱׋ؓ؜ؗ٤عך邾丗סئؕعמٞءؕ٤׊גַ
    ˝ 婊岷嚀耆ע䄄丗ֿ־־׾סךյُؕؠٞئ٭لت⴫׊י⪦鵟
    㓹泅מ׊יֽ׀גַ
    ˝ 邾丗סئ٭لتך⮵榫ך׀׾־לֹ־
    

    View Slide

  48. ُؕؠٞئ٭لتס⮆Ⱏ
    ˝ 釤י׀ג喋מُؕؠٞئ٭لتס⮆Ⱏ؅縒ֻ׾כ׆؀ךע喋չ
    ם鈝憠ֵֿ׾
    ˝ 塜鉮ֿ扛ַ┩槡םסךյ喋չם׵ססعٝ٭غ؛ن؅縒䜡׊ם
    ֿ׼錃銶׊׻ֹ
    ˝ 僃䖾ם錃銶ך扛ׄ׿ףؕطٝ٭طؔهמ䷉ャ׌׾◄ֿך׀׾
    ˝ ☽ס⣐ꪫכ׊יظ٭ذס䣽ַמ浓泘׌׾׆כ׵ֵ׾
    

    View Slide

  49. ُؕؠٞئ٭لتסوٚؠطؔت
    ˝ ُؕؠٞئ٭لتמֽׄ׾ظ٭ذס䣽ַ
    ˝ ئ٭لتꝴ鵟⟓
    ˝ ئ٭لتْشبٖ
    ˝ ُؕؠٞئ٭لتסٛٛ٭تכٛنؒؠذٛ٤ء
    

    View Slide

  50. ُؕؠٞئ٭لتמֽׄ׾ظ٭ذס䣽ַ
    

    View Slide

  51. DB
    1
    1 DB
    to DB
    

    View Slide

  52. CAP BASE
    3 2
    C: Consistency ( )
    A: Availability (
    P: Tolerance to network Partitions ( )
    ( )CAP
    BASE
    Basically Available( )
    Soft state( )
    Eventually consistent( )
    

    View Slide

  53. ُؕؠٞئ٭لتכ⮆丆عٚ٤اؠب٘٤
    !
    ئ٭لت؅ױג׃عٚ٤اؠب٘٤؅ע׼םַ
    1
    

    View Slide

  54. א׿ך׵⮆丆عٚ٤اؠب٘٤׊גַ
    2
    Saga
    TCC
    

    View Slide

  55. Saga
    T , T , T C , C , C
    :
    

    View Slide

  56. Saga
    : AWS
    https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/
    latest/modernization-data-persistence/saga-pattern.html
    

    View Slide

  57. TCC
    Try/Con rm/Cancel
    ײ؆ם荁ׄ׿ף⟊㰆յ鐍־ד״ם׼؞ٔ٤جٜ׌׾
    

    View Slide

  58. TCC
    Try
    Cancel
    Try
    Con rm
    Con rm Cancel
    

    View Slide

  59. TCC
    ˝ א׿ב׿סئ٭لتמ◅㍑׍חٛؠؙتعֿ䑒釐
    ˝ ع٭ذٜך侇ꝴֿ־־׾׆כֿؾشؠ
    

    View Slide

  60. DB
    ?
    ...
    ADR
    

    View Slide

  61. 睦䈱؅縒ֻ泡׊ג׮ֹֿ荁ַ侇
    1
    1
    

    View Slide

  62. ئ٭لتꝴ鵟⟓
    

    View Slide

  63. ئ٭لتꝴ鵟⟓
    schema rst
    

    View Slide

  64. ⫴璡䓪
    1
    1 1
    /payment {"amount":300, "userAccount": "hoge"} /payment
    ID
    /payment {"amount":300, "userAccount": "hoge","forPurchase": "abcd123"}
    forPurchase
    forPurchase
    

    View Slide

  65. ئ٭لتْشبٖ
    

    View Slide

  66. ُؕؠٞئ٭لتס畘杼
    ˝ ؓوٛآ٭ب٘٤ע邾ꥭםئ٭لت紮ס꥗ױ׽
    ˝ ؓوٛآ٭ب٘٤؅⟥渏׊י釤׾亠嫎ֿ培׊ַ
    ˝ ئ٭لتꝴס❣㰆꞊➟
    ˝ 泃釱٬ٞءס⹜꥗
    ˝ ئؕغ؜٭قذ٭٤ֿ㛡ׂ⮵榫׈׿׾
    

    View Slide

  67. ُؕؠٞئ٭لتס畘杼
    ˝ ꤃㲹氦榟侇ס鐧削
    ˝ ⠕չסئ٭لت؅ꯂ樑מ釤יַׂכ侇ꝴֿ־־׾
    ˝ ئ٭لتꝴס鵟⟓؅畘杼׌׾♓┕מ׷׿׾׆כֵֿ׽אֹ
    

    View Slide

  68. ئؕغ؜٭قذ٭٤
    mackerel-container-agent
    

    View Slide

  69. ئ٭لتْشبٖ
    proxy
    proxy
    ip
    

    View Slide

  70. ئ٭لتْشبٖס䏔Ⱏ
    A B
    

    View Slide

  71. ئ٭؞شعهٝ٭؜٭
    Istio
    

    View Slide

  72. 

    View Slide

  73. 

    View Slide

  74. 

    View Slide

  75. ظ٭ذوٝ٭٤כؤ٤عٞ٭ٜوٝ٭٤
    ˝ ظ٭ذوٝ٭٤
    ˝ ⺨ئ٭لتמ㳝׽岣זיⳂׂوٞ؞ب
    ˝ 鵟⟓ס⯆䐒כ䗯㕔ס⹜꥗
    ˝ ىٜتزؘشؠ׷鏀錞٬鏀⺎םל׵车ֹ
    ˝ ْعٛشؠ׷ٞء؅⹜꥗׊յؤ٤عٞ٭ٜوٝ٭٤׫峚׌
    

    View Slide

  76. ظ٭ذوٝ٭٤כؤ٤عٞ٭ٜوٝ٭٤
    ˝ ؤ٤عٞ٭ٜوٝ٭٤
    ˝ ظ٭ذوٝ٭٤סؕ٤تذ٤تס畘杼
    ˝ ⺨ئ٭لتסْعٛشؠ׷ٞء؅⹜꥗
    ˝ 啶䡗畘杼٬⺨牊رشبٍٖ٭غ
    

    View Slide

  77. Envoy
    https://www.envoyproxy.io/
    Lyft C++ L
    L HTTP
    HTTP, gRPC, WebSocket, TCP
    ( )
    

    View Slide

  78. Istio
    Istiod
    sidecar injection
    Envoy
    Envoy
    

    View Slide

  79. ُؕؠٞئ٭لتסٛٛ٭ت亠嫎
    API versioning
    / API
    

    View Slide

  80. 壿꣪氳מت؞٭ُסٛنؒؠذٛ٤ء؅׌׾
    GraphQL
    gRPC
    

    View Slide

  81. 催מ㰢שמע
    CloudNative
    CNCF Cloud Native Interactive Landscape
    The Amazon Builders' Library
    microservice
    microservice - . oO( ( l _ l) )
    Sam Newman 2016
    Susan J. Fowler 2017
    Neal Ford, Rebecca Parsons, Patrick Kua 2018
    Sam Newman 2020
    Microservice Architecture
    

    View Slide

  82. ױכ״
    ˝ ُؕؠٞئ٭لتע邾丗סئ٭لتֿ鵟⟓מ׻זי鵽䯥׊י䡗
    ׽玮חؓ٭؞طؠزٔ
    ˝ ُؕؠٞئ٭لتס⮆Ⱏ亠嫎ע喋չם䣆嫎ֵֿ׾
    ˝ ُؕؠٞئ٭لتעؕطٝ٭طؔهמ䷉ャ׊禈ׄ׾׆כֿꄆ釐
    ˝ ئ٭لتْشبٖםלסوٚؠطؔت؅⹦׽⪌׿יַ׆ֹ
    

    View Slide

  83. ׷זיײ׻ֹסؤ٭ػ٭
    

    View Slide

  84. : Istio
    istioctl install
    istioctl install !"set profile=demo !"context
    hatena-intern-2021
    kubectl label namespace hatena-intern-2021 istio-
    injection=enabled
    kubectl get namespace hatena-intern-2021 -o yaml
    istio-injection enabled
    

    View Slide

  85. : Istio
    kubectl apply -f https:!"raw.githubusercontent.com/istio/
    istio/release-1.7/samples/addons/kiali.yaml Kiali
    kubectl apply -f https:!"raw.githubusercontent.com/istio/
    istio/release-1.7/samples/addons/prometheus.yaml
    Prometheus
    application
    istioctl dashboard kiali
    sign in admin:admin
    

    View Slide

  86. Kiali
    

    View Slide

  87. : fault injection
    攐㲊ס嚀耆מ䙫㍲氳מ䷚꤃؅氦榟׈׎י䏅ꮶ疗㍱؅鐧׬ױ׌
    Injecting an HTTP abort fault renderer service
    ( Service Temporarily Unavailable)
    fault %age
    Kiali application
    blog service error message istio-proxy
    log "authority": "renderer-go:50051"
    response_flags
    

    View Slide

  88. : fault injection
    renderer service response 5
    Kiali application
    istio-proxy log response_flags
    kubectl delete
    virtualservices.networking.istio.io [໊લ] fault
    injection
    

    View Slide