域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
域名解析耗时就是将域名解析获得对应IP地址,并返回给客户端这个过程所消耗的时间。
当我们对某个域名发起访问,并不是直接就能对响应站点发起访问的,需要借助DNS获取域名与IP地址对应关系,在取得解析记录之后,才能发起访问。
解析过程的具体流程大致如下:
(1)客户端对某个域名发起访问。
(2)浏览器会首先对浏览器、系统缓存以及本机HOSTS文件等本地信息进行查询,如果有结果直接告知客户端,解析过程结束。
(3)如果本地没有结果,浏览器就会请求递归服务器,递归服务器有结果就会告知客户端,解析过程借宿。
(4)如果递归服务器没有结果,就会委托递归服务器进行全球递归查询,首先请求根域名。
(5)根域名告知递归服务器域名所在的顶级域名服务器,递归服务器对顶级服务器发起请求。
(6)顶级服务器告知递归服务器域名所在的权威域名服务器,权威域名服务器将解析记录告知递归服务器。
(7)递归服务器将结果再告知客户端,解析过程结束。
流程图如下所示:
由此可见,影响域名解析耗时的因素有以下几点:
(1)本地缓存
如果本地缓存中有域名和IP地址的对应关系,就会直接在本机获取结果,无需进行全球递归查询,这样解析用时就大大缩短,但缓存对于解析安全有较大影响;
(2)递归服务器
一般而言,我们无法决定用户使用何种DNS Server,大部分初级用户使用的是本地ISP自动获取的DNS Server,部分用户则使用第三方DNS Server比如Open DNS或者Google DNS。
不过你可以建议你的用户使用Google DNS (8888 和8844),该DNS Server会比电信或网通自动获取的DNS Server快许多。
(3)权威域名服务器
权威域名服务器时影响域名解析耗时的关键,一般的解析服务器都是单节点单线路,如果域名距离较远,可能就会因为跨域跨网造成较大的延迟,如果域名的访问量大,还会造成线路的拥堵。所以为了减少解析时间,建议选择性能较好,多节点,多线路的权威域名服务器。
通过nginx解决加载较慢,连接数较多,宽带占用的问题。可以通过简单配置达到目的,主要配置以下几项内容:
小结: 也许是我对nginx的基础以及理解不够全面,但是我觉得宽带因素等条件都摆在那里,在同一台文件服务器上也只能是限制客户端的连接来进行优化。所以只是简单做了优化后久没有深化研究,而且我们的文件服务器上的文件也不少。
CDN(Content Delivery Network): 内容分发网络,通过cdn访问文件服务器时,cdn会将文件缓存到cdn服务器,下一次访问该文件时,就直接从cdn的缓存服务器上获取文件,而不需要到文件服务器获取文件。具体的知识介绍可参考 百度百科 。
阿里云的CDN介绍:内容分发网络(Content Delivery Network,CDN)是建立并覆盖在承载网上,由不同区域的服务器组成的分布式网络。将源站资源缓存到全国各地的边缘服务器,供用户就近获取,降低源站压力。
根据文档中阿里云在国内拥有2300+节点,所有节点均接入万兆网卡,单节点存储容量达40TB 15PB,带宽负载达到40Gbps 200Gbps,具备130Tbps带宽储备能力。所以我们暂时选择了阿里云的CDN。
我们根据阿里云的CDN文档进行配置之后遇到一个问题,cdn的域名配置成功后,在nginx上找不到文件,直接跑出404的异常。后面通过在 nginx中增加了一个解析cdn域名执行文件的配置 之后文件访问正常。
如果文件数量不算特别多,访问量不算特别大,可以通过配置本地nginx即可解决部分宽带压力,毕竟这个是不用花钱的。如果访问量下不了,而且宽带压力较大,则直接推荐使用阿里云的CDN服务,配置各种都挺简单。我们的服务器是托管在电信机房,百兆共享宽带,在没有使用CDN之前,每天8:00-00:00这个时间段基本上服务器网络下行速度11M/s,配置CDN之后基本在1-5m/s之间浮动。所以说使用CDN还是能解决一大部分问题。
我们先来看第一个阶段,MySQL慢的诊断思路,一般我们会从三个方向来做:
第一个方向是MySQL内部的观测
第二个方向是外部资源的观测
第三个方向是外部需求的改造
11 MySQL 内部观测
我们来看MySQL内部的观测,常用的观测手段是这样的,从上往下看,第一部分是Processlist,看一下哪个SQL压力不太正常,第二步是explain,解释一下它的执行计划,第三步我们要做Profilling,如果这个SQL能再执行一次的话, 就做一个Profilling,然后高级的DBA会直接动用performance_schema ,MySQL 57 以后直接动用sys_schema,sys_schema是一个视图,里面有便捷的各类信息,帮助大家来诊断性能。再高级一点,我们会动用innodb_metrics进行一个对引擎的诊断。
除了这些手段以外,大家还提出了一些乱七八糟的手段,我就不列在这了,这些是常规的一个MySQL的内部的状态观测的思路。除了这些以外,MySQL还陆陆续续提供了一些暴露自己状态的方案,但是这些方案并没有在实践中形成套路,原因是学习成本比较高。
12 外部资源观测
外部资源观测这部分,我引用了一篇文章,这篇文章的二维码我贴在上面了。这篇文章是国外的一个神写的,标题是:60秒的快速巡检,我们来看一下它在60秒之内对服务器到底做了一个什么样的巡检。一共十条命令,这是前五条,我们一条一条来看。
1uptime,uptime告诉我们这个机器活了多久,以及它的平均的负载是多少。
2dmesg -T | tail,告诉我们系统日志里边有没有什么报错。
3vmstat 1,告诉我们虚拟内存的状态,页的换进换出有没有问题,swap有没有使用。
4 mpstat -P ALL,告诉我们CPU压力在各个核上是不是均匀的。
5pidstat 1,告诉我们各个进程的对资源的占用大概是什么样子。
我们来看一下后五条:
首先是iostat-xz 1,查看IO的问题,然后是free-m内存使用率,之后两个sar,按设备网卡设备的维度,看一下网络的消耗状态,以及总体看TCP的使用率和错误率是多少。最后一条命令top,看一下大概的进程和线程的问题。
这个就是对于外部资源的诊断,这十条命令揭示了应该去诊断哪些外部资源。
13 外部需求改造
第三个诊断思路是外部的需求改造,我在这里引用了一篇文档,这篇文档是MySQL的官方文档中的一章,这一章叫Examples of Common Queries,文档中介绍了常规的SQL怎么写, 给出了一些例子。文章的链接二维码在slide上。
我们来看一下它其中提到的一个例子。
它做的事情是从一个表里边去选取,这张表有三列,article、dealer、price,选取每个作者的最贵的商品列在结果集中,这是它的最原始的SQL,非常符合业务的写法,但是它是个关联子查询。
关联子查询成本是很贵的,所以上面的文档会教你快速地把它转成一个非关联子查询,大家可以看到中间的子查询和外边的查询之间是没有关联性的。
第三步,会教大家直接把子查询拿掉,然后转成这样一个SQL,这个就叫业务改造,前后三个SQL的成本都不一样,把关联子查询拆掉的成本,拆掉以后SQL会跑得非常好,但这个SQL已经不能良好表义了,只有在诊断到SQL成本比较高的情况下才建议大家使用这种方式。
为什么它能够把一个关联子查询拆掉呢?
这背后的原理是关系代数,所有的SQL都可以被表达成等价的关系代数式,关系代数式之间有等价关系,这个等价关系通过变换可以把关联子查询拆掉。
上面的这篇文档是一个大学的教材,它从头教了关于代数和SQL之间的关系。然后一步步推导怎么去简化这句SQL。
第一,MySQL本身提供了很多命令来观察MySQL自身的各类状态,大家从上往下检一般能检到SQL的问题或者服务器的问题。
第二,从服务器的角度,我们从巡检的脚本角度入手,服务器的资源就这几种,观测手法也就那么几种,我们把服务器的资源全部都观察一圈就可以了。
第三,如果实在搞不定,需求方一定要按照数据库容易接受的方式去写SQL,这个成本会下降的非常快,这个是常规的MySQL慢的诊断思路。
局域网速度应该快才对。我们共享用爱米云共享网盘,内网速度非常快,而且还有秒传和续传。共享非常方便,可以共享给指定的人、或者指定的组。并且可以设置不同的访问权限。我们也用来收发文件,从xp到win10、windows server系列的都能用欢迎分享,转载请注明来源:内存溢出
评论列表(0条)