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

なぜ Go はマイクロサービスのための言語なのか - Why Go is a language for microservices

Kohei
July 13, 2019

なぜ Go はマイクロサービスのための言語なのか - Why Go is a language for microservices

Kohei

July 13, 2019
Tweet

More Decks by Kohei

Other Decks in Technology

Transcript

  1. ͳͥ Go ͸ϚΠΫϩαʔϏεͷͨΊͷݴޠͳͷ͔
    Kohei Kimura
    Software Engineer at Nulab Inc.
    @cohhei

    View Slide

  2. ☝ࠓ೔Ұ൪ݴ͍͍ͨ͜ͱ☝

    View Slide

  3. εϙϯαʔηογϣϯͰ͸
    ͋Γ·ͤΜ
    ※ͪΌΜͱϓϩϙʔβϧॻ͖·ͨ͠ɻ΄Ίͯɻ

    View Slide

  4. SIerɺࠃ಺Ϋϥ΢υϕϯμʔΛܦͯ2018೥1݄ Nulab ೖࣾ
    Cacoo νʔϜͷόοΫΤϯυΤϯδχΞ
    ։ൃݴޠ ΄΅ ≡, ·Εʹ Java, Node.js
    ొஃ࣮੷
    Kubernetes Meetup Tokyo #14
    CloudNative Days Fukuoka 2019
    AWS Summit Osaka
    Kohei Kimura
    @cohhei

    View Slide

  5. Ϋϥ΢υωΠςΟϒ΍ͬͯ·͔͢ʁ

    View Slide

  6. Ϋϥ΢υωΠςΟϒͱ͸
    εέʔϥϒϧͳΞϓϦέʔγϣϯΛߏங͓Αͼ࣮ߦ͢ΔͨΊͷٕज़ͷ૯শ
    ୅දతͳٕज़: ίϯςφɺαʔϏεϝογϡɺϚΠΫϩαʔϏεɺ
    ΠϛϡʔλϒϧΠϯϑϥετϥΫνϟɺએݴܕAPI
    ճ෮ੑʢresilientʣɺ؅ཧ͠΍͢͞ʢmanageableʣɺՄ؍ଌੑ
    ʢobservableʣ͕ಘΒΕΔ

    View Slide

  7. ίϯςφɺCI/CDɺΦʔέετϨʔ
    γϣϯ…
    ͑ɺαʔϏεϓϩΩγɾϝογϡɾ
    σΟεΧόϦʔͰ΍ͬͱ൒෼ʁ
    ಓͷΓ͸௕͍…

    View Slide

  8. View Slide

  9. Ϋϥ΢υωΠςΟϒ͸প

    View Slide

  10. https://www.youtube.com/watch?v=1qVj1vXbuX0
    ෳࡶɺ৑௕
    ॲཧͷݪ࢝ੑɺҰ؏ੑͷ೉͠͞
    ؅ཧίετͷ૿େ

    View Slide

  11. ࠓ೔ͷ࿩ɿ ͸͍͍ͧ

    View Slide

  12. View Slide

  13. Go ͕ Google Ͱੜ·ΕͨܦҢ
    ແ਺ͷϋʔυ΢ΣΞɺແ਺ͷιϑτ΢ΣΞ
    Լ͕Γଓ͚Δ։ൃޮ཰ʹର߅͢Δ

    View Slide

  14. "Go was designed by and for people who write
    —and read and debug and maintain—large
    software systems."
    Rob Pike, Go at Google

    View Slide

  15. ͳͥ Go ͸ϚΠΫϩαʔϏεͷͨΊͷݴޠͳͷ͔
    https://blog.docker.com/2019/02/weve-got-❤%EF%B8%8F-for-our-first-batch-of-dockercon-speakers/
    ཧ༝: Ϋϥ΢υωΠςΟϒͱͷ
    ૬ੑ͕ʮ͹ΓΑ͔ʯ
    γϯάϧόΠφϦɺߴ଎ͳϏϧυɺলϝϞϦ

    View Slide

  16. Docker and Go

    View Slide

  17. FROM golang:1.7.3
    WORKDIR /go/src/github.com/alexellis/href-counter/
    RUN go get -d -v golang.org/x/net/html
    COPY app.go .
    RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
    FROM alpine:latest
    RUN apk --no-cache add ca-certificates
    WORKDIR /root/
    COPY --from=0 /go/src/github.com/alexellis/href-counter/app .
    CMD ["./app"]
    ΈΜͳ͍͖ͩ͢
    multi-stage builds

    View Slide

  18. FROM golang:1.7.3
    WORKDIR /go/src/github.com/alexellis/href-counter/
    RUN go get -d -v golang.org/x/net/html
    COPY app.go .
    RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
    FROM alpine:latest
    RUN apk --no-cache add ca-certificates
    WORKDIR /root/
    COPY --from=0 /go/src/github.com/alexellis/href-counter/app .
    CMD ["./app"]
    ΈΜͳ͍͖ͩ͢
    multi-stage builds
    Ϗϧυ༻ͷεςʔδ

    View Slide

  19. FROM golang:1.7.3
    WORKDIR /go/src/github.com/alexellis/href-counter/
    RUN go get -d -v golang.org/x/net/html
    COPY app.go .
    RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
    FROM alpine:latest
    RUN apk --no-cache add ca-certificates
    WORKDIR /root/
    COPY --from=0 /go/src/github.com/alexellis/href-counter/app .
    CMD ["./app"]
    ΈΜͳ͍͖ͩ͢
    multi-stage builds
    ࣮ߦ༻ͷεςʔδ
    Go ͸Πϯετʔϧ͞Ε͍ͯͳ͍
    Ϗϧυ༻ͷεςʔδ͔Β
    ϑΝΠϧΛίϐʔ

    View Slide

  20. Observability and Go

    View Slide

  21. Clients
    Server Side
    ࡶͳ Microservices
    Ͳ͜ͰԿ͕͓͖ͯΔ͔
    Θ͔Βͳ͍໰୊

    View Slide

  22. Observability
    Metrics
    Trasing Logging

    View Slide

  23. View Slide

  24. Ұ൪͸͡Ίʹ͖ͯΔ͎ʙʂ
    (” ՞ਊ ՞)”řŐŖŘ!!

    View Slide

  25. https://zipkin.apache.org

    View Slide

  26. Observability
    Metrics
    Trasing Logging

    View Slide

  27. View Slide

  28. https://prometheus.io/

    View Slide

  29. (” ՞ਊ ՞)”řŐŖŘ!!
    https://prometheus.io/

    View Slide

  30. https://prometheus.io/docs/guides/go-application/

    View Slide

  31. ʢΞϓϦଆ͸ʣಋೖ͕؆୯
    ࢓૊Έ͕Ͱ͖Ε͹௥Ճɾߋ৽΋ൺֱత؆୯
    πʔϧΛऔΓೖΕΔ͜ͱͰϕετϓϥΫςΟεΛ
    ͱΓ͜Ή

    View Slide

  32. gRPC and Go

    View Slide

  33. ΦʔϓϯιʔεͷRPCϑϨʔϜϫʔΫ
    RPC = Remote Procedure Call
    ΠϯλʔϑΣʔεΛ Protocol Buffers Ͱࣗಈੜ੒
    ҟͳΔݴޠͰ࢖༻Մೳ
    HTTP/2
    ૒ํ޲ετϦʔϛϯά

    View Slide

  34. Protocol Buffers Ͱఆٛ
    → ίʔυੜ੒Λ࣮ߦ
    → ΫϥΠΞϯτͱαʔόʔͷΠϯλʔ
    ϑΣʔεɺܕͷίʔυ͕ੜ੒

    View Slide

  35. ৄ͘͠͸ @vvvatanabe ʹฉ͍͍ͯͩ͘͞

    View Slide

  36. ʹ͓͚Δ Proto ϑΝΠϧͱੜ੒ͨ͠ίʔυͷ؅ཧ

    View Slide

  37. Protofiles
    Git repositories
    Generated code
    Generate
    Webhook
    git push origin develop/
    beta/master
    Protocol Buffers ϑΝΠϧ͸୯ҰͷϦϙδτϦͰ؅ཧ
    ϑΝΠϧ͕ߋ৽͞ΕΔͱ
    → Jenkins ্Ͱ Java ͱ Go ͷίʔυੜ੒
    → ଞϓϩδΣΫτ͸ dep ensure ͳͲͰऔಘ
    Protofilesͱੜ੒͞Εͨίʔυͷϒϥϯν͸Ұக
    Other applications
    Generated code

    View Slide

  38. ·ͱΊ

    View Slide

  39. ͸͍͍ͧ

    View Slide

  40. ͸͍͍ͧ
    ͍͞͝ʹ

    View Slide

  41. Diagram
    ΦϯϥΠϯ௨࿩͠ͳ͕Βڞಉฤू
    ͦͷ৔Ͱࢿྉ࡞੒
    ը໘ڞ༗͸ෆཁ
    ݴޠͰ఻ΘΓʹ͍͘͜ͱ΋ਤͰઆ໌

    View Slide

  42. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ
    ݟ͔͚ͨΒ੠͔͚͍ͯͩ͘͞ɻ
    Kohei Kimura
    Software Engineer at Nulab Inc.
    @cohhei

    View Slide