We're embarking on replacing our current web system with one based on a modern microservice architecture. Because we're largely a Microsoft shop (using C#, SQL Server, ASP.Net, etc.), we plan to leverage our experience as much as we can, which probably means continuing with C#, and using ASP.Net MVC for the UI. It'll probably wind up running in some cloud provider like AWS or maybe Azure.
There are a lot of tools and frameworks out there for microservices. Unfortunately, it seems that nearly all of them focus on the Java platform. I'm hoping for suggestions of equivalents that we can use that will be compatible with our platform.
Areas I'm looking at include:
Continuous Integration – automating builds and at least some testing. We currently use TFS and MSBuild, which give some of these capabilities, but they're overly complicated and as far as I can see don't integrate the builds with unit tests and smoke tests very well. Plus, I really hate TFS.
Testing – we'll want to do unit testing, for which there are many frameworks like NUnit (with which we have a little experience); plus dependency injection like Castle Windsor; and even tests of full services via a tool like Mountebank.
Deployment – We currently use semi-automated scripts centered around MSDeploy. It doesn't seem like this will work well when the units of deployment are individual services rather than whole sites. Techologies like Docker seem attractive, but are only applicable to Linux. Maybe we should be targeting Linux by way of Mono so we can use this technology.
Message bus – for communicating what data's needed by the UI, and possibly other things. The only .Net-compatible technology I see in this space is RabbitMQ.
Persistence – we're currently all SQL Server. But since the microservice architecture wants datastores dedicated to each service, and the need for redundancy for fault tolerance and persistence would demand multiplication of those servers, SQL Server seems cost-prohibitive. Is MySQL or even Cassandra workable in a C# world?
Logging, monitoring, and metrics – we need a way to keep track of what the system's doing, and how well it's doing it, while providing an integrated view of this across all services on all servers, in near- or real-time. This seems to be a more robust demand than log4net can handle, at least without a lot of additional backend coding (maybe into Cassandra?).
Anybody out there with experience in these areas, that can offer suggestions or warning?
by MoebiusStreet via /r/csharp