Chapter 10. Production readiness

 

This chapter covers

  • Testing an application for deployment
  • Securing against different threats
  • Monitoring and logging strategies
  • Deploying and scaling with cloud services

If you’ve read this far into the book, congratulations! You know how to design an application that’s responsive, elastic, resilient, and message-driven. The next step is ensuring that those reactive design properties turn into real behavior when the application enters the turbulent world of a production system.

In the past, the gap between development and operations has been vast, sometimes with disastrous results. The modern answer is DevOps, which aims to close that gap with a combination of cultural change, integrated tooling, and automation. Covering the whole scope of DevOps is far beyond the scope of this book, but most of what applies to DevOps in general applies to reactive applications as well.

In this chapter, we look at some areas in which reactive applications differ in operation from other architectures, and we suggest a few things that you, as a developer, can do to make those applications easier to manage in production.

As is so often the case in modern development, we start with testing.

10.1. Testing a reactive application

Actors are message-driven, so the one thing you know about every actor is that it receives messages. It might even react to a message at some time in the future—maybe. That’s not much of a basis for writing tests, is it?

10.2. Securing the application

10.3. Logging actors

10.4. Tracing messages

10.5. Monitoring a reactive application

10.6. Handling failure

10.7. Deploying to a cloud

Summary