• Save
Java micro-services
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Java micro-services

  • 8,932 views
Uploaded on

This is a talk I delivered in April 2012 at the 33rd Degree conference in Krakow - its about building small simple applications and the unix philosophy

This is a talk I delivered in April 2012 at the 33rd Degree conference in Krakow - its about building small simple applications and the unix philosophy

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
8,932
On Slideshare
8,844
From Embeds
88
Number of Embeds
4

Actions

Shares
Downloads
0
Comments
0
Likes
21

Embeds 88

http://cliveboulton.com 62
https://twitter.com 18
https://si0.twimg.com 6
http://safe.txmblr.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Even though we are going to talk about the small, we need to start at the big….
  • Straw poll, I have a logical diagram next up – Who wants to guess whats in it?
  • Straw poll, I have a logical diagram next up – Who wants to guess whats in it?
  • The more things change the more they stay the same
  • Evolutionary approaches to architectureReal Options
  • Straw poll, I have a logical diagram next up – Who wants to guess whats in it?
  • Because you have to be drunk to get on one, it stops everywhere, takes ages and you end up covered in tramps vomit….
  • Fred Brooks
  • Even though we are going to talk about the small, we need to start at the big….
  • Approx 1972
  • Even though we are going to talk about the small, we need to start at the big….
  • Even though we are going to talk about the small, we need to start at the big….

Transcript

  • 1. Main sponsorMicro Services – Java the Unix way James Lewis
  • 2. James LewisSenior Engineer / Principal Consultant / TAB memberYour Storyteller today
  • 3. radar
  • 4. latest Edition released last week
  • 5. Micro-servicesEmbedded Servlet Containers
  • 6. Or how we designed and nearly built a Resource Oriented, EventDriven System out of applications about 1000 lines long…WHAT I DID LAST SUMMER
  • 7. In the beginning…• There was a new product being developed by an organisation in London• The organisation had gathered their list of high level requirements• And they asked ThoughtWorks if we could help them design and build it…
  • 8. So we took a look at their requirements• Me and my mates at ThoughtWorks• Worked out to be about 5000 points worth of User Stories – At 7 points per pair of developers per week
  • 9. Com lete pHalf wayt hrough 0 Heat o en p ed En day d Cows hell p fly igs death of the b x o 1 co e m freezes the ho e m Universe
  • 10. Tip 1 Divide and conquerStart on the outside and model business capabilities
  • 11. Product Product Product Product Real Time and Mobile CMS Ecommerce Demo External Analytics Batch Interfaces Site Reporting Product 3rd party Gateway SMS Gateway Product Product Product Product Config Call Centre Marketing Reporting Application Application Application Application Account A / E Services Config Services Services User Services Product Data User / Role Product Product / static Catalog Repository Raw Txn Store Account Store Member Store Repository Product / static Catalog Access and Entitlement Product / static Catalog Config and Batch Lifecyle Metadata Product Reporting services servces Rules Engine Services Batch Interface Rules Config Config / Application Reporting metadata store Rules store datastore Metadata Rules Engine Reporting ServicesEach small box represents a capability,composed of one or more services
  • 12. • The only way we could hit anything like the timescales required was to scale the programme quickly• And that meant multiple teams in multiple workstreams
  • 13. And there weresome, umm, interesting non- functional requirements too
  • 14. Product Product Product Product Real Time and Mobile CMS Ecommerce Demo External Analytics Batch Interfaces Site Reporting Product 3rd party Gateway SMS Gateway Product Product Product Product Config Call Centre Marketing Reporting Application Application Application Application Account A / E Services Config Services Services User Services Product Data User / Role Product Product / static Catalog Repository Raw Txn Store Account Store Member Store Repository Product / static Catalog Access and Entitlement Product / static Catalog Config and Batch Lifecyle Metadata Product Reporting services servces Rules Engine Services Batch Interface Rules Config Config / Application Reporting metadata store Rules store datastore Metadata Rules Engine Reporting ServicesThis Had to handle 1000TPS with a 99th percentile latency of < 2 seconds bit
  • 15. Product Product Product Product Real Time and Mobile CMS Ecommerce Demo External Analytics Batch Interfaces Site Reporting Product 3rd party Gateway SMS Gateway Product Product Product Product Config Call Centre Marketing Reporting Application Application Application Application Account A / E Services Config Services Services User Services Product Data User / Role Product Product / static Catalog Repository Raw Txn Store Account Store Member Store Repository Product / static Catalog Access and Entitlement Product / static Catalog Config and Batch Lifecyle Metadata Product Reporting services servces Rules Engine Services Batch Interface Rules Config Config / Application Reporting metadata store Rules store datastore Metadata Rules Engine Reporting ServicesSupport a user base of 100 million active customers This bit
  • 16. Product Product Product Product Real Time and Mobile CMS Ecommerce Demo External Analytics Batch Interfaces Site Reporting Product 3rd party Gateway SMS Gateway Product Product Product Product Config Call Centre Marketing Reporting Application Application Application Application Account A / E Services Config Services Services User Services Product Data User / Role Product Product / static Catalog Repository Raw Txn Store Account Store Member Store Repository Product / static Catalog Access and Entitlement Product / static Catalog Config and Batch Lifecyle Metadata Product Reporting services servces Rules Engine Services Batch Interface Rules Config Config / Application Reporting metadata store Rules store datastore Metadata Rules Engine Reporting ServicesThis Needed to support bulk loads of 30 – 90 million records nightly (and keep them for six months) bit
  • 17. Did I mention PCI Level 1?
  • 18. Finally, this is a product build. So it needed to be modular /<cough> “infinitely configurable”And deployable on Cloud and Tin
  • 19. The product need to to be…• Performance – fairly high throughput both transactional and batch• Fault tolerant – One thing about the cloud, you are designing for failure right?• Configurable – On a per install or PaaS basis• Portable – Fortunately not to Windows…• Maintainable – over multiple versions and years• Supporting big data sets – Billions of transactions available – Millions of customers availableand capable of being built quickly without sacrificing the other principles
  • 20. Plus ça change, plus cest la même chose.(The more things change the more they stay the same)
  • 21. So, after five weeks we had broken the problem down into capabiltiesNow we had to start scaling the teams to deliver these capabilities
  • 22. Tip 2Use Conway’s Law to structure teams“…organizations which design systems … are constrained to produce designswhich are copies of the communication structure of those organizations” Melvin Conway, 1968
  • 23. The first business capability - Users• Responsible for creation and maintenance of users in the system – Up to 100 million of them per instance of the product• Used by many clients with many usage patterns – Call centre and website – CRUD – Inbound batch files – CRUD x hundreds of thousands per night• Many downstream consumers of the data – Fulfilment systems for example
  • 24. Tip 3 The Last Responsible MomentDon’t decide everything at the point you know least
  • 25. We started with a business process… Notify Batch External Enrolment System Results File Invalid File Notify Sys Batch Failed Admin Apply rules Batch Filea Send Letter file User received Validate file Validate Line Created structure Item Create User Link Account Send results file Invalid User Notify Sys Admin and noticed something funny…
  • 26. Batch User Fulfilment Account monitoring Monitoring Monitoring Monitoring Monitoring Events Services Batch Event Fulfilment User Event Collection Triggering Triggering Triggering Triggering Triggering Triggering Triggering Batch Bank Triggering Fulfilment Processing Member Account Rules Engine Service Service Service Service BankFile Structure Address Rules Engine fulfilment Account Validation Validation Creation Ad-hoc UsersResults File User Bank fulfilment Creation Validation Rules store Account Store User EmailBatch Store Creation User Store
  • 27. I know what you are thinking… ** Dan North coined the term Enterprise Night Bus…
  • 28. Or you could use the web
  • 29. Tip 4Be of the web, not behind the web
  • 30. RFC 5023 to be precise
  • 31. /user-request application/atom+json/user-request/1223 Event Event queue store Queue processing engine User User Service store Users Capability /users/142 application/vnd.user+JSON /usersand this is what we built
  • 32. /user-request application/atom+json /user-request/1223Standard resource representations using well known webstandards – atom+json Event Event queue store Queue processing engine User User Service store Users Capability /users/142 application/vnd.user+JSON /users
  • 33. /user-request application/atom+json /user-request/1223Reified the request to create a user. Clients POST a requestto create a user as an entry Eventan atom collection. to Event queue store Queue processing engine User User Service store Users Capability /users/142 application/vnd.user+JSON /users
  • 34. Tip 5If something is important, make it anexplicit part of your design Reify to convert into or regard as a concrete thing: to reify a concept.
  • 35. /user-request application/atom+json /user-request/1223 Event Event queue storeEvent queue has the single responsibility of managing state Queue processingtransitions for the request to create a user engine User User Service store Users Capability /users/142 application/vnd.user+JSON /users
  • 36. /user-request application/atom+json /user-request/1223 Event Event queue store Queue processing engine User User Service store Users CapabilityQueue Processing Engine implemented the CompetingConsumer pattern using Conditional GET, PUT and Etags /users/142 application/vnd.user+JSONagainst the atom collection exposed by the event queue /users
  • 37. /user-request application/atom+json /user-request/1223 Event Event queue store Queue processing engine User User Service store Users CapabilityUser Service and store is the system of record for users /users/142 application/vnd.user+JSON /users
  • 38. /user-request application/atom+json /user-request/1223 Event Event queue store QueueAfter creation, representations of Users are available at processing enginecanonical locations in well defined formats and creationevents added to another atom collection User Service User store Users Capability /users/142 application/vnd.user+JSON /users
  • 39. Where they are available for consumptionby other downstream systems
  • 40. Batch monitoring User Monitoring Fulfilment Monitoring Account Monitoring Monitoring Monitoring Services Batch Event Fulfilment User Event Collection Triggering Triggering Triggering Triggering Triggering Triggering Triggering Batch Bank Triggering Fulfilment Processing Member Account Rules Engine Service Service Service Service BankFile Structure Address Rules Engine fulfilment Account Validation Validation Creation Ad-hoc UsersResults File User Bank fulfilment Creation Validation Rules store Account Store User EmailBatch Store Creation Fulfilment User Store
  • 41. Our micro-services• User Request Queue – Forms the transactional boundary of the system• Request Queue Processor – Competing Consumer processes events on the queue and POSTs them to• User Service – System of record for Users in the system – Responsible for all state changes of those users – Exposes events on those users to other systems
  • 42. CHARACTERISTICS OFMICRO-SERVICES
  • 43. Small with a single responsibility• Each application only does one thing• Small enough to fit in your head – James’ heuristic – “If a class is bigger than my head then it is too big”• Small enough that you can throw them away – Rewrite over Maintain
  • 44. Containerless and installed as well behaved Unix services• Embedded web container – Jetty / SimpleMind – This has a lot of benefits for testing (inproctester for example) and eases deployment• Packaged as a single executable jar – Along with their configuration – And unix standard rc.d scripts• Installed in the same way you would install httpd or any other application – Why recreate the wheel? Daemons seem to work ok for everything else. Unless you are *special*?
  • 45. Located in different VCS roots• Each application is completely separate• Software developers see similarities and abstractions – And before you know it you have One Domain To Rule Them All• Domain Driven Design / Conways Law – Domains in different bounded contexts should be distinct – and its ok to have duplication – Use physical separation to enforce this• There will be common code, but it should be library and infrastructure code – Treat it as you would any other open source library – Stick it in a nexus repo somewhere and treat it as a binary dependency
  • 46. Provisioned automatically• The way to manage the complexity of many small applications is declarative provisioning – UAT: • 2 * service A, Load Balanced, Auto-Scaled • 2 * service B, Load Balanced, Auto-Scaled • 1 * database cluster
  • 47. Status aware and auto-scaling• What good is competing consumer if you only have one consumer? – We don’t want to wake Peter up at three in the morning any more to start a new process• Use watchdog processes to monitor in-app status pages – Each app exposes metrics about itself – In our case, queue-depth for example – This allows others services to auto-scale to meet throughput requirements
  • 48. A single capability composed ofmany small applications andexposing a uniform interface of AtomCollections
  • 49. How the capabilities form a product
  • 50. They interact via the uniform interface• HTTP – Don’t fight the battles already won – Use no-brainer force multipliers like reverse proxies• HATEOS – Link relations drive state changes – Its an anti-corruption layer that allows the capability to evolve independently of its clients• Standard media types – Can be used by many different clients – You can monitor it using a feed reader if you want…
  • 51. atom+json / HTTP (AJOH) Monitoring Reporting Capability Capability (AJOH) (AJOH) atom+XML / HTTP User Fulfilment Capability Capability (AJOH)Capabilities poll waiting(AJOH) for events that they know how to deal (AJOH)with. Forming an eventually consistent system Inbound Batch Call Centre External Suppliers
  • 52. Tip 6Favour service choreography over orchestration
  • 53. atom+json / HTTP (AJOH) Monitoring Reporting Capability Capability (AJOH) (AJOH)atom+XML / HTTPEach is entirely decoupled from it’s clients, scalable, testableand deployable individually User Fulfilment Capability Capability (AJOH) (AJOH) (AJOH) Inbound Batch Call Centre External Suppliers
  • 54. Tip 7Use hypermedia controls to decouple services
  • 55. atom+json / HTTP (AJOH) Monitoring Reporting Capability Capability (AJOH) (AJOH)atom+XML / HTTPEach developed by a separate team,using whatever tech they choose User Fulfilment Capability Capability (AJOH) (AJOH) (AJOH) Inbound Batch Call Centre External Suppliers
  • 56. Our stack• Embedded Jetty (current project uses SimpleWeb)• PicoContainer for DI• Hibernate (but wrote our own SQL)• Abdera for Atom• Smoothie charts• Metrics @codehass• Graphite
  • 57. Infrastructure automation stack• Fabric with boto• AWS, but deployable to anything with SSH• Maven (boo)• Git• Puppet for provisioning
  • 58. NO SILVER BULLETS
  • 59. This stuff is hard• We haven’t even talked about – Versioning – Integration – Testing – Deployment• Eventual Consistency can be tricky for people to get there head around• Developers like using enterprisy software – No one got fired for choosing an ESB – Convincing people to use the web is hard
  • 60. SUMMARY
  • 61. The Unix Philosophy :s/pipes/http/Lions commentary on Unix 2nd edition
  • 62. Consistent and reinforcing practicesHexagonal Business capabilities composed of:Micro Services that you canRewrite rather than maintain and which formA Distributed Bounded Context.Deployed as containerless OS servicesWith standardised application protocols and message semanticsWhich are auto-scaling and designed for failure
  • 63. Is hiring!
  • 64. Thanks!jalewis@thoughtworks.com@boicyhttp://bovon.org