Monday, September 30, 2013

Software Architecture

Software application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application.

Why Is Architecture Important?
Like any other complex structure, software must be built on a solid foundation. Failing to consider key scenarios, failing to design for common problems, or failing to appreciate the long term consequences of key decisions can put your application at risk. Modern tools and platforms help to simplify the task of building applications, but they do not replace the need to design your application carefully, based on your specific scenarios and requirements. The risks exposed by poor architecture include software that is unstable, is unable to support existing or future business requirements, or is difficult to deploy or manage in a production environment. Systems should be designed with consideration for the user, the system (the IT infrastructure), and the business goals. For each of these areas, you should outline key scenarios and identify important quality attributes (for example, reliability or scalability) and key areas of satisfaction and dissatisfaction. Where possible, develop and consider metrics that measure success in each of these areas.
Architecture focuses on how the major elements and components within an application are used by, or interact with, other major elements and components within the application. The selection of data structures and algorithms or the implementation details of individual components are design concerns. Architecture and design concerns very often overlap.

The Goals of Architecture
Application architecture seeks to build a bridge between business requirements and technical requirements by understanding use cases, and then finding ways to implement those use cases in the software. The goal of architecture is to identify the requirements that affect the structure of the application. Good architecture reduces the business risks associated with building a technical solution.
The architecture should:
  • Expose the structure of the system but hide the implementation details.
  • Realize all of the use cases and scenarios.
  • Try to address the requirements of various stakeholders.
  • Handle both functional and quality requirements.
Key Architecture Principles:
  • Build to change instead of building to last. Consider how the application may need to change over time to address new requirements and challenges, and build in the flexibility to support this.
  • Model to analyze and reduce risk. Use design tools, modeling systems such as Unified Modeling Language (UML), and visualizations where appropriate to help you capture requirements and architectural and design decisions, and to analyze their impact. However, do not formalize the model to the extent that it suppresses the capability to iterate and adapt the design easily.
  • Use models and visualizations as a communication and collaboration tool. Efficient communication of the design, the decisions you make, and ongoing changes to the design, is critical to good architecture. Use models, views, and other visualizations of the architecture to communicate and share your design efficiently with all the stakeholders, and to enable rapid communication of changes to the design.
  • Identify key engineering decisions. Use the information in this guide to understand the key engineering decisions and the areas where mistakes are most often made. Invest in getting these key decisions right the first time so that the design is more flexible and less likely to be broken by changes.

Cloud computing

In past few years cloud computing infiltrated computer industries, the cloud has been variously hailed as the savior of IT and reviled as a risky and chaotic environment. “The cloud” is simply a business model for the creation and delivery of compute resources. The model’s reliance on shared resources and virtualization allows cloud users to achieve levels of economy and scalability that would be difficult in a traditional data center. It is a colloquial expression used to describe a variety of different types of computing concepts that involve a large number of computers connected through a real-time communication network such as the Internet. Cloud computing relies on sharing of resources to achieve coherence and economies of scale similar to a utility (like the electricity grid) over a network. At the foundation of cloud computing is the broader concept of converged infrastructure and shared services.
Common cloud options include:
  • Public cloud, in which multiple companies share physical servers and networking resources hosted in a provider’s data center.
  • Private cloud, in which companies do not share resources (although efficiencies may be realized by hosting multiple virtual applications from the same company on a single physical server). Private clouds can be located either in a provider’s data center or in the company’s own on-premises data center.
  • Hybrid cloud, in which virtualized applications can be moved among private and public cloud environments.

Common cloud benefits include:
  • Scalable, on-demand resources: The ability to launch a cloud application in minutes, without having to purchase and configure hardware, enables enterprises to significantly cut their time to market. By taking advantage of cloud options for “bursting” during peak work periods, enterprises can also cost-effectively improve application performance and availability.
  • Budget-friendly: Cloud computing services require no capital investment, instead tapping into the operating budget. As many companies tighten up their processes for approval of capital expenditures, a service can be easier and faster to approve and deploy.
  • Utility pricing: The pay-per-use model that characterizes most cloud services appeals to enterprises that want to avoid overinvesting. It also can shorten the time to recoup the investment.
Few cloud computing providers:
Google Oracle Amazon Web Services Microsoft
Rackspace Salesforce VMware Joyent
Citrix Bluelock CenturyLink/Savvis Verizon/Terremark