SlideShare une entreprise Scribd logo
1  sur  75
Easy microservices
with JHipster
Julien Dubois
&
Deepu K Sasidharan
Julien Dubois
@juliendubois
JHipster creator & lead
developer
Chief Innovation Officer,
Ippon Technologies
Deepu K
Sasidharan
@deepu105
JHipster co-lead developer
Senior Product Developer,
XebiaLabs
https://www.packtpub.com/application-development/full-stack-development-jhipster
What you will learn in the next 3 hours
● How to create microservices quickly and efficiently
● Distributed architecture designs
● Scalability, failover, and best practices for managing microservices
● Microservices in production
JD
What is JHipster, and why use it
● Most popular application generation tool in the Java world
○ 8,400+ GitHub stars, 375+ contributors
○ Nearly 1 million installations
○ 200+ companies officially using it on http://www.jhipster.tech/companies-using-jhipster/
○ Won this year a Duke’s choice award for extreme innovation and a Jax Innovation Award
● Fully Open Source
● Built on Spring Boot + Angular (Soon React as well)
● Microservice support heavily uses the Netflix OSS libraries
JD
Talk is cheap,
show me the
code
-- Linus Torvalds
JD
Let’s build our first microservice
● This is the simplest possible microservice
○ no database
● Go to https://start.jhipster.tech
○ Select the options
○ Generate the application
○ Open it up your IDE
○ Run it
○ See it live on http://localhost:8081/
JD
JHipster Registry
● Spring Cloud Config server
○ With a UI and many tweaks
● Service discovery server
○ Based on Netflix Eureka
● Management server
○ Monitoring and administration screens
JD
Adding a simple “Hello, world”
● Run jhipster spring-controller Hello
● Compile
● Check Swagger
● Remove the security to access the endpoint
JD
What did we learn?
● Creating a Spring Boot microservice with a few clicks
● Using the JHipster Registry
● Improving the microservice using a sub-generator
JD
Microservice
architectures
JD
Popular Microservice patterns
● Aggregator pattern
● Proxy pattern
● Chained pattern
● Branch pattern
● Shared Data pattern
● Asynchronous messaging pattern
DS
Aggregator/Proxy pattern
● One of the most commonly used pattern made famous by Netflix
● Also known as Iceberg pattern
● Characterized by an API gateway hiding several microservices under it
● Gateway can act as Aggregator and/or Proxy
● JHipster uses the Proxy pattern OOB
DS
JD
Good reasons for choosing microservices
● The application scope is large & not well defined and you are sure that the
application will grow tremendously in terms of features.
● The team size is large, there are enough members to effectively develop
individual components independently.
● The average skillset of the team is good and team members are confident
about advanced Microservice patterns.
● Time to market is not critical.
● You are ready to spend more on infrastructure, monitoring, and so on, in
order to improve the product quality.
● Your user base is huge and you expect them to grow. For example, a social
media application targeting users all over the world.
DS
Bad reasons for choosing microservices
● You thought it was cool
● You wanted to impress someone
● Peer pressure
● You thought microservices perform better than Monoliths automatically
PS: You are not Netflix, facebook or Google you probably do not need
microservices.
DS
Service discovery
● Helps the API gateway to discover the right endpoints for a request
● It will have a load balancer to regulate the traffic to the services
● Based on location, where load balancing is done, can be classified into
○ Client side discovery pattern (e.g; Netflix Ribbon)
■ Client is responsible for discovery and load balancing
○ Server side discovery pattern (e.g; AWS ELB)
■ A dedicated server is responsible for discovery and load balancing
● Works hand in hand with a Service Registry
● JHipster uses Netflix Eureka for service discovery
DS
Load balancing
● Load balancing in JHipster is done with Netflix Ribbon
○ Supports Fault tolerance
○ Supports Multiple protocol (HTTP, TCP, UDP) support in an asynchronous and reactive model
○ Supports Caching and batching
DS
Circuit breaking
● Circuit breaking in JHipster is done using Netflix Hystrix
○ Stops cascading failures.
○ Supports Fallbacks and graceful degradation.
○ Enables Fail fast and rapid recovery.
○ Supports Real time monitoring and configuration changes
○ Supports Concurrency aware request caching.
○ Supports Automated batching through request collapsing.
DS
The 12 factors
JHipster closely follows the 12 factors methodology for web apps and SaaS as
detailed in https://12factor.net/
DS
1. One codebase tracked in revision control,
many deploys
2. Explicitly declare and isolate dependencies
3. Store config in the environment
4. Treat backing services as attached
resources
5. Strictly separate build and run stages
6. Execute the app as one or more stateless
processes
7. Export services via port binding
8. Scale out via the process model
9. Maximize robustness with fast startup
and graceful shutdown
10. Keep development, staging, and
production as similar as possible
11. Treat logs as event streams
12. Run admin/management tasks as one-off
processes
The gateway
● “Edge service” or “gateway”, this is the entry to our microservices application
● Acts as a proxy
○ Protects the microservices
○ Routes the requests
○ Serves the front-end (Angular)
● There are often several gateways
○ One for a client-facing front-office application
○ One for the internal back-office
○ One for a specific mobile application
○ This is sometimes used with the “backend for frontend” pattern, see
https://www.thoughtworks.com/radar/techniques/bff-backend-for-frontends
JD
API management
● The gateway can be (or work with) an API management solution
● API management solutions provide
○ Quality of service (rate limiting)
○ Security (OpenID Connect, JWT)
○ Automatic documentation (Swagger)
● As the number of microservices grow, they become a very important part of
an API strategy
JD
Configuration management
● Spring Boot can be configured in many different ways
● Spring Cloud Config offers centralized configuration
○ All microservices can be automatically configured from one central location
○ Using Git, configurations can be tagged and rollbacked
○ The JHipster Registry adds an UI layer and a security layer on top of it
JD
Let’s code a
complete
microservices
architecture
DS
Building several microservices
● For the first microservice let us use the one from the previous step
● Second microservice is more complex
○ with MySQL DB & hibernate 2nd level cache
○ Several entities generated using the JDL Studio
○ JDL is at https://github.com/jhipster/jdl-samples/blob/master/simple-online-shop.jh
● On the gateway we generate 2 entities from the second microservice
○ Product and Category
DS
Application generation using the command line
● We will use the jhipster CLI to generate the second microservice
● Run jhipster
DS
About JDL
● JHipster Domain Language is a specific DSL for working with JHipster
applications.
● It allows creation of entities and relationships using a simple DSL in a single
file
● Recommended for real world use cases where entity model is complex
DS
The JDL Studio
● We will use http://www.jhipster.tech/jdl-studio/ to create the JDL
● Use the jhipster import-jdl sub generator to create the entities
DS
Generating a gateway
● We will use http://start.jhipster.tech to generate the gateway
● Use the jhipster entity sub-generator to create the front-end on the
Gateway for the Product and Category entities from the second microservice
DS
The Netflix OSS
Stack
DS
Eureka
● Netflix Eureka is a REST based service registry and discovery system
● It offers a client-server model
○ Eureka Server
■ Acts as registry for the services
■ Load balance among server instances
■ useful in cloud-based environment where the availability is intermittent
○ Eureka Client
■ Java based client for Eureka server
■ Does service discovery
■ Acts as middle tier client based load balancer
● Available as part of spring cloud netflix
DS
Feign and Ribbon
● Feign is a java to http client binder inspired by Retrofit, JAXRS-2.0, and
WebSocket
● Feign is also a declarative web service client
● Spring Cloud Netflix Feign includes Ribbon to load balance the requests
made with Feign.
DS
Zuul
● Netflix Zuul is a gateway/edge service that provides dynamic routing,
monitoring, resiliency, security, and more.
● It allows to code customized filters for use cases like
○ Authentication & Security
○ Insight & Monitoring
○ Dynamic routing
○ Stress testing & Load shedding
○ Static response handling
● Zuul 2 is on the pipeline with non-blocking IO.
● It is used in the JHipster Gateway.
DS
API
management
JD
Security
● An API management solution, like a JHipster gateway, should secure the
access to the back-end microservices
● JHipster supports 3 security mechanisms
○ JWT
○ JHipster UAA
○ OpenID Connect
● Requests are secured by default
○ The JHipster gateway adds the necessary security tokens to the HTTP requests
○ Microservices either trust the gateway (JWT) or a third-party security system (JHipster UAA,
OpenID Connect implementation) using either a shared secret or a public key
JD
Rate limiting
● API management is also about Quality of Service
● JHipster provides a rate limiting filter, using Bucket4J
○ Uses a “token-bucket algorithm”
○ Can be distributed across a cluster using Hazelcast
● As a JHipster Gateway handles security and routing, it is very easy to add
custom code
○ Example: allow more requests on a specific service for some users
JD
Swagger aggregation
● A JHipster gateway can also aggregates Swagger configuration from all
microservices
○ It finds all microservices using the service discovery mechanism
○ It adds a Swagger UI on top of the Swagger definition
○ It handles security so requests can be tested
JD
20 minutes
break
Alternatives to
Netflix OSS
JD
Consul
● Service discovery system from HashiCorp
● Open Source
● Written in Go
● https://www.consul.io/
● Replaces Eureka
○ Works the same with Spring Cloud
○ JHipster provides a specific mechanism to load Spring Cloud Config data into the Consul K/V
Store
DS
DS
Træfik
● HTTP reverse proxy and load balancer
● Open Source
● Written in Go
● https://traefik.io/
● 2 patterns are possible
○ Replace Zuul completely by Træfik
○ Use Zuul and Træfik together
JD
JD
JD
Consul and Træfik demo
● Generate a simple gateway and a simple microservice
○ By default you have the Zuul+Træfik pattern, as the gateway uses relative URLs
○ If you want absolute URLs and use Træfik directly, just configure the URL constant in the
gateway’s Webpack configuration
● Use Consul and Træfik
● Run everything!
JD
Security with
microservices
JD
HTTPS
● HTTPS support comes built-in with a JHipster application
○ See the application.yml configuration
○ It is also a requirement if you use HTTP/2
● Some people only secure the gateways
○ Internal networks are supposed to be secured
○ Do not add performance overhead
● Træfik supports HTTPS
● Let’s Encrypt provides free SSL certificates
○ Great solution, as long as your host is publicly available
○ An easy configuration is to use an Apache front-end, which has an official Let’s Encrypt
support
JD
JWT
● Our most popular and easy-to-use option
● Stateless, signed token that all microservices can share and trust
● By default, the JHipster gateway generates a JWT
○ It sends it to the various microservices
○ As they all trust the same key (which is shared from the JHipster Registry using Spring Cloud
Config), they all accept the token
● Advanced options can make it more secure
○ Better encryption algorithms using Bouncy Castle
○ Public/private key pairs
JD
JHipster UAA
● A mix of a JHipster application and CloudFoundry UAA (User Account and
Authentication)
○ Security is handled by JHipster UAA,
○ More secure
○ Easier to use when there are several gateways
○ Popular option for microservices architectures
● Has to be generated for your microservices architecture
○ Can easily be tuned and customized
● Provides OAuth2 tokens to all applications
DS
DS
OpenID Connect
● Provides an identity layer on top of OAuth2
○ Standard with many implementations
○ Starts to be widely used across enterprises
● Great for microservices architecture
○ User management, authentication and authorizations are handled by a third-party OpenID
Connect implementation
● JHipster support is very new (latest release!)
○ Support two major OpenID Connect implementations: Okta and Red Hat Keycloak
JD
OpenID Connect demo
● Generate a simple gateway and a simple microservice
● Use Keycloak as OpenID Connect provider
● Run everything!
JD
Monitoring
JD
JHipster Registry
● The JHipster Registry provides “live” monitoring screens
○ Metrics
○ Health
○ Live logs
○ Configuration
● It can also change log levels at runtime
● It is fully secured with JWT or OpenID Connect
JD
JHipster Console
● Based on the Elastic Stack
○ Logstash, Elasticsearch, Kibana
○ Specific Logback tuning for better performance
● Provides many built-in dashboards
○ Performance, JVM, cache, available services…
● Aggregates all applications
● Stores data over time
JD
Prometheus
● Open Source monitoring system, alternative to the JHipster Console
● Multi dimensional data model
● Great for time series
● Flexible Queries and Grafana based visualizations
● Alerting
● Written in Go
● https://prometheus.io/
DS
Zipkin
● Zipkin is a distributed Tracing system
○ Zipkin helps to collect and search the timing data.
○ All registered services will report the timing data to Zipkin and it creates a dependency
diagram based on the received traced requests for each of the application or services
● Zipkin helps to troubleshoot latency problems in microservice architectures
● Supports in-memory, JDBC (mysql), Cassandra, and Elasticsearch as
Storage options
DS
Scaling
microservices
JD
Stateless vs Stateful
● Scaling stateless applications is easy
○ This is why JHipster uses a stateless design as much as possible
○ Basically you just need to run more instances
● Sometimes stateful is necessary
○ Security
○ Caches
● Sticky sessions is a usual solution to scaling stateful applications, but it
doesn’t work well in a microservices architecture
JD
Scaling caches
● No cache
○ The application scales easily :-)
○ But sends all the load to the database, which doesn’t scale easily :-(
● Ehcache
○ Adds nodes on-the-fly by using network broadcasting: cannot work in most production
environments
● Hazelcast
○ Adds nodes on-the-fly using the JHipster Registry
○ Can also do HTTP session clustering (not recommended)
○ Default option for JHipster microservices
● Infinispan
○ Adds nodes on-the-fly using the JHipster Registry
○ Great alternative to Hazelcast
JD
Deploying and scaling in Docker
● Use the JHipster docker-compose sub-generator
○ Generates a full Docker Compose configuration for the whole microservices architecture
○ Adds monitoring and log management
● Deploying is as simple as “docker-compose up -d”
● Scaling an application is done by Docker:
“docker-compose scale microservice-app=3”
JD
Failover
● When a node fails, it is managed by the underlying cloud infrastructure
○ Hopefully it will be re-started
● The service discovery mechanism should alert other services
○ Eureka can take 30-60 seconds to remove an old node
○ Consul should be much quicker
● HTTP request routing should handle failure
○ Zuul is specifically tuned by JHipster, so a failing node is quickly ignored (before being
removed by Eureka)
○ Feign allows to configure a fallback
JD
Monitoring + Scaling + Failover demo
● Use the gateway and the 2 microservices from the first demo
● Configure everything with Docker Compose
○ Add JHipster Console monitoring
● Run the stack
○ Use the JHipster Console dashboards to monitor the application
○ Scale the microservice
○ Crash some of the microservice nodes
JD
Continuous
delivery
DS
Testing options - server side - JUnit
● De Facto standard for unit testing in Java
● Junit tests are generated out of the box for most of the code
● Run using ./mvnw test or ./gradlew test
DS
Testing options - server side - Integration test
● Integration tests are created using Junit, Mockito and spring test context
framework
● Spring Integration tests are generated for all the REST endpoints for the
application and for entities.
● Mockito is excellent for creating mocks and spies.
● Spring provides any useful utilities and annotations for testing
● In memory database (H2, Mongo, Cassandra, Elasticsearch) is used for
testing
● Run using ./mvnw test or ./gradlew test
DS
Testing options - server side - Performance test
● Performance testing is done using Gatling
● Gatling is written in Scala
● Gatling tests can be generated for entities by choosing the option during
generation
● Tests are written using Scala and the Gatling Scala DSL
● Provides great visualization in the test reports
● Ideal for performance and load testing
● Run using ./mvnw gatling:execute or ./gradlew gatlingRun
DS
Testing options - server side - BDD test
● Behaviour driven tests are done using Cucumber
● Cucumber is the most widely used BDD testing framework
● The option can be enabled during generation
● Tests are written using Gherkin
DS
Testing options - client side - unit tests
● Client side unit tests are done using Karma and Jasmine
● It is one of the most widely used combination for Angular unit testing
● Run using yarn test
DS
Testing options - client side - e2e tests
● End-to-end tests are done using Protractor and Jasmine
● Protractor is one of the de facto option for Angular e2e testing
● Supports parallel testing and test suites
● Uses selenium webdriver to run the tests
● Can also be used with selenium grid easily
● Run using yarn e2e
DS
The CI-CD sub-generator
● JHipster ci-cd sub generator can generate pipeline scripts for various CI/CD
tools
● It currently supports
○ Jenkins pipeline
○ Travis CI
○ Gitlab CI
○ Circle CI
● The pipeline executes the following steps
○ Build the application
○ Test server side and client side tests including gatling tests if available
○ Package the application for production
○ Deploy to heroku if option is enabled.
DS
Going to
production
JD
Doing a production build
● In “prod” mode, JHipster creates a specific build
○ The Angular part uses a specific Webpack configuration to greatly optimize the front-end
application
○ Spring Boot uses a specific configuration to remove hot reload, have higher cache values, etc.
● The final result is an “executable WAR file”
○ Uses an embedded Undertow server
○ Can be run directly as an executable file: “./microservice-0.0.1-SNAPSHOT.war”
● A Docker image can also be generated
○ “./mvnw package -Pprod dockerfile:build”
● The various JHipster “cloud” sub-generators either use the executable WAR
file or the Docker image, with their own specific configuration
JD
Q & A
Devoxx Belgium 2017 - easy microservices with JHipster

Contenu connexe

Tendances

[DevConf.US 2019]Quarkus Brings Serverless to Java Developers
[DevConf.US 2019]Quarkus Brings Serverless to Java Developers[DevConf.US 2019]Quarkus Brings Serverless to Java Developers
[DevConf.US 2019]Quarkus Brings Serverless to Java DevelopersDaniel Oh
 
Security: The Value of SBOMs
Security: The Value of SBOMsSecurity: The Value of SBOMs
Security: The Value of SBOMsWeaveworks
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation toolIoan Eugen Stan
 
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshiftNAVER D2
 
Microservices and modularity with java
Microservices and modularity with javaMicroservices and modularity with java
Microservices and modularity with javaDPC Consulting Ltd
 
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by ScalaGitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scalatakezoe
 
Cloud Native Apps with GitOps
Cloud Native Apps with GitOps Cloud Native Apps with GitOps
Cloud Native Apps with GitOps Weaveworks
 
Reactive Amsterdam - Maxim Burgerhout - Quarkus Intro
Reactive Amsterdam - Maxim Burgerhout - Quarkus IntroReactive Amsterdam - Maxim Burgerhout - Quarkus Intro
Reactive Amsterdam - Maxim Burgerhout - Quarkus IntroFabio Tiriticco
 
JHipster, modern web application development made easy
JHipster, modern web application development made easyJHipster, modern web application development made easy
JHipster, modern web application development made easyRaphaël Brugier
 
Red Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus IntroductionRed Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus IntroductionJohn Archer
 
Using JHipster for generating Angular/Spring Boot apps
Using JHipster for generating Angular/Spring Boot appsUsing JHipster for generating Angular/Spring Boot apps
Using JHipster for generating Angular/Spring Boot appsYakov Fain
 
Gradle: One technology to build them all
Gradle: One technology to build them allGradle: One technology to build them all
Gradle: One technology to build them allBonitasoft
 
WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?Weaveworks
 
Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2
Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2
Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2Amrita Prasad
 

Tendances (20)

[DevConf.US 2019]Quarkus Brings Serverless to Java Developers
[DevConf.US 2019]Quarkus Brings Serverless to Java Developers[DevConf.US 2019]Quarkus Brings Serverless to Java Developers
[DevConf.US 2019]Quarkus Brings Serverless to Java Developers
 
Javantura v4 - Angular2 - Ionic2 - from birth to stable versions - Hrvoje Pek...
Javantura v4 - Angular2 - Ionic2 - from birth to stable versions - Hrvoje Pek...Javantura v4 - Angular2 - Ionic2 - from birth to stable versions - Hrvoje Pek...
Javantura v4 - Angular2 - Ionic2 - from birth to stable versions - Hrvoje Pek...
 
Javantura v4 - Support SpringBoot application development lifecycle using Ora...
Javantura v4 - Support SpringBoot application development lifecycle using Ora...Javantura v4 - Support SpringBoot application development lifecycle using Ora...
Javantura v4 - Support SpringBoot application development lifecycle using Ora...
 
Javantura v4 - The power of cloud in professional services company - Ivan Krn...
Javantura v4 - The power of cloud in professional services company - Ivan Krn...Javantura v4 - The power of cloud in professional services company - Ivan Krn...
Javantura v4 - The power of cloud in professional services company - Ivan Krn...
 
Security: The Value of SBOMs
Security: The Value of SBOMsSecurity: The Value of SBOMs
Security: The Value of SBOMs
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation tool
 
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
[D2 COMMUNITY] Open Container Seoul Meetup - Kubernetes를 이용한 서비스 구축과 openshift
 
Microservices and modularity with java
Microservices and modularity with javaMicroservices and modularity with java
Microservices and modularity with java
 
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by ScalaGitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
 
Cloud Native Apps with GitOps
Cloud Native Apps with GitOps Cloud Native Apps with GitOps
Cloud Native Apps with GitOps
 
Reactive Amsterdam - Maxim Burgerhout - Quarkus Intro
Reactive Amsterdam - Maxim Burgerhout - Quarkus IntroReactive Amsterdam - Maxim Burgerhout - Quarkus Intro
Reactive Amsterdam - Maxim Burgerhout - Quarkus Intro
 
JHipster, modern web application development made easy
JHipster, modern web application development made easyJHipster, modern web application development made easy
JHipster, modern web application development made easy
 
Red Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus IntroductionRed Hat Java Update and Quarkus Introduction
Red Hat Java Update and Quarkus Introduction
 
Using JHipster for generating Angular/Spring Boot apps
Using JHipster for generating Angular/Spring Boot appsUsing JHipster for generating Angular/Spring Boot apps
Using JHipster for generating Angular/Spring Boot apps
 
Gradle by Example
Gradle by ExampleGradle by Example
Gradle by Example
 
Javantura v4 - What’s NOT new in modular Java - Milen Dyankov
Javantura v4 - What’s NOT new in modular Java - Milen DyankovJavantura v4 - What’s NOT new in modular Java - Milen Dyankov
Javantura v4 - What’s NOT new in modular Java - Milen Dyankov
 
Gradle: One technology to build them all
Gradle: One technology to build them allGradle: One technology to build them all
Gradle: One technology to build them all
 
WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?
 
GWT Contributor Workshop
GWT Contributor WorkshopGWT Contributor Workshop
GWT Contributor Workshop
 
Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2
Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2
Puzzle ITC Talk @Docker CH meetup CI CD_with_Openshift_0.2
 

En vedette

JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017Deepu K Sasidharan
 
Easy Microservices with JHipster - Devoxx BE 2017
Easy Microservices with JHipster - Devoxx BE 2017Easy Microservices with JHipster - Devoxx BE 2017
Easy Microservices with JHipster - Devoxx BE 2017Deepu K Sasidharan
 
Architecting for Microservices Part 2
Architecting for Microservices Part 2Architecting for Microservices Part 2
Architecting for Microservices Part 2Elana Krasner
 
Microservices: The Netflix Way
Microservices: The Netflix WayMicroservices: The Netflix Way
Microservices: The Netflix WayPuneet Sachdev
 
Building Microservices with Spring Cloud and Netflix OSS
Building Microservices with Spring Cloud and Netflix OSSBuilding Microservices with Spring Cloud and Netflix OSS
Building Microservices with Spring Cloud and Netflix OSSSemih Hakkıoğlu
 
JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)Julien Dubois
 
RedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases DistributedRedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases DistributedRedis Labs
 
Agile integration workshop Atlanta
Agile integration workshop   AtlantaAgile integration workshop   Atlanta
Agile integration workshop AtlantaJeremy Davis
 
Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)
Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)
Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)Lucas Jellema
 
Deploying JHipster Microservices
Deploying JHipster MicroservicesDeploying JHipster Microservices
Deploying JHipster MicroservicesJoe Kutner
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016Matt Raible
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for MicroservicesChris Richardson
 
Asgard, the Grails App that Deploys Netflix to the Cloud
Asgard, the Grails App that Deploys Netflix to the CloudAsgard, the Grails App that Deploys Netflix to the Cloud
Asgard, the Grails App that Deploys Netflix to the CloudJoe Sondow
 
Building Cloud Tools for Netflix
Building Cloud Tools for NetflixBuilding Cloud Tools for Netflix
Building Cloud Tools for NetflixJoe Sondow
 
[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration Microservices
[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration Microservices[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration Microservices
[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration MicroservicesWSO2
 

En vedette (18)

JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017JHipster React - Devoxx BE 2017
JHipster React - Devoxx BE 2017
 
Easy Microservices with JHipster - Devoxx BE 2017
Easy Microservices with JHipster - Devoxx BE 2017Easy Microservices with JHipster - Devoxx BE 2017
Easy Microservices with JHipster - Devoxx BE 2017
 
Architecting for Microservices Part 2
Architecting for Microservices Part 2Architecting for Microservices Part 2
Architecting for Microservices Part 2
 
Microservices: The Netflix Way
Microservices: The Netflix WayMicroservices: The Netflix Way
Microservices: The Netflix Way
 
Guday netflix oss
Guday netflix ossGuday netflix oss
Guday netflix oss
 
Building Microservices with Spring Cloud and Netflix OSS
Building Microservices with Spring Cloud and Netflix OSSBuilding Microservices with Spring Cloud and Netflix OSS
Building Microservices with Spring Cloud and Netflix OSS
 
JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)
 
RedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases DistributedRedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases Distributed
 
Netflix conductor
Netflix conductorNetflix conductor
Netflix conductor
 
Agile integration workshop Atlanta
Agile integration workshop   AtlantaAgile integration workshop   Atlanta
Agile integration workshop Atlanta
 
Dynomite @ RedisConf 2017
Dynomite @ RedisConf 2017Dynomite @ RedisConf 2017
Dynomite @ RedisConf 2017
 
Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)
Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)
Event Bus as Backbone for Decoupled Microservice Choreography (JFall 2017)
 
Deploying JHipster Microservices
Deploying JHipster MicroservicesDeploying JHipster Microservices
Deploying JHipster Microservices
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - DOSUG February 2016
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
 
Asgard, the Grails App that Deploys Netflix to the Cloud
Asgard, the Grails App that Deploys Netflix to the CloudAsgard, the Grails App that Deploys Netflix to the Cloud
Asgard, the Grails App that Deploys Netflix to the Cloud
 
Building Cloud Tools for Netflix
Building Cloud Tools for NetflixBuilding Cloud Tools for Netflix
Building Cloud Tools for Netflix
 
[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration Microservices
[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration Microservices[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration Microservices
[WSO2Con EU 2017] Microservice Architecture (MSA) and Integration Microservices
 

Similaire à Devoxx Belgium 2017 - easy microservices with JHipster

Netflix Architecture and Open Source
Netflix Architecture and Open SourceNetflix Architecture and Open Source
Netflix Architecture and Open SourceAll Things Open
 
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a MonthUSENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a MonthNicolas Brousse
 
NetflixOSS Meetup S6E1 - Titus & Containers
NetflixOSS Meetup S6E1 - Titus & ContainersNetflixOSS Meetup S6E1 - Titus & Containers
NetflixOSS Meetup S6E1 - Titus & Containersaspyker
 
Triangle Devops Meetup 10/2015
Triangle Devops Meetup 10/2015Triangle Devops Meetup 10/2015
Triangle Devops Meetup 10/2015aspyker
 
Data Science in Production: Technologies That Drive Adoption of Data Science ...
Data Science in Production: Technologies That Drive Adoption of Data Science ...Data Science in Production: Technologies That Drive Adoption of Data Science ...
Data Science in Production: Technologies That Drive Adoption of Data Science ...Nir Yungster
 
Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...
Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...
Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...Data Con LA
 
AirBNB's ML platform - BigHead
AirBNB's ML platform - BigHeadAirBNB's ML platform - BigHead
AirBNB's ML platform - BigHeadKarthik Murugesan
 
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa... Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...Databricks
 
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEANGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEANGINX, Inc.
 
Secure Developer Access at Decisiv
Secure Developer Access at DecisivSecure Developer Access at Decisiv
Secure Developer Access at DecisivTeleport
 
Yotpo microservices
Yotpo microservicesYotpo microservices
Yotpo microservicesRon Barabash
 
MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference ArchitectureMRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference ArchitectureNGINX, Inc.
 
Deploy Eclipse hawBit in Production
Deploy Eclipse hawBit in ProductionDeploy Eclipse hawBit in Production
Deploy Eclipse hawBit in ProductionKynetics
 
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...Guglielmo Iozzia
 
Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...
Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...
Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...Demi Ben-Ari
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureYshay Yaacobi
 
Blockade.io : One Click Browser Defense
Blockade.io : One Click Browser DefenseBlockade.io : One Click Browser Defense
Blockade.io : One Click Browser DefenseRiskIQ, Inc.
 
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...Haggai Philip Zagury
 
Ledingkart Meetup #1: Monolithic to microservices in action
Ledingkart Meetup #1: Monolithic to microservices in actionLedingkart Meetup #1: Monolithic to microservices in action
Ledingkart Meetup #1: Monolithic to microservices in actionMukesh Singh
 

Similaire à Devoxx Belgium 2017 - easy microservices with JHipster (20)

Netflix Architecture and Open Source
Netflix Architecture and Open SourceNetflix Architecture and Open Source
Netflix Architecture and Open Source
 
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a MonthUSENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
 
NetflixOSS Meetup S6E1 - Titus & Containers
NetflixOSS Meetup S6E1 - Titus & ContainersNetflixOSS Meetup S6E1 - Titus & Containers
NetflixOSS Meetup S6E1 - Titus & Containers
 
Triangle Devops Meetup 10/2015
Triangle Devops Meetup 10/2015Triangle Devops Meetup 10/2015
Triangle Devops Meetup 10/2015
 
Data Science in Production: Technologies That Drive Adoption of Data Science ...
Data Science in Production: Technologies That Drive Adoption of Data Science ...Data Science in Production: Technologies That Drive Adoption of Data Science ...
Data Science in Production: Technologies That Drive Adoption of Data Science ...
 
Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...
Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...
Data Con LA 2018 - Enabling real-time exploration and analytics at scale at H...
 
AirBNB's ML platform - BigHead
AirBNB's ML platform - BigHeadAirBNB's ML platform - BigHead
AirBNB's ML platform - BigHead
 
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa... Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEANGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
NGINX Microservices Reference Architecture: What’s in Store for 2019 – EMEA
 
Secure Developer Access at Decisiv
Secure Developer Access at DecisivSecure Developer Access at Decisiv
Secure Developer Access at Decisiv
 
Yotpo microservices
Yotpo microservicesYotpo microservices
Yotpo microservices
 
MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference ArchitectureMRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
 
Deploy Eclipse hawBit in Production
Deploy Eclipse hawBit in ProductionDeploy Eclipse hawBit in Production
Deploy Eclipse hawBit in Production
 
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
Building a data pipeline to ingest data into Hadoop in minutes using Streamse...
 
Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...
Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...
Kubernetes, Toolbox to fail or succeed for beginners - Demi Ben-Ari, VP R&D @...
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructure
 
Blockade.io : One Click Browser Defense
Blockade.io : One Click Browser DefenseBlockade.io : One Click Browser Defense
Blockade.io : One Click Browser Defense
 
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
 
Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
 
Ledingkart Meetup #1: Monolithic to microservices in action
Ledingkart Meetup #1: Monolithic to microservices in actionLedingkart Meetup #1: Monolithic to microservices in action
Ledingkart Meetup #1: Monolithic to microservices in action
 

Plus de Julien Dubois

Accessibility in the UK
Accessibility in the UKAccessibility in the UK
Accessibility in the UKJulien Dubois
 
Java on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJava on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJulien Dubois
 
Running Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudRunning Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudJulien Dubois
 
JHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJulien Dubois
 
Créer et développer une communauté Open Source
Créer et développer une communauté Open SourceCréer et développer une communauté Open Source
Créer et développer une communauté Open SourceJulien Dubois
 
JHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJulien Dubois
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraJulien Dubois
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015Julien Dubois
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloudJulien Dubois
 
JHipster for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinarJulien Dubois
 
Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerJulien Dubois
 
Performance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationPerformance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationJulien Dubois
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponJulien Dubois
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computingJulien Dubois
 

Plus de Julien Dubois (20)

Accessibility in the UK
Accessibility in the UKAccessibility in the UK
Accessibility in the UK
 
Java on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJava on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introduction
 
Running Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudRunning Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloud
 
Spring on Azure
Spring on AzureSpring on Azure
Spring on Azure
 
JHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJHipster Conf 2019 French keynote
JHipster Conf 2019 French keynote
 
Créer et développer une communauté Open Source
Créer et développer une communauté Open SourceCréer et développer une communauté Open Source
Créer et développer une communauté Open Source
 
JHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJHipster Conf 2018 Quiz
JHipster Conf 2018 Quiz
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
JHipster overview
JHipster overviewJHipster overview
JHipster overview
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec Cassandra
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloud
 
JHipster for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinar
 
Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec Docker
 
Performance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationPerformance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample application
 
De Devoxx au CAC40
De Devoxx au CAC40De Devoxx au CAC40
De Devoxx au CAC40
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilité
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale Ippon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computing
 

Dernier

Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 

Dernier (20)

Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 

Devoxx Belgium 2017 - easy microservices with JHipster

  • 1. Easy microservices with JHipster Julien Dubois & Deepu K Sasidharan
  • 2. Julien Dubois @juliendubois JHipster creator & lead developer Chief Innovation Officer, Ippon Technologies
  • 3. Deepu K Sasidharan @deepu105 JHipster co-lead developer Senior Product Developer, XebiaLabs https://www.packtpub.com/application-development/full-stack-development-jhipster
  • 4. What you will learn in the next 3 hours ● How to create microservices quickly and efficiently ● Distributed architecture designs ● Scalability, failover, and best practices for managing microservices ● Microservices in production JD
  • 5. What is JHipster, and why use it ● Most popular application generation tool in the Java world ○ 8,400+ GitHub stars, 375+ contributors ○ Nearly 1 million installations ○ 200+ companies officially using it on http://www.jhipster.tech/companies-using-jhipster/ ○ Won this year a Duke’s choice award for extreme innovation and a Jax Innovation Award ● Fully Open Source ● Built on Spring Boot + Angular (Soon React as well) ● Microservice support heavily uses the Netflix OSS libraries JD
  • 6. Talk is cheap, show me the code -- Linus Torvalds JD
  • 7. Let’s build our first microservice ● This is the simplest possible microservice ○ no database ● Go to https://start.jhipster.tech ○ Select the options ○ Generate the application ○ Open it up your IDE ○ Run it ○ See it live on http://localhost:8081/ JD
  • 8. JHipster Registry ● Spring Cloud Config server ○ With a UI and many tweaks ● Service discovery server ○ Based on Netflix Eureka ● Management server ○ Monitoring and administration screens JD
  • 9. Adding a simple “Hello, world” ● Run jhipster spring-controller Hello ● Compile ● Check Swagger ● Remove the security to access the endpoint JD
  • 10. What did we learn? ● Creating a Spring Boot microservice with a few clicks ● Using the JHipster Registry ● Improving the microservice using a sub-generator JD
  • 12. Popular Microservice patterns ● Aggregator pattern ● Proxy pattern ● Chained pattern ● Branch pattern ● Shared Data pattern ● Asynchronous messaging pattern DS
  • 13. Aggregator/Proxy pattern ● One of the most commonly used pattern made famous by Netflix ● Also known as Iceberg pattern ● Characterized by an API gateway hiding several microservices under it ● Gateway can act as Aggregator and/or Proxy ● JHipster uses the Proxy pattern OOB DS
  • 14. JD
  • 15. Good reasons for choosing microservices ● The application scope is large & not well defined and you are sure that the application will grow tremendously in terms of features. ● The team size is large, there are enough members to effectively develop individual components independently. ● The average skillset of the team is good and team members are confident about advanced Microservice patterns. ● Time to market is not critical. ● You are ready to spend more on infrastructure, monitoring, and so on, in order to improve the product quality. ● Your user base is huge and you expect them to grow. For example, a social media application targeting users all over the world. DS
  • 16. Bad reasons for choosing microservices ● You thought it was cool ● You wanted to impress someone ● Peer pressure ● You thought microservices perform better than Monoliths automatically PS: You are not Netflix, facebook or Google you probably do not need microservices. DS
  • 17. Service discovery ● Helps the API gateway to discover the right endpoints for a request ● It will have a load balancer to regulate the traffic to the services ● Based on location, where load balancing is done, can be classified into ○ Client side discovery pattern (e.g; Netflix Ribbon) ■ Client is responsible for discovery and load balancing ○ Server side discovery pattern (e.g; AWS ELB) ■ A dedicated server is responsible for discovery and load balancing ● Works hand in hand with a Service Registry ● JHipster uses Netflix Eureka for service discovery DS
  • 18. Load balancing ● Load balancing in JHipster is done with Netflix Ribbon ○ Supports Fault tolerance ○ Supports Multiple protocol (HTTP, TCP, UDP) support in an asynchronous and reactive model ○ Supports Caching and batching DS
  • 19. Circuit breaking ● Circuit breaking in JHipster is done using Netflix Hystrix ○ Stops cascading failures. ○ Supports Fallbacks and graceful degradation. ○ Enables Fail fast and rapid recovery. ○ Supports Real time monitoring and configuration changes ○ Supports Concurrency aware request caching. ○ Supports Automated batching through request collapsing. DS
  • 20. The 12 factors JHipster closely follows the 12 factors methodology for web apps and SaaS as detailed in https://12factor.net/ DS 1. One codebase tracked in revision control, many deploys 2. Explicitly declare and isolate dependencies 3. Store config in the environment 4. Treat backing services as attached resources 5. Strictly separate build and run stages 6. Execute the app as one or more stateless processes 7. Export services via port binding 8. Scale out via the process model 9. Maximize robustness with fast startup and graceful shutdown 10. Keep development, staging, and production as similar as possible 11. Treat logs as event streams 12. Run admin/management tasks as one-off processes
  • 21. The gateway ● “Edge service” or “gateway”, this is the entry to our microservices application ● Acts as a proxy ○ Protects the microservices ○ Routes the requests ○ Serves the front-end (Angular) ● There are often several gateways ○ One for a client-facing front-office application ○ One for the internal back-office ○ One for a specific mobile application ○ This is sometimes used with the “backend for frontend” pattern, see https://www.thoughtworks.com/radar/techniques/bff-backend-for-frontends JD
  • 22. API management ● The gateway can be (or work with) an API management solution ● API management solutions provide ○ Quality of service (rate limiting) ○ Security (OpenID Connect, JWT) ○ Automatic documentation (Swagger) ● As the number of microservices grow, they become a very important part of an API strategy JD
  • 23. Configuration management ● Spring Boot can be configured in many different ways ● Spring Cloud Config offers centralized configuration ○ All microservices can be automatically configured from one central location ○ Using Git, configurations can be tagged and rollbacked ○ The JHipster Registry adds an UI layer and a security layer on top of it JD
  • 25. Building several microservices ● For the first microservice let us use the one from the previous step ● Second microservice is more complex ○ with MySQL DB & hibernate 2nd level cache ○ Several entities generated using the JDL Studio ○ JDL is at https://github.com/jhipster/jdl-samples/blob/master/simple-online-shop.jh ● On the gateway we generate 2 entities from the second microservice ○ Product and Category DS
  • 26. Application generation using the command line ● We will use the jhipster CLI to generate the second microservice ● Run jhipster DS
  • 27. About JDL ● JHipster Domain Language is a specific DSL for working with JHipster applications. ● It allows creation of entities and relationships using a simple DSL in a single file ● Recommended for real world use cases where entity model is complex DS
  • 28. The JDL Studio ● We will use http://www.jhipster.tech/jdl-studio/ to create the JDL ● Use the jhipster import-jdl sub generator to create the entities DS
  • 29. Generating a gateway ● We will use http://start.jhipster.tech to generate the gateway ● Use the jhipster entity sub-generator to create the front-end on the Gateway for the Product and Category entities from the second microservice DS
  • 31. Eureka ● Netflix Eureka is a REST based service registry and discovery system ● It offers a client-server model ○ Eureka Server ■ Acts as registry for the services ■ Load balance among server instances ■ useful in cloud-based environment where the availability is intermittent ○ Eureka Client ■ Java based client for Eureka server ■ Does service discovery ■ Acts as middle tier client based load balancer ● Available as part of spring cloud netflix DS
  • 32. Feign and Ribbon ● Feign is a java to http client binder inspired by Retrofit, JAXRS-2.0, and WebSocket ● Feign is also a declarative web service client ● Spring Cloud Netflix Feign includes Ribbon to load balance the requests made with Feign. DS
  • 33. Zuul ● Netflix Zuul is a gateway/edge service that provides dynamic routing, monitoring, resiliency, security, and more. ● It allows to code customized filters for use cases like ○ Authentication & Security ○ Insight & Monitoring ○ Dynamic routing ○ Stress testing & Load shedding ○ Static response handling ● Zuul 2 is on the pipeline with non-blocking IO. ● It is used in the JHipster Gateway. DS
  • 35. Security ● An API management solution, like a JHipster gateway, should secure the access to the back-end microservices ● JHipster supports 3 security mechanisms ○ JWT ○ JHipster UAA ○ OpenID Connect ● Requests are secured by default ○ The JHipster gateway adds the necessary security tokens to the HTTP requests ○ Microservices either trust the gateway (JWT) or a third-party security system (JHipster UAA, OpenID Connect implementation) using either a shared secret or a public key JD
  • 36. Rate limiting ● API management is also about Quality of Service ● JHipster provides a rate limiting filter, using Bucket4J ○ Uses a “token-bucket algorithm” ○ Can be distributed across a cluster using Hazelcast ● As a JHipster Gateway handles security and routing, it is very easy to add custom code ○ Example: allow more requests on a specific service for some users JD
  • 37. Swagger aggregation ● A JHipster gateway can also aggregates Swagger configuration from all microservices ○ It finds all microservices using the service discovery mechanism ○ It adds a Swagger UI on top of the Swagger definition ○ It handles security so requests can be tested JD
  • 40. Consul ● Service discovery system from HashiCorp ● Open Source ● Written in Go ● https://www.consul.io/ ● Replaces Eureka ○ Works the same with Spring Cloud ○ JHipster provides a specific mechanism to load Spring Cloud Config data into the Consul K/V Store DS
  • 41. DS
  • 42. Træfik ● HTTP reverse proxy and load balancer ● Open Source ● Written in Go ● https://traefik.io/ ● 2 patterns are possible ○ Replace Zuul completely by Træfik ○ Use Zuul and Træfik together JD
  • 43. JD
  • 44. JD
  • 45. Consul and Træfik demo ● Generate a simple gateway and a simple microservice ○ By default you have the Zuul+Træfik pattern, as the gateway uses relative URLs ○ If you want absolute URLs and use Træfik directly, just configure the URL constant in the gateway’s Webpack configuration ● Use Consul and Træfik ● Run everything! JD
  • 47. HTTPS ● HTTPS support comes built-in with a JHipster application ○ See the application.yml configuration ○ It is also a requirement if you use HTTP/2 ● Some people only secure the gateways ○ Internal networks are supposed to be secured ○ Do not add performance overhead ● Træfik supports HTTPS ● Let’s Encrypt provides free SSL certificates ○ Great solution, as long as your host is publicly available ○ An easy configuration is to use an Apache front-end, which has an official Let’s Encrypt support JD
  • 48. JWT ● Our most popular and easy-to-use option ● Stateless, signed token that all microservices can share and trust ● By default, the JHipster gateway generates a JWT ○ It sends it to the various microservices ○ As they all trust the same key (which is shared from the JHipster Registry using Spring Cloud Config), they all accept the token ● Advanced options can make it more secure ○ Better encryption algorithms using Bouncy Castle ○ Public/private key pairs JD
  • 49. JHipster UAA ● A mix of a JHipster application and CloudFoundry UAA (User Account and Authentication) ○ Security is handled by JHipster UAA, ○ More secure ○ Easier to use when there are several gateways ○ Popular option for microservices architectures ● Has to be generated for your microservices architecture ○ Can easily be tuned and customized ● Provides OAuth2 tokens to all applications DS
  • 50. DS
  • 51. OpenID Connect ● Provides an identity layer on top of OAuth2 ○ Standard with many implementations ○ Starts to be widely used across enterprises ● Great for microservices architecture ○ User management, authentication and authorizations are handled by a third-party OpenID Connect implementation ● JHipster support is very new (latest release!) ○ Support two major OpenID Connect implementations: Okta and Red Hat Keycloak JD
  • 52. OpenID Connect demo ● Generate a simple gateway and a simple microservice ● Use Keycloak as OpenID Connect provider ● Run everything! JD
  • 54. JHipster Registry ● The JHipster Registry provides “live” monitoring screens ○ Metrics ○ Health ○ Live logs ○ Configuration ● It can also change log levels at runtime ● It is fully secured with JWT or OpenID Connect JD
  • 55. JHipster Console ● Based on the Elastic Stack ○ Logstash, Elasticsearch, Kibana ○ Specific Logback tuning for better performance ● Provides many built-in dashboards ○ Performance, JVM, cache, available services… ● Aggregates all applications ● Stores data over time JD
  • 56. Prometheus ● Open Source monitoring system, alternative to the JHipster Console ● Multi dimensional data model ● Great for time series ● Flexible Queries and Grafana based visualizations ● Alerting ● Written in Go ● https://prometheus.io/ DS
  • 57. Zipkin ● Zipkin is a distributed Tracing system ○ Zipkin helps to collect and search the timing data. ○ All registered services will report the timing data to Zipkin and it creates a dependency diagram based on the received traced requests for each of the application or services ● Zipkin helps to troubleshoot latency problems in microservice architectures ● Supports in-memory, JDBC (mysql), Cassandra, and Elasticsearch as Storage options DS
  • 59. Stateless vs Stateful ● Scaling stateless applications is easy ○ This is why JHipster uses a stateless design as much as possible ○ Basically you just need to run more instances ● Sometimes stateful is necessary ○ Security ○ Caches ● Sticky sessions is a usual solution to scaling stateful applications, but it doesn’t work well in a microservices architecture JD
  • 60. Scaling caches ● No cache ○ The application scales easily :-) ○ But sends all the load to the database, which doesn’t scale easily :-( ● Ehcache ○ Adds nodes on-the-fly by using network broadcasting: cannot work in most production environments ● Hazelcast ○ Adds nodes on-the-fly using the JHipster Registry ○ Can also do HTTP session clustering (not recommended) ○ Default option for JHipster microservices ● Infinispan ○ Adds nodes on-the-fly using the JHipster Registry ○ Great alternative to Hazelcast JD
  • 61. Deploying and scaling in Docker ● Use the JHipster docker-compose sub-generator ○ Generates a full Docker Compose configuration for the whole microservices architecture ○ Adds monitoring and log management ● Deploying is as simple as “docker-compose up -d” ● Scaling an application is done by Docker: “docker-compose scale microservice-app=3” JD
  • 62. Failover ● When a node fails, it is managed by the underlying cloud infrastructure ○ Hopefully it will be re-started ● The service discovery mechanism should alert other services ○ Eureka can take 30-60 seconds to remove an old node ○ Consul should be much quicker ● HTTP request routing should handle failure ○ Zuul is specifically tuned by JHipster, so a failing node is quickly ignored (before being removed by Eureka) ○ Feign allows to configure a fallback JD
  • 63. Monitoring + Scaling + Failover demo ● Use the gateway and the 2 microservices from the first demo ● Configure everything with Docker Compose ○ Add JHipster Console monitoring ● Run the stack ○ Use the JHipster Console dashboards to monitor the application ○ Scale the microservice ○ Crash some of the microservice nodes JD
  • 65. Testing options - server side - JUnit ● De Facto standard for unit testing in Java ● Junit tests are generated out of the box for most of the code ● Run using ./mvnw test or ./gradlew test DS
  • 66. Testing options - server side - Integration test ● Integration tests are created using Junit, Mockito and spring test context framework ● Spring Integration tests are generated for all the REST endpoints for the application and for entities. ● Mockito is excellent for creating mocks and spies. ● Spring provides any useful utilities and annotations for testing ● In memory database (H2, Mongo, Cassandra, Elasticsearch) is used for testing ● Run using ./mvnw test or ./gradlew test DS
  • 67. Testing options - server side - Performance test ● Performance testing is done using Gatling ● Gatling is written in Scala ● Gatling tests can be generated for entities by choosing the option during generation ● Tests are written using Scala and the Gatling Scala DSL ● Provides great visualization in the test reports ● Ideal for performance and load testing ● Run using ./mvnw gatling:execute or ./gradlew gatlingRun DS
  • 68. Testing options - server side - BDD test ● Behaviour driven tests are done using Cucumber ● Cucumber is the most widely used BDD testing framework ● The option can be enabled during generation ● Tests are written using Gherkin DS
  • 69. Testing options - client side - unit tests ● Client side unit tests are done using Karma and Jasmine ● It is one of the most widely used combination for Angular unit testing ● Run using yarn test DS
  • 70. Testing options - client side - e2e tests ● End-to-end tests are done using Protractor and Jasmine ● Protractor is one of the de facto option for Angular e2e testing ● Supports parallel testing and test suites ● Uses selenium webdriver to run the tests ● Can also be used with selenium grid easily ● Run using yarn e2e DS
  • 71. The CI-CD sub-generator ● JHipster ci-cd sub generator can generate pipeline scripts for various CI/CD tools ● It currently supports ○ Jenkins pipeline ○ Travis CI ○ Gitlab CI ○ Circle CI ● The pipeline executes the following steps ○ Build the application ○ Test server side and client side tests including gatling tests if available ○ Package the application for production ○ Deploy to heroku if option is enabled. DS
  • 73. Doing a production build ● In “prod” mode, JHipster creates a specific build ○ The Angular part uses a specific Webpack configuration to greatly optimize the front-end application ○ Spring Boot uses a specific configuration to remove hot reload, have higher cache values, etc. ● The final result is an “executable WAR file” ○ Uses an embedded Undertow server ○ Can be run directly as an executable file: “./microservice-0.0.1-SNAPSHOT.war” ● A Docker image can also be generated ○ “./mvnw package -Pprod dockerfile:build” ● The various JHipster “cloud” sub-generators either use the executable WAR file or the Docker image, with their own specific configuration JD
  • 74. Q & A