Programming

.NET Core AWS Lambda Lifetime After Uncontrolled Exception

I am writing my first AWS Lambda function. It maintains some state in a static variable and I wanted to know whether that static variable sticks around if an uncontrolled exception occurs.

In a console application for example, an uncontrolled exception results in the ending of that process. Any state is lost. In an ASP.NET application, only the request dies, but the application continues. So not knowing the details of the hosting environment of a function, I wasn't sure what would happen.

Processing Pipelines Series - Reactive Extensions (Rx.NET)

Whereas TPL Dataflow is all about passing messages between blocks, Reactive Extensions is about sequences. With sequences we can create projections, transformations and filters. We can combine multiple sequences into a single one. It is a very flexible and powerful paradigm but with such power comes extra complexity. I find TPL Dataflow easier to reason about due to its simple model. Reactive Extensions can get pretty complex and is not always intuitive, but you can create some elegant solutions with it. It will require some investment in time and tinkering to get a reasonable understanding of it.

Processing Pipelines Series - TPL Dataflow - Alternate Scenario

In the last post we built a TPL Dataflow pipeline based on the scenario from our first post in the series. Today we'll build another pipeline very similar to the first but with different requirements around latency and data loss.

In the first scenario we could not slow down the producer as slowing it down would cause data loss (it read from a bus that would not wait if you weren't there to consume the data). We also cared a lot about ensuring the first stage kept up with the producer and successfully wrote every message to disk. The rest was best effort, and we performed load-shedding so as not to slow down the producer.

Processing Pipelines Series - Concepts

In this series we'll look at few different .NET technologies we can use to process streams of data in processing pipelines and directed acyclic graphs (DAGs). This is not about distributed data platforms for big data but real-time processing and computation running on a single machine. We'll take a single scenario and build it out multiple times, each with a different technology. Each application will be built as a console application with .NET Core.

API Series Part 7 - Inter-Service Communication Overview

In this post we'll explore our options regarding how different services could communicate with each other. There is no code in this post, we'll just explore some different architectures and the trade-offs included with each one. In the end you can make up your own mind about your own specific domain. I have my preference for Govrnanza and in the next part we'll implement that strategy and get into some code.

Cloud Native and Stateless Hell Yes, Microservices May Be

My feeling is that now perhaps we can have a more realistic conversation about microservices without the hype associated. Microservices are another pattern in our toolkit that can be applied under the right cirumstances.

Personally I think that Cloud Native apps, be they micro, medium or monolithic are the true winners in the last couple of years. Cloud native apps are flexible and scalable. 

API Series Part 6 - ASP.NET Core 2.0 and Integration Testing

This is the first post on automated integration testing in this series but it will not be the last. In this first post we'll look at how to use the Microsoft.AspNetCore.TestHost package to run integration tests of our API. In future posts I want to take a look at SpecFlow (because I love it) and also scripting a short-lived test environment with its own short-lived database which is torn down after the test run.

API Series Part 5 - Configuration with Docker Configs

In the last post we stored the database user password securely as a Docker Secret. In this post we'll look at Docker Configs which uses the same model as the secrets except that files are mounted into the container file system unencrypted.

Why use Docker Configs instead of the other alternatives? Let's quickly compare Docker Configs with other options.