Webinar. Discover how universities like Mizzou and Colby moved 200+ sites to the cloud. Register here
LoginFree trial
FeaturesPricingBlogAbout us
Blog

Upsun: a Heroku alternative

HerokuPaaSAWSsustainabilityobservabilityPythonPHPmicroservicesNGINX
24 April 2024
Zohar Stolar
Zohar Stolar
Director, Strategic Research and Operations

Upsun and Heroku are two enterprise-grade cloud platforms with proven track records. Let’s look at some of the similarities and differences that set the two apart.

The Platform-as-a-Service (PaaS) solutions’ market has seen meteoric growth in recent years—primarily attributed to the ever-increasing use of containers that’s revolutionized software development.

While the total number of available platforms continuously grows, there are only a handful of mature, enterprise-ready solutions; the others are in early bootstrap or young startup mode—not a good fit for mission-critical operations.

Upsun and Heroku are two of those proven, enterprise-ready solutions.

Upsun in short

With developer experience as its top priority, Upsun fuses the reliability and stability of an enterprise with the brightness, innovation, and agility of a new brand. Built on top of award-winning Platform.sh, Upsun benefits from years of experience and brand recognition that saves it from many of the growing pains new startups often encounter.

Heroku in short

Heroku was one of the first cloud platforms and is still considered one of the bigger players. 

But it hasn’t changed dramatically over the years. This stability can appeal to enterprise clients who wish to stay away from too many moving parts. At the same time, it seems that Heroku's trajectory isn't bending toward innovation or keeping up with the ever-rising need for quality and speed. The commoditization of cloud platforms created many Heroku rivals, and the company will need to work harder to remain an industry leader.

Let’s dive into some of the differences between the two solutions:

Technical features

Multicloud

Heroku’s physical infrastructure is hosted solely on a limited number of Amazon Web Service (AWS) regions. This constraint may be a problem if your organization requires a different IaaS or cannot work with AWS for various reasons (e.g., regulations, cloud sovereignty).

Upsun lets users choose between a wide range of IaaS providers and multiple regions for each of them, so every project can be hosted where it fits best in terms of geography (distance from end users) and regulations (identity of the IaaS provider).

Sustainability 

With sustainability as one of its core values, Upsun leads in responsible and sustainable cloud operations.* In an era where digital carbon footprints are under scrutiny, Upsun’s sustainable hosting solutions and practices help ensure your applications get all the power they need while being environmentally responsible—a contrast to the lesser green approaches subscribed to by other providers.

To solidify our commitment, Upsun offers users a 3% discount on resource usage when users choose to deploy to a data center powered by renewable energy sources in one of our incentive-eligible greener regions. All to help lower their carbon footprints.

Heroku doesn’t have any published sustainability policy or incentives.

*Upsun offers efficient cloud orchestration, with 12x better CPU usage as compared to AWS EC2. Greenly calculated the gains were 14x higher density for development and 10x higher for production workloads.

 

Persistent storage

Persistent storage is, as the name suggests, data storage that persists even when the container that runs the application is restarted or replaced for whatever reason. In most cases, the storage of the container itself is ephemeral and should not hold any information on which the application depends to function properly. 

Heroku doesn’t have persistent storage. Anything one might store on a Heroku container is ephemeral by definition. And any data that needs to persist between deployments must be stored outside of the platform (i.e., AWS S3). This makes deploying to Heroku much more complicated as it requires you to: 

  1. Find a third-party provider for the persistent storage.
  2. Adapt your application to read files from the external provider.
  3. Adapt your deployment scripts to use the external storage—not only when deploying to the main environment, but also when cloning environments to preview changes.

Unlike Heroku, Upsun doesn’t expect users to shop for third parties to build a complete project, including storing data and media. Upsun enables you to choose any amount of persistent storage directly on the platform, using the same easy configuration as for other parameters of the application, so running a stateful application is simple. When cloning an environment, the data and files stored on the persistent disk will be cloned in seconds, too, ensuring any preview environment is not only fast and easy to create, but is also a perfect copy of production.

Requests timeout

Heroku has a non-configurable, hard response timeout of 30 seconds.

Upsun has no request timeout. Even if you need to upload very large files, the upload will not break because of any platform limitations.

Protecting data services

Because of how the Heroku platform is built, its default behavior has services like databases and search available from the internet, which may potentially expose sensitive data to unauthorized users. Protecting these services requires Heroku’s Private Spaces—a premium service for high-end clients.

Upsun offers many different data services (e.g., PostgreSQL, MongoDB, ElasticSearch, Redis, MariaDB) available only from within your applications, helping you make sure your data isn’t directly exposed to the internet.  

Runtimes, Dockers, buildpacks

Both Upsun and Heroku have native support for an extensive array of runtimes, including Python, Node.js, PHP, Go, Java, and  Ruby.  Each of the platforms also has native support for a divergent set of languages: Upsun images for C#/.Net Core, Elixir, Lisp, and Rust; Heroku buildpacks for Clojure, Gradle, Grails 3.x, JVM, Play 2.x and Scala.

You can feel the big difference when you want to deploy software written in languages not natively supported by the platform. This may be the case, for example, when working in a microservices architecture. On Heroku, development in non-native languages is close to impossible and would require you to develop your own buildpack. On the other hand, Upsun has a composable image based on Nix, enabling you to develop and deploy software even in new or less popular languages. While also possible with Dockers or buildpacks, Upsun doesn’t sacrifice simplicity for versatility; using the composable image is as simple as using any of Upsun’s aforementioned runtime images.

HTTP/2 support

The industry-standard protocol for the internet, HTTP/2 makes browsing faster and more efficient. It’s been around since 2015 and is supported by most web servers and web browsers. Yet, Heroku continues to deliver content over HTTP/1.1. As it stands today (April 2024), years after the newer protocol version was released, Heroku only has HTTP/2 support in beta.

Upsun serves content through a recent version of nginx and fully supports HTTP/2.

Security – DDoS protection

As with other aspects of the platform, Heroku recommends using third-party services for DDoS protection, which means your monthly bill will increase as you add the complexity of dealing with more providers.

Carefully configured against DDoS attacks, Upsun uses a built-in, reverse proxy cache that protects your applications from malicious attacks. With security under the single Upsun roof, you don’t need to shop elsewhere for additional protection.

Service continuity 

Heroku containers (dynos) restart at least every 24 hours in a process called Cycling, losing in-memory state (e.g., caches) and breaking websocket connections. Heroku application restarts obviously lead to downtime. To avoid them, you have to purchase more instances and load-balance them, hoping they won’t cycle at the same time. 

Upsun restarts containers and services only when developers initiate such a restart, usually when deploying a new version of their applications. In rare cases, Upsun will also trigger a forced rebuild to apply critical security patches.

Cron jobs

Scheduled operations critical to a system’s health and performance, cron jobs form an essential part of any operating system. Web applications leverage this capability to execute ongoing automated maintenance tasks.

Heroku has a basic, free add-on called Heroku Scheduler, which launches a dedicated container for running cron jobs. It’s important to note these two key factors:

  1. Heroku itself makes it clear in their docs that their own scheduler add-on should not be relied on for critical tasks and recommends using a custom process.
  2. The fact that the scheduled tasks run in a dedicated container means increased usage and, therefore, an increased monthly bill.

Upsun provides full cron support natively and directly within an application’s configuration. It uses the standard Unix syntax and enables fine-grained control over task execution and its termination. With Upsun, cron jobs run within the allocated container and don’t incur any extra fees or count toward additional billable usage.

Developer experience and productivity

Preview environments

The ability to create byte-for-byte clones of production environments for development, reviews, testing, and approvals is one of Upsun’s most robust features. A game-changer for developers, team leads, QA teams, and other stakeholders alike.

In Upsun, each project may have several environments. One would usually be used for production, while the others for various testing purposes. It’s as simple as running upsun branch staging main to create a new preview environment called staging, available at a unique URL, which is an exact copy of the main environment, together with all of its services, workers, databases, and stored files. 

(See the Pricing section below to learn more about how multiple environments affect pricing.)

Unlike Upsun, Heroku doesn’t have the concept of projects, and each environment is a separate app. However, Heroku does have a feature called Review Apps that’s similar in concept to Upsun’s preview environments. That said, the process is a much heavier lift that  includes many manual steps and configuration, making it far less developer-friendly. Finally, Heroku doesn’t clone the database together with the application’s code; rather, it becomes a developer’s responsibility to have a separate process to load data into the Review App. 

Observability

Upsun offers unparalleled insights into your applications’ performance and health, going far beyond basic monitoring. Upsun observability tools are intuitive, providing clear, actionable data. With built-in Blackfire, you can drill down to the function level of your code to help reduce execution time, your monthly bill, and your application's carbon footprint. Upsun provides all levels of observability and telemetry under the same roof, where all stakeholders have access, and internal task management becomes much more efficient. 

Heroku, like many other platforms, gives you basic telemetry, which may be sufficient if you want to know when to purchase more storage or when it’s possible to reduce container size. For anything beyond that, especially the insights of the application’s performance itself, you’ll need to integrate an external service like NewRelic, Datadog, or other similar, third-party commercial services.

Pricing and transparency

When choosing a cloud provider, pricing is obviously a critical differentiator and one many users will try to figure out on their own.

This is where predictability comes into play. It’s about giving customers all the transparent data they need to calculate monthly billing on their own, or, at least, to see in advance what it would be incurred at the end of the month.

By definition, usage-based pricing changes from month to month, so it's not possible to predict it at 100%. Yet, if you have easy parameters to calculate with, the predictability increases, making you less prone to experience any unpleasant surprises.

Pricing

Upsun has a fully transparent and simple pricing model. We provide you with everything you need to run your applications, and you pay only for what you actually use. Upsun also lets you modify your plan as you wish without limitations and provides an estimate of what your next billing cycle would look like. So you’re always in control, with a full picture available at any moment. To protect you from bloating your monthly bill, Upsun enables you to set different size values for preview environments, so you don’t have the same spend on testing environments as in production. 

When comparing Upsun and Heroku, it’s important to note that Heroku’s pricing isn’t as transparent and requires its customers to go through a lengthy process, especially (as noted previously) as Heroku relies heavily on third-party providers for almost every detail, except for computing. So, it may be very difficult for customers to have a clear picture of what their monthly bill would look like.

Below is a simulation of a reasonably sized, business-critical web application, maintained by a team of three developers, each working on a different preview environment. 

You can see that prices are relatively similar between Upsun and Heroku, with a slight advantage to Upsun. But the real value lies in the two comparisons mentioned here, but aren’t visible on the below graph:

  1. With Upsun, you get everything under the same roof: single invoice, single provider, single responsibility. Heroku delegates services and responsibilities to third parties.
  2. Upsun’s pricing model is predictable and extremely easy to understand and control. Heroku’s is very complicated and unpredictable.

A word on transparency

With Upsun, what you buy is exactly what you get, especially when it comes to resources. You have the information you need to calculate your expenses in advance. By using simple values and price units, Upsun has the most straightforward model any cloud service could have. Because Upsun provides all the services directly (i.e., no need to purchase third-party services), it becomes very clear what billing will look like.

Conversely, Heroku has an opaque and rather complicated concept of dynos that represents the computing power allocated to your container. This lack of transparency makes it quite challenging to make data-driven decisions about the amount of resources an application may need to run properly in different scenarios. 

As demonstrated above, Heroku expects users to purchase third-party services, increasing the monthly expenses on cloud services—even if those services are not provided directly by Heroku.

Wrap-up

Choosing the right PaaS for your organization is an important decision. Both Upsun and Heroku offer valid platforms to support your applications. But for development teams who build modern web applications in a constantly changing environment, Upsun provides a highly flexible, robust, transparent alternative for your consideration.

Upsun Logo
Join the community