24- to 28-Feb-2014 with a special "hack" day on 24-Feb-2014
Day 1: Monday
Chaired session 1 day 1 on Continuous Delivery strategies and tools. Full discussion and audio now available: http://javaposse.com/java-posse-45.
Summary: lots of tools to help make it happen, takes a concerted cross-functional and large effort across development, release engineering, test (specifically automated test development), operations (heavy emphasis on monitoring, A/B testing ability, and ability to deploy fixes quickly). Single-Jar deployment is a good thing: Dropwizard & Spring Boot. Gradle can be a lot more flexible as a build tool than Maven. Zuul as a "Shunt" proxy idea to test development code in parallel with production load. Go Forth and Deploy.
To Read: Orbiting the Giant Hairball.
Day 2: Tuesday
Chaired session 3 day 2: NoSQL State of the Art / Cassandra. Full discussion and audio now available: http://javaposse.com/java-posse-453.
Summary: MongoDB - Dick's experience is it focuses on speed at all costs, including reliability - but very fast. Issue: silent failure/silent data losss. Alternative commercial back-end w/higher reliability: TokuMX. Slick Framework: mapping Scala to RDBMS. NoSQL tends to map better to Scala's immutable view of the world, better than JPA, but frameworks not as mature as JPA. Versioning/journaling databases: CouchDB, Datomic (from the Clojure guy).
Cassandra: CQL queries are very practical, atomic batches, fewer modification race conditions if properly structured. Still VERY very robust high availability and automated recovery. Concurrency drove Netflix and other users to make this switch in a high transaction environment (100,000 inserts/second). Tradeoff: eventual consistency (see above re: journaling/versioning).
Graph: Neo4j, major trend is graph databases is to distribute, but a difficult problem because of graph connections between objects.
APIs: JPA/Annotations: require mutable beans. Spring Data: one API to rule them all. Try putting a REST API in front of data store to be able to tune/cache/swap out data store, even different API for reading vs writing. Functional: Monads for interacting with the database. Storm & Kafka to handle database inserts in a queueing fashion.
- Criteria for selecting a NoSQL database:
- Couch/BigCouch - good materialized views, bad: data loss
- Cassandra - write throughput/resiliency across regions/recovery from failure/linear scaling; bad: hiring is difficult. Priam tool for starting instnce.
- Mongo - VERY easy to get started; bad: possible data loss, writes can fall behind
Considerations: migration costs, batch analysis/data cleanup/consistency checking, possible dump to RDBMS to analyze data with reporting tools (or you have to write your own)
Session 1: AntiFragile and Beyond the Simian Army - chaired by Andrew - lots of discussion on building resilient & clustered systems, managing state, and (VERY important) verifying the actual resilience of systems in test and production. Full discussion on Netflix tools.
Session 2: Open Sourcing Corporate Code - chaired by Joe. Thoughts on buy-in from upper management. Enlightenment: actually helped Netflix with *recruiting*. Get your corporate github Corpname-oss account NOW to have a place on the web to put stuff.
Hack Day: Wednesday
Docker - very interesting method for application deployment, build an image to run a single service, deploy as an "immutable container". Questions: maturity, ability to use puppet to build container configuration, how to manage separate instances/configurations for dev/test/prod. Minimal support for data persistence and cross-machine networking
etcd - Convenient way to have services register their ports and addresses in a cluster-aware high-availability fashion across hosts. Can help with the Docker cross-machine networkng aspect.
Day 3: 27-Feb-2014
Session 2: Reactive/RxJava/Akka: Rapidly maturing set of frameworks to start moving more functional. Hugh/HP: very very positive experience refactoring a large legacy application to run on Akka-on-Java. Downside: lots of casts and instanceof in Akka Java vs the more clean syntax of Scala, *but* you can actually hire Java developers. RxJava: useful, ramping up in usage inside Netflix and getting considerable contributions from outside. Reactive Manifesto. SpringSource: started Reactor framework as an alternative implementation. Currently have to pick 1 - no common API.
Session 3 - Monads WTF? Getting closer to understanding, but elusive like Heisenberg. First: drop the term "monad". Think of it more like a sequence/series combined with a JS-style transitive closure. Listen: http://javaposse.com/java-posse-452.
Day 4: 28-Feb-2014
Session 1 - TDD - Chaired by Julie. Lots of into on alternatives to JUnit. TestNG, performance/load testing, A/B testing, see above re: testing development code with production load using Zuul. Testing deployment/VM build pipeline, etc. Audio TBD.
Session 2 - Inspire Me - http://javaposse.com/java-posse-456. Lots of info on continuous learning: Coursera, Berkley, Stanford, MIT. Huge reading list - see links. Podcasts, science, and "everything is awesome".
Wrap up session - let's do it again next year!