Software system design — final

Simplicity

First thing come first . this is the most important thing to keep in mind before every ‘perfect’ picture paint .

Performance

Load Balancer

hardware and software balancer

DNS

not only resolve host ,also could balance the load before request hits IP server

Geo-based CDN

static hosting: html/js/css/font/image/video

Rate Limiting/Throttling

limit the number of request hits (use bucket token algorithm )

Request filtering

Front-end Cache

query/api result

Read API

(distributed) Cache

Write API

Message Broker

Security

SSL

offload it in Api gateway for performance .internal api call can choose one RPC framework only if necessary

data encryption

encrypt sensitive or personal data in data store .

Audit (traffic) log

Blacklist/whitelist host or ip

Circuit breaker

# failed request > threshold ,break

Availability

Replication

For every availability design first thing come in mind should be replication . server node replication,data node replication, etc .

Fail over

multiple data center setup

Check pointing

take snapshot on system state

Dead Letter queue

store the failed request and retry later

Retry Mechanism

Exponential back off

Consistency

Weak

Read may not see update. e.g. memcached .

Eventual

Read will see correct value in last (step) commit ;data replicated asynchronously .e.g. DNS/email

Strong

Read always see correct value, in every step(commit);data replicated synchronously .

Lock

data base lock : for data write consistency

AI — make your system smart

after system running years ,there will be data generated in your system .could be used to train models building prediction/classification/automation features to make business workflow smoother.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
LORY

LORY

1.2K Followers

A Senior Software Developer/Body builder . to help others enjoy coding and stay healthy