@OskarStark Another underrated advantage of PHP (and dynamic/interpreted languages in general) over classically compiled ones like Java or C#: Coding agents have access to the source files of the packages.
@ECMAScript4 Germany isn't bad at software, it's bad at turning software into global products.
SAP dominates ERP, Nextcloud leads in self-hosting.
What's missing: speed, risk "appetite", product focus. Engineering culture โ startup culture.
๐ช๐ต๐ ๐ฑ๐ผ๐ฒ๐ ๐๐ผ๐ผ๐ด๐น๐ฒ ๐ฟ๐ฒ๐ฐ๐ผ๐บ๐บ๐ฒ๐ป๐ฑ ๐ ๐ผ๐ฑ๐๐น๐ฎ๐ฟ ๐ ๐ผ๐ป๐ผ๐น๐ถ๐๐ต๐ ๐ถ๐ป๐๐๐ฒ๐ฎ๐ฑ ๐ผ๐ณ ๐ ๐ถ๐ฐ๐ฟ๐ผ๐๐ฒ๐ฟ๐๐ถ๐ฐ๐ฒ๐?
Over the last decade, we have witnessed a significant trend of utilizing microservices across various industries. 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 was it wrong? Because the development lasted a long time, we created incredibly complex systems, which are 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: to improve performance, enhance fault tolerance, and establish abstraction boundaries, allowing for flexible rollouts.
Yet, splitting applications into microservices has its challenges:
๐น ๐๐ ๐ต๐๐ฟ๐๐ ๐ฝ๐ฒ๐ฟ๐ณ๐ผ๐ฟ๐บ๐ฎ๐ป๐ฐ๐ฒ. The overhead of serializing data and sending it across the network is becoming an increasingly significant bottleneck.
๐น ๐๐ ๐ต๐๐ฟ๐๐ ๐ฐ๐ผ๐ฟ๐ฟ๐ฒ๐ฐ๐๐ป๐ฒ๐๐. It is incredibly challenging to reason about the interactions between every deployed version of every microservice.
๐น ๐๐ ๐๐ฎ๐ธ๐ฒ๐ ๐๐ผ๐ฟ๐ธ ๐๐ผ ๐บ๐ฎ๐ป๐ฎ๐ด๐ฒ. Rather than having a single binary to build, test, and deploy, developers must manage n different binaries, each on its 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. Therefore, if both components are in the same OS process, they are referred to as regular method calls. However, if they are co-located, calls are executed as remote procedure calls (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 15 times and costs by up to 9 times by simplifying application management and deployment.
If you want to check the framework that implements the approach from the paper, please visit https:// serviceweaver. dev/.
What do you think about this approach? Does it look like EJBs or CORBA?
Contribute to open source, learn through self-education or courses, record educational podcasts, or grow your pet project easily with a FREE Rider subscription for non-commercial development.
Download and start today ๐
https://t.co/hKq3IldNUK
Spread the word! #dotnet#gamedev