Infrastructure was at one time defined as a means of moving data from one place to another where it could be acted upon. Advancements in technology have made this a huge over-simplification. Issues like managed hosting, cloud computing, infrastructure and software development coupled with distributed access requirements using a whole range of different devices have added a wide range of complexities.
Suffice to mention converged infrastructure, data centre facilities (colocation), and cloud services illustrate the design complexity and challenges that organisations face today.
Infrastructure, regardless of whether it is configured manually or defined by code, remains the structure in which software applications have to function satisfactorily within. The infrastructure may include shared virtualised servers; it may also include software components supplied by cloud providers as software as a service; it may be serverless compute services services such as AWS Lambda or a combination of all the above.
These complexities are added to the challenge of delivering multi-tier software applications for end users.
Potential problems that may be caused by poor infrastructure design resulting from poor planning and research are many and varied. In no particular order, they may include the following:
- Service failure caused by traffic overload (faulty assumptions in regard to transaction demand and scaling)
- Limited resources (memory or disk space, limited or inconsistent bandwidth) resulting in unanticipated application response
- High latency/packet loss/poor process distribution
- Lack of end-to-end skill profiles that embrace application, network, storage and servers.
- Inadequate monitoring being implemented (i.e. missing the precursors to bigger issues)
- Customer dissatisfaction or loss
- Reduced staff productivity
- Loss of business profitability
- Inability for the business to adapt to changing market requirements through innovation
Core to infrastructure design is to gain assurance that the infrastructure is compliant with every part of the application service provided to end users. This can predominately be achieved via collaborative engagements with Product Owners, Architects, development teams and of course pre-go live testing. Load or capacity requirements should be considered at this point and how to address load that may exceed expectations.
Once the application is deployed into the infrastructure one of the the biggest challenges facing development teams is to change the traditional mindset and ensure that the implementation of an application performance monitoring solution capable of detecting problems in both application and infrastructure is a mandatory deployment requirement. The ability then is gained to see how the application performs within the infrastructure. Problems encountered are no longer isolated to the application code but are distributed throughout the application infrastructure and their impact visible and through the application performance monitoring solution a quick and concise feedback loop is created to the development and infrastructure team.
Capacity planning, scalability planning, collaboration, an in-depth understanding of the infrastructure configuration/service/product and proper tools appear to be the most effective solutions available to design and test the right infrastructure for system performance and reliability.