宅米网性能优化实践(内附小强点评)
背景介绍
宅米是一家专注校园电子商务的互联网企业,目前主营校园超市O2O。公司成立于2014年11月,仅仅一年多的时间,公司即经过4轮融资,覆盖近200座城市,1000多所大中专院校,10000多栋宿舍楼,日均订单20万,峰值订单50万。
初识架构
这样的系统能不能应对今后快速的业务发展?性能问题会不会成为持续增长的交易量的瓶颈?系统能不能撑得住访问高峰期的大规模并发访问? 性能优化成为这个时候最重要的工作,于是安排专门的工程师进行性能测试和性能优化,从架构、代码、数据库、运维各个层面梳理系统状况,发现系统瓶颈,进行针对性优化。
小强点评:这种架构是初识架构,一般系统都是在这个架构上进行逐步演化的,掌握基本的架构知识对于测试工程师来说十分重要。
性能测试
校园零食购物的特点是在晚上10点左右进入高峰,在此前后一小时的交易量大概占整天交易量的一半,也就是说,如果要设计一个日订单100万的系统,其实要承受的交易压力是每小时50万单。
当初按照二八法则推算峰值每秒单量为556笔,以此为基准根据Nginx日志分析后端接口调用频率,推算出接口调用比率前20的请求,以此构造测试场景。
在执行性能测试时,我们使用Jmeter作为性能测试工具,利用了云服务提供的系统资源监控作为基础。
小强点评:很多人一直纠结并发数怎么去算,其实算法非常多,在小强性能测试培训班中就讲了大概4种算法,个人觉得根本不存在准确不准确的问题,关键是在你的应用场景,这世上哪里有绝对的准确?
架构优化
性能测试结果并不乐观,虽然系统此前使用了分布式缓存对热点数据进行缓存,但是比较随意,哪些数据需要缓存,失效策略如何设置都没有认真分析和设计。性能测试后决定规范缓存使用,尽可能将各种频繁读取的数据全部缓存起来,并将Redis服务器做集群和主从复制部署。
小强点评:缓存带来的效果是明显的,一般对于大量数据的查询我们都要首先考虑缓存方面的优化。当然,这里说的是后端缓存,对于前端的缓存也需要考虑。
此外还使用第三方CDN服务进行静态文件访问加速,产品图片、JavaScript文件、CSS文件等都通过CDN加速,同时通过Nginx反向代理服务器提供静态文件的前端缓存。
小强点评:这些都是偏向于前端性能优化方面的问题了,感兴趣的可以看我前端性能测试视频。
性能测试发现,系统主要瓶颈点在数据库上,虽然使用Redis将热点数据缓存起来,但是数据库依然在并发量达到一定程度后表现出系统过载的情况。于是对数据库进行主从分离。
sql语句优化
性能测试过程中发现,由于此前主要精力都在关注如何快速实现业务,大量数据库查询语句写得比较随意,索引设计非常不合理。 结合性能测试中Mysql数据库slow.log分析,定位慢查询SQL追加index,然后利用解释执行计划explain优化SQL
小强点评:任何系统在sql语句方面多多少少肯定会有问题,一般我们的方法就是慢查询监控>top N语句分析>优化改进。思路基本都是这样,具体的做法各不相同,灵活应对。
数据库连接池优化
在做性能测试的时候发现在某些情况下有较为严重的性能问题。在高并发情况下,长时间施加压力,应用程序出现不能访问的状况。
上网查找资料,发现很多人也遇到了C3P0的”APPARENT DEADLOCK”问题。
将C3P0切换成国产数据库连接池Druid之后,状况明显好转,类似问题再未出现过。
小强点评:C3P0确实有一些小bug。后来我们也用了阿里开源的Druid目前来看还是不错的哦,可以尝试一下。
H5响应压缩优化
开启Nginx gzip压缩,降低App响应数据包大小,提高响应性能
小强点评:前端的性能优化,不论是app、h5还是web都是一样的,我们很多童鞋学的太死板,没有做到一通百通。
订单数据冷热分离
随着业务的持续发展,订单表的数据会越来越多。按我们现在日订单量20万单预估,月订单量则为600万单,年订单量则达到7200万单,而且日订单量还在不断的增加,用不了多久,数据量就会超过MySQL的极限。 一开始我们考虑使用分布式数据库的方案,对订单表进行水平切分,使用订单号进行hash,将订单数据切分到多张表上。 进一步分析后发现,订单数据具有明显的冷热不均的特点,即刚刚创建的订单是热数据,不同应用以各种方式访问修改这些订单。经过一段时间以后,特别是订单完成后,订单访问频率急剧降低,而且只有订单查询这一种操作。于是我们考虑采取冷热数据分离的策略,以控制热库中数据总量,保障订单表数据量始终维持在一个可以接受的范围内,进而提供稳定的数据访问性能。
小强点评:我们总是觉得要用高级点的技术才显得牛逼,其实这是装逼。当年在新浪的时候我们对数据库做了大量的分库分表,但最后带来的性能提升并不明显。我一直强调技术是服务于业务的,只有把业务的特性明确了,根据业务来使用合理的技术才会能大的提升,否则就是适得其反。
总结
性能问题是实打实的问题,解决办法也应该针对具体问题各个击破。通过性能测试了解系统现状,通过瓶颈分析发现具体问题,针对具体问题寻找解决方案,实现解决方案再进行性能测试,整个性能优化形成闭环,系统得以持续优化。
小强点评:性能优化是一个持续的过程,没有谁能一步优化道到位,也没有谁可以优化到极致。他需要你有完善的知识体系,各个方面都要懂一些,并不是大家想的会一个LoadRunner或jmeter就可以完成的,这些只是性能中的很小的一部分而已。让我们一起加油吧。
宅米网性能优化实践(内附小强点评)相关推荐
- 宅米网性能优化实践——初创互联网公司的野蛮成长
宅米是一家专注校园电子商务的互联网企业,目前主营校园超市O2O.公司成立于2014年11月,仅仅一年多的时间,公司即经过4轮融资,覆盖近200座城市,1000多所大中专院校,10000多栋宿舍楼,日均 ...
- 华为云官网性能优化实践
掘金链接 对于web性能的优化分析,我们应该从两个大的方面来着手讨论,即:加载优化和渲染优化,当然我们还有其他更多的优化手段,那么在华为云,我们是怎么做性能优化的呢? 加载优化 如上图所示是一个完整网 ...
- 从工具到社区,美图秀秀大规模性能优化实践
导读:本文由演讲整理而成.美图秀秀社区自上线以来已经有近一年时间,不管是秀秀海量的用户还是图片社区特有的形态都给性能优化提出了巨大的挑战.本文将会结合这一年内我们遇到的具体案例和大家分享下美图秀秀社区 ...
- 手游录屏直播技术详解 | 直播 SDK 性能优化实践
直播无疑是 2016 年的大热话题,七牛云在 6 月底发布了实时流网络 LiveNet 和直播云解决方案后,我们用<直播技术详解>系列文章系统地介绍了直播各个环节的关键技术,帮助视频直播创 ...
- 宅米网技术变迁——初创互联网公司的技术发展之路
最近几年,互联网创业浪潮风起云涌,各类互联网创业公司如雨后春笋般成立.技术做为互联网创业重要的一个组成部分,也前所未有的受到重视.互联网企业的发展通常都是爆发式增长,在极短的时间内,业务规模.用户量成 ...
- 赠书:《Java性能优化实践》,众多业内大佬推荐阅读
没有捷径可走的 Java 性能优化 多年来,用 Google 搜索 Java performance tuning,出现的三篇最热门文章之一是于 1997 年到 1998 年左右发表的文章,这篇文章在 ...
- Hadoop YARN:调度性能优化实践【转】
原文地址:https://www.infoq.cn/article/dh5UpM_fJrtj1IgxQDsq 背景 YARN 作为 Hadoop 的资源管理系统,负责 Hadoop 集群上计算资源的管 ...
- 前端性能优化实践 | 百度APP个人主页优化
性能是每个前端工程师都应该关注的话题,通用的优化手段已有许多文章和实践,就不再赘述,本篇以百度 App 个人主页为例,聊聊针对业务特点进行的一些性能优化实践.适用于:传统意义的优化手段能用的都用了:打 ...
- Hadoop YARN:调度性能优化实践
背景 YARN作为Hadoop的资源管理系统,负责Hadoop集群上计算资源的管理和作业调度. 美团的YARN以社区2.7.1版本为基础构建分支.目前在YARN上支撑离线业务.实时业务以及机器学习业务 ...
最新文章
- PTA实验作业-01
- 给定下面的java代码_则运行_会产生类型的异常_JavaSE_笔试题_单选选择题
- Shell - 通过hook文件后门实现应用的自动启停
- *[topcoder]JumpFurther
- Vue nextTick 机制
- 修复steam服务器失败,steam服务器链接失败
- 阿里云 超级码力在线编程大赛初赛 第1场(第245名)
- 实施文档_建设工程监理全套资料范本,Word文档附百份案例表格,超实用
- oracle中master实例,Oracle10g/11g RAC数据库中的Master实例、Owner实例和Past Image的概念PART2...
- Scala零基础教学【61-80】
- 你试过一个人旅游吗?去了哪里?
- pip 安装 rdkit
- 【Spring Cloud】网关-gateway(2.x)
- 2号团队-团队任务5:项目总结会
- 中国电信物联网平台入门学习笔记6:电信平台数据模拟采集
- java 求tan角度求值_知道sin、cos、tan的角度如何求值,不用计算器
- 【Fate/kaleid liner 魔法少女☆伊莉雅】系列中实践的、新世代的动画摄影工作流...
- 2020icpc 上海 E.The Journey of Geor Autumn dp
- orCAD中的文本编辑框如何换行?
- 使用C++模拟动态密码验证
热门文章
- 浅谈“天线和通信历史“
- Cesium鼠标移入或悬停在某些铯对象上时更改鼠标箭头为手势
- Autosar模块介绍:AutosarOS_2(操作系统基本概念)
- windows中maven的环境变量配置
- SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件
- 分类型变量预测连续型变量_SPSS中的Variable数据变量类型介绍,一次性弄清无序分类变量、有序分类变量、 离散型数值变量、连续型数值变量的区别!...
- 首次公开,阿里技术团队编写的“大厂面试参考指南”v1.0版本
- 智能小助手:升级版(自动回复)_xing2516_新浪博客
- 用MATLAB实现雅克比迭代、高斯-赛德尔迭代以及超松弛迭代
- SWIG VS2017安装配置 tcy