Share
Embed
Transcript
76 slides
-
୩ຊ ৺ (Shin Tanimoto) EverforthɺAcroquest Technologyͷ2ࣾͰಇ͘ΤϯδχΞ Java ChampionɺOracle ACEɺJJUGද ஶॻʮJavaຊ֨ೖʯ
झຯϕϏϝλͷϥΠϒͱϑΝϯΧϜࡱӨ Twitter - @cero_t ࣗݾհ -
ΞϓϦέʔγϣϯྖҬ Spring Boot + Spring CloudΛͬͯϚΠΫϩαʔϏε։ൃΛ͢Δ͜ͱ ΞϓϦέʔγϣϯྖҬʹؔ৺ࣄ͕૿͍͑ͯͬͨ ҙࣝͷഎܠ Spring Cloud
Eureka ผͷSpring Boot ϚΠΫϩαʔϏε Spring Boot -
Spring Boot + Spring CloudΛͬͯϚΠΫϩαʔϏε։ൃΛ͢Δ͜ͱ ΞϓϦέʔγϣϯྖҬʹؔ৺ࣄ͕૿͍͑ͯͬͨ ҙࣝͷഎܠ Spring Cloud Eureka
Spring Cloud Stream ผͷSpring Boot ϚΠΫϩαʔϏε RabbitMQ Spring Boot ΞϓϦέʔγϣϯྖҬ -
Spring Boot + Spring CloudΛͬͯϚΠΫϩαʔϏε։ൃΛ͢Δ͜ͱ ΞϓϦέʔγϣϯྖҬʹؔ৺ࣄ͕૿͍͑ͯͬͨ ҙࣝͷഎܠ Spring Cloud Eureka
Spring Cloud Stream Spring Cloud Sleuth ผͷSpring Boot ϚΠΫϩαʔϏε RabbitMQ Zipkin Spring Boot ΞϓϦέʔγϣϯྖҬ -
Spring Boot͚ͩͬͯɺͦΕҎ֎Ͱ͖Δ͚ͩ֎෦ʹ͍࣋ͬͯ͜͏ ҙࣝͷഎܠ Spring Cloud Eureka Spring Cloud Stream Spring
Cloud Sleuth ผͷSpring Boot ϚΠΫϩαʔϏε RabbitMQ Zipkin Spring Boot ΞϓϦέʔγϣϯྖҬ -
ΞϓϦέʔγϣϯྖҬ ڥͷ͜ͱΛΞϓϦέʔγϣϯͷ࣮ઃఆϑΝΠϧ͕୲͏ ҙࣝͷഎܠ ։ൃڥ༻ ઃఆϑΝΠϧ ςετڥ༻ ઃఆϑΝΠϧ ӡ༻ڥ༻ ઃఆϑΝΠϧ ։ൃڥ
ςετڥ ӡ༻ڥ Spring Boot ଓ ଓ ଓ ࣮ߦ ࣮ߦ ࣮ߦ -
ΞϓϦέʔγϣϯྖҬ ڥͷ͜ͱΛΞϓϦέʔγϣϯͷ࣮ઃఆϑΝΠϧ͕୲͏ͷɺ࣮࣭తͳʮ૬ޓࢀরʯ ҙࣝͷഎܠ ։ൃڥ༻ ઃఆϑΝΠϧ ςετڥ༻ ઃఆϑΝΠϧ ӡ༻ڥ༻ ઃఆϑΝΠϧ ։ൃڥ
ςετڥ ӡ༻ڥ Spring Boot ଓ ଓ ଓ ࣮ߦ ࣮ߦ ࣮ߦ -
աܹͳͷͰ ʮapplication.yaml ʹ։ൃڥͷઃఆͷΈΛೖΕͯ ɹͦΕҎ֎ͷ application-test.yaml application-prod.yaml Έ͍ͨͳͷ ɹܾͯ͠࡞Δ͖Ͱͳ͍ʯ ͱ͍͏͕͋Γ·͢
Spring BootͷϓϩϑΝΠϧػೳʢ—spring.pro f iles.active=devͱ͔ʣېࢭͰ͢ 1. ઃఆϑΝΠϧͷྲّྀ -
ΞϓϦέʔγϣϯྖҬ 1. ઃఆϑΝΠϧͷྲّྀ ։ൃڥ༻ ઃఆϑΝΠϧ Spring Boot ͦΕͧΕͷڥ ଓ ࣮ߦ
্ॻ͖ ڥʹؔ͢ΔใΛ֎͔Β༩͑Δ͜ͱͰɺ࣮࣭తʹΠϯϑϥˠΞϓϦͷҰํతͳࢀরʹͳΔ -
࣮ଆͰ @Value @Con f igurationProperties ΛͬͯઃఆΛར༻͢Δ @Value("${myApp.urls.serviceB}") String baseUrlServiceB;
restClient.get() .baseUrl(baseUrlServiceB) .retrieve() .body(String.class); 2. HTTPଓͷྲّྀ -
ΩϡʔΛ༻͍ͨඇಉظॲཧͰར༻͢Δٕज़ղ Spring Cloud Stream Spring AMQPSpring Ka f kaͳͲ DaprͳͲͷαΠυΧʔ
ࣗͰ࡞ΔϝοηʔδϯάαʔϏε 3. Ωϡʔଓͷྲّྀ -
Spring Cloud StreamΛͬͨ߹ 3. Ωϡʔଓͷྲّྀ ΞϓϦέʔγϣϯ1 Spring Cloud Stream Spring
Boot RabbitMQͳͲ ΞϓϦέʔγϣϯ2 Spring Cloud Stream Spring Boot ΤϯΩϡʔ σΩϡʔ -
ΩϡʔΛ༻͍ͨඇಉظॲཧʹ͓͍ͯɺSpring Cloud StreamݶΓͳ͘ਖ਼ղʹ͔ۙͬͨ RabbitMQ / Ka f ka / Pulser
/ Google PubSub / Azure Event Hubs / AWS SNS ͳͲ ͍ͬͯΔϛυϧΣΞΛҙࣝͤͣʹ࣮͕Ͱ͖Δʢઃఆ͚ͩͰٵऩͰ͖Δʣ ૹ৴ଆɾड৴ଆ͕ࣗͷؔ৺ࣄͷΈهड़͢Εྑ͍ destination ͱ group Λ༻͍ͨఆ͕ٛඇৗʹ͔Γ͘͢ૉΒ͍͠ 3. Ωϡʔଓͷྲّྀ -
ΩϡʔΛ༻͍ͨඇಉظॲཧʹ͓͍ͯɺSpring Cloud StreamݶΓͳ͘ਖ਼ղʹ͔ۙͬͨ Spring Cloud Stream 2.x ͔Β 3.x ʹͳͬͯAPIઃఆ͕͔ΓͮΒ͘ͳͬͨ
Spring CloudϑΝϛϦʔͳͷͰΞοϓσʔτͰّͦ͠͏ͳݒ೦͕͋Δ ʢफ࣍ୈ͕ͩʣݸผͷΞϓϦέʔγϣϯ͕ؔ৺ࣄΛهड़͢Δ͜ͱͰఆٛ͢Δ γεςϜશମͱͯ͠ɺԿ͕Ͳ͜ʹӨڹͯ͠ඇಉظॲཧ͕Δ͔ͷݟ௨͕͠ѱ͍ 3. Ωϡʔଓͷྲّྀ -
Spring AMQPΛͬͨ߹ 3. Ωϡʔଓͷྲّྀ ΞϓϦέʔγϣϯ1 Spring AMQP Spring Boot RabbitMQ
ΞϓϦέʔγϣϯ2 Spring AMQP Spring Boot ΤϯΩϡʔ σΩϡʔ -
Spring AMQPSpring Ka f kaѱ͘ͳ͍ͷͷɺؾ͕ར͔ͳ͍෦͕͋Δ Spring Cloud StreamʹൺΔͱɺϩʔϨϕϧAPIʹ͍ۙ Spring Cloud
SleuthMicrometer TracingͷτϨʔεID͕ɺσϑΥϧτແޮ ͜ΕΛ։ൃऀΈΜͳʹΘͤΔ͜ͱʹɺׂͱ߅͕͋Δ RabbitMQKa f ka·ͩ͠Amazon SNSΛ͏߹ɺ։ൃڥͰࠔΓ͕ͪ 3. Ωϡʔଓͷྲّྀ -
DaprͷΑ͏ͳαΠυΧʔΛ༻͍ͨ߹ 3. Ωϡʔଓͷྲّྀ ΞϓϦέʔγϣϯPod1 αΠυΧʔ ʢDaprͳͲʣ Spring Boot RabbitMQͳͲ HTTP
ΞϓϦέʔγϣϯPod2 αΠυΧʔ ʢDaprͳͲʣ Spring Boot HTTP ΤϯΩϡʔ σΩϡʔ -
αΠυΧʔίϯςφΛ༻͍ͨ߹ 3. Ωϡʔଓͷྲّྀ ΞϓϦέʔγϣϯ1 αΠυΧʔίϯςφ Spring Boot RabbitMQͳͲ ΞϓϦέʔγϣϯ2 αΠυΧʔίϯςφ
Spring Boot ΤϯΩϡʔ σΩϡʔ HTTP HTTP -
ࣗͰ࡞ΔϝοηʔδϯάαʔϏεΛ༻͍ͨ߹ 3. Ωϡʔଓͷྲّྀ ΞϓϦέʔγϣϯ1 ϝοηʔδϯάαʔϏε Spring Boot RabbitMQͳͲ ΞϓϦέʔγϣϯ2 Spring
Boot ΤϯΩϡʔ σΩϡʔ HTTP HTTP -
ࣗಈςετͷ࣌ʹݶΓɺಉظ௨৴ʹ͢Δ 3. Ωϡʔଓͷྲّྀ ΞϓϦέʔγϣϯ1 αΠυΧʔίϯςφ Spring Boot RabbitMQͳͲ ΞϓϦέʔγϣϯ2 αΠυΧʔίϯςφ
Spring Boot ΤϯΩϡʔ σΩϡʔ HTTP HTTP ςετ࣌ͷHTTP௨৴ઌ -
Spring Cloud StreamSpring AMQPΛ͏߹ͰɺΩϡʔͱͷΤϯυϙΠϯτҎ֎ʹ HTTPΞΫηεͰ͖ΔΤϯυϙΠϯτΛՃ͢Δ @RabbitListener void onPurchase(PurchaseMessage message) //
RabbitMQͷϝοηʔδ @Post(“/purchase”) void purchase(PurchaseEvent event) // ϝοηʔδͷPOJOͷΈ ௨ৗ࣌RabbitTemplateͰΤϯΩϡʔ͢Δ͕ ࣗಈςετ࣌ͷΈ RestClient RestTemplate Ͱ /purchase ʹΞΫηε͢Δ 3. Ωϡʔଓͷྲّྀ -
͕࣋ͭσʔλϕʔεͷΠϝʔδ 4. DBଓͷྲّྀ ΞϓϦέʔγϣϯ1 σʔλετΞ Spring Boot ΞϓϦέʔγϣϯ2 σʔλετΞ Spring
Boot ΫΤϦ ΫΤϦ ※͋͘·Ͱந֓೦తͳଊ͑ํͰ͋Γ ɹ࣮ࡍʹΞϓϦέʔγϣϯϓϩηεͱ ɹσʔλετΞͷϓϩηεΛಉډͤ͞Δ ɹΘ͚Ͱ͋Γ·ͤΜ -
ΞϓϦέʔγϣϯࢹͷͨΊͷใʢϝτϦΫεɺϩάɺτϨʔεʣͷऩूํ๏ෳ͋Δ Pullܕ - ֎෦ͷαʔϏε͕ऩूʹདྷΔʢPrometheusͳͲʣ Pushܕ ϥΠϒϥϦ - ΞϓϦέʔγϣϯͷϥΠϒϥϦ͕ऩूͯ͠ૹ৴͢ΔʢbraveͳͲʣ ΤʔδΣϯτ -
ΞϓϦέʔγϣϯͱผͷϓϩηεͰऩूͯ͠ૹ৴͢ΔʢAPMͳͲʣ 5. ΞϓϦέʔγϣϯࢹͷྲّྀ -
Pullܕ 5. ΞϓϦέʔγϣϯࢹͷྲّྀ ΞϓϦέʔγϣϯ1 micrometer-registry- prometheus Spring Boot Prometheus ΞϓϦέʔγϣϯ2
micrometer-registry- prometheus Spring Boot ऩू ऩू -
Pushܕ - ϥΠϒϥϦ 5. ΞϓϦέʔγϣϯࢹͷྲّྀ ΞϓϦέʔγϣϯ1 micrometer-tracing- bridge-brave Spring Boot
Zipkin ΞϓϦέʔγϣϯ2 micrometer-tracing- bridge-brave Spring Boot ૹ৴ ૹ৴ -
Pushܕ - ΤʔδΣϯτ 5. ΞϓϦέʔγϣϯࢹͷྲّྀ ΞϓϦέʔγϣϯ1 Elastic APM Spring Boot
Zipkin ΞϓϦέʔγϣϯ2 Elastic APM Spring Boot ૹ৴ ૹ৴ ऩू ऩू -
OTLPΛͬͨ߹ 5. ΞϓϦέʔγϣϯࢹͷྲّྀ ΞϓϦέʔγϣϯ1 micrometer-registry- otlp Spring Boot GrafanaͳͲ ΞϓϦέʔγϣϯ2
micrometer-registry- otlp Spring Boot OTLPૹ৴ OTLPૹ৴ -
OTLPͱOtel CollectorΛͬͨ߹ 5. ΞϓϦέʔγϣϯࢹͷྲّྀ ΞϓϦέʔγϣϯ1 micrometer-registry- otlp Spring Boot Otel
Collector ΞϓϦέʔγϣϯ2 micrometer-registry- otlp Spring Boot OTLPૹ৴ OTLPૹ৴ DatadogɺAWSͳͲ ҙͷϓϩτίϧ