基本解决思路:
网站有对用户设置机型的功能,要把市面上90%的热门机型展示给用户,(两千多款机型,几百个系列,几十个品牌),并且能在线查看,选择,搜索他的机型。
土做法:
如果我们把所有机型数据放在数据库,通过用户一次查找,一次选系列,一次选品牌来发请求到后台,然后将信息反馈给用户。这样的做发会产生大量的价值不大的请求,对服务器会造成的压力。
新做法:
1.做一个后台的发布功能,在运营每次修改后机型数据后,点发布,将这繁多的品牌和机型生成静态JS。
2. 精简生成的JSON数据结构(如:原来JSON里含有pbName:"摩托落拉",优化成:b:"摩托落拉"),缩小这个JS文件大小,其实最后只有60K左右。
3. 将这个JS放在缓存里,页面上通过JS动态加载。
4. 所有的操作都将在这个JS里进行,其实就是操作JSON数据。
好处:
a.硬件方面:高性能服务器,高性能数据库,高效率的编程语言,高性能的WEB容器。
b.软件方面:
- HTML静态化,例如目前google大力推广的angularJS+html+node.js开发模式,追求极致的高效率、高并发。html静态文件加载毫无疑问快于动态编译语言jsp,asp,php等, 另外采用ajax交互,json数据格式,达到与服务器交互最少数据,网络传输更快,自然效率更高。
- 图片服务器分离,专人专事,例如图片、html、css、js可以使用Nignx 做静态资源服务器,同时nignx也是分布式系统的前置反向代理服务器的优秀选择。
- 使用缓存技术,访问频率高,变动性小的数据可以考虑放入缓存中,如,数据字典、行政区划等。如ehcache,memecached ,redis等
- 数据库集群和库表散列
- 使用镜像:提高性能和数据安全性
- 分布式集群负载均衡
- 业务分离,功能抽取独立部署
- 动静分离,减少服务端压力。
关于使用动静分离真实案例:
业务:
网站有对用户设置机型的功能,要把市面上90%的热门机型展示给用户,(两千多款机型,几百个系列,几十个品牌),并且能在线查看,选择,搜索他的机型。
土做法:
如果我们把所有机型数据放在数据库,通过用户一次查找,一次选系列,一次选品牌来发请求到后台,然后将信息反馈给用户。这样的做发会产生大量的价值不大的请求,对服务器会造成的压力。
新做法:
1.做一个后台的发布功能,在运营每次修改后机型数据后,点发布,将这繁多的品牌和机型生成静态JS。
2. 精简生成的JSON数据结构(如:原来JSON里含有pbName:"摩托落拉",优化成:b:"摩托落拉"),缩小这个JS文件大小,其实最后只有60K左右。
3. 将这个JS放在缓存里,页面上通过JS动态加载。
4. 所有的操作都将在这个JS里进行,其实就是操作JSON数据。
好处: