网站访问速度优化方案(网页访问速度优化)

前沿拓展:

网站访问速度优化方案

你可以换一个服务器
优化图像。图像能吸引访客的注意,但是每一张图片都需要从服务器下载到访客的电脑中,这无疑增加了页面的加载时间。因此,必须优化图像。优化方法包括适当减小图片尺寸,降低图片的颜色深度。
去掉不必要的插件。一些免费的插件能够增强网页的功能,但是如果添加了过多的插件,就会增加服务器的负担和页面加载时间。在构建页面时,去掉不必要的插件,用一些内置的功能来代替插件。
减少DNS查询。DNS查询需要花费较长时间来返回IP地址,而浏览器在查询结果返回之前不会做任何操作。具有多种网络元素的页面,需要进行多次的DNS查询,花费的时间更长。减少不同域名的数量,就会减少DNS的查询,从而加速页面加载速度。
减少使用重定向。重定向增加了额外的HTTP请求,甚至有时候链向多个域名或是不存在的页面,大大的增减了延迟时间,因此要减少重定向。
使用内容分发网络CDN。服务器在处理大流量的数据是十分困难的,这最终导致页面加载速度变慢。CDN是位于全球不同地方的高性能网络服务,它会复制你网站的静态资源,并以最有效的方式来为访客服务。使用CDN,可以提升页面的加载速度。
把CSS文件放在页面头部,JS文件放在底部。
把CSS文件放在头部可以禁止逐步渲染,节省浏览器加载和重绘页面元素的资源。把JS文件放在页面底部可以避免代码执行前的等待时间,从而提升页面的加载速度。
利用浏览器缓存。
浏览器缓存是允许访客的浏览器缓存你网站页面副本的一个功能。访客再次访问时,直接从缓存中读取内容而不需要重新加载。优化网站的缓存系统会降低网站的带宽和托管费用。
使用CSS Sprites整合图像。
图像始终是网站优化时的顽疾。可以使用CSS Sprites来整合多个图像到几个输出文件,从而减少下载资源的往返次数和延迟,从而提高页面的加载速度。
压缩CSS和JavaScript。
压缩会移除一些不必要的字符,从而帮助减少文件大小和网页后续的加载时间。
启用GZIP压缩。
在服务器上压缩网站的页面能很好地提升网站访问速度。GZIP可以帮我们完成压缩必要资源,从而给用户发送最小的HTML文件和CSS/JS等资源。


全量SQL(所有访问数据库的SQL)可以有效地帮助安全进行数据库审计,帮助业务快速排查性能问题。一般可通过开启genlog日志或者启动MySQL审计插件方式来进行获取,而美团选用了一种非侵入式的旁路抓包方案,使用Go语言实现。无论采用哪种方案,都需要重点关注它对数据库的性能损耗。本文介绍了美团基础研发平台抓包方案在数据库审计实践中遇到的性能问题以及优化实践,希望能对大家有所帮助或启发。

1 背景

数据库安全一直是美团信息安全团队和数据库团队非常注重的领域,但由于历史原因,对数据库的访问只具备采样审计能力,导致对于一些攻击事件无法快速地发现、定损和优化。安全团队根据历史经验,发现攻击访问数据库基本上都存在着某些特征,经常会使用一些特定SQL,我们希望通过对MySQL访问流量进行全量分析,识别出惯用SQL,在数据库安全性上做到有的放矢。

2 现状及挑战

下图是采样MySQL审计系统的架构图,数据采集端基于pcap抓包方式实现,数据处理端选用美团大数据中心的日志接入方案。所有MySQL实例都部署了用于采集MySQL相关数据的rds-agent、日志收集的log-agent。rds-agent抓取到MySQL访问数据,通过log-agent上报到日志接收端,为了减少延时,上报端与接收端间做了同机房调度优化。日志接收端把数据写入到约定的Kafka中,安全团队通过Storm实时消费Kafka分析出攻击事件,并定期拉数据持久化到Hive中。

数据库全量SQL分析与审计系统性能优化之旅

我们发现,通常被攻击的都是一些核心MySQL集群。经统计发现,这些集群单机最大QPS的9995线约5万次左右。rds-agent作为MySQL机器上的一个寄生进程,为了宿主稳定性,资源控制也极为重要。为了评估rds-agent在高QPS下的表现,我们用Sysbench对MySQL进行压测,观察在不同QPS下rds-agent抓取的数据丢失率和CPU消耗情况,从下面的压测数据来看结果比较糟糕:

数据库全量SQL分析与审计系统性能优化之旅

如何在高QPS下保证较低的丢失率与CPU消耗?已经成为当前系统的一个亟待解决的难题与挑战。

3 分析及优化

下面主要介绍围绕丢失率与CPU消耗这一问题,我们对数据采集端在流程、调度、垃圾回收和协议方面做的分析与改进。

3.1 数据采集端介绍

首先,简要介绍一下数据采集端rds-agent,它是一个MySQL实例上的进程,采用Go语言编写,基于开源的MysqlProbe的Agent改造。通过监听网卡上MySQL端口的流量,分析出客户端的访问时间、来源IP、用户名、SQL、目标数据库和目标IP等审计信息。下面是其架构图,主要分为5大功能模块:

数据库全量SQL分析与审计系统性能优化之旅

1. probe

probe意为探针,采用了gopacket作为抓包方案,它是谷歌开源的一个Go抓包库,封装了pcap。probe把抓取到原始的数据链路层帧封装成TCP层的数据包。通过变种的Fowler-Noll-Vo算法哈希源和目的IP port字段,快速实现把数据库连接打散到不同的worker中,该算法保证了同一连接的来包与回包的哈希值一样。

2. watcher

登录用户名对于审计来说极其重要,客户端往往都是通过长连接访问MySQL,而登录信息仅出现在MySQL通信协议的认证握手阶段,仅通过抓包容易错过。

watcher通过定时执行show processlist获取当前数据库的所有连接数据,通过对比Host字段与当前包的客户端ip port,补偿错过的用户名信息。

3. worker

不同的worker负责管理不同数据库连接的生命周期,一个worker管理多个连接。通过定期比对worker的当前连接列表与watcher中的连接列表,及时发现过期的连接,关闭并释放相关资源,防止内存泄漏。

4. connStream

整个数据采集端的核心逻辑,负责根据MySQL协议解析TCP数据包并识别出特定SQL,一个连接对应一个connStream Goroutine。因为SQL中可能包含敏感数据,connStream还负责对SQL进行脱敏,具体的特定SQL识别策略,由于安全方面原因,这里不再进行展开。

5. sender

负责数据上报逻辑,通过thrift协议将connStream解析出的审计数据上报给log-agent。

3.2 基础性能测试

抓包库gopacket的性能直接决定了系统性能上限,为了探究问题是否出在gopacket上,我们编写了简易的tcp-client和tcp-server,单独对gopacket在数据流向图中涉及到的前三个步骤(如下图所示)进行了性能测试,从下面的测试结果数据上看,性能瓶颈点不在gopacket。

数据库全量SQL分析与审计系统性能优化之旅

数据库全量SQL分析与审计系统性能优化之旅

3.3 CPU画像分析

丢失率与CPU消耗二者密不可分,为了探究如此高CPU消耗的原因,我们用Go自带的pprof工具对进程的CPU消耗进行了画像分析,从下面火焰图的调用函数可以归纳出几个大头:SQL脱敏、解包、GC和Goroutine调度。下面主要介绍一下围绕它们做的优化工作。

数据库全量SQL分析与审计系统性能优化之旅

3.4 脱敏分析及改进

因为SQL中可能包含敏感信息,出于安全考虑,rds-agent会对每一条SQL进行脱敏处理。

脱敏操作使用了pingcap的SQL解析器对SQL进行模板化:即把SQL中的值全部替换成“?”来达到目的,该操作需要解析出SQL的抽象语法树,代价较高。当前只有采样和抓取特定SQL的需求,没有必要在解析阶段对每条SQL进行脱敏。这里在流程上进行了优化,把脱敏下沉到上报模块,只对最终发送出去的样本脱敏。

数据库全量SQL分析与审计系统性能优化之旅

这个优化取得的效果如下:

数据库全量SQL分析与审计系统性能优化之旅

3.5 调度分析及改进

从下面的数据流向图可以看出整个链路比较长,容易出现性能瓶颈点。同时存在众多高频运行的Goroutine(红色部分),由于数量多,Go需要经常在这些Goroutine间进行调度切换,切换对于我们这种CPU密集型的程序来说无疑是一种负担。

数据库全量SQL分析与审计系统性能优化之旅

针对该问题,我们做了如下优化:

缩短链路:分流、worker、解析SQL等模块合并成一个Goroutine解析器。降低切换频率:解析器每5ms从网络协议包的队列中取一次,相当于手动触发切换。(5ms也是一个多次测试后的折中数据,太小会消耗更多的CPU,太大会引起数据丢失)

这个优化取得的效果如下:

数据库全量SQL分析与审计系统性能优化之旅

3.6 垃圾回收压力分析及改进

下图为rds-agent抓包30秒,已分配指针对象的火焰图。可以看出已经分配了4千多万个对象,GC压力可想而知。关于GC,我们了解到如下两种优化方案:

池化:Go的标准库中提供了一个sync.Pool对象池,可通过复用对象来减少对象分配,从而降低GC压力。手动管理内存:通过系统调用mmap直接向OS申请内存,绕过GC,实现内存的手动管理。数据库全量SQL分析与审计系统性能优化之旅

但是,方案2容易出现内存泄漏。从稳定性的角度考虑,我们最终选择了方案1来管理高频调用函数里创建的指针对象,这个优化取得的效果如下:

数据库全量SQL分析与审计系统性能优化之旅

3.7 解包分析及改进

MySQL是基于TCP协议之上的,在功能调试过程中,我们发现了很多空包。从下面的MySQL客户端-服务端数据的交互图可以看出:当客户端发送一条SQL命令,服务端响应结果,由于TCP的消息确认机制,客户端会发送一个空的ack包来确认消息,而且空包在整个流程中的比例较大,它们会穿透到解析环节,在高QPS下对于Goroutine调度和GC来说无疑是一个负担。

数据库全量SQL分析与审计系统性能优化之旅

下图是MySQL数据包的唯一格式,通过分析,我们观察到以下特点:

数据库全量SQL分析与审计系统性能优化之旅

一个完整的MySQL数据包长度>=4Byte客户端新发送命令的sequence id都是为0或者1

而pcap支持设置过滤规则,让我们可以在内核层将空包排除掉,下面是上述特点对应的两条过滤规则:

特点1: ip[2:2] - ((ip[0] & 0x0f) << 2) - ((tcp[12:1] & 0xf0) >> 2) >= 4
特点2: (dst host {localIP} and dst port 3306 and (tcp[(((tcp[12:1] & 0xf0) >> 2) + 3)] <= 0x01))

这个优化取得的效果如下:

数据库全量SQL分析与审计系统性能优化之旅

基于上述经验,我们对数据采集端进行功能代码重构,同时还进行一些其它优化。

4 最终成果

下面是优化前后的数据对比,丢失率从最高60%下降到了0%, CPU消耗从最高占用6个核下降到了1个核。

数据库全量SQL分析与审计系统性能优化之旅

为了探究抓包功能对MySQL性能损耗,我们用Sysbench做了一个性能对比测试。从下面的结果数据可以看出功能对MySQL的TPS、QPS和响应时间99线指标最高大约有6%的损耗。

数据库全量SQL分析与审计系统性能优化之旅

5 未来规划

虽然我们对抓包方案进行了各种优化,但对于一些延迟敏感的业务来说性能损耗还是偏大,而且该方案对一些特殊场景支持较差:如TCP协议层发生丢包、重传、乱序时,MySQL协议层使用压缩、传输大SQL时。而业界普遍采用了直接改造MySQL内核的方式来输出全量SQL,同时也支持输出更多的指标数据。目前,数据库内核团队也完成了该方案开发,正在线上灰度替换抓包方案中。另外,对于线上全量SQL端到端丢失率指标的缺失,我们也将陆续进行补齐。

本文作者

粟含,来自于美团基础研发平台/基础技术部/数据库技术中心。

招聘信息

美团基础技术部-数据库技术中心诚招高级、资深技术专家,Base上海、北京。美团关系数据库规模大,每年快速的增长,每天承载数千亿的访问流量。在这里可以体验高并发、高可用、高可扩展性的业务挑战,可以紧跟并开拓业界前沿技术,体会到技术进步带来的生产力提升,欢迎投递简历至:suhan03@meituan.com。

| 本文系美团技术团队出品,著作权归属美团。欢迎出于分享和交流等非商业目的转载或使用本文内容,敬请注明“内容转载自美团技术团队”。本文未经许可,不得进行商业性转载或者使用。任何商用行为,请发送邮件至tech@meituan.com申请授权。

拓展知识:

网站访问速度优化方案

随着网络的发展,网站的数量也大量的增加,可能很多新站长对于网站优化感到头痛,网站优化不难,只要掌握好优化的方法,其实网站优化很简单的。给大家推荐自己总结的几个方法,相信站长们坚持做下来是可以获得不错的排名的。
现在很多人都说做SEO优化没用了、为什么这么说了,吃不到葡萄的人总会说葡萄酸。如果你真心想学习SEO优化、你可以来这个企鹅裙,前面是5-4-1-2-1,后面是4-5-1-5,连起来就是的啦,每天都有直播课程,专业老师指导,你要你诚信学习。(非诚勿扰噢)
第一步,收录的问题
搜索引擎数据库有记录了网站一旦被收录,就不要去更改任何东西了,好几天不收录可能的原因是你的站点也许是别人帮你建立的,robots文件没有删除内容,导致网站不收录。使得达到最佳优化效果,就是标题的写法了,网站名称也就是,中小型企业网站,长尾关键词不要太多,别说咱们的小站点了,就没有再必要的家更多的词语啊,别说你的词语了,还有分词技术让你就很郁闷了,更排名更加的不容易,当然后期是很有利前期你的好多年的努力,谁有那时间去管理一个几年的小站,才盈利啊对吧。一般保证在3个以内,都要有好的排名,我们得人力资源有限,选择太多的长尾关键词,到时候可能一个也做不上去,知道了吧,所以网站名词要写好,不要麻木你的脑袋去些乱七八糟的东西,别人来了也以为你是百货公司吗?杂乱不堪。标题优化就是关键词+网站名称。这样更有利于搜索引擎识别相关性,合理的融入,不然会导致网站被K,也就是关键词的堆砌,这就不好了,属于作弊行为了,这也是技术可这种技术做法是不正当的。匹配在一起的,慢慢的做起来。
第二步,建站的先关设置
网站地图,404错误页面,IIS日志,百度统计,谷歌站长工具,网站内容,SEO的技术中讲到一个网站的内容对网站优化的重要性,但是我们个人站长很难解决这个问题,内容源的问题排名一般都会很稳定,解决独一无二的内容,当然这也是需要的问题,网站地图这个都会站点,404页面可以说都有空间商,空间提供商不一样设置方式可能也有所不同与你空间商索要,百度统计也就是统计工具,也可以用cnzz统计,能合理的统计你网站中来的流量从何而来,用户的习惯,等等一些资料的显示,可以让你知道怎么去做哪一点,去优化那一点是很重要的。结构层次,更新频率,网站权重级别,这些都是网站相关的知识,建站相关的优化的知识,设置层次结构的时候一定要注意的就是以上的内容了。
第三步,优质内容和外链
网站的路径和网站名称,可以说这个就是网站要围绕的核心,内容当然是相关性的,去写,去发布上面做到一定功夫,博客帖子,分类信息,等等的信息上的发布同样也要去适当的做一下外链,外链的做法很多,多样化的外链效果更好。做SEO最重要的东西就是心态,外链也是累活,文章也是累活。独一无二的内容,原创内容,在内容优化重要,但是对以后的用户体验啊,还有跳出率都是有关系的,整体的,不是单一的,想想要是单一的每一个站点都能做到完美无缺,那谁做不上去啊,都能很好的有排名,那样就没意思了。

本回答被网友采纳

网站访问速度优化方案

如果是刚开始做,最好是竞价排名,但是算法比较复杂,不是出钱多久可以的,好处是可以在你的域名没有被收录的期间帮助你创造流量

网站访问速度优化方案

1、简单的网站结构
2、初期权重培养
3、定向锚文本
4、内容完全围绕SEO展开
5、站内站
6、注重细节
7、大量的外连

本回答被提问者采纳

网站访问速度优化方案

网站优化思路

一、企业网站优化的基本思路和优化方案

目前,国内网站seo经过优化,竞争也越来越激烈,越来越难做。 让我们一起分析一下企业网站的SEO优化方案和技术,看看网站如何更有效地在搜索引擎上获得好的排名,引起企业网站SEO员工的关注。

1、内部优化

内部优化主要包括关键词优化、URL优化、代码优化、web布局优化、网站布局优化等主要方面的优化。

关键词优化是最基本、最重要的内部优化,让更多的用户找到合适的关键字,决定网站目标关键字是否能在搜索引擎上获得更好的排名。

网站优化思路

2、关注用户关心的问题

对企业网站来说,构建的主要目的是让用户找到所需的信息,从而产生用户开放量,提高网站的关注度。网站从构建初期开始,就在域名选择、网站布局、web风格、代码编写等方面实现了简化和清晰化。

请勿在网页中使用大量动画效果或影响打开速度的元素。 这样,用户就可以轻松打开网页,并快速找到所需的信息。

3、长尾关键词布局

关键词的选择决定了网站在搜索引擎中获得好名次的首要任务,因此对于专业的SEO研究人员来说,研究关键词是用户能够找到自己网站的重要指示灯,能够显着提高网站的接通量和名次

但是,用户的搜索习惯在不断变化,例如通过百度搜索引擎的下拉框、相关搜索、关键字规划器等工具和方法,用户使用的搜索词会受到当前社会热点、新闻时效性等的影响因此,相对于网站上的关键字不是不变的,而是随着时代的发展变化、技术的发展、人们的关注点而扩展关键字。

4,站外的优化

网站外部的优化主要指链接的优化,主要是在网站上合理添加有效的具有权重的外部链接,根据平台的不同,可以拥有链接。

外部链接在整个网站优化中占有重要地位。 现在发送外部链的地方变少了,对排名的作用也不明显了,很多人放弃了外部链。 更换友情链接目前这种方式很好,所以可以多更换友情链接。 这相当于可靠的投票。

提高排名

5、外部投稿

原始内容不仅可以发布在自己的网站上,还可以发布在本产业的权威网站上,并添加本站地址。 有些权重高的网站在通过原始内容得知并信任后,会给其网站单方面的链接,但这个过程可能需要几个月的时间。seo的总结

网站优化是一项长期工作,需要持续操作网站,并向网站添加新的内容和链。 为了取得好的名次,外链的构建必须稳定持续。 每天持续制造10条外侧链条,有助于网站后期的优化。