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

Spring Bootで実装とインフラをこれでもかと分離するための試み

Spring Bootで実装とインフラをこれでもかと分離するための試み

JJUG Night Seminar (2025-04-17)

Shin Tanimoto

April 17, 2025
Tweet

More Decks by Shin Tanimoto

Other Decks in Technology

Transcript

  1. Spring Boot + Spring CloudΛ࢖ͬͯϚΠΫϩαʔϏε։ൃΛ͢Δ͜ͱ਺೥ ΞϓϦέʔγϣϯྖҬ಺ʹؔ৺ࣄ͕૿͍͑ͯͬͨ ໰୊ҙࣝͷഎܠ Spring Cloud Eureka

    Spring Cloud Stream Spring Cloud Sleuth ผͷSpring Boot ϚΠΫϩαʔϏε RabbitMQ Zipkin Spring Boot ΞϓϦέʔγϣϯྖҬ
  2. Spring Boot͚ͩ࢖ͬͯɺͦΕҎ֎͸Ͱ͖Δ͚ͩ֎෦ʹ͍࣋ͬͯ͜͏ ໰୊ҙࣝͷഎܠ Spring Cloud Eureka Spring Cloud Stream Spring

    Cloud Sleuth ผͷSpring Boot ϚΠΫϩαʔϏε RabbitMQ Zipkin Spring Boot ΞϓϦέʔγϣϯྖҬ
  3. ΞϓϦέʔγϣϯྖҬ 1. ઃఆϑΝΠϧͷྲّྀ ։ൃ؀ڥ༻ ઃఆϑΝΠϧ Spring Boot ͦΕͧΕͷ؀ڥ ઀ଓ ࣮ߦ

    ্ॻ͖ ؀ڥʹؔ͢Δ৘ใΛ֎͔Β༩͑Δ͜ͱͰɺ࣮࣭తʹΠϯϑϥˠΞϓϦͷҰํతͳࢀরʹͳΔ
  4. ࣮૷ଆͰ͸ @Value ΍ @Con f igurationProperties Λ࢖ͬͯઃఆ஋Λར༻͢Δ @Value("${myApp.urls.serviceB}") String baseUrlServiceB;

    restClient.get() .baseUrl(baseUrlServiceB) .retrieve() .body(String.class); 2. HTTP઀ଓͷྲّྀ
  5. Spring Cloud StreamΛ࢖ͬͨ৔߹ 3. Ωϡʔ઀ଓͷྲّྀ ΞϓϦέʔγϣϯ1 Spring Cloud Stream Spring

    Boot RabbitMQͳͲ ΞϓϦέʔγϣϯ2 Spring Cloud Stream Spring Boot ΤϯΩϡʔ σΩϡʔ
  6. ΩϡʔΛ༻͍ͨඇಉظॲཧʹ͓͍ͯɺSpring Cloud Stream͸ݶΓͳ͘ਖ਼ղʹ͔ۙͬͨ RabbitMQ / Ka f ka / Pulser

    / Google PubSub / Azure Event Hubs / AWS SNS ͳͲ ࢖͍ͬͯΔϛυϧ΢ΣΞΛҙࣝͤͣʹ࣮૷͕Ͱ͖Δʢઃఆ͚ͩͰٵऩͰ͖Δʣ ૹ৴ଆɾड৴ଆ͕ࣗ਎ͷؔ৺ࣄͷΈهड़͢Ε͹ྑ͍ destination ͱ group Λ༻͍ͨఆ͕ٛඇৗʹ෼͔Γ΍͘͢ૉ੖Β͍͠ 3. Ωϡʔ઀ଓͷྲّྀ
  7. ΩϡʔΛ༻͍ͨඇಉظॲཧʹ͓͍ͯɺSpring Cloud Stream͸ݶΓͳ͘ਖ਼ղʹ͔ۙͬͨ Spring Cloud Stream 2.x ͔Β 3.x ʹͳͬͯAPI΍ઃఆ͕෼͔ΓͮΒ͘ͳͬͨ

    Spring CloudϑΝϛϦʔͳͷͰΞοϓσʔτͰ೉ّͦ͠͏ͳݒ೦͕͋Δ ʢफ೿࣍ୈ͕ͩʣݸผͷΞϓϦέʔγϣϯ͕ؔ৺ࣄΛهड़͢Δ͜ͱͰఆٛ͢Δ෼ γεςϜશମͱͯ͠ɺԿ͕Ͳ͜ʹӨڹͯ͠ඇಉظॲཧ͕૸Δ͔ͷݟ௨͕͠ѱ͍ 3. Ωϡʔ઀ଓͷྲّྀ
  8. Spring AMQP΍Spring Ka f ka͸ѱ͘ͳ͍΋ͷͷɺؾ͕ར͔ͳ͍෦෼͕͋Δ Spring Cloud Streamʹൺ΂ΔͱɺϩʔϨϕϧAPIʹ͍ۙ Spring Cloud

    Sleuth΍Micrometer TracingͷτϨʔεID఻೻͕ɺσϑΥϧτແޮ ͜ΕΛ։ൃऀΈΜͳʹ࢖ΘͤΔ͜ͱʹɺׂͱ఍߅͕͋Δ RabbitMQ΍Ka f ka͸·ͩ͠΋Amazon SNSΛ࢖͏৔߹ɺ։ൃ؀ڥͰࠔΓ͕ͪ 3. Ωϡʔ઀ଓͷྲّྀ
  9. Spring Cloud Stream΍Spring AMQPΛ࢖͏৔߹Ͱ΋ɺΩϡʔͱͷΤϯυϙΠϯτҎ֎ʹ HTTPΞΫηεͰ͖ΔΤϯυϙΠϯτΛ௥Ճ͢Δ @RabbitListener void onPurchase(PurchaseMessage message) //

    RabbitMQͷϝοηʔδ @Post(“/purchase”) void purchase(PurchaseEvent event) // ϝοηʔδ಺ͷPOJOͷΈ ௨ৗ࣌͸RabbitTemplateͰΤϯΩϡʔ͢Δ͕ ࣗಈςετ࣌ͷΈ RestClient ΍ RestTemplate Ͱ /purchase ʹΞΫηε͢Δ 3. Ωϡʔ઀ଓͷྲّྀ
  10. ๻͕࣋ͭσʔλϕʔεͷΠϝʔδ 4. DB઀ଓͷྲّྀ ΞϓϦέʔγϣϯ1 σʔλετΞ Spring Boot ΞϓϦέʔγϣϯ2 σʔλετΞ Spring

    Boot ΫΤϦ ΫΤϦ ※͋͘·Ͱ΋ந৅֓೦తͳଊ͑ํͰ͋Γ ɹ࣮ࡍʹΞϓϦέʔγϣϯϓϩηεͱ ɹσʔλετΞͷϓϩηεΛಉډͤ͞Δ ɹΘ͚Ͱ͸͋Γ·ͤΜ
  11. Pushܕ - ϥΠϒϥϦ 5. ΞϓϦέʔγϣϯ؂ࢹͷྲّྀ ΞϓϦέʔγϣϯ1 micrometer-tracing- bridge-brave Spring Boot

    Zipkin ΞϓϦέʔγϣϯ2 micrometer-tracing- bridge-brave Spring Boot ૹ৴ ૹ৴
  12. Pushܕ - ΤʔδΣϯτ 5. ΞϓϦέʔγϣϯ؂ࢹͷྲّྀ ΞϓϦέʔγϣϯ1 Elastic APM Spring Boot

    Zipkin ΞϓϦέʔγϣϯ2 Elastic APM Spring Boot ૹ৴ ૹ৴ ऩू ऩू
  13. OTLPͱOtel CollectorΛ࢖ͬͨ৔߹ 5. ΞϓϦέʔγϣϯ؂ࢹͷྲّྀ ΞϓϦέʔγϣϯ1 micrometer-registry- otlp Spring Boot Otel

    Collector ΞϓϦέʔγϣϯ2 micrometer-registry- otlp Spring Boot OTLPૹ৴ OTLPૹ৴ DatadogɺAWSͳͲ ೚ҙͷϓϩτίϧ