最近面试总是多多少少会出现这个问题,虽然老高的网站流量不大,但是如果解决这个问题,但是在理论上还是能回答的。
首先能够明确的是,一般问这个问题的人应该没听过C10K这个问题吧,注意修饰词一般。所以你有挺高的概率不需要从更底层的回答这个问题,比如多线程和多进程的取舍,或者使用异步和非阻塞等等。。。不过老高还是建议你去了解一下C10K这个概念!这个地方有原文点我,这个地方有翻译点我
这个问题回答的方式,出发点很多。老高认为这样回答比较好:
上牛
庖丁解牛这个成语大家一定听过,第一步我们要做的就是先把牛端上来。
所以,我们首先这样说:
在排出与数据链路层以下相关的概念后,当一个用户在浏览器输入一个网址后,首先DNS需要解析网址为IP,然后有客户端通过既定的IP:PORT形式链接目标服务器,当服务器接收到请求的时候,服务器一般会进行一些运算,然后进行响应,用户收到相信的信息后街完成了一次标准的HTTP请求。
如果怕面试官问到TCP/IP,比如TCP是怎么链接的,那么请深入阅读鸟哥的私房菜或者看看老高的鸟哥的私房菜学习笔记 -- 网络速查补补。
解牛
(下面是老高的简单总结,希望大家一起补充)
为了更好的理解,我们在此加一个图,既然是服务器的优化,我们就不需要操心浏览器的事情,所以我们主要考虑链路和服务器内部的优化。
浏览器 ----> 云 ----> 服务器
浏览器 <---- 云 <---- 服务器
现在我们使用放大镜,有针对性的把刚才每一个环节能做到的优化尽可能的说出来!
优化请求
DNS优化
DNS优化概念很简单也复杂,更是很烧钱的环节。一个良好的DNS优化可以让整个访问时间减少10%左右,作为一个新手,如果你理解的DNS只是配置一下114.114.114.114,那你可要好好学习巩固一下DNS的更多高级应用了。起码知道什么是域名污染、域名劫持什么的才行!
目前很多公司都在做这块业务,老高目前使用DNSPOD,不过不排除会更换。
针对DNS优化这块后面也会提到。
双线接入
这个可以和DNS配合,服务器在数据中心可以有电信联通多个出口,这样每次发送数据都可以走一条最快的线路。
使用新的协议
这方面可以关注google的SPDY协议,或者最近很火的HTTP2.0草案。
CDN
CDN技术可以减少源服务器的压力,将内容有组织的分发到各个节点,起到了一定的加速作用。但是弊端就是可能会产生内容更新的问题。
解决办法可以是设定一个合理的更新时间,为静态文件加上版本控制等。。。
针对另一个问题 如何科学的更新服务器的资源,请参考 大公司里怎样开发和部署前端代码?
优化服务器内部
让我们再使用放大镜,看看请求到达服务器后都发生了什么事情,请允许老高使用一个最简单的网站架构为例
请求 ------↘
请求 ------> 前端服务器 ------> 后端服务器 ------> 缓存服务器 ------> 数据库
请求 ------↗
这里面的优化门道都很多,比如说
使用负载均衡技术分散用户请求到多个前端服务器,待续。。。