Micro Service Architecture with Spring Boot and Groovy
Post on 14-Jun-2015
1905 Views
Preview:
DESCRIPTION
Transcript
Micro ServiceMicro Service
ArchitectureArchitecturewith Spring Boot, Groovy and Friendswith Spring Boot, Groovy and Friends
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
1 of 33 10/09/14 21:54
About MeAbout Me
Marco VermeulenMarco Vermeulen
Love Coding!Worked for Shazam, Associated Newspapers, Burberry, VisaCurrent: Equal Experts at HMRCCreator of GVM (Groovy enVironment Manager)Blog: Twitter:
Wired for Code@marcoVermeulen
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
2 of 33 10/09/14 21:54
The TalkThe Talk
ConceptsMicro Service ArchitectureSpring & Spring BootSpring Boot Components
DemoGradleCucumber, SpockSpring Boot & GroovySpring Data & MongoDB
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
3 of 33 10/09/14 21:54
About the DemoAbout the Demo
Invader ZimInvader Zim
American CartoonCreated by Jhonen VasquezOn Nickelodeon from March, 2001Discontinued, with Cult following!Theme of IMPENDING DOOM!Characters: Zim and GIR
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
4 of 33 10/09/14 21:54
About the DemoAbout the Demo
Invader ZimInvader Zim
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
5 of 33 10/09/14 21:54
Zim and GIRZim and GIR
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
6 of 33 10/09/14 21:54
Micro Service ArchitectureMicro Service Architecture
-- James Lewis :
..how we designed and built a Resource Oriented, Event DrivenSystem out of applications about 1000 lines long...
Java, the Unix Way
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
7 of 33 10/09/14 21:54
Micro Service ArchitectureMicro Service Architecture
Small with Single ResponsibilitySmall with Single Responsibility
Many small apps, not monolithicSingle functionFew hundred lines of codeEasy to bin and rewrite!
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
8 of 33 10/09/14 21:54
Micro Service ArchitectureMicro Service Architecture
Containerless Unix ProcessContainerless Unix Process
Embedded ContainerExecutable FatJarInstall with Package Manager (RPM/DEB)Use unix service scripts
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
9 of 33 10/09/14 21:54
Micro Service ArchitectureMicro Service Architecture
Dedicated VCS rootsDedicated VCS roots
Separate Repo per appOkay to duplicate domains!Common modules can be extracted
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
10 of 33 10/09/14 21:54
Micro Service ArchitectureMicro Service Architecture
Status Aware and Auto-ScalingStatus Aware and Auto-Scaling
In-app MetricsPing and Health ChecksExternal watchdog processScale on demand
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
11 of 33 10/09/14 21:54
FrameworksFrameworks
Lots of choices!Lots of choices!
SinatraPlayDjangoDrop WizardVertxGrailsRatpackSpring Boot
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
12 of 33 10/09/14 21:54
Spring EcosystemSpring Ecosystem
In the beginning...In the beginning...
J2EE Development without EJB
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
13 of 33 10/09/14 21:54
Spring DataSpring Data
DefinedDefined
the umbrella project which aims to provide a familiar andconsistent Spring-based programming model for new datastoreswhile retaining store-specific features and capabilities.
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
14 of 33 10/09/14 21:54
Spring DataSpring Data
Command PatternCommand Pattern
NoSQL datastores (Mongo, Redis, Neo4J, Hadoop)Relational stores (JPA & JDBC)Umbrella Project has Sub-projects (Official & Community)Unified Interface
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
15 of 33 10/09/14 21:54
Spring DataSpring Data
Spring Data for MongoDBSpring Data for MongoDB
Java Config with AbstractMongoConfigurationMongoRepository interfaceExceptions translate to DataAccessExceptionObject MappingMuch more...
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
16 of 33 10/09/14 21:54
Spring BootSpring Boot
over Springover Spring
OpinionatedAutomatic configStandalone appsEmbedded containerStarter + Example buildsMetricsNo XML!Groovy!
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
17 of 33 10/09/14 21:54
Spring BootSpring Boot
Configuration ComponentsConfiguration Components
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
18 of 33 10/09/14 21:54
Spring BootSpring Boot
ComponentsComponents
ApplicationApplication
@EnableAutoConfiguration @ComponentScan("zim") class Application { static void main(String[] args){ new SpringApplication(Application).run(args) } }
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
19 of 33 10/09/14 21:54
Spring BootSpring Boot
ComponentsComponents
ConfigurationConfiguration
@Configuration class MongoConfiguration extends AbstractMongoConfiguration {
String getDatabaseName() { "invasion" }
Mongo mongo() throws Exception { new MongoClient() } }
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
20 of 33 10/09/14 21:54
Spring BootSpring Boot
Component Stereotypes and DomainComponent Stereotypes and Domain
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
21 of 33 10/09/14 21:54
Spring BootSpring Boot
StereotypesStereotypes
ControllerController
context: /invader/zim
@Controller class InvasionController {
@Autowired QuoteRepository repository
@RequestMapping("/invader/{name}") @ResponseBody ResponseEntity quote(@PathVariable String name){ def quotes = repository.findByName(name) if(!quotes) throw new InvaderNotFoundException(name)
def quote = quotes[(int)(Math.random() * quotes.size())] new ResponseEntity(quote, OK) } }
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
22 of 33 10/09/14 21:54
Spring BootSpring Boot
StereotypesStereotypes
ServiceService
@Service class SomeService {
Stuff prepare(String stuffing){ //do stuff stuff } }
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
23 of 33 10/09/14 21:54
Spring BootSpring Boot
StereotypesStereotypes
RepositoryRepository
@Repository interface QuoteRepository extends MongoRepository<Quote, BigInteger> { List<Quote> findByName(String name) }
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
24 of 33 10/09/14 21:54
Spring BootSpring Boot
DomainDomain
ModelModel
@Document class Stuffing { @Id BigInteger id @Field String name @Field String description }
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
25 of 33 10/09/14 21:54
Spring BootSpring Boot
BuildBuild
build.gradle
buildscript { repositories { url "http://repo.spring.io/libs-release" } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:1.1.5.RELEASE" }}apply plugin: 'spring-boot'apply plugin: 'groovy'repositories { url 'http://repo.spring.io/release'}dependencies { compile "org.codehaus.groovy:groovy:2.3.7" compile "org.springframework.boot:spring-boot-starter-web" compile "org.springframework.boot:spring-boot-starter-actuator" compile "org.springframework.boot:spring-boot-starter-remote-shell" compile "org.springframework.boot:spring-boot-starter-data-mongodb"}
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
26 of 33 10/09/14 21:54
Invader Zim and GIRInvader Zim and GIR
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
27 of 33 10/09/14 21:54
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
28 of 33 10/09/14 21:54
Quote ServiceQuote Service
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
29 of 33 10/09/14 21:54
DemoDemo
Invader Zim (and GIR)Invader Zim (and GIR)
Quote ServiceQuote Service
curl -s http://localhost:8080/invader/GIR
HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: application/json;charset=UTF-8Transfer-Encoding: chunkedDate: Sun, 23 Mar 2014 14:17:44 GMT
{ "id":25723559900237556407223458322, "name":"GIR", "message":"Can I be a mongoose dog?"}
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
30 of 33 10/09/14 21:54
ConclusionConclusionMicro Services:Micro Services:
evolved from Monolithsare smallhave single responsibilityare dispensibleare self containedhave embedded containersare self awareMUST LOOK UP INVADER ZIM!
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
31 of 33 10/09/14 21:54
Thank You!!!Thank You!!!
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
32 of 33 10/09/14 21:54
Q & AQ & A
Spring Boot with Groovy and Friends http://localhost/spring-boot/#/
33 of 33 10/09/14 21:54
top related