Software Architecture Flashcards
No Cache:
When is a cache not useful or even dangerous?
Event-Driven ArchitectureL:
Why does Event-Driven Architecture improve scalability?
Readibility:
What makes code readable?
Emergent and Evolutionary:
What is the difference between emergent design and evolutionary architecture?
Scale-Out, Scale-Up:
Scale-out vs scale-up: how are they different? When to apply one, when the other?
Failures User Sessions:
How to deal with failover and user sessions?
CQRS:
What is CQRS (Command Query Responsibility Segregation)? How is it different from the oldest Command-Query Separation Principle?
n-tier:
The so-called “multitier architecture” is an approach to designing a client-server system aimed to keep physically and logically separated presentation, application processing, data management, and other functions. The most widespread of the multitier architectures is the three-tier architecture. Would you discuss the pros and cons of such an approach?
Scalability:
How would you design a software system for scalability?
C10K:
Someone gave the name “The “C10k problem” to the problem of optimizing network sockets to handle over 10.000 open connections at once. While handling 10.000 concurrent clients is not the same as handling 10.000 open connections, the context is similar. It’s a tough challenge anyway, and no one is expected to know every single detail to solve it. It may be interesting to discuss the strategies you know to deal with that problem. Would you like to try it?
P2P:
How would you design a decentralized (that is, with no central server) P2P system?
CGI:
You may recall that Common Gateway Interface (CGI) is a standard protocol for web servers to execute programs (CGI scripts) that execute as Command-line programs on a server, and that dynamically generate HTML pages when invoked by an HTTP request. Perl and PHP used to be common languages for such scripts. In CGI, an HTTP request generally causes the invocation of a new process on the server, but FastCGI, SCGI, and other approaches improved the mechanism, raising the performance, with techniques such as preforking processes. Can you discuss why CGI became obsolete and was instead replaced with other architectural approaches?
Vendor Lock-in:
How would you defend the design of your systems against vendor Lock-in?
Pub/Sub:
What are the disadvantages of the publish-subscribe pattern at scale?
CPUs:
What’s new in CPUs since the 80s, and how does it affect programming?