Often we get asked whether we prefer proprietary clouds or self-hosted clouds.
We at OQTACORE work a lot with AWS. In general, cloud computing is a great choice for projects of any size. It takes the redundancy, and scalability of hardware out of the equation. Also, you would never have to think again about electricity or networking issue
We always prefer AWS because of its really endless capabilities. It provides mind-blowing Internet speeds for public resources and sub-millisecond pings for internal connections. Also, AWS is great for its additional services such as lambdas, step functions, MediaConvert, OpenSearch, DynamoDB, and dozens of others. They basically come for free, only at the cost of the underlying hardware that we would rent anyway, be it an Amazon product or not.
I write this article because many customers also ask us if we consider OpenStack to oppose large corporations. The tech giants are taking over the world, and now they came to fully take away our data together with our servers! Why not build your own cloud and disrupt the evil plans of the tech monsters? In case you are wondering too, I prepared this material. It will have multiple parts, as both AWS and OpenStack are huge, and comparing them requires describing many details.
Resource orchestration
Resource orchestration is basically one of the most game-changing things while working with cloud computing. You can create and destroy any databases, storages, virtual machines, etc programmatically. Not that it was completely impossible before – with traditional resources, you could create a script that would install a database engine and set up users and network rules. But imagine writing a script that shops at Amazon for a server rack and then orders delivery, installation, and set up! Though it IS possible, nobody ever would do it, especially in large projects. But with cloud resources, it’s exactly how things work. You can just buy computing power, install an operating system, and set up network rules based on just an infrastructure config file or API call!
This completely changes how we understand resources. Instead of being given a fixed amount of resources (be it too little for the current task, too much, or just enough), your software can buy resources for itself in real time, saving costs by releasing resources when they are not needed.
With OpenStack, you get a similar tool called Heat. It also supports YAML as a language of infrastructure description. The only difference that we think is important – with OpenStack you usually work with your own resources that you already bought, so the savings-oriented part of creating and releasing resources as-you-go is not as explicit as with AWS.
AWS – CloudFormation
CloudFormation is a specialized tool inside AWS that allows packing multiple resource configs into YAML/JSON config files and then deploying them in a different region/AWS account, or even sharing it online. For example, Facebook shares its Conversions API node as a Cloudformation config file. Just by uploading this config to AWS, you can deploy a virtual server with pre-defined network rules, and you can even get a DNS record for this node if you provide it during the deployment
OpenStack – Heat
With OpenStack, you get a similar tool called Heat. It also supports YAML as a language of infrastructure description. The only difference that we think is important – with OpenStack you usually work with your own resources that you already bought, so the savings-oriented part of creating and releasing resources as-you-go is not as explicit as with AWS.
Virtual servers
EC2 is one of the basic services in AWS. It provides you with computational power, both virtual and physical – for example, you can even rent Mac machines, but the Apple license only allows renting out a full physical machine, so you will actually rent a real dedicated Apple device instead of some virtual PC.
AWS – EC2
Other services, such as ECS, Beanstalk, Lighthouse, Mediaconvert, etc. use EC2 to power them. This is the beauty of Amazon’s pricing model – they provide you with many wonderful services that come to you for free as long as you pay for the underlying EC2 machines that make those services work.
OpenStack – Based on Instance in Nova
OpenStack has Nova, the project that is responsible for the orchestration of virtual computing resources. Nova is a set of daemons that work on every instance. But those daemons do not work alone: they need many additional tools to provide you with networking, authentication, and provisioning capabilities.
Block Storage
The oldest type of storage that basically provides you with logical disks as if you created partitions on your local drive. The cloud platform does not care what files are stored on those N gigabytes that you allocated. It is the best type of storage for VMs or applications – all data is stored in one place.
AWS – EBS
Openstack – Cinder
It is hard to find any special difference between EBS and Cinder as block storage is a super simple concept – basically, just an allocated space. In both AWS and OpenStack, they completely hide the underlying hardware, and consumers of the block storage do not need to know any details about the file system or device that holds the allocated volume
Object Storage
An object storage manages your files individually. That is, you can set individual permissions, and get separate URLs for each object. You do not really have a concept of some local disk – that is, there is no limit of allocated space. And you do not have access to the underlying mechanism of storage – for example, each object can be duplicated across multiple availability zones, but appear as a single object. An object storage only guarantees that each object that you put to it, will be stored.
AWS – S3
OpenStack – Swift
S3 and Swift are very similar in nature (and there is even an API comparison matrix on the OpenStack site). But there are differences as well, mostly due to one being a proprietary product and another being software that you run on your own hardware. Of course, Swift does not have billing functionality built-in. S3 bills you individually for every object that is stored, and also there is a charge for requests – e.g. $0.005 per 1000 PUT, COPY, POST, LIST requests on the S3 Standard plan, and other similar charges. Also, S3 has many different tiers for cases when long-term archiving is required instead of frequent access.
Other differences are – Swift does not have a log delivery service because it would be part of another software suite. And another similar difference – Swift does not automatically provide you with geographic availability because it does not buy servers for you. So, if you are interested in having geographically redundant object storage, you would have to have computing power in different parts of the world and then connect them into one Swift cluster manually.
Conclusion
AWS and OpenStack basic resources are very similar at the first glance but very different in hundreds of small details. OpenStack provides much more customization capabilities but also would require a team of developers just to maintain it. AWS on the other hand might have some limitations in what it can do, but the standard toolset is so huge that most of the developers’ needs are more than covered.
This is the first part of our comparison. I will continue posting the comparison of AWS and OpenStack in the following weeks.