I am interested in understanding the design principals to use to create the backend for a social networking site. I read up a few resources and found that facebook uses a graph as an underlying data structure where each node could be user/page/album etc. However, just that does not give me a top level view (block diagram or class diagram) on how to go about implementing a few basic features like (all using the graph data structure):

1. Adding/removing friends
2. News feed
3. Messaging

Any pointers on any resources would be great. I am also interested in finding out if a design pattern exists for a social networking site.

Please note that I am not looking for any language specific solution