A thread on "service meshes" and distributed system software complexity in general. Buckle up!
Our industry tends to fetishize the technical architectures of companies like Google, Netflix, etc. They have built some impressive tech to solve rare scaling issues, so this is not surprising. However, does your company/system need similar solutions? Probably not...
The backlash against service mesh, K8S, and other ☁️ native tech is based, reasonably IMO, on the view that vendor marketing and big tech thought-leading are causing smaller orgs to not see the forest for the trees and adopt solutions that are too complex for their actual needs.
If you have a new/small distributed system:
✔️ Monolith
✔️ Untyped language/API, go wild
✔️ Monorepo, why not
✔️ ☁️ FaaS, yes please
✔️ MongoDB? Web scale
✖️ Service mesh
✖️ K8S
✖️ Anything else that anyone thought-leads about on here.
Focus on creating customer value and keep things as simple and boring as possible for as long as possible.
BUT, if you are lucky enough to find success, your development team will grow, you will end up moving to SoA, and then the 💩 will hit the fan:
- Untyped languages and APIs won't feel so productive anymore.
- That monorepo? Don't even get me started.
- Today's state of the art FaaS is not going to cut it in terms of reliability, obs, networking, etc.
- You WILL start feeling the SoA networking/obs pain.
At this point, the "service mesh" is coming for you one way or the other because the problems of obs, load balancing, service discovery, consistent timeouts, retries, etc. must be solved or your SoA is DOA.
Are you an all Java shop? Finagle or Hystrix are great choices. Are you an all Go shop? Try something like Micro. Are you polyglot? You can either plow a ⛰️ of resources into custom libraries in every language, or you can embrace the sidecar. Solutions must be found.
But remember, VERY few companies get here. Make damn sure you need the networking complexity you are about to take on, because no matter what the vendors/conferences tell you, there will be pain, and nothing comes for free.
Is it always going to be this way? I don't think so. I actually think we are in a bridge period in which the average engineer has to directly interact with technologies like Envoy and K8S to succeed at SoA.
I am a firm believer that in the 10 year timeframe, FaaS is all anyone will interact with. If I am a developer I want to provide code that:
- R/Ws from the DB
- Calls APIs
- Queues/deques jobs
That's about it. Everything else is noise.
In that vein, I think that in a ☁️ FaaS world that is stable enough to run Google, technologies like K8S, Envoy, "service meshes," etc. will be everywhere, but almost no one will know they are there. It's all plumbing. No one cares about plumbing.
Until that day comes, a large scale SoA *will* require implementing a "service mesh," one way or the other. Don't let anyone tell you otherwise, and don't buy into marketing and tech envy that pushes you to build one before it's required. end/
• • •
Missing some Tweet in this thread? You can try to
force a refresh
I've been spend a bunch of my "spare" "manager" time lately working on fixing @EnvoyProxy test flakes. A few thoughts on testing. 🧵
We have invested heavily in Envoy testing. Our line coverage is > 97% split across unit tests (with mocks), integration tests (fake clients and upstream servers using real networking), and fuzzing. The effort here pays off: our velocity is high with relatively few regressions.
While all 3 types (unit/integration/fuzz) provide value, integration are the biggest bang for the buck from a functional perspective. They cover real end-to-end scenarios and provide high confidence that a feature actually works.
The perception in our industry that you need to "love what you do," "focus on your side projects," "nerd out," and generally "hustle," drives me batty. It is 100% fine to be here purely for the 💰. 🧵
The last time I owned a computer that was not provided by work was about 20 years ago. I have never had a side project. My hobbies have nothing to do with technology.
I am here because if I need to make money to support my family, lifestyle, interests, and causes, working for internet companies is about as spoiled/privileged a way to do it as possible.
The politics around Istio and Knative within Google are fascinating. AFAICT from the outside, they are primarily driven by a few execs who believe that Google "gave away the farm" when they moved K8s into a foundation. A few of my thoughts on this subject: 🧵
People frequently conflate "open governance" and "neutral IP ownership." It depends greatly on the foundation, but in the case of the CNCF, there are literally zero governance requirements enforced on projects. CNCF projects can be (and are) single vendor governed.
So in reality, CNCF (and ASF, etc.) are primarily around to provide neutral IP/trademark ownership. This allows projects to be used in consuming projects/products without fear of IP/mark litigation.
Some thoughts from this year's #kubecon now that I am back in ☁️ city and have decompressed a bit. (Thread)
The stable of CNCF technologies is maturing, but they are still primarily building blocks. End users are struggling to figure how to put them together in useful ways, and often end up inheriting complexity they don't need.
The vendor ecosystem is not helping decrease complexity; quite the opposite. The fierce competition, FUD, and sometimes rancor is confusing end users. CNCF is not helping either; the official landscape is so large and confusing as to be useless. We need to do better.
Last week I sat for an internal interview about my career progression to high level IC engineer, with a focus on how I've never felt I needed to become a manager to gain influence. I thought I would share some of my career advice for aspiring IC "lifers." Thread!
When asked for IC career advice the first thing I always say is: YOU grow your career and influence. Not management, not the company, YOU. This means constantly advocating for ways to grow: subjects to learn, projects with increased scope, and sometimes new teams or companies.
This also means "managing up" is critical. Don't assume your manager is acting in your best interest. Hopefully they are (when your interests *and theirs* align), but sometimes they aren't, and it's important to recognize that early and correct it, or eject if it's not fixable.
There has been a lot of coverage lately on how much 💰 companies are spending on public cloud. Lyft, > 10M per month, Apple > 30M per month, etc. This seems like a ton of 💰 right? Clearly all of these companies can do better in-house, right? Wrong!
Don't get me wrong, 10M+ per month is a lot of 💰 in absolute terms, but the real question is whether a company can actually do better than that when considering TCO.