8 ms·
As we're talking business and long lifetime... First point: nothing Microsoft. Done that show for 20 years and been through all the marketoid schizophrenia pro
by setquk 9y ago
As we're talking business and long lifetime...
First point: nothing Microsoft. Done that show for 20 years and been through all the marketoid schizophrenia promoted rewrites for no business value. Now the new "start again" is .Net core and a big chunk of stuff just isn't portable and never will be. Plus the price gouging, licensing hell etc when you have to scale up. Entire ecosystem is a wasteland of unmaintained crap and automation prospects are terrible. Forget it at this point. I'm done.
At this point, I'd pick Java + Spring + Postgres + CentOS. Does most of the stuff you need out of the box, good support available, long product lifespan, well maintained, possible to automate everything. No SPA, just old fashioned dynamic pages with light weight in house JS framework that does partial page replacement, simple validation etc via DOM. Not even jQuery which has been nothing but hell to upgrade so I'm loathed to pick anything more complicated.
PaaS: none. Either in house or old fashioned colo, with HP hardware. If you have to go PaaS, then AWS which seems the most glacial in deprecation so far.
Edit: also desperately avoid any non portable abstractions and vendor specific features. They will ruin you. For example when someone suggests a database engine, hide it behind hibernate and only use the hibernate API!
Edit 2: it is important to assign an exit cost for every decision as well. What's true now is not going to be in a decade.
- unclebucknasty 9y agoWow, that's pretty hardcore...borderline badass! Interesting thing is this stack was doable probably 13+ years ago, so I see your emphasis on stability. Anyway, it's similar to what I'm using and surprised to see it here. Biggest tweaks are that I'd consider Vue/Webpack if starting today and do believe PaaS to be far superior to on-prem/colo. Also, not big on Hibernate or too much abstraction at the data access layer.
- setquk 9y agoIt's possibly a summary of my frustration with the last 20 years or so. I've never used vue/webpack so can't comment. I've been shot too many times by javascript framework churn over the years. I wrote a relatively small and powerful abstraction over DOM that doesn't hide it away, merely makes the hard things easy and less verbose and allows simple templates to be used. Hibernate is essential if you ask me. One of the problems I see a lot is relying on features of the underlying storage engine. This, while it has advantages, has more disadvantages such as coupling and vendor lock in. These have been significantly costly when you have to scale something commercial up like SQL Server.
- mercer 9y agoCould you elaborate on the PaaS? I've been avoiding it, but partly that's perhaps because I'm a control freak and not for any particularly good reason.
- unclebucknasty 9y agoWell, I should have probably distinguished between IaaS ans PaaS, but primarily intended to differentiate between either of these and the GP's advocacy of on-prem or colo. That is, I would advocate PaaS and IaaS over on-prem/colo, and how far you go towards PaaS is a matter of comfort. I do think that comes down to control though, and I actually can't think of a much better basis for the decision.
- mercer 9y agoAh, right. so a VPS or even a dedicated server would be considered IaaS?
- unclebucknasty 9y agoPossibly. I think the line runs along how the resources are exposed. That is, if they are literally manageable as a service (e.g. via API or management console), then yeah. No expert on the terminology here, though. Just how I understand the term.
- alex_hitchins 9y agoFor me at least, I'd definitely go .Net Core. And I'd not have issues using MySQL either. True, there are fads and fashions that come and go, but over the last 15 years I've not had an issue building and maintaining applications of all varieties built on MS technology. Plus, given the current owner of Java, I'd stay well clear of it. Already moved anything that was MySql over to MariaDB.
- 0x4f3759df 9y agoPlus .net core supports async and runs on linux.
- setquk 9y agoI couldn't possibly consider .Net core on a number of reasons I didn't discuss above. Opt out telemetry, constant direction changes, who is in charge of the project and the general abusive nature of the company running the show towards its customers and end users over the last decade. The list is endless. I have actually tried to get things fixed on MSFT open source projects as well and even when you get up to Scott Hanselman poking it on github, nothing tends to happen. On top of that many crippling bugs remain unresolved for so far 9 years. We have unreliable tooling, portability problems, all sorts. On a larger team and product, it's a non trivial time and cost sink.
- alex_hitchins 9y agoWhat was the bug that remained open for 9 years? Was it part of the .net framework or a Windows SDK issue? What sort of projects did you have the most trouble with? Where were your pain points?
- setquk 9y agoSorry was 8 years ... ClickOnce refused to launch on over 2000 machines when they removed download prompting from IE9. This sits between the .net framework and the IE team, neither of which would take responsibility for fixing. Eventually we got a registry fix out of them from bottom line support which turned download prompting back on which was removed from the IE UI but still left in there. The registry fix we had to deploy to hundreds of clients and had a massive support cost. This is still broken in IE11. It was reported on an IE9 beta. Pain points: large project performance, high concurrency projects, IDE reliability, cost, odd time sinks, bugs in the framework, lack of automation possibility for a vast number of project types (try building VSTO applications on a CI server), deprecations (WWF/WCF changes, AppFabric, Velocity etc) all sorts.
- detaro 9y agoI can see not using PaaS, but strictly going in-house or colo seems odd. Not saying that there aren't reasons for this, but IaaS, rented servers, ... all are options with more flexibility and little lock-in.
- setquk 9y agoAgree on IaaS. I missed that in there.
- mythz 9y agoI definitely sympathize with having to endure the perpetual rewrites of Microsoft Web and Web service frameworks. In contrast I'd like to offer our competing ServiceStack framework as an alternative (commercial) platform [1] which has been in active development since 2008 that in contrast to the ever changing MS frameworks offers a single integrated Web Services [2] and Web [3] solution that has maintained the same clean, stable high-level message-based API throughout its lifetime. It was created out of frustration in the WCF/WebForms era [4] where we were the first to offer an integrated IOC, impl-free/testable multi-provider logging, caching, virtual files and configuration providers, clean/extensible typed user sessions - all using high-performance components. The first to run on .NET Framework and Mono, the first to create high-performance JSON and text serializers and fast typed ORM, which at the time they were developed were several times faster than anything MS offered [5]. All pre-dating Web API [6] and outlasting the continually changing fragmented MVC/Web API "framework in a framework" coupling as well as the rolling churn of abandoned OWIN/katana abstractions [7]. Instead we've maintained clean impl-free IRequest/IResponse interfaces which provides a lightweight abstraction over the underlying platforms concrete HTTP Request/Response abstractions where we're still the only framework where the same ServiceStack App can run on classic ASP.NET, self-hosting HttpListener (.NET Framework or Mono OSX/Linux), ASP.NET Core on .NET Core (Win/OSX/Linux) and ASP.NET Core on .NET Framework v4.7 [8]. As a result of our stable surface area we still have older v3 (BSD) Customers upgrading to our latest commercial version just so they can leverage their existing investments to run on ASP.NET Core which is relatively easy to port [9] where most of our .NET Live Demos [10] have been ported to run on .NET Core [11]. Unlike any of MS offerings, ServiceStack: - Has never abandoned any .NET library, our libraries are continually enhanced and maintained, not rewritten or discarded - The same Services implementation supports multiple formats out-of-the-box, can be called from multiple HTTP / MQ / SOAP endpoints, on multiple hosting options [12] - Provides native, end-to-end typed development experience for C#, TypeScript/JS, Java, Kotlin, Swift, F# and VB.NET [13] - Has no prejudice towards MS products, our libraries work equally well on all platforms/back-end providers, e.g. OrmLite [14] provides a high-level typed DB agnostic API across all major RDBMS's. Whilst SQL Server is our most popular dialect (courtesy of marketing in .NET), we personally prefer/use PostgreSQL and its a popular configuration to configure Unit tests to use SQLite for faster Integration tests. - Provides clean abstractions of multiple providers for AWS [15] and Azure [16] - Has its own flexible Auth Provider model [17] which hasn't had a schema change and never needed a "migration" whilst being continually updated to support new providers - Has an aversion to complexity, instead of blindly adopting over-engineered solutions we develop our own cleaner alternatives. Some examples of this include AutoQuery vs OData [18] Add ServiceStack Reference vs WCF Service Reference [19], Templates [20] vs Razor [21] - Offers a Simple and "pure Cloud App" solution for developing .NET Core Apps with built-in hot-reloading and without any compilation or builds [22] From 2013 we've adopted a sustainable dual licensing model (commercial for closed-source or OSS/Free for OSS projects) which has allowed ServiceStack to be actively supported and maintained and continually updated with new releases [23]. Anyway I'd like to offer ServiceStack a stable competing framework for .NET and .NET Core that's being developed from a different mindset/values which has evolved gracefully over the years and stands no risk of abandonment or rewrite with many of our Customers sharing a different experience [24] than if you've had to live through the churn of MS's multiple framework rewrites. [1] http://docs.servicestack.net/why-servicestack [2] https://github.com/ServiceStackApps/HelloMobile [3] http://razor.servicestack.net/ [4] https://www.slideshare.net/newmovie/what-istheservicestack-14819151 [5] http://mono.servicestack.net/benchmarks/ [6] http://mono.servicestack.net/mvc-powerpack/ [7] https://servicestack.uservoice.com/forums/176786-feature-requests/suggestions/4851342-owin-compatible-servicestack [8] http://docs.servicestack.net/releases/v5.0.0#servicestack-mobile-and-desktop-apps [9] http://docs.servicestack.net/netcore#exceptional-code-reuse [10] https://github.com/ServiceStackApps/LiveDemos [11] https://github.com/NetCoreApps/LiveDemos [12] http://docs.servicestack.net/why-servicestack#multiple-pluggable-formats [13] http://docs.servicestack.net/add-servicestack-reference [14] https://github.com/ServiceStack/ServiceStack.OrmLite [15] https://github.com/ServiceStack/ServiceStack.Aws [16] https://github.com/ServiceStack/ServiceStack.Azure [17] http://docs.servicestack.net/authentication-and-authorization [18] http://docs.servicestack.net/autoquery [19] http://docs.servicestack.net/add-servicestack-reference#advantages-over-wcf [20] http://templates.servicestack.net [21] http://docs.servicestack.net/why-not-razor [22] http://templates.servicestack.net/docs/web-apps [23] http://docs.servicestack.net/release-notes-history [24] https://servicestack.net/#testimonials-carousel