References

Pivotal/Tanzu Labs

Useful supporting documentation for students learning about cloud native applications.

Architecture

  • 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.

  • Beyond the 12 Factor App — This book takes you through the original 12 factors and proposes additional guidelines to accommodate modern thinking on building cloud apps.

.NET

  • 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.

  • Modernizing .NET Applications

  • Steeltoe 1.1 and the .NET Renaissance

  • Steeltoe Turns 2.0

Open source Java frameworks

  • 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.

Cloud Foundry

Spring

  • 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 via application.properties or application.yml

Databases

  • 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.

  • SQL testing framework — SQL testing framework developed by Pivots. Helpful for breaking apart monolithic databases with lots of stored procedures, triggers, and views. Also see the code on Github.

Gradle

  • 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.

Git

  • Explain Git with d3 — Interactive diagrams explaining many of the common actions in Git.

  • Try Git — Git mini-course and tutorial.

Shell/Bash

Reading list

  • The Pragmatic Programmer: From Journeyman to MasterAndrew Hunt and David Thomas

  • Test Driven Development: By ExampleKent Beck

  • Extreme Programming Explained: Embrace Change (2nd Edition)Kent Beck and Cynthia Andres

  • Design Patterns: Elements of Reusable Object-Oriented SoftwareErich Gamma, Richard Helm, Ralph Johnson and John Vlissides

  • Refactoring: Improving the Design of Existing CodeMartin Fowler, Kent Beck, John Brant and William Opdyke

  • Refactoring to PatternsJoshua Kerievsky

  • Patterns of Enterprise Application ArchitectureMartin 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.