@vpecresse le lycée de mon fils vient de m'informer qu'ils ne seront plus en mesure d'assurer l'entretien et les services restauration correctement par manque d'agent. Il parle même de gobelets et assiettes jetables .. c'est quoi cette histoire ? Mes enfants sont en internat
@ShokzUSA c'est bien de vendre des produits en France mais lorsqu'il faut activer la garantie.. y'a plus personne .. bizarrement la page warrenty et contactus ça vous fait chier de la remplir ..
Ça va un peu à l'encontre du droit français, non ? Vous pensez pouvoir vendre en France et faire un gros Fuck au loi de protection du consommateur @dgccrf
J'ai beau passer par un navigateur ou votre appli .. toujours la même rengaine .. mais je m'en fois moi .. diffuser moi les JO . Je veux voir du Français et non des Italiens .. oui parce que je suis en Italie .. faut encore payer un #trucenplus
@RER_A Pourquoi avec tant de problèmes avec ce bagage vous faites descendre tout le monde à Torcy avec un temps d'attente de 8 min ?
Sachant que ca fait 40 min d'attente mini à Vincennes déjà!
The Outbox pattern lets you create more reliable applications.
Instead of managing many services and what happens when each fails, you store an outbox message.
When you handle the outbox message, you can trigger the side effects.
Here's how: https://t.co/CK36ZNAJRx
Cron Jobs are often considered simple.
But at the scale of a product like Slack, it can turn into a challenging engineering problem.
Slack was facing multiple issues with the Cron Jobs handling notifications:
[1] A single node executing all scripts
[2] No horizontal scaling
[3] Single point of failure
But as a messaging platform, their success depends on the right message reaching the right person on time.
And for that, notifications are extremely important.
To handle all of this, Slack built a new Cron execution service from scratch.
How was it designed?👇
@Departement77@Jf_Parigi@Prefet77 Il est temps .. vu les trous sur la N36 c'est une vraie catastrophe
Aujourd'hui en tant que motard il n'est plus possible de doubler même lorsque la signalisation le permet à cause de trous beants servant de délimitation entre les voies . Et que dire de certains rond-points ..
How can Cache Systems go wrong?
The diagram below shows 4 typical cases where caches can go wrong and their solutions.
1. Thunder herd problem
This happens when a large number of keys in the cache expire at the same time. Then the query requests directly hit the database, which overloads the database.
There are two ways to mitigate this issue: one is to avoid setting the same expiry time for the keys, adding a random number in the configuration; the other is to allow only the core business data to hit the database and prevent non-core data to access the database until the cache is back up.
2. Cache penetration
This happens when the key doesn’t exist in the cache or the database. The application cannot retrieve relevant data from the database to update the cache. This problem creates a lot of pressure on both the cache and the database.
To solve this, there are two suggestions. One is to cache a null value for non-existent keys, avoiding hitting the database. The other is to use a bloom filter to check the key existence first, and if the key doesn’t exist, we can avoid hitting the database.
3. Cache breakdown
This is similar to the thunder herd problem. It happens when a hot key expires. A large number of requests hit the database.
Since the hot keys take up 80% of the queries, we do not set an expiration time for them.
4. Cache crash
This happens when the cache is down and all the requests go to the database.
There are two ways to solve this problem. One is to set up a circuit breaker, and when the cache is down, the application services cannot visit the cache or the database. The other is to set up a cluster for the cache to improve cache availability.
Over to you: Have you met any of these issues in production?
–
Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://t.co/uc5M7CdXXC
🔥 Heard about the Cyber Resilience Chasm ? 🔥
👉 Let me explain, as illustrated in the graph (forgive the untidiness), as #Security organizations gain more access to resources, they equally grow in maturity.
Why is this an issue? 👇 🧵
Amazon transformed from an online bookstore into a global e-commerce giant.
Netflix shifted from mailing DVDs to dominating streaming.
And Uber redefined transportation as we know it.
What do all of these tech giants have in common?
Besides other things, they are extremely good at scaling their system based on demand.
But you don’t need Amazon or Uber’s budget to improve your system’s scalability.
Here are 9 strategies (some non-obvious) to make your system more scalable.
(don’t forget to bookmark)
✅ Horizontal Scalability
- Don’t upgrade a single server
- Add more servers to distribute the load
- Horizontal scaling prevents bottlenecks and keeps your system responsive
✅ Auto Scaling
- Predicting traffic can be hard
- Implement auto-scaling policies to adjust resources based on real-time traffic
- Adapt to varying workloads without manual intervention
✅Load Balancing
- Scaling is not just about adding new resources but using existing ones efficiently
- Load balancers help distribute traffic evenly across multiple servers
- This helps with the overall scalability of the system
✅Database Replication
- If your application has a high read volume, database replication can help you scale out.
- Replication ensures data redundancy
- Also, it helps offload read operations to secondary nodes
✅Database Sharding
- If your application is struggling to handle the high volume of write requests, consider sharding the database.
- Sharding distributes data across multiple instances
This allows scaling reads as well as writes
✅Stateless Services
- Design services to be stateless whenever possible.
- Stateless services are easier to scale horizontally because they don’t rely on server-specific data
✅Containerization
- User container technologies like Docker to package applications and their dependencies
- Containers can be easily deployed and scaled out to handle the demand.
✅Async Processing
- Move time-consuming tasks to background jobs using async processing.
- This improves scalability for handling user requests
- Also, resource-intensive operations are handled separately
✅Serverless
- Serverless lets you focus on code without worrying about the infra.
- It automatically scales based on demand.
- The responsibility is pushed to platforms like AWS Lambda or Azure Functions
In the end, you don’t need all of these strategies to build a scalable system.
Use what makes sense for your system’s context.
===
That's all for now!
If you enjoyed this post:
- Destroy the LIKE button
- REPOST so that everyone knows about these scaling strategies
- BOOKMARK so that you can revisit it whenever needed
- Follow me for more posts like this.
Low Coupling & High Cohesion
That’s one thing that most software engineers want in their systems.
It’s also the one thing that seems within reach during development…
…but escapes after you’re done with the project.
Let’s understand them today - once and for all!
👉 Coupling
Coupling is the interdependence between software modules or components.
What does it mean in plain English?
If your system is highly coupled, change in one module leads to changes across the entire system.
You hit one nail in the wall and the entire house collapses around you.
👉 Cohesion
Cohesion is the degree to which the elements within a module or component are related to one another.
Simply put…if your module has high cohesion, it means the elements are closely related and work together to perform a well-defined task.
Think of a team where everyone has each other’s back and supports each other on the field.
🧰 So what do you really want in your systems?
Ideally, you want to have Low Coupling and High Cohesion.
✅ Low Coupling results in better flexibility and easier maintenance because you don’t have to know about every relation in the system while making a change.
✅ High Cohesion makes your code more readable and easier to change because everything you need to know is right there in front of you.
Some steps to achieve this:
Think about your application in terms of Bounded Contexts.
Few things I'd try to do from the start:
- Divide & Conquer. Each module should do a fixed thing.
- Keep the functionalities separated from each other. Look at Vertical Slice Architecture
- Try to go for single ownership of data wherever possible or have clear-cut interfaces.
While you might get quick success identifying boundaries at the technical level, the real benefits show up when you understand these boundaries at the levels of business processes and the underlying domain
===
That's all for now!
If you enjoyed this explanation of Coupling vs Cohesion, don't forget to:
- Test the Coupling and Cohesion of the LIKE button
- REPOST so that everyone can make the distinction
- BOOKMARK for future reference
- Follow me for more posts like this
Videos from SREcon23 Europe/Middle East/Africa are now available to watch! Access them from the conference program page (https://t.co/byzmvv0v2Z) by clicking on the title of the talk you wish to watch. Scroll down and you'll find the video embedded there.
(1/2)