Earlier quoted context omitted.
Same here. The Java ecosystem has almost everything you could ever imagine needing so it’s a safer bet. Maybe it’s not as shiny but it works. I don’t understand why MS doesn’t provide the ability to call Java code from .NET. It would open up a lot of libraries to the platform. Right now there are a lot of libraries that are first class in Java but have either no or only half baked .NET ports.
There was some plan to beef up their Java Interop library (currently used with Xamarin on Android) for more general usage for .NET 5, but I think it fell by the wayside. It'll probably happen eventually though. https://github.com/xamarin/java.interop
.NET Orleans
271–280 of 287 posts
Re: .NET Orleans
#272I'm involved in a project that uses Orleans. Conceptually and technically it's very interesting. Nodes automatically cluster together to form a big distributed system, and the concept of "virtual actors" make it possible to represent individual entities in the data model directly as actors, without worrying whether everything fits in memory at the same time. However, Orleans doesn't seem to play very well with Kubern…
Not true, pods can be gracefully shutdown, see https://cloudblog.withgoogle.com/products/gcp/kubernetes-bes...
> The clustering protocol also seems to assume that all members have stable identities and IP addresses, but that's obviously not the case in Kubernetes, where each new pod has a new identity and new IP address.
Both not true: Orleans cluster managed by a dynamic membership table which could be implemented by various tools(azure table, zookeeper, Kubernetes crds(etcd internally), etc), so nodes don't need static ip addresses also, in Kubernetes, you can deploy application as statefulset, by this way, pods will have stable identities
> Orleans was introduced by one person who has a background in distributed computing. Unfortunately, he's the only one in the organization with such a background. After he left, nobody could debug clustering problems.
Need source and proof for this one
Please don't post ridiculous opinions about things you are not familiar with, both Kubernetes and Orleans.
I have built successful products by Orleans & Kubernetes since two years ago, and now Orleans get better integration for Kubernetes than that time
edit: formatting & typo
Re: .NET Orleans
#273Earlier quoted context omitted.
Interesting, are there significant performance fixes in the mix? I always got the impression .net was never particularly performance focused: there were some bits you could use if you wanted to go a bit faster, but it doesn't seem designed from the ground up to be fast, and AoT compilation seems to be perpetually on the back-burner. Compared to other languages like C++ or Rust, which have been built for speed... Edit…
Saying "built for speed" doesn't really mean much. .NET created the async Task model that other languages adopted and has all kinds of performance related features from Span/Memory APIs to SIMD vector operations. AOT doesn't have anything to do with performance but helps with startup time and packaging. The .NET JIT now has tiered compilation with secondary passes that optimize hot methods with much more input about…
Most of the stuff I've written in .net(core) has been in F# and C# (v8) and runtime v3.1. So much pain playing 20 questions with libs whose runtime requirements were thoroughly and widely distributed across all the runtime versions in a quest to get them to co-operate. I guess I'm just not a huge fan of the language in general, it's all a bit too enterprise-design-pattern-clunky-objects and implicit-mutation all the way down, not to mention verbose. I know it's finally, finally getting a half-decent implementation of pattern matching and immutable records, but there's nothing that stands out to me about it that makes me want to use it over literally any other language I know, which I guess is fine as it's primary target is being a "boring" enterprise language, which it excels at.
> AOT doesn't have anything to do with performance but helps with startup time and packaging.
Not sure I'd agree with this: putting code through an optimising compiler like LLVM ahead-of-time means you can apply more performance optimisations for runtime.
> The .NET JIT now has tiered compilation with secondary passes that optimize hot methods with much more input about the environment, including knowing that it's a hot path. AOT can't do this.
That's fair, but if you type-system and language design already tells you everything you need to know, you don't need to wait until code gets hot-enough to swap it in, you just pay the compile-time cost and have it go at peak speed the whole time, my argument here might be veering dangerously close to the 'sufficiently-advanced-compiler' argument hahaha.
> Saying "built for speed" doesn't really mean much. .NET created the async Task model that other languages adopted and has all kinds of performance related features from Span/Memory APIs to SIMD vector operations.
Sure, it's got some fast bits but in my experience very few libraries make any use of them and by default most things are heap allocated, with plenty of pointer-indirection right? Compare that to Rust where far more is stack-allocated and numerous other optimisations and shortcuts get applied so the things you're accessing on the heap still aren't too slow. The async-task model is just a model and has nothing to do with actual run-time performance though right? I had a go playing around with Span when I last wrote stuff in C#, but I found it difficult to do much with it as the compiler either wanted way more things to operate on Span-types (some of which was out of my control) or I needed to do things with iterators that required me to turn it right back into a 'heavyweight' IEnumerable class, which kind of defeated the purpose. Entirely plausible I was using it wrong though.
> RavenDB is an example of an fast document database built in .NET Core: https://ravendb.net/
Ok that's cool, I hadn't heard of this, I'll check it out.
Re: .NET Orleans
#274Earlier quoted context omitted.
For all it's other woes, I've had like 80% fewer issues with Go's tooling than .Net's. - Getting packages installed: trivial - Getting clean builds: trivial - Build and run works near perfectly In comparison .net seems designed to be used _only_ via Visual Studio: - Why does it re-download the packages each time I ask it to build? - Why does VS freak out sometimes when there's a terminal window left over from a previ…
> - Why does it re-download the packages each time I ask it to build? Are you using Nuget?
Does it not do that for you?
Re: .NET Orleans
#275Earlier quoted context omitted.
> Because .NET Core isn't fully compatible with .NET Framework The roadmap is to collapse both into '.NET Standard' at some point. MS are committed to full cross-platform compatibility.
They're sort of dropping .NET Standard now in favor of .NET 5, which is the main path moving forward. https://devblogs.microsoft.com/dotnet/the-future-of-net-stan...
Re: .NET Orleans
#276Earlier quoted context omitted.
Is it as good as rails? When I run a rails new command, I can setup my postgres connection, nodejs and webpack libraries, rails core library in one command. Rails has database migrations with conventions i like - the timestamp and a file name that represents the action to be performed against the database (e.g. AddNameToBlogs) which that can also be rolled back. I also really like the Rails restful router which is st…
I’m an ex rails dev (from about 2010, so a while back, but still) ASP.NET MVC (which is now ASP.NET Core) is a fairly carbon copy ripoff of what rails was back then. Initially I was annoyed about this; there were efforts to run Ruby on .NET via IronRuby and thus get a nice rails-on-windows environment, and ASP.NET MVC came along and sucked all the wind out of that like a tent collapsing. Controllers, Views, Routing a…
I never got the point of Active Record amazement, having used similar teach like 5 years before Rails happened, we just weren't on Silicon Valley.
Re: .NET Orleans
#277Earlier quoted context omitted.
AOT is still on the roadmap, but has been pushed to .NET 6.
And in this case "pushed to .NET 6" doesn't mean "not working" or anything, just not production-ready. The AOT implementation in Mono is robust and is being adapted for .NET Core, which requires changes and improvements. Not to mention the introduction of new platforms - supporting targets like Apple Silicon and WASM takes additional work.
Re: .NET Orleans
#278Earlier quoted context omitted.
Interesting take. We run Orleans on Kubernetes in production at Microsoft on multiple services. Other services run Orleans on Service Fabric in production - SF is similar to Kubernetes in terms of lifecycle. The project is open source, so things like Helm charts and k8s operators would be welcome contributions. If you want to discuss, feel free to message me on Twitter ( https://twitter.com/reubenbond ) or Gitter ( h…
Please feel free to explain here in HN - why it took up to 6 years for MS to release an experimental fix [1] to run on Kubernetes? - where I can find the outstanding issue in the release notes that [1] tries to fix? - why Microsoft doesn't write and release an Operator & Helm chart, instead asking the community? - if .NET Orleans runs fine on Kubernetes, why is there a need for an experimental fix?
There is no experimental fix, just improvements. Things which can make life easier for developers running on Kubernetes by automating some things (setting addresses), and taking advantage of information that's available in a Kubernetes cluster (whether or not a pod has been deleted) and feeding that into the cluster membership system.
The reason the latter is useful is that it addresses something which can occur during initial dev/test, but which does not come up in production cases: when an entire cluster is deleted and redeployed with the same identity, the new instances try to contact defunct instances for a few minutes as a safety measure. The enhancement is to query Kubernetes to determine if it's worth trying to contact those nodes, or whether they're almost certainly dead.
- why Microsoft doesn't write and release an Operator & Helm chart, instead asking the community?
Helm charts aren't something we see requested often. Perhaps because Orleans is a framework which is embedded into the developer's application and not a service which gets deployed and stands alone (compared to, for example, a database). There are no separate Orleans pods, just the user's application pods. Internal users have been building applications on Kubernetes with their own Helm charts. Microsoft is not asking anybody to create those things, or anything, unless they want them for themselves.
Re: .NET Orleans
#279I spent some time learning dotnet core this year and with the slow-grind progress Microsoft has made it really does look like the technology stack might start to replace Java, Go, Rails, NodeJS, over the next decade. You can really feel Microsoft's experience in language development and enterprise software development coming together to provide better ecosystem ergonomics than other frameworks and toolchains. Specifi…
I'm pretty sure net core will remain for a long time in the enterprise world before making anything in the more open source / general public. It's 2020 I can't name a single server side known application built in net core.
https://www.HawkHR.com is in dotNetCore
Re: .NET Orleans
#280Earlier quoted context omitted.
Interesting take. We run Orleans on Kubernetes in production at Microsoft on multiple services. Other services run Orleans on Service Fabric in production - SF is similar to Kubernetes in terms of lifecycle. The project is open source, so things like Helm charts and k8s operators would be welcome contributions. If you want to discuss, feel free to message me on Twitter ( https://twitter.com/reubenbond ) or Gitter ( h…
Please feel free to explain here in HN - why it took up to 6 years for MS to release an experimental fix [1] to run on Kubernetes? - where I can find the outstanding issue in the release notes that [1] tries to fix? - why Microsoft doesn't write and release an Operator & Helm chart, instead asking the community? - if .NET Orleans runs fine on Kubernetes, why is there a need for an experimental fix?