https://gaviki.com/blog/distributed-computing-always-follows-a-client-server-architecture/