Useful supporting documentation for students learning about cloud native applications.
The app continuum — Architecture to show the evolution of a distributed system starting from a single application and evolving into several applications and services. Also check out the slides and code.
Microservices — Martin Fowler’s guide of useful resources on microservices. Provides information on when to use microservices and how to build a robust distributed system.
Monolith First — Advice on how to start and evolve a new project.
Building Microservices — Sam Newman’s book on building distributed systems.
Monoliths to Microservices — Sam Newman’s book on building distributed systems.
Bounded context — Martin Fowler’s take on bounded contexts with useful links to other sources.
Steeltoe Web-site — Open source libraries that enable .NET Core and .NET Framework apps to easily leverage Netflix Eureka, Hystrix, Spring Cloud Config Server, and Cloud Foundry services.
Evolve — Open source migration tool that uses plain old SQL scripts. Its purpose is to automate your database changes, and help keep those changes synchronized through all your environments and development teams, making it an ideal tool for continuous integration / delivery.
Play Framework — Play is based on a lightweight, stateless, web-friendly architecture.
Built on Akka, Play provides predictable and minimal resource consumption (CPU, memory, threads) for highly scalable applications.
Akka — Akka is a toolkit for building highly concurrent, distributed, and resilient message-driven applications for Java and Scala.
Dropwizard — Dropwizard pulls together stable, mature libraries from the Java ecosystem into a simple, light-weight package that lets you focus on getting things done.
Metrics — Metrics is a Java library which gives you unparalleled insight into what your code does in production. Metrics provides a powerful toolkit of ways to measure the behavior of critical components in your production environment.
Netflix OSS — Spring Cloud uses components Netflix OSS to help us build robust distributed systems.
Diego Architecture — Overview of the structure and components of Diego, the container management system for Cloud Foundry.
Diego design notes — Diego design notes that describe how the various components of Diego communicate and interrelate.
Buildpacks — Extensive list of built-in and community created buildpacks for Cloud Foundry.
Autoscaling — How to use and configure the PCF autoscaler.
Understanding Spring Boot — A top-down overview of Spring Boot autoconfiguration.
Spring Boot Autoconfiguration — A bottom-up overview of Spring Boot autoconfiguration.
Configuration Order — A list of each of the ways that Spring Boot can be configured, ordered by precedence.
Managing Spring dependencies — A method for managing dependency versions in a distributed system using Spring Boot and Spring Cloud.
Spring Cloud dependency chart — Shows which versions of Spring Boot, Spring Cloud, and Spring Cloud Services play nicely together. This is vital to consult before starting or upgrading a project using Spring Cloud.
Local configuration — How to configure a Java application for local development while ensuring that your configuration does not leak into production.
Common application properties —
Overview of the various Spring properties which can be configured
Database refactoring — A collection of database refactoring patterns and database development practices to enable evolutionary database development.
SQL TDD — A case study detailing how Oracle’s SQL testing features were used to make sense of a legacy database on a Pivotal project.
Gradle Java plugin — This plugin is used on almost all Java projects build by Gradle. This guide contains a helpful task dependency diagram.
IntelliJ Gradle support — Outlines configuration for a new Gradle project and how to preform common actions in an existing Gradle project.
Explain Git with d3 — Interactive diagrams explaining many of the common actions in Git.
Try Git — Git mini-course and tutorial.
The Pragmatic Programmer: From Journeyman to Master — Andrew Hunt and David Thomas
Test Driven Development: By Example — Kent Beck
Extreme Programming Explained: Embrace Change (2nd Edition) — Kent Beck and Cynthia Andres
Design Patterns: Elements of Reusable Object-Oriented Software — Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
Refactoring: Improving the Design of Existing Code — Martin Fowler, Kent Beck, John Brant and William Opdyke
Refactoring to Patterns — Joshua Kerievsky
Patterns of Enterprise Application Architecture — Martin Fowler
Implementing Domain-Driven Design (1st Edition) — Vaughn Vernon
Domain-Driven Design: Tackling Complexity in the Heart of Software (1st Edition) — Eric Evans
Even more — Comprehensive reading list of software engineering books.