Towards a simple service compiler
Emre Kıcıman · 2009
Over the last 10-15 years, our industry has developed and deployed many large-scale Internet services, from e-commerce to social networking sites, all facing common challenges in performance, reliability, and scalability. To address these challenges, developers consistently draw from a relatively small repertoire of software architecture design patterns or best practices, such as replication, tiering, pre-computation, and caching. The application of these techniques across different services, however, varies significantly in both their design and implementation. There is, however, a good reason for this variation in implementation; their effectiveness depends heavily on the service's semantic requirements, its workloads, performance and other runtime and environmental characteristics. The implication is that taking advantage of today's best practices and design patterns requires that developers have a deep, end-to-end understanding of their service's functionality, workloads, and system infrastructure. Our insight is that most of this critical information is directly measurable, and, in this presentation, discuss our research towards building a system, analogous to a profile-driven optimizing compiler, that separates architectural decisions to support performance, reliability, and scalability from service functionality.