EP108: How do we design a secure system?

EP108: How do we design a secure system?

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)
͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­͏     ­
Forwarded this email? Subscribe here for more

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

Reserve Your Spot


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.

No alt text provided for this image
  • 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.

  1. A Crash Course in API Versioning Strategies

  2. Embracing Chaos to Improve System Resilience: Chaos Engineering

  3. A Crash Course in CI/CD

  4. A Crash Course in IPv4 Addressing

  5. A Brief History of Scaling Netflix

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.

No alt text provided for this image

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.

No alternative text description for this image

Let’s look at each of them with implementation techniques:

  1. Scalability
    Scalability ensures that your application can handle more load without compromising performance.

  2. Availability
    Availability makes sure that your application is always ready to serve the users and downtime is minimal.

  3. Reliability
    Reliability is about building software that consistently delivers correct results.

  4. 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.

 
Like
Comment
Restack
 

© 2024 ByteByteGo
548 Market Street PMB 72296, San Francisco, CA 94104
Unsubscribe

Get the appStart writing


by "ByteByteGo" <bytebytego@substack.com> - 11:36 - 20 Apr 2024