https://hatena.co.jp/recruit/intern/2022
ϚΠΫϩαʔϏε#hatenaintern
View Slide
☪仼סإ٭ٜ˝ ם؆כםׂُؕؠٞئ٭لتֿלַֹֹס־־˝ ُؕؠٞئ٭لتס榫鏤סꦬ㍱妳־
☪仼ס⫂㳊˝ ُؕؠٞئ٭لتכע˝ ٓؿٛت˝ עיםמֽُׄؕؠٞئ٭لت˝ ُؕؠٞئ٭لتס⮆Ⱏ亠嫎˝ ُؕؠٞئ٭لتסوٚؠطؔت˝ ئ٭لتْشبٖ˝ ױכ״
ֽ鎇םַ׆כgolang
ُؕؠٞئ٭لتُؕؠٞئ٭لتכע
ُؕؠٞئ٭لت+
ُؕؠٞئ٭لت+
אאئ٭لتכעservicea system that provides something that the public needs,organized by the government or a private companyHatena REMOTE INTERNSHIP /( ?)
ُؕؠٞئ٭لتכע+https://martinfowler.com/articles/microservices.html2014DDD( )
هٞءמכ׆סُؕؠٞئ٭لت1HTTP API- https://martinfowler.com/articles/microservices.html
ُؕؠٞئ٭لتREST API GraphQL gRPC.../
ةؘن٬يدتס䫍2002 Amazon1. ئ٭لتؕ٤ذ٭نؘ٭ت鵟י⪒יסظ٭ذכ嚀耆⪜ꝧ2. אסؕ٤ذ٭نؘ٭ت鵟י鵟⟓םׄףםםַ3.ؾشع٠٭ؠ飈סئ٭لتؕ٤ذ٭نؘ٭ت磬榺ג鵟⟓דֿׄ錉⺎ն4. ✳榫䤗软עゖםַ HTTP Corba Pubsub ⛰ך荁ַ Bezos5.Steve Yegge Google
ُؕؠٞئ٭لتס荁ַכ׆API
ُؕؠٞئ٭لتס荁ַכ׆˝ 邾丗סؓوٛآ٭ب٘٤ך⺱⭚杼㲔逷䑒釐ֿםׂם˝ ❆ֻף鵟湳ُؕؠٞئ٭لتכյ二ַؓوٛآ٭ب٘٤ךעאסُؕؠٞئ٭لتסٛؠؙتعדׄך鵟湳ֿך׀˝ ٚؕهٚٛך⺱׆כֿ⺎耆כַֻף⺎耆דֿյ銧鏤窜םלֿ㰆㏇םַסֿَؕ٤ع˝ ُؕؠٞئ٭لتׇכמز٭ّ⮉׆כֿך׀˝ 鵟湳םלْ٤طػ٤ت㓹泅ز٭ّםל
ُؕؠٞئ٭لتסחַכ׆1 web2 20⾒⾒
ם僃鲣孱车זיַ־ProtocolBu er gRPC GraphQL OpenAPI/
עיםכُؕؠٞئ٭لت˝ עיםךُؕؠٞئ٭لت⮵榫יַױ˝ 鐐ꄋئ٭لت˝ هٞءذء˝ 嚀危㰢綗˝ ز٭ّꝴךסظ٭ذס˝ ؓوٛآ٭ب٘٤ُؕؠٞئ٭لتדׄך啶䡗יַכַֹյ釐碛釐碛ُؕؠٞئ٭لتיַ˝ ؓوٛآ٭ب٘٤舅⛮עٓؿٛت┊㴩מ鷞榫יַ◄ֿ㛡ַ
ٓؿٛت( ) 1....WAF(WebApplicationFramework)
ٓؿٛت111 1 DBDB
ٓؿٛت1DB
vsCI/CD2
11
ُؕؠٞئ٭لتס睦䈱?No/
㗞槡טׄגؤ٤ط؞تعDDDDB
磵⺬ꄆ邾/...
ُؕؠٞئ٭لتכظ٭ذ畘杼˝ ظ٭ذي٭ت┕סظ٭ذյُؕؠٞئ٭لتׇכמ斻玮י䧏ח׀˝ ظ٭ذي٭ت⪦僗כյ㗞槡טׄגؤ٤ط؞تعכַֹ䙫⽏ךֵױ荁ׂםַ˝ ظ٭ذي٭ت邾丗סُؕؠٞئ٭لتך⪦僗כյظ٭ذي٭تֿ磵㷀ⶡ┉꤃㲹憠מם˝ ت؞٭ُ⪦僗יַג㕙⺬յֵئ٭لتך㚺催ⱶֻכ☽ئ٭لت㚺催מ鴑䏼䑒釐ֵֿ˝ ُؕؠٞئ٭لتׇכמ鸵⮉םظ٭ذي٭ت鹟䥃ך׀⮵憠ֵ˝ ج؞ٖٛطؔ鈝憠鵭䈱鈝憠םלյ喋չ
ُؕؠٞئ٭لتכظ٭ذ畘杼
?NoAPI GateWayAPI PC API APIDBDB 1
ئ٭لتي٭تؓ٭؞طؠزٔDBDB
ُؕؠٞئ٭لتס⮆Ⱏ
ُؕؠٞئ٭لتס⮆Ⱏ˝ ُؕؠٞئ٭لت⛼זיַׂ꤀ע䑒յُؕؠٞئ٭لتס鞊ⳉ婊㲊⛼哅ֿ䑒釐מם˝ ُؕؠٞئ٭لتס⮆Ⱏ˝ ⪮⛮氳ם⮆Ⱏ亠嫎釤⯥מյُؕؠٞئ٭لتס⯥䬠䤰ֻיֽ׀ױֹ
ُؕؠٞئ٭لتס⯥䬠DB
8Fallacies of distributed computing ( 8 / )- 19941.2.3.4.5.6. 17.8.
⺎鈝峮䓪web/(Observability)
⺎鈝峮䓪mackerel
ُؕؠٞئ٭لتס⮆Ⱏُؕؠٞئ٭لتס⮆Ⱏע荇չ孱孬ֿ㰆㏇....--僃鲣ךע⮆Ⱏ䣆Ⲃׄص٭ٜםלֿꝧ氦חחֵ
哅ⳉמ⮆Ⱏ˝ 鏀錞˝ よ⿁辐炐٬吾碟˝ 鐐ꄋ˝ ㏇䈻澬鏀˝ ⭳蕔⛼哅˝ 鑁姲
哅ⳉמ⮆Ⱏ˝ ٗ٭ا٭ֿאא樟ם㗞槡˝ ٗ٭ا٭ע⺱דֿյ姲״סֿ樟ם㗞槡
哅ⳉמ⮆Ⱏ/
㗞槡טׄגؤ٤ط؞تعמ⮆ⰟDDDDDDDDD
㗞槡טׄגؤ٤ط؞تعמ⮆Ⱏ(Entity Trap)---- DB ORM
ؕطٝ٭طؔهמ䷉ャ1
攐䓪מ⮆Ⱏ/( )1(Availability)(Continuity)(Performance) //
攐䓪מ⮆Ⱏײׂמُؕؠٞئ٭لت縒ֻ⯥מյױע㵚霄סئ٭لت⮆冪յלסֹםغْؕ٤⣐ꪫֵֿ־釤哕״ױֹ/
❆ֻףج؞ٖٛطؔ˝ ج؞ٖٛطؔמꄆ釐םظ٭ذ䣽ֹסעئ٭لتכי⮉⭳ױֹ˝ 斻玮גظ٭ذي٭ت˝ ❆ֻף鵟䅻סئ٭لتכ鐐ꄋئ٭لت⮆ꦕםל˝ ⮯סئ٭لتכס鵟⟓ס倊⺘吾鋀ױֹ
❆ֻף⫋⮵榫䓪˝ ؓؗ٤ع㓹泅鵟湳յ婊岷嚀耆םל˝ ⺱ؓؗ٤عך邾丗סئؕعמٞءؕ٤גַ˝ 婊岷嚀耆ע䄄丗ֿ־־סךյُؕؠٞئ٭لتי⪦鵟㓹泅מיֽ׀גַ˝ 邾丗סئ٭لتך⮵榫ך׀־לֹ־
ُؕؠٞئ٭لتס⮆Ⱏ˝ 釤י׀ג喋מُؕؠٞئ٭لتס⮆Ⱏ縒ֻכ׆ךע喋չם鈝憠ֵֿ˝ 塜鉮ֿ扛ַ┩槡םסךյ喋չםססعٝ٭غ؛ن縒䜡םֿ錃銶ֹ˝ 僃䖾ם錃銶ך扛ׄףؕطٝ٭طؔهמ䷉ャ◄ֿך׀˝ ☽ס⣐ꪫכיظ٭ذס䣽ַמ浓泘׆כֵ
ُؕؠٞئ٭لتסوٚؠطؔت˝ ُؕؠٞئ٭لتמֽׄظ٭ذס䣽ַ˝ ئ٭لتꝴ鵟⟓˝ ئ٭لتْشبٖ˝ ُؕؠٞئ٭لتסٛٛ٭تכٛنؒؠذٛ٤ء
ُؕؠٞئ٭لتמֽׄظ٭ذס䣽ַ
DB11 DBto DB
CAP BASE3 2C: Consistency ( )A: Availability (P: Tolerance to network Partitions ( )( )CAPBASEBasically Available( )Soft state( )Eventually consistent( )
ُؕؠٞئ٭لتכ⮆丆عٚ٤اؠب٘٤!ئ٭لتױג׃عٚ٤اؠب٘٤עםַ1
אך⮆丆عٚ٤اؠب٘٤גַ2SagaTCC
SagaT , T , T C , C , C:
Saga: AWShttps://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/modernization-data-persistence/saga-pattern.html
TCCTry/Con rm/Cancelײ؆ם荁ׄף⟊㰆յ鐍־ד״ם؞ٔ٤جٜ
TCCTryCancelTryCon rmCon rm Cancel
TCC˝ אבסئ٭لتמ◅㍑חٛؠؙتعֿ䑒釐˝ ع٭ذٜך侇ꝴֿ־־׆כֿؾشؠ
DB?...ADR
睦䈱縒ֻ泡גֹֿ荁ַ侇11
ئ٭لتꝴ鵟⟓
ئ٭لتꝴ鵟⟓schema rst
⫴璡䓪11 1/payment {"amount":300, "userAccount": "hoge"} /paymentID/payment {"amount":300, "userAccount": "hoge","forPurchase": "abcd123"}forPurchaseforPurchase
ئ٭لتْشبٖ
ُؕؠٞئ٭لتס畘杼˝ ؓوٛآ٭ب٘٤ע邾ꥭםئ٭لت紮סױ˝ ؓوٛآ٭ب٘٤⟥渏י釤亠嫎ֿ培ַ˝ ئ٭لتꝴס❣㰆꞊➟˝ 泃釱٬ٞءס⹜˝ ئؕغ٭قذ٭٤ֿ㛡ׂ⮵榫
ُؕؠٞئ٭لتס畘杼˝ ꤃㲹氦榟侇ס鐧削˝ ⠕չסئ٭لتꯂ樑מ釤יַׂכ侇ꝴֿ־־˝ ئ٭لتꝴס鵟⟓畘杼♓┕מ׆כֵֿאֹ
ئؕغ٭قذ٭٤mackerel-container-agent
ئ٭لتْشبٖproxyproxyip
ئ٭لتْشبٖס䏔ⰟA B
ئ٭؞شعهٝ٭٭Istio
ظ٭ذوٝ٭٤כؤ٤عٞ٭ٜوٝ٭٤˝ ظ٭ذوٝ٭٤˝ ⺨ئ٭لتמ㳝岣זיⳂׂوٞ؞ب˝ 鵟⟓ס⯆䐒כ䗯㕔ס⹜˝ ىٜتزؘشؠ鏀錞٬鏀⺎םל车ֹ˝ ْعٛشؠٞء⹜յؤ٤عٞ٭ٜوٝ٭٤峚
ظ٭ذوٝ٭٤כؤ٤عٞ٭ٜوٝ٭٤˝ ؤ٤عٞ٭ٜوٝ٭٤˝ ظ٭ذوٝ٭٤סؕ٤تذ٤تס畘杼˝ ⺨ئ٭لتסْعٛشؠٞء⹜˝ 啶䡗畘杼٬⺨牊رشبٍٖ٭غ
Envoyhttps://www.envoyproxy.io/Lyft C++ LL HTTPHTTP, gRPC, WebSocket, TCP( )
IstioIstiodsidecar injectionEnvoyEnvoy
ُؕؠٞئ٭لتסٛٛ٭ت亠嫎API versioning/ API
壿꣪氳מت؞٭ُסٛنؒؠذٛ٤ءGraphQLgRPC
催מ㰢שמעCloudNativeCNCF Cloud Native Interactive LandscapeThe Amazon Builders' Librarymicroservicemicroservice - . oO( ( l _ l) )Sam Newman 2016Susan J. Fowler 2017Neal Ford, Rebecca Parsons, Patrick Kua 2018Sam Newman 2020Microservice Architecture
ױכ״˝ ُؕؠٞئ٭لتע邾丗סئ٭لتֿ鵟⟓מזי鵽䯥י䡗玮חؓ٭؞طؠزٔ˝ ُؕؠٞئ٭لتס⮆Ⱏ亠嫎ע喋չם䣆嫎ֵֿ˝ ُؕؠٞئ٭لتעؕطٝ٭طؔهמ䷉ャ禈ׄ׆כֿꄆ釐˝ ئ٭لتْشبٖםלסوٚؠطؔت⪌יַ׆ֹ
זיײֹסؤ٭ػ٭
: Istioistioctl installistioctl install !"set profile=demo !"contexthatena-intern-2021kubectl label namespace hatena-intern-2021 istio-injection=enabledkubectl get namespace hatena-intern-2021 -o yamlistio-injection enabled
: Istiokubectl apply -f https:!"raw.githubusercontent.com/istio/istio/release-1.7/samples/addons/kiali.yaml Kialikubectl apply -f https:!"raw.githubusercontent.com/istio/istio/release-1.7/samples/addons/prometheus.yamlPrometheusapplicationistioctl dashboard kialisign in admin:admin
Kiali
: fault injection攐㲊ס嚀耆מ䙫㍲氳מ䷚꤃氦榟י䏅ꮶ疗㍱鐧ױInjecting an HTTP abort fault renderer service( Service Temporarily Unavailable)fault %ageKiali applicationblog service error message istio-proxylog "authority": "renderer-go:50051"response_flags
: fault injectionrenderer service response 5Kiali applicationistio-proxy log response_flagskubectl deletevirtualservices.networking.istio.io [໊લ] faultinjection