Slide 1

Slide 1 text

ϚΠΫϩαʔϏε #hatenaintern 

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

ֽ鎇׊םַ׆כ golang 

Slide 5

Slide 5 text

ُؕؠٞئ٭لت ُؕؠٞئ٭لتכע 

Slide 6

Slide 6 text

ُؕؠٞئ٭لت + 

Slide 7

Slide 7 text

ُؕؠٞئ٭لت + 

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text



Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

ُؕؠٞئ٭لتסח׼ַכ׆؀ 1 web 2 20 ⾒ ⾒ 

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

ٓؿٛت 1 DB 

Slide 22

Slide 22 text

vs CI/CD 2 

Slide 23

Slide 23 text

1 1 

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

⺎鈝峮䓪 web / (Observability) 

Slide 36

Slide 36 text

⺎鈝峮䓪 mackerel 

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

哅ⳉמ׻׾⮆Ⱏ / 

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

DB 1 1 DB to DB 

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

Saga T , T , T C , C , C : 

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

TCC Try Cancel Try Con rm Con rm Cancel 

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

DB ? ... ADR 

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

ئ٭لتꝴ鵟⟓ 

Slide 63

Slide 63 text

ئ٭لتꝴ鵟⟓ schema rst 

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

ئ٭لتْشبٖ 

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text



Slide 73

Slide 73 text



Slide 74

Slide 74 text



Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

Istio Istiod sidecar injection Envoy Envoy 

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

催מ㰢שמע 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 

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

: 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 

Slide 85

Slide 85 text

: 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 

Slide 86

Slide 86 text

Kiali 

Slide 87

Slide 87 text

: 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 

Slide 88

Slide 88 text

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