题目:如何设计一个每秒百万级访问量的互联网服务器,每个服务器均包含数据计算和I/O操作。
提示:互联网服务器是一个7*24*365*N的运行程序,类似于一种远程计算机结构。用户在服务器端的信息时,实际上就是把服务器端的信息通过网络复制到客户端上,并通过客户端的相关软件展现出来。
考虑因素(参考书籍《深入理解Nginx模块开发与架构解析》):
1. 性能,包括网络性能,单次请求的延迟性,网络效率;
2. 可伸缩性:指架构可以通过添加组件来升级服务,或者允许组件之间具有交互功能。
3. 简单性
4. 可修改性,包括可进化型,可扩展性,可定制性,可配置型,可重用性。
5. 可见性
6. 可移植性
7. 可靠性。
个人的想法,服务器是一个生产者-消费者模型的进化版本。设计一个服务器是对很多知识的融合,例如操作系统,服务器程序所运行的平台,架构知识,网络知识以及资源的合理管理。
I/O多路复用技术(Linux下的epoll/poll/select),池技术(包括进程池,线程池,内存池),缓存技术,多线程/多进程技术等相关知识。