Public vs. Private vs. Hybrid Cloud

Cloud Computing
Cloud Computing enables organizations to leverage scalability, flexibility and agility without significantly increasing IT spending. One of the important characteristics of cloud computing is that resources are self-service manner. Because of being self-service uniform resources are available in uniform manner. These resources can vary in Infrastructure, Platform and Software but important is users get what they need, how much they need and they pay for what they used.

Cloud Services are available in following options:

  • Public Cloud
  • Private Cloud
  • Hybrid Cloud

Public Cloud
A public cloud service is provided “as a service” over the Internet and the customer’s infrastructure or applications are hosted by a cloud service provider at their data centers. The customer has no visibility and control over where the cloud services are being hosted. The data center is shared between many organizations, but each organization’s data & application usage is logically segregated and authorized users of that organization can access their data.

Public cloud can be used when-

  • You want to reduce time to market and increased flexibility.
  • You don’t want to invest upfront and quickly want to develop, test and deploy the application.
  • You have SaaS (Software as a Service) applications from a vendor who has a well-implemented security strategy.
  • Your application has incremental or sudden up and down in terms of load.
  • You want to leverage ad-hoc services and resources provided by public cloud providers.

Following are major concerns while choosing public cloud-

  • Security and reliability
  • Vendor lock-in

Private Cloud
A private cloud, also called internal cloud is hosted on private platform in customer’s data center. It is dedicated to a particular enterprise and is not shared with other organization.
Virtualization is the key technology which helps in setting up private cloud by leveraging their existing infrastructure and customer does not need to purchase additional equipment similar to a public cloud. Private cloud offers customers more control over the infrastructure, but at the same time also offers on-demand capability where more services can be added quickly as needed.

Private cloud is a suitable option when –

  • You want to control and manage the data and application yourself and don’t want to let you data resides outside your organization.
  • Nature of application and business must conform to strict security and data privacy issues. Like financial or healthcare industry products which needs to follow certain compliances/laws.

Following are major concerns while choosing private cloud-

  • Upfront investment on Infrastructure
  • On-going maintenance
  • Capacity Limitation

Hybrid Cloud
As the name suggest, a hybrid cloud comprises both private and public cloud services. In this case some of the services run on public cloud like web application and some reside on private cloud like data and services.

Hybrid cloud is a suitable option when –

  • You are concern about security and don’t want to host data publically. So data services can be hosted on private cloud whereas some of public facing applications can reside on public cloud.
  • Your application and services are tailed for different vertical markets. In this case data can be securely kept in public cloud and application dealing with customers can be hosted on public cloud.
  • You want to distribute workload and keep your application up and running at both public and private cloud.
  •  Developing large e-commerce application where high availability is required with security in keeping personal and credit card information of customers.

Following are major concerns while choosing hybrid cloud-

  • Complexity in managing both public and private cloud services
  • Synchronizing data and application when shared across public and private cloud.
  • Keeping track of multiple different security platforms and ensure that all aspects of your business can communicate with each other.
  • Privacy and security are still a concern. Complications can also arise due to a lack of cloud standards, data availability and data ownership.

SOA and Cloud Computing

Has Cloud Computing something to do with SOA 
How is SOA connected with cloud computing? What Service Orientation has to do with cloud and how they are related? SOA is basically application architecture, whereas cloud provides infrastructure, platform and software as services. How these two can leveraging each other’s core best practices.

SOA, a flexible, modular approach to deliver IT services, is an essential foundation for the emerging technologies like cloud. While it lowers the cost, its primary benefit is the improvement in agility that it provides organizations, enabling them to respond to the increasing rate of change occurring in every business around the world.

Definitions
Service Oriented Architecture (SOA) is a flexible set of design principles used during the phases of systems development and integration. A deployed SOA-based architecture will provide a loosely-integrated suite of services that can be used within multiple business domains.

Service-oriented computing builds upon past distributed computing platforms and adds new design layers, governance considerations, and a vast set of preferred implementation technologies, many of which are based on the use of Web services and REST services.

Cloud computing provides almost infinite flexible and scalable external computing and processing services that not only offer significant cost benefits, but also provide the ability to connect with customers, partners and suppliers like never before.

XaaS is the essence of cloud computing, where X denotes Infrastructure, Platform and Services. Cloud computing guarantees certain levels of service to the cloud’s customers. Cloud is elastic i.e. if the load increases, cloud computing will increase the underlying resources to handle the load.

Where SOA and Cloud Connect?
So the question here is – what is the relationship between SOA and Cloud? Are they same? Are they different? Do they really fit together?

Cloud computing is all about providing elasticity in terms of infrastructure, platform and services through internet. Cloud enables enterprises to utilize their resources and services to its maximum potential. Besides providing compute, storage and other infrastructure resources, cloud also provides sets of API and toolkits to the outer world to utilize XaaS. The underlying infrastructure or platform can be reduced or extended based on the load/demand. This is possible only because of loosely coupled components which made up cloud. So in way cloud follows the very basic principle of SOA i.e. loosely coupled services. Cloud also enables the reusability of various components.

Cloud utilizes another SOA principle i.e., abstraction of services. Abstraction is one of the key principles of SOA. In cloud environment, every service is abstracted to the user. Cloud provides many features on demand, but user remains unaware of the underlying implementation.
Though SOA is an architectural principle, cloud is leveraging its basic principles in its scenario and providing XaaS.

Also, cloud is not only about providing XaaS, it is also about integration with other services which is within or outside of cloud environment. SOA provides a good set of standards and guidance for service integration. So, for the enterprises that are moving towards cloud needs to focus more on standards, security, compliance and governance processes.

The Relationship
Cloud infrastructure can be build without considering SOA best practices. It is all about infrastructure (IaaS), platform( PaaS) and last but not the least about software on cloud( SaaS). These applications can be built without considering SOA principles.

It is true that anybody can create a monolithic traditional application and deploy that application to cloud. It will work. But over the time, it will be a nightmare to maintain that application considering the fast paced changes in cloud and other environment.

But enterprises, which have past experience in application development using SOA principles, can easily migrate to cloud. They can also leverage the cloud infrastructure to maximize the business requirements potential, and fulfill a potential with those resources.

The more an enterprise understands how much its business depends on these services, the more they’ve been reused.  Enterprises who have already gone through cases where they have had services crash, because the usage has been too high, or they’ve been attacked, or certain fail-over in house hasn’t worked, the more they can appreciate what a cloud environment can bring.

In fact Organizations should leverage the SOA learning and implement the application on cloud in such a way that they could utilize the best of the infrastructure and platform underneath.

Synergies between Service Orientation and Cloud
Both cloud and SOA talks about abstraction, reuse and standardization. If practices from both the worlds are combined together, that can result in great application for the consumers which can automatically scale according to the demand.

Enterprises can leverage SOA and build service on cloud, which are more reliable, scalable, cost-effective and agile. They shall be able to adapt on one hand quickly to a change in business strategy or an emerging competitive threat, and on the other to create a new product to sell in online markets.

Conclusion
SOA and cloud computing share many common principles, but also differ significantly in their role in IT architecture. SOA is mainly an application architecture with horizontal services; while cloud computing is an IT architecture with vertical services.

Given the differences, SOA and cloud computing complement each other very well.

Design Smells

Software design is blueprint of the system. We design systems based on requirements. It rarely happens that the requirements we get does not change.So, design also keeps changing with the requirements.

It becomes very difficult to keep the sanity of design with the changing requirement, if not handled carefully. After sometime it becomes very difficult to maintain the basic feature of good design like maintainability, extensibility, re-usability, minimal complexity etc. and the

Robert C. Martin defines this problem as design smells. He defined some basic characteristics of design smells, which we could find in the designs which become rotten.

Rigidity
Whenever a design becomes difficult to change, we should know that the design is going into or already in bad shape. A design is rigid if a single change causes a cascade of subsequent changes in dependent modules. The more modules that must be changed, the more rigid the design.

Fragility
Fragility is the tendency of a program to break in many places when a single change is made. It happens that the new problems occur in the area which has nothing to do with the code piece which was changed. Fixing those problems leads to even more problems. As the fragility of a module increases, the likelihood that a change will introduce unexpected problems approaches certainty. This seems absurd, but such modules are not at all uncommon.

Immobility
A design is immobile when it contains parts that could be useful in other systems, but the effort and risk involved with separating those parts from the original system are too great. This is an unfortunate but very common occurrence.

Viscosity
Whenever you are going to change a piece of software and you find more than one way to change, it means the design is exhibiting Viscosity. Some of the ways preserve the design; others do not. Viscosity comes in two forms: viscosity of the software and viscosity of the environment.

When the design-preserving methods are more difficult to use than the hacks, the viscosity of the design is high. It becomes easy to do the wrong thing but difficult to do the right thing.

Viscosity of environment comes about when the development environment is slow and inefficient. For example, if compile times are very long, developers will be tempted to make changes that don’t force large recompiles, even though those changes don’t preserve the design. If the source code control system requires hours to check in just a few files, developers will be tempted to make changes that require as few check-ins as possible, regardless of whether the design is preserved. In both cases, a viscous project is one in which the design of the software is difficult to preserve. We want to create systems and project environments that make it easy to preserve and improve the design.

Needless Complexity
Many times in developers add features in the anticipation of future requirements. These changes they do just for the future requirements or unforeseen scenarios.

A design smells of needless complexity when it contains elements that aren’t currently useful. At first these things look good for the flexibility of the system, but these changes actually add needless complexities to the system

Needless Repetition
As the title suggests, it usually happens in the system, same piece of code lies in more than one place. This may be because of simple copy paste habit and reduce the maintainability and bugs found in these needless repetitions require fixing in every place. And most commonly the fixes vary in different places because the repeated code has been changed as per the requirements in all different places.