4 ms·
I have extensive XP with .NET Core 2 in production on huge services with 1M+ users - we started making some stuff before 1.0 and had it in production after havi
by majkinetor 8y ago
I have extensive XP with .NET Core 2 in production on huge services with 1M+ users - we started making some stuff before 1.0 and had it in production after having few sessions with local MS.
WebAPI, APS.NET Core, Pwsh, C# 7... I dont work for MS, but that is some seriously good tech stack. Performance is amazing too. I highly recommend it. Worked in 50+ environments so far but this is top stuff. MS really nailed it this time. No, don't tell me that JAVA is comparable to C# in elegance, that linux dudes had python/ruby/perl/whatever before Powershell etc.
The only problem we had so far was with the Oracle db drivers which were non existent until several months back, but that is on Oracle... which sux more and more each day - commercializing java for example will just give a boost to .NET now, a lot of it - who at Oracle made up such decision escapes me, but maybe he works for MS.
- pickle-wizard 8y agoDo you run .Net Core on Windows or Linux? I have a project in the early design phase that I was thinking of going with .Net Core on Linux. I've thought about going with Java, but with all the recent Java licensing changes don't think I want to go that route anymore.
- majkinetor 8y agoI currently run on Windows servers, some of which are Core. Tried nano but its terrible as there is no package manager and no support for msi files. If you install anything in docker it takes GB's so we used VM's for bakcend/frontend running Windows Server 2016 behind IIS/kestrel/nginx and every other supporting tech on Linux (not core). One of the reasons to use Windows was Sql Server but mostly PowerShell which we do all automation in. Backend service is used to register invoices for entire country and it has 1M+ users, we have 60-100 logins per minute and 500+ concurent actions. Backend is served by single server (!) and never gets more then 10% CPU load and 20% memory with that load. I am amazed honestly. Zero dev fucktitude (once we ditched Angular, but that is another story). Almost zero downtime (30-50s to build and deploy with db migrations). Now, we use Linux alpine docker containers, use postgre instead Sql Server and pwsh with Invoke-Build to run CI/CD stuff. Sworm for orchestrations and compose for local. Have 2 incoming country-level services this year for production. Currently on dev/stage it works really fast but load is trivial. We did a lot of performance test on Windows and achieved 1.5-2K req/s with hello world and our setup on IIS/kestrel. Did no test for linux variant so far. > I've thought about going with Java, Java compared to latest C# is like ... Clojure to VBA. No brainner really, plus Oracle (sure, there are alternatives). Also, entire Java enterprise stack is overengineered beyond repair. I need 77 classes for basic stuff. Take .NET core you wont regret it.
- tracker1 8y agoI assume your docker taking GBs above is for Windows Containers? Also, most of that overhead is first use, updates and parallel similar containers are much smaller. Also, as you mention, alpine containers are what I'd consider "just enough" when wanting to diagnose an app in a container. I've found that .Net Core on Linux and in Windows are close enough that scaling should be the bigger concern. Unless you're tethered to windows, the broader tooling is much more mature with Linux containers/pods.
- chupasaurus 8y ago.Net has some caveats with GC: Server GC preallocates heap per CPU core so if you have 8+ server it could be a waste of RAM if app uses less than 1GiB. We are tinkering with microservices on .Net Core 2 in k8s and came up with using WS mode with clearing unused allocated memory on health check calls which is dirty but working trick. On the Java side though there is a hack in JRE which checks if JVM runs inside a Docker container in order to not get out of memory limit by cgroup.
- GordonS 8y agoI believe the are changes coming in .NET Core 3.0 to fix the OOTB server-GC situation. Of course for now you always have the option of enabling desktop GC instead
- ctvo 8y ago> Worked in 50+ environments so far but this is top stuff. With so much experience you must know how this sounds to someone not in the .net space. You and your company are clearly well versed in .net and it's worked out for you -- take a person and a company equally experienced in Java and they'd achieve similar results (I have, companies I've worked at have). The systems you're describing are not extraordinarily large scale systems. You've failed to outline the gains here vs. another tech stack.
- voidmain0001 8y agoFascinating! By chance, do you have any write ups on your stack elsewhere?
- scarface74 8y agoI run .Net Core on Linux -- sort of. It's mostly Linux based AWS Lambda. I haven't had any compatibility issues.
- apta 8y agoA lot of FUD is being spread about Java's licensing. OpenJDK is 100% open source and has a permissive license. And there are several providers for it. That being said, both .NET and the JVM are great platforms. You'll have to evaluate both platforms and see which one benefits your project more.
- lmcarreiro 7y agoToday there is an Oracle driver for .NET Core, BUT this fucking driver doesn't support async/await calls!!! To archive the max performance .NET Core has to offer, you do have to use async/await all the way from the coming request to the database calls. With Oracle databases, it is not possible yet.