This weeks system design refresher:
Top 12 Tips For API Security (Youtube video)
How do we design a secure system?
Things Every Developer Should Know: Concurrency is NOT parallelism
Who are the Fantastic Four of System Design?
SPONSOR US
How to Start Your Engineering Metrics Program [Workshop] (Sponsored)
What’s the right metrics framework for your team? And how can you build a metrics program that not only measures, but improves engineering performance? LinearB is hosting a how-to workshop on May 2nd and 7th that will teach you how to shape your program to drive engineering efficiency. Successful implementation reduces cycle time by 47% on average, consistently improves developer experience measures, and increases delivery predictability.
This workshop includes:
A step-by-step framework for developing your program
Lessons from successful metrics + productivity initiatives
Take away materials and tools to help you get started
Top 12 Tips For API Security
How do we design a secure system?
Designing secure systems is important for a multitude of reasons, spanning from protecting sensitive information to ensuring the stability and reliability of the infrastructure. As developers, we should design and implement these security guidelines by default.
The diagram below is a pragmatic cheat sheet with the use cases and key design points.
Authentication
Authorization
Encryption
Vulnerability
Audit & Compliance
Network Security
Terminal Security
Emergency Responses
Container Security
API Security
3rd-Party Vendor Management
Disaster Recovery
Latest articles
If you’re not a paid subscriber, here’s what you missed.
To receive all the full articles and support ByteByteGo, consider subscribing:
Things Every Developer Should Know: Concurrency is NOT parallelism
In system design, it is important to understand the difference between concurrency and parallelism.
As Rob Pyke(one of the creators of GoLang) stated:“ Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once." This distinction emphasizes that concurrency is more about the design of a program, while parallelism is about the execution.
Concurrency is about dealing with multiple things at once. It involves structuring a program to handle multiple tasks simultaneously, where the tasks can start, run, and complete in overlapping time periods, but not necessarily at the same instant.
Concurrency is about the composition of independently executing processes and describes a program's ability to manage multiple tasks by making progress on them without necessarily completing one before it starts another.
Parallelism, on the other hand, refers to the simultaneous execution of multiple computations. It is the technique of running two or more tasks or computations at the same time, utilizing multiple processors or cores within a computer to perform several operations concurrently. Parallelism requires hardware with multiple processing units, and its primary goal is to increase the throughput and computational speed of a system.
In practical terms, concurrency enables a program to remain responsive to input, perform background tasks, and handle multiple operations in a seemingly simultaneous manner, even on a single-core processor. It's particularly useful in I/O-bound and high-latency operations where programs need to wait for external events, such as file, network, or user interactions.
Parallelism, with its ability to perform multiple operations at the same time, is crucial in CPU-bound tasks where computational speed and throughput are the bottlenecks. Applications that require heavy mathematical computations, data analysis, image processing, and real-time processing can significantly benefit from parallel execution.
Who are the Fantastic Four of System Design?
Scalability, Availability, Reliability, and Performance.
They are the most critical components to crafting successful software systems.
Let’s look at each of them with implementation techniques:
Scalability
Scalability ensures that your application can handle more load without compromising performance.Availability
Availability makes sure that your application is always ready to serve the users and downtime is minimal.Reliability
Reliability is about building software that consistently delivers correct results.Performance
Performance is the ability of a system to carry out its tasks at an expected rate under peak load using available resources.
Over to you: What are the other pillars of system design and strategies you’ve come across?
SPONSOR US
Get your product in front of more than 500,000 tech professionals.
Our newsletter puts your products and services directly in front of an audience that matters - hundreds of thousands of engineering leaders and senior engineers - who have influence over significant tech decisions and big purchases.
Space Fills Up Fast - Reserve Today
Ad spots typically sell out about 4 weeks in advance. To ensure your ad reaches this influential audience, reserve your space now by emailing hi@bytebytego.com.