"Microservices first" indicates that the person advocating that idea isn't thinking like an architect. No single architectural pattern is appropriate in all contexts. An architect will first identify the essential system characteristics and then pick an architectural pattern with pros and cons that match the characteristics. Microservices are fault-tolerant, highly elastic and scalable, incremental-development friendly, and support hot deploys into running systems. They are also slow, complex, and network-based (I see that as a huge negative). Use the pattern if those characteristics (pros and cons) work for you. If they don't, use a different pattern. There's also a third choice. A very simple microservice system can run as threaded components in a monolith, thereby giving up the elasticity but also lowering the complexity quite a bit by getting rid of the network issues. In other words, you can meld patterns to create new patterns. It's all about identifying characteristics and choosing (or inventing) appropriate patterns.
Entity Framework Query Plan Visualizer โฌ
This new Visual Studio extension by @GioDalakishvili looks like it could be a game changer. It enables us to view the query plan of our queries directly inside VS.
#dotnet
๐ช๐ต๐ ๐ฑ๐ผ๐ฒ๐ ๐๐ผ๐ผ๐ด๐น๐ฒ ๐ฟ๐ฒ๐ฐ๐ผ๐บ๐บ๐ฒ๐ป๐ฑ ๐ ๐ผ๐ฑ๐๐น๐ฎ๐ฟ ๐ ๐ผ๐ป๐ผ๐น๐ถ๐๐ต๐ ๐ถ๐ป๐๐๐ฒ๐ฎ๐ฑ ๐ผ๐ณ ๐ ๐ถ๐ฐ๐ฟ๐ผ๐๐ฒ๐ฟ๐๐ถ๐ฐ๐ฒ๐?
In the last decade, we have seen a massive trend of using microservices everywhere. We were building systems for a few hundred or thousand users and wanted to know how to make a system for millions of users. This was over-engineering and needed to be corrected. Why it was wrong? Because the development lasted long and we created incredibly complex systems, hard to maintain. This is especially true for startups that must go fast and stay simple.
A recent paper by authors from Google found that most of their developers split binaries for one of the following reasons: it improves performance, fault tolerance, and abstraction boundaries and allows for flexible rollouts.
Yet, splitting applications into microservices has its challenges:
๐ธ ๐๐ ๐ต๐๐ฟ๐๐ ๐ฝ๐ฒ๐ฟ๐ณ๐ผ๐ฟ๐บ๐ฎ๐ป๐ฐ๐ฒ. The overhead of serializing data and sending it across the network is increasingly becoming a bottleneck
๐ธ ๐๐ ๐ต๐๐ฟ๐๐ ๐ฐ๐ผ๐ฟ๐ฟ๐ฒ๐ฐ๐๐ป๐ฒ๐๐. It is incredibly challenging to reason about the interactions between every deployed version of every microservice.
๐ธ ๐๐ ๐๐ฎ๐ธ๐ฒ๐ ๐๐ผ๐ฟ๐ธ ๐๐ผ ๐บ๐ฎ๐ป๐ฎ๐ด๐ฒ. Rather than having a single bi-nary to build, test, and deploy, developers must manage ๐ different binaries, each on their release schedule.
๐ธ ๐๐ ๐ณ๐ฟ๐ฒ๐ฒ๐๐ฒ๐ ๐๐ฃ๐๐. Once a microservice establishes an API, it becomes easier to change by breaking the other services that consume the API.
So, they proposed the following approach:
๐ญ. ๐ช๐ฟ๐ถ๐๐ฒ ๐บ๐ผ๐ป๐ผ๐น๐ถ๐๐ต๐ถ๐ฐ ๐ฎ๐ฝ๐ฝ๐น๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป๐ that are modularized into logically distinct components. A component is a long-lived agent, similar to an actor.
๐ฎ. ๐๐ฒ๐๐ฒ๐ฟ๐ฎ๐ด๐ฒ ๐ฎ ๐ฟ๐๐ป๐๐ถ๐บ๐ฒ ๐๐ผ ๐ฑ๐๐ป๐ฎ๐บ๐ถ๐ฐ๐ฎ๐น๐น๐ and automatically assign logistical components to physical processes based on execution characteristics. So, if both components are in the same OS process, they are called regular method calls, but if they are co-located, calls are executed as RPCs over the network. Runtime decides whether these modules should be collocated or moved to different machines (and scaled, etc.).
๐ฏ. ๐๐ฒ๐ฝ๐น๏ฟฝ๏ฟฝ๐ ๐ฎ๐ฝ๐ฝ๐น๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป๐ ๐ฎ๐๐ผ๐บ๐ถ๐ฐ๐ฎ๐น๐น๐, preventing different versions of an application from interacting.
This approach consists of two main parts: a programming model with abstraction that allows developers to write modularized applications and a runtime for building, deploying, and optimizing these applications. They claim that it reduces application latency by up to 15x and costs by up to 9x by simplifying application management and deployment.
If you want to check the framework implementing the approach from the paper, check https:// serviceweaver. dev/.
What do you think about this approach? Does it look like EJBs or CORBA?
#microservices
Peu de gens savent que jusqu'au dรฉbut des annรฉes 2000 les fabricants d'appareils fournissaient le manuel technique avec les schรฉmas et la liste des composants รฉlectroniques POUR POUVOIR LES REPARER, ร l'instar de cet ampli Kenwood de 1991.
Pourquoi ont-ils arrรชtรฉ de le faire ?
#Ukraine ๐บ๐ฆ: Le prix dโune dรฉfaite ๐งต
On entend depuis quelque temps une petite musique qui met en avant la possible dรฉfaite de lโUkraine face ร la Russie. Quelles en seraient les consรฉquences ? Que cela soit pour l'Ukraine, l'Europe mais aussi au niveau mondial โคต๏ธ
1/21
Je voulais rรฉpondre en-dessous de ce comm pour lโinstruire, mais bon, une piqรปre de rappel ne fera de mal ร personne.
Ainsi, thread sur les fameux ยซย 20 millions de morts russesย ยป : pourquoi cโest inexact, et pourquoi yโa pas de raison de vรฉnรฉrer la Russie pour รงa
En joie ! ๐งต
Today weโre releasing TypeChat (https://t.co/0svSoiFx3r), an open source project that uses AI to bridge between natural language and application schema and APIs. It uses TypeScript in novel and interesting ways. Check it out and let us know what you think. @TypeScript
Y'a un tweet qui provoque l'ire des devs depuis quelque temps, a propos de la performance du code en 2000 vs 2023. J'lui fait pas de pub, Parceque c'est un peu navrant et je ne veux pas tirer sur l'ambulance... Par contre y'a un truc qui semble passer sous les radars ๐งตโฌ๏ธ
Yes, but all documentation is technical debt. You constantly have to update it. Itโs always wrong. Consequently, you should write as a little of it as possible.
We know that the entire free world supports us.
And we know that the entire free world will help us stop these bloodthirsty and reckless terrorists. Terrorists operating under the guise of a state.
#russiaisaterroriststate
The argument that "we need to use microservices to get hard boundaries between components," is really "we are so undisciplined that we need to add considerable complexity to protect ourselves from ourselves." โ