View
6
Download
0
Category
Preview:
Citation preview
#DevoxxUS
Optimizing Enterprise Javafor a Microservices Architecture
John Clingan, middle-aged Java EE guy and MicroProfile-rEmily Jiang, totally awesome MicroProfile engineer
Eclipse
#DevoxxUS
Agenda
MicroProfile Overview (~10 Minutes)
Example Specs - From concept to implementation (10 minutes)
Collaborate (Until they kick us out or we want to go for a beer)
#DevoxxUS
Enterprise Java Standards History
#DevoxxUS
What is MicroProfile?
A community of individuals, organizations, and vendors …
… collaborating within an open source (Eclipse) project ….
… to bring microservices to the Enterprise Java community
#DevoxxUS
Innovation vs Standardization
(Open Source) Project Focused Standard (JSR) focused
(Java EE)(MicroProfile)
#DevoxxUS
Innovation vs Standardization
(Open Source) Project Focused Standard (JSR) focused
(Java EE)
Large multi-feature releasesIncremental feature release
(MicroProfile)
#DevoxxUS
Innovation vs Standardization
Spec Lead controls pace
(Open Source) Project Focused Standard (JSR) focused
(Java EE)
Large multi-feature releasesIncremental feature release
(MicroProfile)
Community controls pace
#DevoxxUS
Accelerating* Adoption of MicroServices
2016 2017 2018 2019
8 9
1.0
1.1
1.2
1.3
1.4
2020
1.5
* 2-4 releases per year
#DevoxxUS
MicroProfile 1.0 (Sep, 2016)
Contexts and Dependency Injection (CDI 1.1)
+
Java API for RESTful Web Services (JAX-RS 2.0)
+
Java API for JSON Processing (JSON-P 1.0)
#DevoxxUS
MicroProfile 1.1 Underway
Security: JWT Token Exchange 1.0
Health Check 1.0
Configuration 1.0
Fault Tolerance 1.0 (Stretch goal)
Second Quarter2017!
#DevoxxUS
Will MicroProfile Features be in Java EE?
Possibly
#DevoxxUS
MicroProfile Java Programming Model(In Progress)
● Config
● Fault Tolerance
● Health Checker
● Metrics
● Security
#DevoxxUS
Configuration
● Discussed with a formal proposal in the MicroProfile mailing list (https://groups.google.com/forum/#!topic/microprofile/VJEEAOsVj5E[26-50])
● After the proposal was accepted, a repository was created to draft APIs/SPIs (https://github.com/eclipse/microprofile-config/)
#DevoxxUS
MicroProfile Java Prog. Model - Configuration
#DevoxxUS
MicroProfile Java Prog. Model - ConfigurationUsing CDI Injection
@Inject Config config; Inject all config properties that the class can see
@Inject @ConfigProperty(name=“myProp” defaultValue=“blah”)String prop1;
Inject the value of the property called “myProp”. The value of prop1 will not be refreshed. Suitable for static properties and used on the RequestScoped beans.
@Inject @ConfigProperty(name=“myProp” defaultValue=“blah”) Provider<String> prop1
Inject the value of the property called “myProp” and it picks up the dynamic changes.
#DevoxxUS
MicroProfile Java Prog. Model - ConfigurationProgrammatic lookup
ConfigProvider.getConfig(); The config object containing all properties that the class owner can see.
ConfigProvider.getBuilder() .addDefaultSources() .withSources(…).build();
Create a custom config object
#DevoxxUS
MicroProfile Java Prog. Model - Configuration● The property file, microprofile-config.properties, packaged in the application can be
overwritten by :○ System variables (400 as the default priority) ○ Environment variables (300 as the default priority) or ○ a custom property files with a higher priority than microprofile-config.properties
(100 as the default priority).
#DevoxxUS
MicroProfile Java Prog. Model - config
● Plan to finalise the current APIs/SPIs and release the Config 1.0 by mid April
● Then work on the new features of Config 1.1
● Join in the Config discussion
● Join in the Config hangout – on Thursdays
#DevoxxUS
MicroProfile Java Prog model –Fault Tolerance
● Proposal discussion: https://groups.google.com/forum/#!topic/microprofile/ESs9L3z08oA
● Prototype (inspired by Failsafe): https://github.com/Emily-Jiang/microprofile-faultTolerance-incubation
#DevoxxUS
MicroProfile Java Prog model –Fault Tolerance
Retry The request should have a retry to recover from temporary glitches
Fallback The request should have a fallback operation if retry fails
Timeout The request must have a timeout, to prevent from waiting indefinitely
Circuit Breaker The request must prevent from repeating timeouts
Bulkhead One part of application failure must not bring the whole application down
#DevoxxUS
Fault Tolerance - Fallback Retry
Set up retry policy and wrap the call with the policy and specify the fallback operationFaultToleranceFactory.getFaultToleranceType(RetryPolicy.class);
Duration delay = Duration.ofSeconds(1);retryPolicy = retryPolicy.retryOn(Exception.class).withDelay(delay) .withMaxRetries(3);
Runnable fallbackService = () -> serviceB();executor.with(retryPolicy).withFallback(fallbackService) .run(mainService);
#DevoxxUS
Fault Tolerance - Circuit Breaker TimeoutFail-fast, temporarily disable the running of a servicecircuitBreaker = FaultToleranceFactory.getFaultToleranceType(CircuitBreaker.class);circuitBreaker = circuitBreaker.withTimeout(timeout).withFailureThreshold(3) .withSuccessThreshold(2) .withDelay(delay);
Callable<Object> mainService = () -> serviceA();Executor executor = FaultToleranceFactory.getFaultToleranceType(Executor.class);
executor.with(circuitBreaker).get(mainService);
#DevoxxUS
Fault Tolerance - Bulkhead
Limit the number of concurrent calls to a service
ThreadPoolExecutor tpexecutor = new ThreadPoolExecutor( poolSize, poolSize, 0, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10));
bulkhead = bulkhead.withThread(tpexecutor);executor.with(bulkhead) .run(mainService);
#DevoxxUS
MicroProfile Java Prog model –Fault Tolerance
● Non-CDI approach was left out of the first release but focus on CDI-first approach
● Discussion the CDI-first approach ongoing● Use Interceptor to apply policy and use annotation to config policy
#DevoxxUS
Health Check, Metrics, Security
● Health Check – proposal accepted
● Metrics and Security – proposal in discussion
#DevoxxUS
Join the Community!
#DevoxxUS
Resources
MicroProfile.io
MicroProfile Discussion Forumbit.ly/MicroProfileForum
MicroProfile Exampleshttps://github.com/microprofile/microprofile-samples
Recommended