52
Modern Enterprise Architectures Eberhard Wolff, SpringSource – A division of VMware

Modern (Java) Enterprise Architectures

  • View
    5.616

  • Download
    2

Embed Size (px)

DESCRIPTION

Presentation from my WJAX 2010 talk about modern Java Enterprise Architectures. Talks about dynamic changes to systems and approaches like Java, Java EE, OSGi, Cloud, Spring.

Citation preview

Page 1: Modern (Java) Enterprise Architectures

Modern  Enterprise-­‐Architectures  

Eberhard Wolff, SpringSource – A division of VMware

Page 2: Modern (Java) Enterprise Architectures

About  me  •  Eberhard  Wolff  •  Principal  Technologist  •  Consultant  &  Trainer  •  Author  (e.g.  first  German  Spring  book)  

•  [email protected]  •  TwiGer:  @ewolff  •  Blog:  hGp://ewolff.com  

Page 3: Modern (Java) Enterprise Architectures

A  division  of  VMware  

Lightweight  App  RunOme  

Virtual  App  Environment  

Hybrid  Cloud  

Spring  tc  Server  

VM  

Spring  tc  Server  

Lightweight  App  Framework  

Page 4: Modern (Java) Enterprise Architectures

Overview  •  IntroducOon  

•  Java  EE  Deployment  opOons  

•  OSGi  

•  Cloud  

Page 5: Modern (Java) Enterprise Architectures

Which  PlaWorm  Shall  I  use?  •  Actually  two  decisions:  

– Which  server  environment?  – Which  programming  model?  

•  Java  EE  is  both  •  Spring  is  a  programming  model  •  i.e.  you  can  use  Spring  with  any  server  environment  

•  i.e.  you  can  update  Spring  versions  without  updaOng  the  server  

Infrastructure  (Server)  

Programming  Model  

Your  App  

Spring

Java EE

Page 6: Modern (Java) Enterprise Architectures

So?  •  Spring  is  the  beGer  programming  model  •  I  am  biased…  •  hGp://jandiandme.blogspot.com/2010/10/  spring-­‐vs-­‐java-­‐ee-­‐and-­‐why-­‐i-­‐dont-­‐care.html  

•  More  producOvity  only  with  new  tools,  not  framework  

•  Spring  Roo  offers  a  much  broader  approach  –  Inspired  by  Ruby  on  Rails:  Generator  –  Raises  the  level  of  abstracOons  –  Covers  build  –  Introduces  tools  –  No  similar  technology  for  Java  EE  available!  

•  Other  languages  (Groovy  /  Grails,  Scala  …)  •  So  I  will  focus  on  the  server  infrastructure  

Programming  Model  

Your  App  

Roo  /  Grails  …  

Page 7: Modern (Java) Enterprise Architectures

Modular  Programming  •  Key  to  developing  socware  producOvely  

•  Much  improvement  in  the  last  few  years  •  Dependency  management  is  ubiquitous  •  Architecture  management  

•  What  is  the  next  level?  

Page 8: Modern (Java) Enterprise Architectures

Modular  Deployment  •  What  is  the  granularity  of  deployment?  

•  Let's  assume  a  Java  EE  applicaOon  •  Customer  module  •  Payment  module  •  Dependency:  Payment  depends  on  Costumer  

•  How  do  we  get  this  deployed?  

Page 9: Modern (Java) Enterprise Architectures

Approach:  Everything  in  One  Unit  •  Everything  is  in  one  unit  (i.e.  WAR  /  EAR)  •  TradiOonal  Java  EE  model  

WAR / EAR

Customer Payment

Page 10: Modern (Java) Enterprise Architectures

One  Unit:  Advantages  •  Every  class  in  the  system  only  once  

•  including  e.g.  libraries  

•  Efficient  

Page 11: Modern (Java) Enterprise Architectures

One  Unit:  Challenges  •  ModularizaOon  might  not  be  as  good  as  you  think  

–  as  runOme  does  not  enforce  it  •  Complex  build  process  

–  If  you  use  EARs  •  Long  deployment  •  Small  changes  require  complete  redeployment  •  Might  influence  turn  around  Ome  during  development  •  ConOnuous  integraOon    

•  Note:  If  you  set  up  a  completely  new  system  for  producOon  anyway  this  might  be  not  such  a  big  issue  

Page 12: Modern (Java) Enterprise Architectures

Approach:  1  Module  =  1  Deployment  •  Each  module  is  a  unit  (e.g.  WAR)  •  Unorthodox  Java  EE  model  •  Units  are  isolated:  no  shared  classes  nor  objects  •  No  direct  communicaOon  possible  

customer.war

payment.war

ClassLoader isolation HTTP (Web Services, REST, HTTP Invoker, …)

JMX

must include classes from customer.war

Page 13: Modern (Java) Enterprise Architectures

1  Module  =  1  Deployment:  Advantages  •  Each  module  can  be  deployed  independently  

•  i.e.  a  change  in  the  payment  module  can  be  deployed  independently  from  the  rest  

•  Might  be  an  advantage  •  Process  (e.g.  retesOng)  must  sOll  be  followed  •  If  you  install  a  completely  new  system  anyway  that  does  not  maGer  

•  Faster  turn  around  •  Only  one  module  built  and  redeployed  

Page 14: Modern (Java) Enterprise Architectures

1  Module  =  1  Deployment:  Challenges  •  CommunicaOon  between  modules  complex  •  No  shared  classes  

•  e.g.  domain  classes  for  communicaOon  

•  Perm  Gen  space  •  Stores  loaded  classes  •  Each  class  loaded  once  per  deployment  •  e.g.  all  libraries  (Spring,  JPA,  …)  

Page 15: Modern (Java) Enterprise Architectures

These  are  limits  of  Java  EE's  Class-­‐Loader-­‐per-­‐App  and  

deployment  model  

ClassLoader isolation

Page 16: Modern (Java) Enterprise Architectures

How  can  we  answer  the  challenge…  •  It  must  be  possible  to  

•  share  classes  between  deployment  units  •  add  or  remove  deployment  units  at  runOme  •  That  was  the  whole  point  

•  This  opens  up  all  kinds  of  interesOng  challenges  •  Deployment  units  with  classes  come  and  go  at  runOme  •  ImplementaOons  should  be  exchangeable  at  runOme  

Page 17: Modern (Java) Enterprise Architectures

Either  you  accept  these  limitaOons  or  you  have  to  

choose  a  different  approach  

Page 18: Modern (Java) Enterprise Architectures

Main  concern:  Class  Loader  

ClassLoader isolation

Page 19: Modern (Java) Enterprise Architectures

OSGi  •  Solves  these  issues  •  Should  disOnguish  between  import  of  packages  and  services  

•  API  update  sOll  requires  restart  of  payment  •  But  an  update  of  the  service  implementaOon  in  the  running  system  is  possible  

Customer API Payment

Customer Service

import packages

import services

Page 20: Modern (Java) Enterprise Architectures

OSGi  Advantages  •  Each  module  can  be  deployed  independently  

– Same  issues  as  before  (e.g.  retesOng)  •  Faster  turn  around  

– Only  one  module  built  and  redeployed  •  CommunicaOon  between  modules  easily  possible  (OSGi  services)  

•  Sharing  classes  between  modules  possible  •  More  efficient  use  of  Perm  Gen  Space  •  Your  architecture  might  benefit:  

– Enforces  modularizaOon  at  runOme  – Supports  versioning  (Java's  missing  feature)  

Page 21: Modern (Java) Enterprise Architectures

Main  benefit:  Probably  enforcing  the  modularizaOon  at  runOme  

Page 22: Modern (Java) Enterprise Architectures

Not  dynamic  deployment  of  new  modules  

Page 23: Modern (Java) Enterprise Architectures

OSGi  Challenges  •  More  complex  

– Have  to  deal  with  import  /  exports  of  packages  /  services  –  Just  a  result  of  the  modularizaOon  

•  Web  support  and  byte  code  manipulaOon  (e.g.  JPA)  might  be  challenges  

•  Approaches  like  Eclipse  Virgo  (runOme  environment)  help  

•  Different  deployment  model  and  server  environment  from  Java  EE  – OperaOons  might  not  like  that  

•  API  changes  sOll  require  a  restart  of  dependent  modules  

Page 24: Modern (Java) Enterprise Architectures

OSGi  is  just  a  tool  •  It  won't  solve  all  your  problems  •  The  applicaOon  /  architecture  must  allow  for  dynamic  updates  •  State  in  services  is  not  a  brilliant  idea  •  MulOple  versions  at  the  same  Ome  •  What  about  database  schemas?  

•  Have  to  deal  with  API  updates  •  Well  known  problem  in  distributed  environments  

•  RetesOng  •  Can  you  reproduce  your  producOon  environment?  

Page 25: Modern (Java) Enterprise Architectures

Dynamic  changes  to  random  parts  are  hard.  

Page 26: Modern (Java) Enterprise Architectures

Dynamic  changes  to  random  parts  are  probably  not  needed  

and  not  wanted.  

Page 27: Modern (Java) Enterprise Architectures

You  need  to  idenOfy  which  parts  of  the  system  change  frequently.  

Page 28: Modern (Java) Enterprise Architectures

What  are  some  ways  to  deal  with  dynamic  behavior?  

Page 29: Modern (Java) Enterprise Architectures

Dealing  with  dynamics  •  Update  the  logic  on  parts  of  your  cluster  •  The  rest  runs  the  old  version  

•  Eventually  the  whole  cluster  is  migrated  •  …or  rolled  back  

•  SOll  need  to  deal  with  the  database  or  external  clients  for  example  

Page 30: Modern (Java) Enterprise Architectures

Dealing  with  dynamics  •  Some  technologies  support  changes  to  the  behavior  without  changing  code  •  Rule  engines  •  Dynamic  /  script  languages  (can  be  reloaded  at  runOme)  •  Workflow  engines  

•  Obviously  they  also  have  other  features  •  SomeOmes  they  are  used  primarily  because  of  dynamics  

Page 31: Modern (Java) Enterprise Architectures

An  Anecdote  "We  have  issues  because  we  use  a  complex  rule  base."  

"Well,  have  you  thought  about  using  code  instead?"  

"We  can't."  "Why?"  "Because  every  code  change  will  go  through  a  complex  retesOng  phase.  Rules  are  just  configuraOon  and  not  tested."  

Page 32: Modern (Java) Enterprise Architectures

Numerous  other  examples  •  "The  Spring  configuraOon  should  be  read  from  the  database."  

•  "Can  you  change  the  Spring  configuraOon  dynamically?"  

 

Page 33: Modern (Java) Enterprise Architectures

Something  is  wrong  here  •  Either  the  retesOng  is  unnecessary  

– Then  it  should  not  be  done  independent  of  the  technology  

– …and  you  are  wasOng  money  •  …or  it  is  necessary  

– Then  it  should  not  be  done  independent  of  the  technology  

– …and  you  are  tesOng  in  producOon  (risk  maximizing)  

•  AnO  PaGern:  Hide  logic  away  from  operaOons  and  processes  in  configuraOon  

Page 34: Modern (Java) Enterprise Architectures

Processes:  OperaOons  vs.  Developers  

Page 35: Modern (Java) Enterprise Architectures

DevOps  to  the  Rescue?  •  Processes,  methods  and  systems  for  •  CommunicaOon,  collaboraOon  and  integraOon  •  Between  Development,  Technology  OperaOons  and  Quality  Assurance  (QA)  

•  More  and  smaller  changes:  less  risk  •  Giving  developers  more  environment  control  •  Giving  infrastructure  more  applicaOon-­‐centric  understanding  

•  Clearly  arOculaOng  simple  processes  •  AutomaOng  as  much  as  possible  •  CollaboraOon  between  dev  and  ops  

If you only remember one slide from my talk – make it this one.

Page 36: Modern (Java) Enterprise Architectures

What  about…  

The  Cloud  

Page 37: Modern (Java) Enterprise Architectures

What  is  Cloud  CompuOng?  •  “Cloud”  is  an  abstracOon…  

•  Provide  IT  as  a  service  •  Self  serviced  •  Pay  as  you  go  

•  Just  like…  

Page 38: Modern (Java) Enterprise Architectures

Clouds  •  Infrastructure  as  a  Service  –  IaaS  

–  Computer  infrastructure  as  a  service  –  Amazon  EC2,  VMware  vCloud  Director  –  Typically  plaWorm  virtualizaOon  environment  

•  PlaWorm  as  a  Service  –  PaaS  –  CompuOng  plaWorm  and/or  soluOon  stack  as  a  

service  –  Google  App  Engine,  VMforce  –  Ocen  consuming  cloud  infrastructure    –  Ocen  sustaining  cloud  applicaOons.  

•  Socware  as  a  Service  –  SaaS  –  Socware  as  a  service  over  the  Internet  –  Salesforce.com  –  EliminaOng  the  need  to  install  and  run  the  

applicaOon  on  the  customer's  own  computers    –  Simplifying  maintenance  and  support  

Socware  

PlaWorm  

Infrastructure  

Page 39: Modern (Java) Enterprise Architectures

Clouds  •  Private:  My  data  center  

•  Public:  Someone  else's  data  center  

•  Managed:  Managed  for  me  

•  Hybrid:  Mix  Private Cloud Public Cloud

Page 40: Modern (Java) Enterprise Architectures

Cloud  is  inevitable  •  Clear  economically  benefits  

•  BeGer  compuOng  resource  uOlizaOon  

•  Flexibility  

•  Self  serviced:  A  developer  can  just  create  a  test  environment  •  Massive  producOvity  gain  

Page 41: Modern (Java) Enterprise Architectures

How  is  this  relevant?  

Page 42: Modern (Java) Enterprise Architectures

Cloud  is  self  serviced  •  Developers  starts  the  (tesOng)  environment  all  by  himself.  

•  OperaOons  define  policies,  approved  infrastructure  etc.  •  Otherwise  developers  use  a  public  cloud  •  Processes  might  be  changed  radically  •  I.e.  more  responsibility  and  influence  for  developers  

Page 43: Modern (Java) Enterprise Architectures

Cloud  =  Pay  as  you  Go  •  Higher  load  requires  more  resources  •  Less  load  should  consume  less    resources  

•  More  (or  less)  systems  will  share  the  load  •  It  must  be  possible  to  create  (and  remove)  systems  on  the  fly  

•  You  can't  afford  a  complex  installaOon  processes  •  You  will  be  handled  like  a  SaaS  

Page 44: Modern (Java) Enterprise Architectures

Puqng  Things  into  ProducOon  •  A  deployment  to  a  new  piece  of  metal  has  to  be  automated  – Otherwise  you  can't  handle  increased  demand  –  IaaS:  Do  it  yourself  – PaaS:  Taken  care  of  

•  Deployment  process  will  be  radically  different  •  Might  eliminate  the  need  for  dynamic  changes  •  A  real  deployment  is  fast  enough  

•  Note:  TesOng  /  quality  must  sOll  be  assured  

Page 45: Modern (Java) Enterprise Architectures

Commit  =  Deploy?  

Page 46: Modern (Java) Enterprise Architectures

Logical  conclusion  of  Agility  •  Lots  of  small  improvements  in  producOon  •  ApplicaOon  always  compileable  /  executable  •  Automated  tests  •  ConOnuous  integraOon  •  ConOnuous  Deployment    •  Why  bother  with  dynamic  reconfiguraOon  of  parts?  

Page 47: Modern (Java) Enterprise Architectures

Programming  Model  again  •  Spring  based  soluOons  

•  Google  App  Engine  •  VMforce  (VMware  /  SpringSource  +  Salesforce)  

•  No  Java  EE  based  PaaS  •  Focus  on  lightweight  infrastructure  important  

•  Less  resources  to  start  up  new  (virtual)  computers  •  Technology  agnosOc  approach  important  

•  Cloud  has  different  model  •  See  Google  App  Engine  and  its  limited  Java  /  JPA  …  •  See  NoSQL  for  data  storage  (Spring  Data)  •  See  AMQP  for  messaging  (Spring  AMQP)  •  Roo/Grails  should  be  able  to  level  these  differences  

Page 48: Modern (Java) Enterprise Architectures

Conclusion  

Page 49: Modern (Java) Enterprise Architectures

Conclusion  •  Java  EE's  model  is  limited  by  class  loader  isolaOon  

– doesn't  maGer  if  you  install  a  system  completely  afresh  anyway  

•  OSGi  solves  this  problem  •  But  you  will  define  hot  spots  for  changes  •  and  could  use  rule  engines  etc.  instead  •  Important:  TesOng,  process,  operaOons  •  Cloud  will  change  this  completely  

– much  faster,  self  service  deployment  on  fresh  system,  programming  model  

Page 50: Modern (Java) Enterprise Architectures

What  is  the  slide  you  should  have  remembered?  

Page 51: Modern (Java) Enterprise Architectures

DevOps  to  the  Rescue?  •  Processes,  methods  and  systems  for  •  CommunicaOon,  collaboraOon  and  integraOon  •  Between  Development,  Technology  OperaOons  and  Quality  Assurance  (QA)  

•  More  and  smaller  changes:  less  risk  •  Giving  developers  more  environment  control  •  Giving  infrastructure  more  applicaOon-­‐centric  understanding  

•  Clearly  arOculaOng  simple  processes  •  AutomaOng  as  much  as  possible  •  CollaboraOon  between  dev  and  ops  

Page 52: Modern (Java) Enterprise Architectures

QuesOons?