译者:朱光
https://www.cnblogs.com/leefreeman/p/3998757.html序言
在前一则札记《小型中文网站系统构架的进化》中,介绍了小型中文网站的进化操作过程,期间加插了许多控制技术和方式,他们可以由此窥见两个小型中文网站的线条,但想掌控设计开发保护小型中文网站的控制技术,须要他们一步棋一步棋去研究课堂教学。所以我急于写第四部,从方法论到课堂教学讲诉小型中文网站的点点滴滴,这也是两个共同自学的操作过程,希望自己能延续下去。系列产品约莫会分成两部份,方法论和课堂教学,方法论部份尽可能易懂,也要讲许多技术细节。课堂教学部份会抽出许多控制技术做课堂教学,将方法、补救操作过程撷取出来。
责任编辑将讲诉小型中文网站中两个重要的基本要素,操控性。
甚么是操控性
有人说操控性是出访速度回转,这是最简单的讲法,也是使用者的真实世界新体验。两个使用者从输出邮箱到按下二百六十名,看到页面的回转,这是操控性。对于他们来说,须要去发掘这个操作过程,因为这决定他们怎么去做操控性强化。
这尾端发生了甚么使用者出访中文网站的整座业务流程:使用者输出中文网站搜索引擎,通过 DNS 导出,找出最终目标伺服器 IP,允诺统计数据经互联网填补空缺伺服器,最终目标伺服器接到允诺统计数据,展开处置(处理程序、出访统计资料库、文档伺服器等)。处置完成,将积极响应统计数据又经互联网回到给使用者应用程序,应用程序得到结果展开排序图形表明给使用者。
他们把整座操作过程,分成四段方向:
1、第二段在使用者和应用程序端,主要负责管理收到使用者允诺,以及接受积极响应统计数据展开排序图形表明给使用者;
2、第二段在互联网上,负责管理对允诺统计数据、积极响应统计数据的数据传输;
3、第二段在中文网站伺服器端,负责管理对允诺统计数据展开处置(处理程序、出访统计资料库、文档等),并将结果回到;
第一方向
第一方向花费的时间包括输出搜索引擎发起允诺的时间和应用程序接到积极响应后排序图形的时间。输出搜索引擎发起允诺,实质操作过程是:
1、使用者在应用程序输出要出访的中文网站搜索引擎;
2、本地 DNS 允诺中文网站授权的 DNS 伺服器对搜索引擎展开导出,并得到导出结果即 IP 地址(并将 IP 地址缓存起来)。
3、向最终目标 IP 地址收到允诺。
从这个操作过程他们可以看到,强化的地方主要是减少 DNS 导出次数,而如果使用者应用程序设置了缓存,则再第二次出访相同搜索引擎的时候就不会去允诺 DNS 服务器,直接用缓存中的 IP 地址收到允诺。因此这个操作过程主要取决于应用程序的设置。现在主流的应用程序默认设置了 DNS 的预取功能(DNS Prefetch),当然你也可以主动告知应用程序我的中文网站须要做 DNS 预取:
<meta http-equiv=”x-dns-prefetch-control” content=”on” />应用程序将统计数据展开排序图形的操作过程:
1、应用程序导出积极响应统计数据;
2、应用程序创建 DOM 树;
3、应用程序下载 CSS 样式,并应用到 DOM 树,展开图形;
4、应用程序下载 JS 文档,开始导出执行;
5、表明给使用者。
从这个操作过程,他们可以找出不少可以强化的地方。首先他们可以尽可能控制页面大小,使得应用程序导出的时间更短;并且将多个 CSS 文档、JS 文档文档合并压缩减少文档下载的次数和大小;另外注意将 CSS 放在页面前面,JS 出访页面后面,这样便于页面首先能图形出来,再执行 js 脚本,对于使用者来说有更好的新体验。最后我还可以设置应用程序缓存,下次出访时从缓存读取内容,减少 http 允诺。
<meta http-equiv=”Cache-Control” content=”max-age=5″ />该代码说明了应用程序启用了缓存并在 5 秒内不会再次出访伺服器。注意缓存的设置须要结合你的业务特性来适当配置。
以下是京东商城的 HTML 简图:css 样式放在 html 前面,并且展开了合并。
大多数的 JS 文档放在页尾。
第二方向
第二方向在互联网上,花费的时间同样包括允诺统计数据的数据传输时间和积极响应统计数据的数据传输时间,这个两个时间取决于统计数据数据传输的速度,这里他们要讲两个名词 “带宽”。甚么是带宽,他们经常说带宽 10M,20M 是甚么意思?我的带宽 20M,这意味着甚么?他们知道带宽速度分成上行、下行速度,也是上传和下载的速度。带宽 20M 对于使用者来说则是下载速度 20M(20×1024×1024 比特率),换算成字节 20M/8=2.5M。
也是说 20M 的带宽下载速度方法论可达 2.5M/s,而对于家庭使用者而言上传速度一般比下载速度小的多,大约是不到十分之一。而对于中文网站伺服器(企业使用者)来说,则不然,一般上行速度等于下载速度。这也是运营商根据实际需求分配的,毕竟使用者的主要需求是下载统计数据,而不是上传统计数据。
整座业务流程从数据传输方式看是:使用者发送允诺统计数据(上传),中文网站伺服器接受允诺统计数据(下载),中文网站伺服器回到积极响应统计数据(上传),使用者接受积极响应统计数据(下载)。对于使用者来说,上传统计数据是很小的(Url 参数),而下载统计数据是较大的(积极响应统计数据);对于伺服器来说,下载统计数据是很小的(url 参数),上传统计数据是较大(积极响应统计数据)。
理解了这个,他们可以解释为甚么有时使用者反映为甚么自己的带宽足够,但打开某些中文网站仍然很慢,是因为尽管使用者的下载速度很快,但中文网站伺服器的上传速度很慢,这就像两个抽水管和两个出水管,不管抽水管再大,但出水管很小,同样抽到的水量是有限的。
了解了这个原理他们来看怎么提高统计数据数据传输的速度,首先使用者的上传、下载速度他们是无法决定的,他们能决定的是中文网站伺服器的上传、下载速度,所以他们可以做的是适当的增加伺服器带宽(带宽是很贵的,盲目的增加只会增加不必要成本)。购买合适的带宽须要根据中文网站业务特性、规模以及结合运维人员的经验来选择。
通常可以考虑的算法,即根据一次积极响应统计数据的大小,乘以 PV 数,除以对应的高峰时间段,从而大致估算出中文网站带宽的需求。
下面他们继续进一步棋研究第二方向:
上图表示使用者出访中文网站伺服器时互联网的大致情况,从图上可以窥见假设中文网站伺服器从电信互联网接入,而使用者 A 作为电信的宽带使用者,则可以通过电信骨干网快速的出访到中文网站伺服器。使用者 B, 使用者 C 作为移动和联通使用者须要通过运营商的互联互通经过较长方向才能出访到伺服器。
针对这种情况,他们可以采取以下方法来强化:
1、在各运营商发达的地区的 IDC(互联网统计数据中心,可以理解成机房)部署中文网站伺服器,各运营商的使用者即可通过各自的骨干网出访伺服器。
2、购买代理服务,也是原来联通使用者须要通过联通骨干网——> 联通互联互通路由器——> 电信骨干网——> 中文网站伺服器的操作过程。通过代理服务,代理伺服器直连到电信骨干网,出访中文网站伺服器。
2、在主要地区城市购买 CDN 服务,缓存对应的统计数据,使用者可先从最近的 CD
第三方向
第三方向主要是中文网站伺服器内部处置的操作过程,当中包括处理程序、出访文档、统计资料库等资源。
这是对于他们来说最可以发挥的地方:
1、使用缓存,根据须要使用本地缓存或分布式缓存;
2、使用异步操作,这种方式不仅可以提高操控性,也提高了系统的扩展性;
3、代码强化;
4、存储强化;
缓存
如果缓存统计数据较少,可以利用 OSCache 实现本地缓存:
当缓存统计数据过多时,利用 Memcached 实现分布式缓存:
Memcached 实现分布式缓存,缓存伺服器之间是互不通信的,也是他们可以方便的通过增加 Memcached 伺服器对系统展开扩展。
异步操作
使用同步允诺的方式,在高并发的情况下,会对数据库造成很大的压力,也会让使用者感觉积极响应时间过长。异步允诺方式,则可以快速的对使用者做出积极响应,而具体的统计资料库操作允诺,则通过消息队列伺服器发送给统计资料库伺服器,做具体的插入操作。插入操作的结果则已其他方式通知客户端。例如一般在订票系统当中,出票行为是异步完成,最终的出票结果会以邮件或其他方式告知使用者。
代码强化
这里就不在详细描述,另一则札记《怎样编写高质量的 java 代码》对代码质量和风格做过大致的介绍,有兴趣可以看一下。
存储强化
小型中文网站中海量的统计数据读写对磁盘造成很大压力,系统最大的瓶颈还是在磁盘的读写。可以考虑使用磁盘阵列、分布式储存来改善存储的操控性。
操控性的指标和测试
上面通过导出使用者出访中文网站的过程来思考怎么提高使用者感知的操控性,对于使用者来言操控性是快和慢。但对于他们来说,不能这样简单描述,他们须要去量化他,用许多统计数据指标去衡量它。这里讲到几个名词:积极响应时间、并发量、吞吐量。
积极响应时间:是使用者发出允诺到接到积极响应统计数据的时间;并发量:是系统同时能处置多少使用者允诺;吞吐量:是单位时间内系统处置的允诺数量;为了通俗的了解这三个概念,他们以高速公路的收费站为例子:积极响应时间是指一辆车经过收费站的时间,也是车辆从进入收费站、付钱、开闸、离开收费站的时间;并发量是指这个收费站同时能通行多少辆车,可以理解为收费站的出口数量。吞吐量是指:在一段时间内,这个收费站通往了多少了车。
这个例子不晓得恰不恰当。
对于操控性测试来说,基本也是围绕这些方面来测试,下图说明了操控性测试的操作过程:
左图:表示积极响应时间和并发使用者量的二维坐标图,从图上可以窥见,并发使用者量在一定量增加时,积极响应时间很短,并且没有太大的起伏,这表示系统目前处于日常运行期,可以很快处置使用者允诺(A 点之前);随着并发量的增加,系统处于允诺高峰期,但仍然可以有序的处置使用者允诺,积极响应时间较日常有所增加(A、B 之间);当并发量增加到一定数量时,超过了系统的负载能力,系统处于濒临崩溃的边缘(B、C 之间),积极响应时间严重过长,直到系统崩溃。
右图:表示吞吐量与并发使用者量的二维坐标图,可以窥见,随着并发使用者量的增加,吞吐量逐渐增加;在并发量到达一定量时,由于系统处置能力达到最大,吞吐量增加放缓;当并发量超过系统负载时(E 点),系统处置能力开始下降,不能再允诺增加的使用者允诺,吞吐量反而降低。
小结
责任编辑通过使用者出访中文网站的操作过程,分析了三个方向操作过程中提高操控性的想法和方式,最后介绍了描述操控性的指标,并对操控性测试做了简要说明。