Go to any industry conference today, and you’ll undoubtedly hear the about “microservices”—an approach to software architecture that’s gaining momentum with enterprise developers.
Steeltoe, a new open source project with a recent RC1 (packages here on NuGet), aims to ease microservices adoption for .NET developers, using the same NetflixOSS that’s popular in the Java world. It is purpose-built to help developers evolve an application from a monolithic .NET 4.x architecture to a set of .NET microservices.
Let’s set some context. How did we get to this point?
Beating The Monolith Boss
At the heart of the enterprise data center stands the monolithic application. These systems are a paradox—crucial to business processes today, yet a painful obstacle to tomorrow’s requirements. While the business demands speed and agility, these systems are slow and cumbersome.
Engineers spend much of their time reconciling these two realities. It is not an easy task. But that’s where microservices come in, a new approach that’s producing results in the real-world.
What are microservices? It’s a programming style where an application is built from decoupled services with single responsibilities.
Microservices builds on the concept of SOA, but with important differences. The descriptors “decoupled” and “single responsibilities” are key distinctions. Another one: SOA typically features binding to a service bus, a constraining central point that doesn’t fit today’s preference for distributed systems.
With microservices, developers can carve up the monolith, one piece at a time, and re-platform them into small components. And this approach is gaining popularity.
For example, Java developers have adopted new open source tooling, Spring Cloud (based on NetflixOSS) to break down monolithic architectures. And they are making progress! Many big companies proudly tout their newfound agility at industry events, and showcase how Netflix tech has helped accelerate their shift to microservices.
Which brings us back to Steeltoe.
and Cloud Native with dotNet?
Steeltoe makes it so! https://t.co/JV6wNC7SRk
— Steeltoe (@SteeltoeOSS) September 26, 2016
Steeltoe is, in essence, an adapter between the .NET framework and Spring-based NetflixOSS tooling. This approach offers additional efficiencies to enterprises that use both Java and .NET, since it’s a shared set of services used by both runtimes.
We have a 1.0 release candidate, and we’d like your feedback and contributions! Read on for details, as well as a sample app.
NetflixOSS + .NET Patterns = Goodness
So what is Steeltoe? Steeltoe contains best of breed components around configuration, service discovery, and soon, distributed tracing. These components are based on NetflixOSS. That means they have been vetted in real world, production scenarios, and have proven that they can scale to the needs of one of the world’s most demanding microservice architectures.
Wherever possible, we’ve embraced .NET patterns and practices, so this should look and feel similar to other tools you use today.
Here’s what’s in Steeltoe today.
Config Server Client
The Steeltoe bindings to Spring Cloud Config Server provide a way to push configuration to a set of microservices in a late binding manner (i.e. reading config from a service instead of a config file). Get started with Config Server Client.
The Eureka client provides bindings to Eureka Server, Netflix’s solution for service discovery. What’s exciting about Eureka compared to other tools (Consul, etcd) is that it makes trade-offs with respect to consistency and availability that are advantageous for the service discovery scenario. Specifically, Eureka sacrifices consistency guarantees to remain available in the event of a partition, allowing microservices to continue to register themselves and resolve other services in a given partition. Eureka is also useful for multi-region availability. Get started with Steeltoe’s Eureka client.
These connectors simplify how applications connect to services, and gain operating environment awareness in cloud platforms, such as Cloud Foundry. Spring Cloud Connectors are designed for extensibility: use one of the provided cloud connectors or write one for your cloud platform. Further, you can use the built-in support for commonly-used services (relational databases, MongoDB, Redis, RabbitMQ) or extend Cloud Connectors to work with your own services. Writing homegrown connectors is simple enough, but it would just redundant code. Why bother when you have Spring Cloud Connectors?
Pivotal Loves .NET
— Pivotal (@pivotal) August 1, 2016
Pivotal, the sponsor of Steeltoe, is working on many different fronts to bring the world of Cloud Foundry, microservices, and immutable infrastructure to the Windows and .NET ecosystem. My colleague Richard Seroter details these efforts – including BOSH, a .NET Core Buildpack, deeper support for Microsoft Azure for Pivotal Cloud Foundry, as well Steeltoe.
MusicStore Sample App: Steeltoe in Action
The best way to get familiar with Steeltoe? Check out this sample app repo, based on the reference app MusicStore provided by Microsoft. The sample app breaks up MusicStore into multiple independent services, and shows all the Steeltoe components in action. If you’d like to see a demo of the Music Store, and how it can be deployed to PCF, check out this Channel 9 video.
- From SpringOne Platform: Building .NET Microservices – Kevin Hoffman [video] | [slides]
- Building Microservices with ASP.NET Core: Develop, Test, and Deploy Cross-Platform Services in the Cloud, by Kevin Hoffman & Chris Umbel [coming Q1 2017, pre-order now]
- Steeltoe packages on NuGet
About the Author
Jared works in product at Pivotal.Follow on Twitter More Content by Jared Ruckle