- Application should have capabilities to accommodate growth and scale, modular to enhance or add new functionalities, support gradual or abrupt surge etc. At the same time, it should be seamless for users and efficient for the organizations.
- Factors or Characteristics that influence the application scalability & robustness
- The different architecture patterns, its pros and cons and considerations. The standard architecture brings many advantages for development, better flexibility of the system for scaling.
- How to build scalable enterprise applications. What are the different Design Methods to consider across various components of the applications?
- Different Technology, tools, framework, software that can be used while designing enterprise applications. Mostly we will high light opensource technologies as much as possible.
- Basic Architectural Design principles to consider for designing large scale applications
1. What are the Design Principles to be considered?
2. What are the factors that influences the application scalability & robustness?
3. Architectural Patterns and Considerations
4. What are the Design Methods to be considered for various components of the application?
- Authentication & Authorization:
- Other Design Method Considerations:
5. Technology, Tools, Framework, Software to use
In the below mind map, I tried to give as much as possible open-source implementations. However, in some cases, there are vendor specific implementations as well.
6. Reference Architecture
Below diagram provides the reference architecture for building Enterprise Application especially Web Applications. This covers many of the architecture or design components discussed in this blog. However, there might be some of the design components omitted as well as it is difficult depict everything in the diagram.
- Technology – Choose right technology, tool, framework, software, hardware, database, storage etc.
- Distribute – While scaling the application up, distribute as much work as you can away from the core
- Choose asynchronism methods over synchronous – so that processing threads are not locked, and application resources are optimally used
- API first – think web application as of API service.
- Statelessness in app as much as possible unless there is good reason to have state/store sessions – design components stateless, as they can easily be redistributed to support horizontal scaling
- Make sure to cache – they significantly improve scalability and performance
- Use Queues wherever possible to make the task/messages atomic, retry/retrieve if fails etc.
- Process Automation – Automate the business processes, workflow, rules etc.
- Database Scaling – Through Partitioning, Indexing, Read Replica, Offload database backup etc.
- Design for Maintenance – monitor it and provide regular updates
- Choose a horizontal scale over a vertical – With a horizontal scale, we can just add another server rather than upgrade the existing one
- Load Balancing – Both front end and back end
- Scalability vs Failover – Don’t rule out failures and design to prevent SPOF
- Deployment – CI/CD, ability to rollback deploy, automate as much as possible everything to deploy and run etc.
- Testing Approach – Performance Testing, Load Testing, Failover/DR Testing, Functional Testing Automation. Make this repeatable process and have strategy to test these frequently whenever required.