Spring Cloud JUG Switzerland
-
Upload
agim-emruli -
Category
Software
-
view
188 -
download
5
Transcript of Spring Cloud JUG Switzerland
![Page 1: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/1.jpg)
AGIM EMRULI, ALAIN SAHLIMICROSERVICES MIT SPRING CLOUD
![Page 2: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/2.jpg)
AGIM EMRULI
AGIM.EMRULI@ MIMACOM.COM
ALAIN SAHLI
ALAIN.SAHLI@ MIMACOM.COM
![Page 3: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/3.jpg)
CLOUD
SERVICE REGISTRY,CIRCUIT BREAKER, METRICS
CORE
FRAMEWORK SECURITY GROOVY REACTOR
IO E
XECU
TION
IO F
OUND
ATIO
NGRAILS
FULL STACK, WEB
XD
STREAMS, TAPS, JOBS
BOOT
BOOTABLE, MINIMAL, OPS-READY
BATCH
JOBS, STEPS,READERS, WRITERS
DATA
RELATIONAL DATA NON-RELATIONAL DATA
BIG DATA
INGESTION, EXPORT,ORCHESTRATION, HADOOP
WEB
CONTROLLERS, REST, WEBSOCKET
INTEGRATION
CHANNELS, FILTERS,ADAPTERS, TRANSFORMERS
IO C
OORD
INAT
ION
![Page 4: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/4.jpg)
TOOLBOXFOR DISTRIBUTED SYSTEMS
![Page 5: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/5.jpg)
DISTRIBUTED SYSTEM DEPLOYMENTS@GITHUB
175 DEPLOYMENTS / DAY
![Page 6: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/6.jpg)
NETFLIXSERVICE ORIENTED ARCHITECTURE
![Page 7: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/7.jpg)
SPRING CLOUDINTRODUCTION
Spring Cloud
BusConfig Netflix
AWS
Cloud FoundryCLIConnectors
Starters
![Page 8: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/8.jpg)
Application
CONFIGURATION MANAGEMENTMONOLITHIC VS. DISTRIBUTED
Application
JNDI
Service
ServiceService
Service
Service
![Page 9: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/9.jpg)
Spring Cloud Config
Spring Cloud Config Server
GIT
SVN
File
![Page 10: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/10.jpg)
Config Server
@Configuration@EnableAutoConfiguration@EnableConfigServerpublic class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
![Page 11: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/11.jpg)
Spring Cloud Config Server
Application
Spring Cloud Config Client
Application
Spring Cloud Config Client
Application
Spring Cloud Config Client
![Page 12: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/12.jpg)
Application
Spring Cloud Config Client
@SpringBootApplicationpublic class CustomerApp { public static void main(String[] args) { SpringApplication.run(CustomerApp.class, args); } }
Bootstrap
![Page 13: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/13.jpg)
Spring Cloud Bus
Spring Cloud Config Server
Application
Application
/bus/refresh
AMQP
![Page 14: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/14.jpg)
![Page 15: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/15.jpg)
![Page 16: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/16.jpg)
![Page 17: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/17.jpg)
![Page 18: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/18.jpg)
PATTERNSSTABILITY CAPACITY TRANSPARENCY
![Page 19: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/19.jpg)
SPRING CLOUDNETFLIX
Hystrix
Feign
Zuul
Eureka
Turbine
Ribbon
Service Registry
Circuit Breaker
Stream Aggregator
Load Balancer
Edge Service
HTTP Communication
![Page 20: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/20.jpg)
HYSTRIXCIRCUIT BREAKER
Execute Command
QueuePool
available
Run
Fallback
![Page 21: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/21.jpg)
HYSTRIXBULKHEADS
Tomcat Thread Pool
Th
read
- 1
Service
Service
Service Service
Th
read
- 2
Th
read
- 3
XT
hre
ad -
4
Th
read
- 5
Th
read
- 6
Th
read
- 7
Th
read
- 8
![Page 22: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/22.jpg)
HYSTRIXBULKHEADS
Execute Command
QueuePool
available
Execute Command
QueuePool
available
Execute Command
QueuePool
available
![Page 23: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/23.jpg)
HYSTRIX EXAMPLESERVICE CONSUMER
public class SearchGateway { @HystrixCommand(fallbackMethod = "fallback") public List<SearchHit> search(String query) { return …; } public List<SearchHit> fallback() { return Collections.emptyList(); } }
![Page 24: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/24.jpg)
HYSTRIXTRANSPARENCY
![Page 25: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/25.jpg)
HYSTRIX DASHBOARDEXAMPLE
@EnableCircuitBreaker@EnableHystrixDashboardpublic class HystrixApp { public static void main(String[] args) { SpringApplication.run(HystrixApp.class, args); }}
![Page 26: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/26.jpg)
TURBINEAGGREGATOR
Dashboard
Service
Service
Dashboard
Turbine
Service Service
![Page 27: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/27.jpg)
EUREKASERVICE DISCOVERY
Service
Service
Service
Service
XService
Service
Service
Service
Eu
reka
![Page 28: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/28.jpg)
EUREKA REGISTRATIONEXAMPLE
@SpringBootApplication@EnableDiscoveryClientpublic class CustomerApp { public static void main(String[] args) { SpringApplication.run(CustomerApp.class, args); } }
spring.application.name=customers
![Page 29: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/29.jpg)
EUREKA REGISTRATIONEXAMPLE
Discovery Client
Application
HostPortURI
![Page 30: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/30.jpg)
RIBBONLOAD-BALANCER
Service
Service
Eu
reka
Service
Service
Eu
reka
ServiceService
Load Balancer
![Page 31: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/31.jpg)
RIBBONRESTTEMPLATE INTEGRATION
@Servicepublic class Service { @Autowired @LoadBalanced RestTemplate restTemplate; public String callService() { return restTemplate.getForObject("http://CUSTOMERS/{id}", String.class,"23"); }}
![Page 32: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/32.jpg)
ZUULEDGE-SERVICE
Service
Eu
reka
Edge Proxy
Service
Eu
reka
ServiceService
Load Balancer
Web Browser
Web Browser
![Page 33: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/33.jpg)
ZUULREVERSE PROXY SETUP
@EnableAutoConfiguration@EnableZuulProxypublic class SimpleZuulServerApplication { public static void main(String[] args) { SpringApplication.run(SampleZuulProxyApplication.class, args); } }
http://localhost:9090/customers http://localhost:9090/stores
![Page 34: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/34.jpg)
Web ServerLoad Balancer
Service Discovery
EurekaCustomers Stores
Config Server
Circuit Breaker Dashboard
Browser
![Page 35: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/35.jpg)
![Page 36: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/36.jpg)
SPRING CLOUDAMAZON WEBSERVICES
![Page 37: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/37.jpg)
Instance Meta-data@Componentpublic class ApplicationInfoBean { @Value("${ami-id}") private String amiId; @Value("${hostname}") private String hostname; @Value("${instance-type}") private String instanceType; @Value("${services/domain}") private String serviceDomain; }
![Page 38: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/38.jpg)
Amazon RDS
Schema Design
Query construction / tuning
Availability
Backup & Recovery
Patch Management
Storage Upgrades
![Page 39: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/39.jpg)
Amazon RDS
@EnableRdsInstance( dbInstanceIdentifier = “test", password = “secret", readReplicaSupport = true) public static class AppConfig {}
![Page 40: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/40.jpg)
RDS Instance Support@Servicepublic class JdbcPersonService implements PersonService { private final JdbcTemplate jdbcTemplate; @Autowired public JdbcPersonService(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } @Override @Transactional(readOnly = true) public List<Person> all() { return this.jdbcTemplate.query("SELECT * FROM Person”, … ); } @Override @Transactional public void store(Person person) { this.jdbcTemplate.update("INSERT INTO Person …”); }}
![Page 41: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/41.jpg)
Amazon SQS
HTTP Messaging
Only String payload
No Transactions
Visibility Rules
![Page 42: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/42.jpg)
Message Listeners
@Componentpublic class SqsController { @MessageMapping("myQueue") @SendTo("replyQueue") private String receiveMessage(MessageToProcess message, @Header(“ApproximateFirstReceiveTimestamp”) String timeStamp) { return "someReply"; }}
![Page 43: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/43.jpg)
Application Instance
Application Instance
Application Instance
![Page 44: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/44.jpg)
SNS Controllers@RestController@RequestMapping("/sns/receive") public class SnsEndpointController { @NotificationSubscriptionMapping public void confirmSubscription( NotificationStatus notificationStatus) { notificationStatus.confirmSubscription(); } @NotificationMessageMapping public void receiveNotification( @NotificationMessage String message, @NotificationSubject String subject) { }}
![Page 45: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/45.jpg)
Elasticache
Application Instance
Application Instance
Application Instance
Application Instance
![Page 46: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/46.jpg)
Caching Service
@Servicepublic class ExpensiveService { @Cacheable("CacheCluster") public String calculateExpensiveValue(String key){ return …; }}
![Page 47: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/47.jpg)
![Page 48: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/48.jpg)
{ "Resources": { "ec2instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-6a56b81d", "InstanceType": "m1.small", } }, "database": { "Type": "AWS::RDS::DBInstance", "Properties": { "AllocatedStorage": "5", "DBInstanceClass": "db.m1.small", "DBName": "test", } } }
![Page 49: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/49.jpg)
![Page 50: Spring Cloud JUG Switzerland](https://reader034.fdocuments.us/reader034/viewer/2022042608/55c4a866bb61eb6c1f8b47d7/html5/thumbnails/50.jpg)
FRAGEN?