As opposed to performance analysis and optimization at a smaller component level, it takes a holistic approach for the same at the application level. Higher level concerns, such as serving a certain threshold of users in a day or handling an identified quantum of load through a multilayered system, require us to think about how the components fit together and how the load is designed to flow through the application. In this chapter, we will discuss such high level concerns. Like the previous chapter, by and large this chapter applies to applications written in any JVM language, but it is written with a special focus on Clojure. In this chapter, we will discuss the following topics:
General performance techniques that apply to all layers of the code
Data sizing
Resource pooling
Fetching and computing in advance
Staging and batching
Little's law