radical agility
play

Radical Agility with Autonomous Teams and Microservices - PowerPoint PPT Presentation

Radical Agility with Autonomous Teams and Microservices jan.loeffler@zalando.de / @jlsoft2 GOTO Copenhagen 2015-10-06 We shape our buildings; thereafter they shape us Conways Law organizations which design systems ... are constrained


  1. Radical Agility with Autonomous Teams and Microservices jan.loeffler@zalando.de / @jlsoft2 GOTO Copenhagen 2015-10-06

  2. We shape our buildings; thereafter they shape us

  3. Conway’s Law “organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations” Melvin Conway

  4. AN ARCHITECTURE FOR INNOVATION

  5. A BRIEF HISTORY OF ZALANDO TECHNOLOGY

  6. 900+ Apps 800+ Tech employees October

  7. deploy request servers Platform Platform team

  8. 70+ delivery teams deploy request servers request storage Platform Platform team

  9. DELIVER AMAZING PRODUCTS EFFICIENTLY AT SCALE, AND FEELING GREAT ABOUT IT.

  10. PURPOSE - AUTONOMY - MASTERY

  11. DRIVE The Surprising Truth About What Motivates Us Daniel Pink

  12. FROM CONTROL & COMMAND TO PURPOSE AND TRUST

  13. DELIVERY PEOPLE LEAD LEAD

  14. BUSINESS PRODUCT ASSURANCE PRODUCT PRODUCT OWNER SPECIALIST GLOBAL REGRESSION DELIVERY LEAD DELIVERY DELIVERY ENGINEERING LEAD PRODUCTIVITY PEOPLE LEAD PEOPLE TECH LEAD SERVICE OVERARCHING CONTROLLING AGILE RISK , COACHING PROJECT COMPLIANCE SECURITY & EXECUTIVE MANGEMENT STRATEGY ADMIN & SUPPORT SUPPORT ONBOARDING & INNOVATION LAB TECHADEMY

  15. OKR

  16. API FIRST

  17. REST

  18. SAAS

  19. MICRO SERVICES

  20. CLOUD

  21. OPEN SOURCE

  22. Compliance Innovation

  23. WHERE APP APP APP APP APP APP 1 4 1 4 1 4 APP APP APP APP APP TO GO 2 5 2 5 2 APP APP APP APP APP 3 3 3 6 6 DataCenter I DataCenter II AWS

  24. STUPS.io STUPS To Unleash Penguin Swarms

  25. One AWS account per Team Deployment with Docker Managed SSH Access REST / OAuth 2.0 mandatory

  26. DOCKER SSH AUDIT FULL AWS DEPLOY ACCESS REPORTS ACCESS STUPS AWS

  27. Internet *.abc.example.org *.xyz.example.org ELB ELB Team ABC Team XYZ EC2 EC2 EC2

  28. myapp.example.org ELB myapp-1 EC2 EC2 EC2 + Docker + Docker + Docker

  29. myapp.example.org ELB myapp-1 ELB myapp-2 EC2 EC2 EC2 EC2 EC2 + Docker + Docker + Docker + Docker + Docker

  30. myapp.example.org ELB myapp-2 EC2 EC2 + Docker + Docker

  31. Ticket system Issue “ABC-123” SCM Commit “afb123” msg: ABC-123..

  32. Pier One Docker Registry Ticket system Image “docker/myart:1.0” commit: afb123 Issue “ABC-123” build SCM Commit “afb123” msg: ABC-123..

  33. Pier One Docker Registry Ticket system Image “docker/myart:1.0” commit: afb123 Issue “ABC-123” build SCM Commit “afb123” msg: ABC-123.. Application Registry approved Application Version “1.0” ✓ Specification artifact: docker/myart:1.0 ✓ Artefact tested

  34. Pier One Docker Registry Ticket system Image “docker/myart:1.0” commit: afb123 EC2 Instance Issue “ABC-123” build Docker Container SCM AMI Commit “afb123” msg: ABC-123.. Application Registry approved Application Version “1.0” ✓ Specification artifact: docker/myart:1.0 ✓ Artefact tested

  35. Docker Registry docker push Senza CLI docker pull AWS AMI

  36. Developer rotate OAuth Console passwords Provider Password Application Registry Rotator store get access passwords token AWS S3 get password AMI

  37. Spilo Highly available open-source PostgreSQL appliance https://github.com/zalando/spilo

  38. Try STUPS.io https://stups.io https://docs.stups.io All components are Open Source https://github.com/zalando https://github.com/zalando-stups

  39. Jan Löffler ● Head of Platform Engineering ● Twitter: @jlsoft2 ● jan.loeffler@zalando.de ● http://www.slideshare.net/jlsoft/

  40. We shape our buildings; thereafter they shape us

  41. STUPS website & docs https://stups.io https://docs.stups.io All components are Open Source https://github.com/zalando https://github.com/zalando-stups

  42. BACKUP

  43. T N E M Y O L P E D

  44. DOCKERFILE FROM zalando/openjdk:8u40-b09-4 EXPOSE 8080 COPY target/hello-world.jar / COPY target/scm-source.json / CMD java $(java-dynamic-memory-opts) ↲ -jar /hello-world.jar

  45. DOCKER BUILD & PUSH $ docker build -t ↲ pierone.example.org/myteam/hello-world:0.2 . $ pierone login Getting OAuth2 token "pierone".. OK Storing Docker client configuration in ~/.dockercfg.. OK $ docker push pierone.example.org/myteam/hello-world:0.2

  46. VERIFY IMAGE UPLOAD $ pierone tags myteam hello-world Team │ Artifact │ Tag │ Created │ By | myteam hello-world 0.1-andre-test 13d ago ahartmann myteam hello-world 0.1 3d ago ahartmann myteam hello-world 0.2 3m ago hjacobs $ pierone scm myteam hello-world 0.2 Tag │ Author │ URL │ Revision │ Status │ Created │ By | 0.2 hjacobs git:git@github.. 442b7502 10m ago hjacobs

  47. SENZA: DEFINITION YAML SenzaInfo : StackName : hello-world Parameters : - ImageVersion : Description : "Docker image version of Hello World." SenzaComponents : - Configuration : Type : Senza::StupsAutoConfiguration # auto-detect network setup - AppServer : # will create a launch configuration and ASG with scaling triggers Type : Senza::TaupageAutoScalingGroup InstanceType : t2.micro SecurityGroups : [app-hello-world] ElasticLoadBalancer : AppLoadBalancer TaupageConfig : runtime : Docker source : "stups/hello-world:{{Arguments.ImageVersion}}" ports : 8080: 8080

  48. SENZA: STACK DEPLOYMENT $ senza create hello-world.yaml 1 0.2 Generating Cloud Formation template.. OK Creating Cloud Formation stack hello-world-1.. OK $ senza events hello-world.yaml 1 Stack Name │ Ver. │ Resource Type │ Resource ID │ Status │ Status Reason │ Event Time hello-world 1 CloudFormation::Stack hello-world-1 CREATE_IN_PROGRESS User Initiated 10m ago ... hello-world 1 CloudFormation::Stack hello-world-1 CREATE_COMPLETE 6m ago

  49. TAUPAGE: DOCKER COMMAND LINE docker run -d --log-driver= syslog ↲ --restart=on-failure:10 ↲ -e DB_SUBNAME=.. ↲ -v /meta:/meta:ro ↲ -e CREDENTIALS_DIR=/meta/credentials ↲ -p 8080:8080 -p 7979:7979 ↲ -u 999 ↲ pierone.example.org/stups/pierone:0.5

  50. SENZA: MANAGE STACKS

  51. G N I G G O L

  52. TAUPAGE: DOCKER SYSLOG docker run .. --log-driver= syslog .. /etc/rsyslog.d/24-application.conf :syslogtag, startswith, "docker" ↲ /var/log/application.log /etc/logrotate.d/.. Don’t forget log rotation..

  53. APPLICATION LOGS: TAUPAGE SUPPORTS LOGENTRIES AND SCALYR

  54. S S E C C A H S S

  55. SSH ACCESS: TIME-LIMITED ACCESS TO ANY TEAM SERVER

  56. G N I R O T I N O M

  57. ZMON TODO: Screenshot

  58. ZMON APPLIANCE ZMON KairosDB Controller *.foo.example.org *.bar.example.org Team “Foo” Team “Bar” ELB ELB ZMON ZMON EC2 EC2 EC2 EC2 Instance Appliance Appliance Instance EC2 EC2 Instance Instance Instance Instance

  59. HYSTRIX TURBINE

  60. R E K C O D

  61. RECAP: DOCKER IN STUPS ● Ubuntu & OpenJDK base image ● Log to STDOUT ● Config via environ. vars (+ KMS decryption) ● Non-root execution ● Persistence via EBS mounts ● Immutable stacks , no orchestration ● DNS endpoints , etcd e.g. for Hystrix streams

  62. Securing REST based Microservices Lock all doors Encrypt all channels ● Open only ports that you need ● Keep all tranferred data confidential permanently ● Use TLS ● Grant SSH access only temporary ● Use a firewall for each app container Authenticate & Authorize Monitor & Limit your API calls ● Make sure you talk to the right guy ● Control who accesses your API how ● Check if access is permitted often, when and from where ● Use OAuth 2.0 ● Use Rate Limiting against fraud ● Use external Security Services against DDoS Isolate your apps ● Only one app per container / server ● Use Docker or CoreOS Rkt

  63. OAuth 2.0 explained Hi, could you please show me your credentials? I need to check your identity. Sure, I am jan.loeffler@zalando.de and my password is secret . Hey Mr. DJ, can I have an Access Token for the Order API? No issue Sir, I just have to ask the User for some details. Your seem to be ok! Here is your access token d2fa5d27-2acc-4b06-95i8-6d3018d94b4f User “Jan” Authorization Server (OpenAM / OpenDJ) Here are all all your orders! I want to see all my past orders! Hey DJ, I was just given this token: Sure, the token belongs to jan. d2fa5d27-2acc-4b06-95i8-6d3018d94b4f loeffler@zalando.de and is still valid. To whom does it belong? Hey Order API, here is my access token: Hey Order API, could you please list all past orders of Jan Loeffler? d2fa5d27-2acc-4b06-95i8-6d3018d94b4f Sorry, this resource is protected! Please show me your Access Token! So, here are all orders of Jan Loeffler. Resource Server Browser (App Server)

Recommend


More recommend