I imagine if you have an ops team, they're going to continue to pray every time you have to upgrade k8s or a supporting underlying service and the expectation is that everything will continue to function without dropping an inbound request. I imagine they are going to be less than impressed being on call for something that is essentially still in beta. And if you have no ops and your devs are responsible for it, god help you unless you're leaning heavily on a Kubernetes managed service (which is of course, as we recently saw with Google's outage [1], no guarantee everything will work flawlessly).
My hesitation and cautiousness doesn't come from being a greybeard curmudgeon, it comes from a healthy dose of skepticism that this is The One True Path that will Solve All The Problems. I am cautiously optimistic it might be a stable, proven ecosystem, eventually. But it isn't today.
When making technology decisions, imagine that you're the one with the pager at 3am and work backwards accordingly.
Man, I wish I could give you more upvotes for this sentiment. Making the decision to put the livelihood of a company on any platform is not to be taken lightly. As an SRE I feel like I have to take a slightly conservative approach to new technologies.
Do me a favor and pay it forward. When technology decisions are made, look at them with a conservative eye. Make absolutely sure the technology selected is being selected for the right reasons (ie not resume driven development, premature optimization, culture signaling, or because it's "new" it must be better). It'll pay dividends for whomever has to operate it, as well as the business.
Maybe you'll become a billionaire. But probably not. Your monolith in a container will take you far, before we go down the treacherous path of microservices (for team demarcation, not technical scaling, but maybe technical scaling!), container lifecycle management, inbound load balancing, internal load balancing, service mesh and discovery, and all the fun that container orchestration at scale encompasses (are you ready to cry for a bit when you're running on no sleep and you can't determine why your orchestrator is unable to retrieve container images from your registry?).
Not concerned at all. I get paid to de-risk, not to ride the hype train.
> What worked 5 years ago is a joke today, in many cases.
Postgresql was first released in 1997. Lots of the web still runs on PHP, Python 2, and large amounts of Java. What you call a joke, I call a sustainable business and an amortized cost. No one is paying you to use shiny tools, they're paying you to solve business problems.
Postgres maintains 5 years worth of major releases, not more. After that no more fixes for data corruption, security issues etc. IOW, using that old a version of postgres is careless, and might even bring legal liability after an intrusion (or just data loss).
Refusing to adopt innovation because it doesn't match with what you knew when you were a technical contributor is risky, too.
Sticking to Python2 is risky. Using a version of Postgres released 5 years ago (9.3) is risky, using legacy PHP is risky, relying on the JVM and Java developers to solve problems that other tech stacks solve faster/better is risky.
What you call a sustainable business with amortized costs I call an un-turnable ship that wastes money dealing with problems that were solved years ago.
I think you misunderstand. I am not refusing to adopt innovation. I'm refusing to be underpaid to "innovate". If you want to spend sleepless nights troubleshooting beta software in production, it is not my place to stop you. It is my place to not recommend said software to businesses, and this is extremely easy to demonstrate to decision makers.
If you do recommend software to a business that isn't proven (and Kubernetes is still very much unproven, it's first release was only 3 years ago), and it fails, you should be accountable for your poor judgement.
The only misunderstanding that's taking place here is how unproven you think the tech being discussed is.
No one is suggesting you spend sleepless nights troubleshooting beta software in production.
K8s is not beta software, and the fact that you have to misrepresent my position as such is a pretty good indicator that you don't find my actual position (use solid software even if it's new, as long as it's solid, which k8s is) to be objectionable. I wish you'd start there...
We disagree k8s is solid, so no further discussion is necessary.
You questioned the maturity of an IRC client that was only 3 years old [1]. But that's enough time for Kubernetes to be a mature orchestration framework, to be relied upon as critical infrastructure? Yes, more development resources have been committed to Kubernetes, but that does not make it solid.
I questioned (misleading word, I did genuinely question as in I was unsure, not question as in demonstrate skepticism) the IRC client's maturity with a ton of caveats about myself and my admitted paranoia in this specific area.
And yes, they're two completely different pieces of technology with two completely different sets of eyeballs on them. 3 years for k8s is not the same as 3 years for an IRC client.
> Yes, more development resources have been committed to Kubernetes, but that does not make it solid.
It's a strong indicator of stability, and pretending like it's not kind of tips your hand here, I think.
Do you honestly think the two are even remotely comparable?
> And I question why you care more about going home at the end of the day than delivering the best product to your clients.
Because I work to live, not live to work. Why would I give my time away for free to an employer or a client? I suggest proven solutions that require limited or no support outside of business hours. Several of my clients pay overtime to their ops staff when an on call event occurs. Time is literally money.
Your definition of "best" seems to be Kubernetes. My risk-adjusted recommendation is not. No more, no less. Appreciate the discourse!
Because you signed a contract with your employer/client saying you'd do that? Unless you're hourly...
My definition of "best" isn't k8s, I merely don't exclude technologies just because I've arbitrarily decided to stop learning at some point in time and mask this decision in "skepticism" for all technologies developed after that point in time.
Your risk assessment seems to be calibrated around "was this tech around when I was a technical contributor", and that will continue to hurt your clients/employer for as long as you continue to do it.
For the people reading this who might be on the fence about k8s and its "solidness", keep in mind that hostility like what's being shown here is exactly the kind of thing that holds good tech back. Don't fall for this evidence-less claim, look at what people are accomplishing and the issues they're running into.
Find the positivity about the tech, and see what those people have trouble with. Tons of case studies to demonstrate, resoundingly, that k8s is "solid": https://kubernetes.io/case-studies/ . See what these people struggled with, and that'll give you a better idea of who's right here.
Yeah, we did talk about Badger a bit, but I think Dgraph's internal testing was likely going to stress it more than I could over the network. We have occasionally found storage-engine level bugs with Jepsen (Tendermint, for instance), but usually the low request rates mask race conditions in storage libraries. :)
We had done a separate testing for Badger before Jepsen, where we had identified and fixed a few issues related to crashes. You can read that blog post here:
when you want to make complex sql,toyorm maybe word better
find the name = "tom" user and it subquery blog title = "first blog" e.g
brick := toy.Model(&User{}).Where("=",Offsetof(User{}.Name),"tom").
Preload(Offsetof(User{}.Blog)).Where("=", Offsetof(Blog{}.Title), "first blog").Enter()
brick.Find(&user)
// raw sql
// select id,name,data, from user where name = "tom" limit 1
// select id,title,content,user_id from blog where user_id = @user.id and title = "first blog"
toyorm select field with Offsetof, it better when you want to refactor struct field name
and you can operation main query as sub query
Thanks for the early Christmas present! I've been wanting to check out a subscription, being able to see the current content will push me over the edge.