静态化之前我们围绕Java层面做了很多优化,改进的思路也大多是尽量让应用本身更快地获取数据,更快地计算出结果,然后把结果返给用户。我们做了一个极端的测试:将系统全部的数据缓存,再直接返回所有的请求结果,在这种情况下压测Java系统,结果性能未能满足期望一即达到 2000甚至上万次的QPS-因此在 Java系统上不可能达成目标。
据此,我们判断Java系统本身已经达到瓶颈,它天生就存在不擅长处理大量连接请求、每个连接消耗的内存较多和Servlet容器解析HTTP协议较慢等弱点。在这种情况下,我们必须跳出Java系统,也就是使请求尽量不经过Java系统,而在前面的Web服务器层就直接返回。于是,我们自然就想到了静态化的架构,静态化系统成为必然的选择。
系统静态化为何能达到Java 系统无法达到的高性能呢?系统静态化的优势在于:改变了缓存方式。直接缓存HTTP连接而不是仅仅缓存数据,Web代理服务器根据请求URL直接取出对应的HTTP响应头和响应体并直接返回,这个响应连HTTP协议都不用重新组装,同样也不一定需要解析HTTP请求头,所以能最快地获取数据。
改变了缓存的位置。不是在Java层面而是直接在Web服务器层上做缓存,屏蔽了Java层面的一些弱点,Web服务器(如Ngix、Apache、 Vamish) 都擅长处理大并发的静态文件请求。