Estimate the scale of the system you are going to design...
2 billion users * 10 posts / seconds in a day
QPS = 2^9 * 10 / 10^4 = 10^6 * 2 = 2,000,000
Each post can be about 10MB
Each second
10mb * 10 posts * 2^6 per user * 2 scale factor = 2^8 = about 2 GB a second
You should identify enough components that are needed to solve the actual problem from end to end. Also remember to draw a block diagram using the diagramming tool to augment your design. If you are unfamiliar with the tool, you can simply describe your design to the chat bot and ask it to generate a starter diagram for you to modify...
2. The news feed service retrieves the news feed for a particular user. If the user is a celebrity user we use the News Feed Cache noSql and the News Feed noSQL DB. This is because the celebrity user may have millions of users and generating an accurate news feed would require checking every followers posts, as a result we use noSQL for optimal performance and update the cache of only the celebrities when new posts are created so they have fast access to their news feed. For normal users we utilize the news feed cache SQL and the news feed SQL DB. The relational SQL tables are not as fast as the noSQL databases but this is okay since these users may not have many users to iterate over when generating their news feed.
2. Databases. We use many databases since we handle billions of users a year. This allows us to scale each database individually and allows us to achieve better reliability and works on our goal of scailability. We use a media_content database just for photos and videos since these pieces of data are so large they warrant their own database, we don't want them clogging up our other databases. We store the url of the media in our post database so they can easily get the content from the media database. The media database is noSQL since we only need the url, we don't need to query many other tables to return the result. SQL relational databases are good for querying other tables and joining the result, however they're slower.
2. The media service can be split in two. A video service and a image service. The video service can implement transcoding have additional databases and caches for optimal user and architecture experience. Since photos are not nearly as complex as videos having a separate database for those data types would allow be a good architecture design when it comes to islolating and separating modules, this supports decoupling which is easier to deal with long term because it allows us to easily target fixes or certain implementations to parts of our architecture without it affecting other parts...which could create regressions and hardaches.