Real Terracotta

3,883 views

Published on

Real-world scalability patterns with Terracotta: enjoy the challenges of scalability!

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,883
On SlideShare
0
From Embeds
0
Number of Embeds
538
Actions
Shares
0
Downloads
124
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Real Terracotta

  1. 1. REAL TERRACOTTA Real-world scalability patterns with Terracotta SERGIO BOSSA Pro-Netics / Sourcesense Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  2. 2. About Me Software architect and engineer ✔ http://www.pronetics.it ➔ http://www.sourcesense.com ➔ Blogger ✔ http://sbtourist.blogspot.com ➔ Open Source Enthusiast ✔ ➔ Lead at Scarlet - Clustering for Jira http://scarlet.sf.net ➔ Committer at Spring Modules ➔ http://springmodules.dev.java.net ➔ Committer at Terracotta Forge ➔ http://forge.terracotta.org ➔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  3. 3. Agenda Do I need a cluster? ✔ Terracotta concepts. ✔ Scalability patterns with Terracotta. ✔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  4. 4. Do I need a cluster? The old, dummy, question: ✔ ➔ Do I need a clustered architecture? The correct one: ✔ ➔ Do I need scalability? ➔ Do I need availability? ➔ Nowadays, the answer is: yes, you need. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  5. 5. Why should I need a cluster? Several changes in the social and market landscape ... ✔ In a few words: ✔ ➔ More and more users surfing the web. ➔ More and more hardware at cheaper price. ➔ More and more processors ... even on a single machine. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  6. 6. What should I use for my cluster? Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  7. 7. The Terracotta Revolution Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  8. 8. The Terracotta Revolution Transparent clustering. ✔ ➔ Everything happens under the hood. Easy to work with. ✔ ➔ If you know Java, you can cluster your application with no-to-minimal code changes. ➔ Deep integration with common frameworks and patterns. Optimized for performance. ✔ ➔ No cross-node communication. ➔ Built on the concept of diff. Open Source. ✔ ➔ With a great community. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  9. 9. Terracotta Technology Overview Network Attached Memory ✔ ➔ All cluster nodes share part of their memory heap: a shared object graph starting from one or more roots. ➔ Shared objects changes are propagated at the byte level: only the different bytes get propagated! ➔ Shared objects changes are delimited by lock-guarded transactions. ➔ Shared objects are backed by the cluster server filesystem. ➔ With preserved Java semantics (i.e. object identity)! Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  10. 10. Terracotta Technology Overview Hub-and-Spoke network architecture ✔ ➔ A central cluster server with one or more cluster client nodes. ➔ Clients talk only with the server. ➔ Server can be put in active-passive mode (no SPOF). ➔ For enterprise customers only: server can be put in active-active mode (no SPOB). Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  11. 11. Terracotta Technology Details Bytecode instrumentation ✔ ➔ Instrument classes in order to: ➔ Share classes among cluster nodes. ➔ Intercept and propagate changes. ➔ Apply transactions. ➔ Distribute method invocations. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  12. 12. Terracotta Technology Details Roots ✔ ➔ AKA super-static: created only for the first time, and then shared among all cluster nodes. ➔ Start of the shared object graph: all objects reachable from roots are shared among all cluster nodes. ➔ Except transient ones. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  13. 13. Terracotta Technology Details Locks ✔ ➔ Every read or write operation on a shared object state must be guarded by locks. ➔ Synchronized blocks. ➔ java.util.concurrent.locks.ReentrantReadWriteLock ➔ Acting as a transaction boundary. ➔ Acting as a change propagation boundary. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  14. 14. Terracotta Technology Details Distributed Method Invocation ✔ ➔ Methods called on a shared object from a cluster node, are automatically fired on the same object instance of all other cluster nodes. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  15. 15. Terracotta Technology Details Declarative configuration: ✔ ➔ XML file. ➔ Java annotations. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  16. 16. Terracotta Quick Start Plan Identify roots and related shared object graphs. ✔ Identify transactional methods. ✔ Identify classes that need to be instrumented. ✔ Identify distributed methods (optional). ✔ Choose your cluster deployment configuration: ✔ ➔ How many client nodes? ➔ How many server nodes? ➔ How much memory? ➔ ... Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  17. 17. Terracotta Quick Start Operate Configure the cluster. ✔ Start the Terracotta cluster server: ✔ sh tc_home/bin/start-tc-server.sh -f path/to/tc-conf.xml Start the Terracotta cluster client(s): ✔ TC_INSTALL_DIR=... TC_CONFIG_PATH=... . $TC_INSTALL_DIR/bin/dso-env.sh -q export JAVA_OPTS=${TC_JAVA_OPTS} java ... Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  18. 18. What about real world scalability? Feeling like lost at sea? Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  19. 19. Scalability in the real world We need some patterns! Cache your data in a distributed fashion. ✔ Partition your cached data and collocate with your ✔ processing. Asynchronously write-behind to your back-end. ✔ Asynchronously de-couple components communication. ✔ Asynchronously de-couple components processing. ✔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  20. 20. Data-affinity caching Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  21. 21. Data-affinity caching In a nutshell Key concepts: ✔ ➔ Use a partition function for grouping related entries on the same distributed cache instance. ➔ Use the partition function to look up the cache instance and put/get related entries. ➔ Process the cached data on the same node it belongs to. Key features: ✔ ➔ No network traffic between cache instances. ➔ Distributed load. ➔ Higher scalability. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  22. 22. Data-affinity caching With Terracotta Use: ✔ ➔ Tim-Tree-Map-Cache http://forge.terracotta.org/releases/projects/tim-tree-map-cache/ ➔ Key classes: ✔ org.tc.cache.CacheFactory ➔ org.tc.cache.ITerracottaCache ➔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  23. 23. Asynchronous write-behind Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  24. 24. Asynchronous write-behind In a nutshell Key concepts: ✔ ➔ Always write and read from your (distributed) cache. ➔ Asynchronously schedule writes to the storage. Key features: ✔ ➔ Higher throughput. ➔ Load throttling. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  25. 25. Asynchronous write-behind With Terracotta Use: ✔ ➔ Tim-Async http://forge.terracotta.org/releases/projects/tim-async/ ➔ Key classes: ✔ org.terracotta.modules.async.AsyncCoordinator ➔ org.terracotta.modules.async.ItemProcessor ➔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  26. 26. Asynchronous messaging Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  27. 27. Asynchronous messaging In a nutshell Key concepts: ✔ ➔ Connects application components through pipes. ➔ Configure processing filters to elaborate messages and make them flow through pipes. Key features: ✔ ➔ De-coupled application components. ➔ Higher reliability. ➔ Higher scalability. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  28. 28. Asynchronous messaging With Terracotta Use: ✔ ➔ Tim-Pipes http://forge.terracotta.org/releases/projects/tim-messaging/ ➔ Key classes: ✔ org.terracotta.message.topology.TopologyManager ➔ org.terracotta.message.topology.Topology ➔ org.terracotta.message.routing.Router ➔ org.terracotta.message.pipe.Pipe ➔ org.terracotta.message.pipe.PipeProcessor ➔ org.terracotta.message.subscriber.Subscriber ➔ org.terracotta.message.subscriber.SubscriberProcessor ➔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  29. 29. Asynchronous processing Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  30. 30. Asynchronous processing In a nutshell Key concepts: ✔ ➔ Create a set of tasks. ➔ Submit tasks to a master. ➔ Tasks will be executed by workers. ➔ Eventually wait for tasks to be completed. Key features: ✔ ➔ De-coupled execution of expensive tasks. ➔ Parallel execution of tasks. ➔ Customisable routing logic. ➔ Load distribution. Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  31. 31. Asynchronous processing With Terracotta Use: ✔ ➔ Tim-MasterWorker http://forge.terracotta.org/releases/projects/tim-messaging/ ➔ Key classes: ✔ org.terracotta.executor.DistributedExecutorService ➔ org.terracotta.executor.DistributedCompletionService ➔ org.terracotta.workmanager.statik.StaticWorkManager ➔ org.terracotta.workmanager.statik.StaticWorker ➔ org.terracotta.workmanager.dynamic.DynamicWorkManager ➔ org.terracotta.workmanager.dynamic.DynamicWorker ➔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  32. 32. Conclusion Enjoy scalability challenges! Design your scalable architecture ... ✔ Program in plain old Java ... ✔ Run with Terracotta! ✔ Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009
  33. 33. Q&A Sergio Bossa - sergio.bossa@pronetics.it - Pro-Netics / Sourcesense Javaday Roma III Edizione – 24 gennaio 2009

×