做了Jrkj这个项目后,确实收获良多。由于项目1.0刚刚完结,还未正式上线,就不以该项目的实际面貌来为大家展示了。但这丝毫不影响我们接下来的首页技术分享~
本篇文章我们以淘宝为例,主要讲首页的实现机制及提速方式。
首先,我们来看淘宝首页:首页 或 看下图:
我把页面上能看到的主要部分划分了四个区域:类别菜单、条件搜索区、图片区和账户服务及其他功能区。
这四个功能区,我们的jrkj项目也是都存在的,所以就以这个页面为例了。
左侧菜单类别区,我们的jrkj项目中展现的是讲师领域,分为一、二级,通过这两级领域来查询相应领域下的讲师。
我们主要用了Redis来做一级缓存,缓存了数据。就是第一次发起查询时,先去缓存中找,缓存中没有再去数据库中查,并将结果加入缓存中。这样就减少了直接查询数据库的机会,提高了访问速度。
关于图片,我们先是用了Nginx做图片服务器(阿里云),后来发现首页速度依然很慢,就增加了带宽到5M。通过工具分析淘宝的图片加载速度,快过我们几十倍。发现是我们的图片太大,就开始限制用户的上传大小,并进行了图片压缩处理,这样达到的效果大概控制在了淘宝时间的5倍左右,后续还会继续优化。
关于后期的优化方向,一是要寻求更优的图片服务器及服务器集群,二是CDN和反向代理技术的应用。
关于条件搜索,也有了一个比较成熟的解决方案。
我们想实现模糊搜索,最开始学习的时候是使用LIKE,但这里显然不能用,一是效率太差,二是查询精度太低。
这里就需要使用全文检索框架来实现了:通过搭建zookeeper+solr集群,来进行查询提速和精度优化。
关于账户服务区,还没有进行优化,这里可能出现的问题就是登陆压力大。通常解决办法是进行登陆限制,比如添加计算式或问题式的验证码,来进行层次化登陆;或者增加服务器,搭建集群来进行分流。
好了,上面介绍的都是看得见的内容,还有一些隐藏的提速手段:
1、js和css文件压缩,我们先是进行了压缩,然后放到了Nginx服务器上,未来需要搭建一个文件服务器来进行管理。
2、通过数据库读写分离和分库分表技术来实现数据读写加速;
3、扩容缓存服务器,或搭建缓存集群、利用Redis二级缓存技术进一步提升查询速度;
4、还有未实现的动静分离技术,缓存静态页面还在研究中~
小结:看起来简简单单的一个首页,包含了这么多技术和思想。在大牛企业中肯定还有我们所不知道的优化手段和技术,需要进一步探索和学习。
要想在今后的互联网世界中发展,我们必须一方面不断探索技术,优化网络和软件服务,另一方面还要着眼于需求变化,提示服务质量,扩展服务类型,以始终为人民服务的态度来对待世界和未来。