使用国外 DNS 造成国内网站访问慢的解决方法

你是否是一个使用国外 DNS 的中国网民?你是否发现使用国外 DNS 之后访问某些国内网站奇慢无比?这不是 DNS 慢,而是电信到联通的线路太慢。如果你愿意小小地折腾一下,那么跟随本文,你可以解决这一问题。

一、为什么要用国外 DNS

由于众所周知的问题,国内 DNS 服务器解析国外网站会遭到 DNS 污染和投毒,使之解析到完全虚构的 IP 上,造成「开了 VPN 也没法访问 Twitter 或 Facebook」等问题。以下是一个例子:

	
  1. wzyboy@vermilion:~$ dig twitter.com @8.8.8.8 +short

  2. 199.59.148.82

  3. 199.59.149.230

  4. 199.59.148.10

  5. wzyboy@vermilion:~$ dig twitter.com @221.228.255.1 +short

  6. 93.46.8.89

Twitter 正确的 IP 地址应该是 199.59.148.0/24 里的那几个,但是如果用 221.228.255.1 这台中国电信的 DNS 服务器查询,查到的就是不知道什么鬼地址了,地理信息是在意大利,乱七八糟的。正是因为这样的 DNS 解析不正确的情况出现,不少人转而使用了国外的 DNS 服务器,如老牌的 OpenDNS 以及这几年新崛起的好记又好用的 Google Pulic DNS 即 8.8.8.8 和 8.8.4.4。使用它们进行查询,再配合以 VPN 或者浏览器的远程 DNS 解析,便可避免 DNS 污染的情况出现,从而解析出正确的地址。

此外,拒绝使用电信的 DNS 服务器,还可以避免烦人的「114 上网导航」页面……

二、为什么使用国外 DNS 会「慢」

我是在「慢」上加了引号的,因为这其实不是国外 DNS 慢,而是你要访问的网站的 CDN 分配错误,慢。由于国内各大运营商之间的主干线路带宽太窄,所以导致「最远的距离是从电信到联通」,电信用户访问联通的服务器非常慢,联通用户访问电信的服务器也非常慢,相信这都是大家有体验的。因此,国内不少网站都用了双线 CDN,在电信的机房里放点服务器,再在联通的机房里放点服务器。运用智能 DNS 技术,当你访问网站的时候,DNS 根据你的来源 IP 判断你是电信用户还是联通用户,然后再返回相应的 IP 地址,这样你会访问到就近的、同运营商的服务器,访问速度就大大提升了。而如果使用国外的 DNS 的话,你的查询来源来自国外,国内网站的 DNS 无法判断你是电信用户还是联通用户,就胡乱分配你一个服务器。比如我是一个江苏电信的用户,但当我访问淘宝网的时候,淘宝的 DNS 把我解析到青岛联通的服务器上,奇慢无比。所以:

很多人认为 Google Public DNS, OpenDNS 等「慢」,主要不是查询慢,而是电信到联通之间太慢。

当然了,如果硬要比较查询的话,倒也是会慢很少一点的:

	
  1. ;; 使用 8.8.8.8 解析 www.google.com 耗时 79 毫秒

  2. ;; Query time: 79 msec

  3. ;; SERVER: 8.8.8.8#53(8.8.8.8)

  4. ;; WHEN: Thu Sep 6 17:20:37 2012

  5. ;; MSG SIZE rcvd: 143

  6. ;; 使用中国电信 221.228.255.1 服务器解析 www.google.com 耗时 6 毫秒

  7. ;; Query time: 6 msec

  8. ;; SERVER: 221.228.255.1#53(221.228.255.1)

  9. ;; WHEN: Thu Sep 6 17:20:44 2012

  10. ;; MSG SIZE rcvd: 284

别看 6 毫秒和 79 毫秒差别很大的样子,但是人类是很难感觉出来的,而且,这只是查询时间,与实际的访问速度无关,就算你一整天都在刷 www.google.com,也就每小时慢个几百毫秒的样子,根本感觉不出来。真正慢的原因,还是上文所说的「电信到联通」的问题。

三、问题的解决思路

现在问题明确了:使用国外 DNS 之后,查询来源变成国外的 IP,使用了 CDN 加速的国内网站的 DNS 会无法判断你的来源,胡乱给你分配一个地址,如果不是同一个运营商的,访问速度便会很慢。

那解决方案也就出现了:让国内网站的 DNS 服务器知晓你的来源,从而给你分配正确的服务器 IP。于是 Google 起草了一个专有协议,叫 EDNS,在 DNS 查询请求中包含源地址,这样淘宝就知道查询来源不是 Google 服务器,而是电信的某用户,就不会把你扔到联通服务器上了 。听起来很美好是吧?不过这个协议不开放,目前几乎没有人用,所以,问题丝毫没有解决。

新思路是:访问那些会因 CDN 加速解析错误而极其缓慢国内网站的时候,直接向国内的服务器发送请求,让 DNS 知晓你的来源,给你分配个正确的 IP。访问其他网站的时候,再通过国外的 DNS 查询。

听起来很简单的样子,实现起来也不难:用 dnsmasq 在本地搭个 DNS 缓存服务器,规定哪些域名用哪个服务器查就好了。

四、安装及配置 dnsmasq

安装 dnsmasq

dnsmasq 是一个非常轻量的 DNS 缓存及 DHCP 服务器,在我的 Arch Linux 上只占用了 368 KiB 的磁盘空间,相比功能极其强大的 BIND9 来说小多了(BIND9 的安装体积是 6.23 MiB)。不光是体积小,它的功能也很专一,配置起来也是十分方便的,五分钟就可以搞定。

Ubuntu 12.04 及之后的版本应该自带了 dnsmasq。如果没有,可以使用 sudo apt-get install dnsmasq 安装。Arch Linux 直接 sudo pacman -S dnsmasq 即可。我的笔记本电脑需要给手机 DHCP 及 IP 转发用,因此早就安装了 dnsmasq,但是直到今天才想起这么用它……

配置 dnsmasq

dnsmasq 的各参数可以通过 man dnsmasq 查看,配置文件中也有许多清晰明了的注释。默认的配置文件位于 /etc/dnsmasq.conf,打开它,可以更改这几个地方:

	
  1. no-resolv

  2. no-poll

  3. server=8.8.8.8

  4. server=8.8.4.4

  5. server=/cn/114.114.114.114

  6. server=/taobao.com/114.114.114.114

  7. server=/taobaocdn.com/114.114.114.114

  8. server=/tbcache.com/114.114.114.114

  9. server=/tdimg.com/114.114.114.114

第一行的 no-resolv 和第二行的 no-pull 让 dnsmasq 不要通过 /etc/resolv.conf 确定上游服务器,也不要检测 /etc/resolv.conf 的变化(因为我们就是要拿本机当服务器嘛),接下来两行指定 dnsmasq 默认查询的上游服务器,此处以 Google Public DNS 为例,喜欢用 OpenDNS 的也可以改 OpenDNS。接下来就是规定一张名单了,把一些国内网站的域名写在这里即可。比如server=/cn/114.114.114.114 便是把所有 .cn 的域名全部通过 114.114.114.114 这台国内 DNS 服务器来解析,你也可以改成其他的国内 DNS 比如你的运营商提供的 DNS。接下来四行是淘宝的几个域名,让它们也通过国内的 DNS 服务器解析。

这样分流操作之后,默认所有域名都通过 8.8.8.8 和 8.8.4.4 解析,但是所有的 .cn 域名以及淘宝的域名通过 114.114.114.114 这台国内 DNS 服务器解析。当然,除了淘宝网,你也可以添加更多的域名,根据自己的喜好,把经常访问,但是使用国外服务器解析到很慢的服务器上的网站域名都可以添加进去,不过:如果这个网站本身就只能一台服务器,没有 CDN 加速,那再怎么添加也是无济于事的,得让网站管理员去买双线机房……另外,在写这篇文章的时候,发现 @felixonmars 维护了一张国内常用的、但是通过国外 DNS 会解析错误的网站域名的列表,据他所说,这是他在公司里部署这一套东西之后,公司里其他人报怨「慢」的网站域名收集来的,应该囊括了绝大多数有此问题的网站,值得依赖,欢迎选用。如果觉得直接把这么多域名加在 /etc/dnsmasq.conf 里不爽的话,可以在 dnsmasq.conf 里把 conf-dir=/etc/dnsmasq.d 这一行取消注释,然后把在 /etc/dnsmasq.d 里弄点列表。比如我就是把 @felixonmars 维护的列表放在/etc/dnsmasq.d/server.china.conf 里。

配置好之后,保存,Ubuntu 可用 sudo service dnsmasq restart,Arch Linux 可用 sudo rc.d restart dnsmasq 重启 dnsmasq。如果没有错误的话,这时本地的 dnsmasq 已经跑起来了。

测试 dnsmasq

测试一下:

	
  1. wzyboy@vermilion:~$ dig www.taobao.com @8.8.8.8 +short

  2. www.gslb.taobao.com.danuoyi.tbcache.com.

  3. scorpio.danuoyi.tbcache.com.

  4. 119.167.195.251 → 这是淘宝的青岛联通的服务器,我用江苏电信连奇慢无比

  5. 119.167.195.241 → 这也是青岛联通

  6. wzyboy@vermilion:~$ dig www.taobao.com @127.0.0.1 +short

  7. www.gslb.taobao.com.danuoyi.tbcache.com.

  8. scorpio.danuoyi.tbcache.com.

  9. 222.186.49.251 → 解析到常州电信了,快!

  10. 61.155.221.241 → 这是上海电信

  11. wzyboy@vermilion:~$ dig twitter.com @127.0.0.1 +short

  12. 199.59.150.7 → Twitter 还是用 8.8.8.8 解析的,所以解析出来是未经污染的正确地址

  13. 199.59.148.82

  14. 199.59.149.230

效果很明显,这时可以把本地的 DNS 设为 127.0.0.1 了。大部分 Linux 用户直接更改 /etc/resolv.conf 的内容为:

	
  1. nameserver 127.0.0.1

即可。Ubuntu 12.04 及以后的用户,可能需要对 resolv.conf 做一些手脚,具体参考这里。如果不愿意改的话,可能每次联网都要手工改一次 resolv.conf,或者在 NetworkManager 中手工指定 127.0.0.1 为 DNS。DHCP 用户的话,可以通过 /etc/resolv.conf.head 之类的文件来保证 127.0.0.1 在第一行。

这样配置完之后,如果你没有在 dnsmasq 里限定查询 IP,那么你的家人、朋友们也是可以把你的电脑作为 DNS 服务器的。如果你本地是 VPN 全局翻墙的话,需要把你选择的国内 DNS 服务器通过路由表加入直连的范围内。当然,已经使用 chnroutes 的就不需要了。

DNS攻击原理及防范方法

随着网络的逐步普及,网络安全已成为INTERNET路上事实上的焦点,它关系着INTERNET的进一步发展和普及,甚至关系着INTERNET的生存。可喜的是我们那些互联网专家们并没有令广大INTERNET用户失望,网络安全技术也不断出现,使广大网民和企业有了更多的放心,下面就网络安全中的主要技术作一简介,希望能为网民和企业在网络安全方面提供一个网络安全方案参考。

DNS的工作原理

DNS分为Client和Server,Client扮演发问的角色,也就是问Server一个Domain Name,而Server必须要回答此Domain Name的真正IP地址。而当地的DNS先会查自己的资料库。如果自己的资料库没有,则会往该DNS上所设的的DNS询问,依此得到答案之后,将收到的答案存起来,并回答客户。

DNS服务器会根据不同的授权区(Zone),记录所属该网域下的各名称资料,这个资料包括网域下的次网域名称及主机名称。

在每一个名称服务器中都有一个快取缓存区(<a href=”http://www.it892.com/baike/wiki/%E9%AB%98%E9%80%9F%E7%BC%93%E5%86%B2%3Ca%20href=” http:=”” www.it892.com=”” baike=”” wiki=”” 存储器’=”” target=”_blank” style=”color: rgb(0, 96, 192); text-decoration: none;”>存储器’ target=’_blank’>Cache),这个快取缓存区的主要目的是将该名称服务器所查询出来的名称及相对的IP地址记录在快取缓存区中,这样当下一次还有另外一个客户端到次服务器上去查询相同的名称 时,服务器就不用在到别台主机上去寻找,而直接可以从缓存区中找到该笔名称记录资料,传回给客户端,加速客户端对名称查询的速度。例如:

当DNS客户端向指定的DNS服务器查询网际网路上的某一台主机名称 DNS服务器会在该资料库中找寻用户所指定的名称 如果没有,该服务器会先在自己的快取缓存区中查询有无该笔纪录,如果找到该笔名称记录后,会从DNS服务器直接将所对应到的IP地址传回给客户端 ,如果名称服务器在资料记录查不到且快取缓存区中也没有时,服务器首先会才会向别的名称服务器查询所要的名称。例如:

DNS客户端向指定的DNS服务器查询网际网路上某台主机名称,当DNS服务器在该资料记录找不到用户所指定的名称时,会转向该服务器的快取缓存区找寻是否有该资料 ,当快取缓存区也找不到时,会向最接近的名称服务器去要求帮忙找寻该名称的IP地址 ,在另一台服务器上也有相同的动作的查询,当查询到后会回复原本要求查询的服务器,该DNS服务器在接收到另一台DNS服务器查询的结果后,先将所查询到的主机名称及对应IP地址记录到快取缓存区中 ,最后在将所查询到的结果回复给客户端



常见的DNS攻击包括:

1) 域名劫持

通过采用黑客手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到黑客可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民访问该域名时,进入了黑客所指向的内容。

这显然是DNS服务提供商的责任,用户束手无策。

2) 缓存投毒

利用控制DNS缓存服务器,把原本准备访问某网站的用户在不知不觉中带到黑客指向的其他网站上。其实现方式有多种,比如可以通过利用网民ISP端的DNS缓存服务器的漏洞进行攻击或控制,从而改变该ISP内的用户访问域名的响应结果;或者,黑客通过利用用户权威域名服务器上的漏洞,如当用户权威域名服务器同时可以被当作缓存服务器使用,黑客可以实现缓存投毒,将错误的域名纪录存入缓存中,从而使所有使用该缓存服务器的用户得到错误的DNS解析结果。

最近发现的DNS重大缺陷,就是这种方式的。只所以说是“重大”缺陷,据报道是因为是协议自身的设计实现问题造成的,几乎所有的DNS软件都存在这样的问题。

3)DDOS攻击

一种攻击针对DNS服务器软件本身,通常利用BIND软件程序中的漏洞,导致DNS服务器崩溃或拒绝服务;另一种攻击的目标不是DNS服务器,而是利用DNS服务器作为中间的“攻击放大器”,去攻击其它互联网上的主机,导致被攻击主机拒绝服务。

4) DNS欺骗

DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。

原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。

现在的Internet上存在的DNS服务器有绝大多数都是用bind来架设的,使用的bind版本主要为bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.这些bind有个共同的特点,就是BIND会缓存(Cache)所有已经查询过的结果,这个问题就引起了下面的几个问题的存在.

DNS欺骗

在DNS的缓存还没有过期之前,如果在DNS的缓存中已经存在的记录,一旦有客户查询,DNS服务器将会直接返回缓存中的记录

防止DNS被攻击的若干防范性措施

互联网上的DNS放大攻击(DNS amplification attacks)急剧增长。这种攻击是一种数据包的大量变体能够产生针对一个目标的大量的虚假的通讯。这种虚假通讯的数量有多大?每秒钟达数GB,足以阻止任何人进入互联网。

与老式的“smurf attacks”攻击非常相似,DNS放大攻击使用针对无辜的第三方的欺骗性的数据包来放大通讯量,其目的是耗尽受害者的全部带宽。但是,“smurf attacks”攻击是向一个网络广播地址发送数据包以达到放大通讯的目的。DNS放大攻击不包括广播地址。相反,这种攻击向互联网上的一系列无辜的第三方DNS服务器发送小的和欺骗性的询问信息。这些DNS服务器随后将向表面上是提出查询的那台服务器发回大量的回复,导致通讯量的放大并且最终把攻击目标淹没。因为DNS是以无状态的UDP数据包为基础的,采取这种欺骗方式是司空见惯的。

这种攻击主要依靠对DNS实施60个字节左右的查询,回复最多可达512个字节,从而使通讯量放大8.5倍。这对于攻击者来说是不错的,但是,仍没有达到攻击者希望得到了淹没的水平。最近,攻击者采用了一些更新的技术把目前的DNS放大攻击提高了好几倍。

当前许多DNS服务器支持EDNS。EDNS是DNS的一套扩大机制,RFC 2671对次有介绍。一些选择能够让DNS回复超过512字节并且仍然使用UDP,如果要求者指出它能够处理这样大的DNS查询的话。攻击者已经利用这种方法产生了大量的通讯。通过发送一个60个字节的查询来获取一个大约4000个字节的记录,攻击者能够把通讯量放大66倍。一些这种性质的攻击已经产生了每秒钟许多GB的通讯量,对于某些目标的攻击甚至超过了每秒钟10GB的通讯量。

要实现这种攻击,攻击者首先要找到几台代表互联网上的某个人实施循环查询工作的第三方DNS服务器(大多数DNS服务器都有这种设置)。由于支持循环查询,攻击者可以向一台DNS服务器发送一个查询,这台DNS服务器随后把这个查询(以循环的方式)发送给攻击者选择的一台DNS服务器。接下来,攻击者向这些服务器发送一个DNS记录查询,这个记录是攻击者在自己的DNS服务器上控制的。由于这些服务器被设置为循环查询,这些第三方服务器就向攻击者发回这些请求。攻击者在DNS服务器上存储了一个4000个字节的文本用于进行这种DNS放大攻击。

现在,由于攻击者已经向第三方DNS服务器的缓存中加入了大量的记录,攻击者接下来向这些服务器发送DNS查询信息(带有启用大量回复的EDNS选项),并采取欺骗手段让那些DNS服务器认为这个查询信息是从攻击者希望攻击的那个IP地址发出来的。这些第三方DNS服务器于是就用这个4000个字节的文本记录进行回复,用大量的UDP数据包淹没受害者。攻击者向第三方DNS服务器发出数百万小的和欺骗性的查询信息,这些DNS服务器将用大量的DNS回复数据包淹没那个受害者。

如何防御这种大规模攻击呢?首先,保证你拥有足够的带宽承受小规模的洪水般的攻击。一个单一的T1线路对于重要的互联网连接是不够的,因为任何恶意的脚本少年都可以消耗掉你的带宽。如果你的连接不是执行重要任务的,一条T1线路就够了。否则,你就需要更多的带宽以便承受小规模的洪水般的攻击。不过,几乎任何人都无法承受每秒钟数GB的DNS放大攻击。

因此,你要保证手边有能够与你的ISP随时取得联系的应急电话号码。这样,一旦发生这种攻击,你可以马上与ISP联系,让他们在上游过滤掉这种攻击。要识别这种攻击,你要查看包含DNS回复的大量通讯(源UDP端口53),特别是要查看那些拥有大量DNS记录的端口。一些ISP已经在其整个网络上部署了传感器以便检测各种类型的早期大量通讯。这样,你的ISP很可能在你发现这种攻击之前就发现和避免了这种攻击。你要问一下你的ISP是否拥有这个能力。

最后,为了帮助阻止恶意人员使用你的DNS服务器作为一个实施这种DNS放大攻击的代理,你要保证你的可以从外部访问的DNS服务器仅为你自己的网络执行循环查询,不为任何互联网上的地址进行这种查询。大多数主要DNS服务器拥有限制循环查询的能力,因此,它们仅接受某些网络的查询,比如你自己的网络。通过阻止利用循环查询装载大型有害的DNS记录,你就可以防止你的DNS服务器成为这个问题的一部分.

结束语:网络攻击越来越猖獗,对网络安全造成了很大的威胁。对于任何黑客的恶意攻击,都有办法来防御,只要了解了他们的攻击手段,具有丰富的网络知识,就可以抵御黑客们的疯狂攻击。一些初学网络的朋友也不必担心,因为目前市场上也已推出许多网络安全方案,以及各式防火墙,相信在不久的将来,网络一定会是一个安全的信息传输媒体。特别需要强调的是,在任何时候都应将网络安全教育放在整个安全体系的首位,努力提高所有网络用户的安全意识和基本防范技术。这对提高整个网络的安全性有着十分重要的意义

什么是DNS劫持和DNS污染,公共DNS是最好的解决办法

我们知道,某些网络运营商为了某些目的,对 DNS 进行了某些操作,导致使用 ISP 的正常上网设置无法通过域名取得正确的 IP 地址。常用的手段有:DNS劫持DNS污染。DNS劫持 和 DNS污染 在天朝是非常常见的现象。一般情况下输入一个错误或不存在的 URL 后,本应该出现404页面,而我们看到的却都是电信、联通等运营商的网址导航页面,正常访问网站时出现电信的小广告,使用了代理却依然无法正常访问某些境外网站,以及最近 Google 几乎被彻底封杀、微软 OneDrive 打不开,这些都和 DNS 有一定关系。

DNS劫持

DNS劫持 就是通过劫持了 DNS 服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原 IP 地址转入到修改后的指定 IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持 通过篡改 DNS 服务器上的数据返回给用户一个错误的查询结果来实现的。

DNS劫持 症状:某些地区的用户在成功连接宽带后,首次打开任何页面都指向 ISP 提供的“电信互联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问 Google 域名的时候出现了百度的网站。这些都属于 DNS劫持。

DNS污染

DNS污染 是一种让一般用户由于得到虚假目标主机 IP 而不能与其通信的方法,是一种 DNS 缓存投毒攻击(DNS cache poisoning)。其工作方式是:由于通常的 DNS 查询没有任何认证机制,而且 DNS 查询通常基于的 UDP 是无连接不可靠的协议,因此 DNS 的查询非常容易被篡改,通过对 UDP 端口 53 上的 DNS 查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果

DNS污染 症状:目前一些在天朝被禁止访问的网站基本都是通过 DNS污染 来实现的,例如 YouTube、Facebook 等网站。

解决方法

对于 DNS劫持,可以通过手动更换 DNS 服务器为 公共DNS 解决。

对于 DNS污染,可以说,个人用户很难单单靠设置解决,通常可以使用 VPN 或者域名远程解析的方法解决,但这大多需要购买付费的 VPN 或 SSH 等,也可以通过修改 Hosts 的方法,手动设置域名正确的 IP 地址。

公共DNS

公共DNS 是一种面向大众免费的 DNS 互联网基础服务。我们知道要上网,就必须要 DNS 解析服务,尽管大多数电脑用户都很少会去手动设置 DNS 服务器地址,而是采用默认自动获取网络商 DNS 地址的方式,不过对于一些小型网络服务商而言,可能全球或者全国 DNS 节点比较少,这样就容易导致打开网页偏慢等现象。

更换 DNS 服务器地址为 公共DNS 后,可以在一定程度上加快域名解析速度防止 DNS劫持加强上网安全,还可以屏蔽大部分运营商的广告。下面列出几个目前常用的 公共DNS 服务器地址:

名称 DNS 服务器 IP 地址
OpenerDNS 42.120.21.30
阿里 AliDNS 223.5.5.5 223.6.6.6
V2EX DNS 199.91.73.222 178.79.131.110
CNNIC SDNS 1.2.4.8 210.2.4.8
114 DNS 114.114.114.114 114.114.115.115
Google DNS 8.8.8.8 8.8.4.4
OpenDNS 208.67.222.222 208.67.220.220

给出了这么多,说一下选择吧,如果是国内用户,没有洁癖的,可以考虑 114DNS阿里DNS,如果有洁癖,国内可以选择 V2EX DNSOpenerDNS,国外的可以选择很多,优选 Google 的,虽然有延迟,但还能接受,其他的看自己的网络情况了。

手动更换DNS

1. 打开“网络和共享中心”;

2. 点击正在使用的网络打开“状态”;

于宙:我们这一代人的困惑

提示:本文是于宙在TEDx大会上的演讲,这篇文章有点长,但非常值得你花20分钟去阅读。小编正是在仔细读完之后,才发现,里面的每个观点都直叩心扉。你所有的困惑,或许尽在本文

  TED简介

  TED 是一个非盈利性的组织,其创办目的旨在传播有独特的思想来改变生活态度,进而改变世界。 TED专门邀请站在各个领域前沿的创新者和实践家来做18分钟以内的演讲。这25年以来在这些演讲者中,已经包括了微软总裁比尔·盖茨、美国政治人物及环境学家阿尔·戈尔、英国生物学家珍·古道尔、美国作家伊丽莎白·吉尔伯特等人物。

  TEDx介绍

  基于传播有价值想法的初衷,TED 创办了其旗下的组织 TEDx。TEDx 是非官方,自发性的活动项目——及在全球任何地方,只要当地团队申请得到批准,便可以以TEDx的名义来组织活动。其形式与 TED 基本一致——邀请一些有趣、想法奇特的人来做18分钟以内的演讲。

  于宙演讲全文:

  大家下午好,

  很荣幸能够参加本次TEDx大会,非常感谢东北财经大学TED团队和华臣影城为我们提供这样一个交流的机会。

  自我介绍

  我是大连人,高中就读于大连市二十四中。因为当时学习十分不努力,所以高中毕业之后选择了出国留学,这其实是很多本科出国留学的人不能说的秘密,辗转了几个学校,最终毕业于美国印第安纳大学凯利商学院,主修投资和金融衍生品。上学的时候迷恋炒股,学习依旧散漫,没能成为一个“放弃了华尔街的高薪工作毅然回国”海归精英,真的颇为遗憾,因为实在没有什么华尔街的公司愿意要我。碰巧的是,毕业前两年股市和外汇的行情比较好,赚到了一点点资本,于是我决定回国做点生意。现在在大连从事餐饮行业,目前拥有万达广场的不出二品,大都会,福佳新天地,奥林匹克广场的莉蒂娅城堡4家芝士蛋糕店,青泥洼桥2路车站,长春路百盛,和即将开业的罗斯福地下的乔东家脆皮火烧三家火烧店。

  引言

  大学毕业之后第一次面对这么多人做演讲,坦率地说,非常的紧张。虽然年轻的时候我曾经畅想过很多次,功成名就之后能像我曾经的那些偶像一样和年轻的朋友们分享一下我是如何从一无所有走上人生巅峰的经验,然后语重心长的告诉大家,人活着不能像一根草而是要像一棵树,能走到金字塔顶端的只有雄鹰和蜗牛两种动物,我的成功你也可以复制等等。可是过了26岁之后我忽然意识到一个严肃的问题,就是自己的一生未必会取得很大的成就啊,所以当TEDx DUFE团队找到我说没关系即便你只是一个开小吃店的,我们也愿意为你提供这样一个和很多人交流思想的机会时,我的心情是多么地激动。因为公司还没上市,所以小草大树,雄鹰蜗牛,睡地板捡易拉罐这样的故事还不到说的时候。今天,只想和大家分享几个困扰了我和我身边的一些朋友十几年的问题,和在经历了一些变故和挫折后,我对这些问题的看法。

  努力奋斗真的能实现梦想吗?

  大家现在可以想象一下汪峰老师坐在转椅上,深情的望着你对你说,“你的梦想是什么?”周星驰老师的那句“做人如果没有梦想,和咸鱼有什么区别?”据说也激励了几代人。梦想这个东西是如此的重要,简直就是人生的一盏明灯。成功的人们成功的原因各不相同,但他们都不会忘记告诉你,无论到什么时候,都不曾忘记梦想,是他们成功的首要原因。以至于我们这一代人对于人生意义的最通常的理解,就在于坚持梦想并最终实现它。可很少有人愿意面对的一件事情是,大部分人的梦想永远,没错,永远都实现不了。

  你没听错,大部分人的梦想永远都实现不了。

  先和大家分享一个我之前的梦想。上大学的时候我热衷于各式各样的赌博游戏,是学校旁边赌场的常客。我赌徒生涯的起点源于赌场里最基本游戏轮盘赌,轮盘上1到36个数字和两个0,赔率是1赔36。1到36分为红黑两色,押注红黑的赔率是1赔1。作为一个合格的接受过九年义务教育的人都知道,每一次轮盘开始转动的那一刻,都是一次纯粹的独立随机事件。但是赌博这件事情的魅力就在于,当你真正身处赌场,看到已经连续4次开出红色的时候,几乎所有人都会想把筹码压在黑色的那一面。而我当时的梦想,就是破译这其中的奥秘。我最初的策略非常简单,当连续三次开出奇数,就押注偶数,连续三次红色,就押注黑色。难以置信的事情发生了,在我严格的执行这个策略的情况下,前几次去赌场不但全身而退,每次都还赚了不少,以至于我产生了一种幻觉,也许游戏是有规律可循的,我已经看到了人生巅峰就在不远处向我招手。当然最终的结尾你们一定想到了,在经历过连续18个偶数,连续开出21次黑色后,我把之前赚到的钱都乖乖地还给了赌场。

  后来我知道,我那个愚蠢的梦想叫做赌徒谬论,就不具体展开讲了。但它对我意义深刻,我终于明白了在纯粹的随机事件面前,一切规律都是无谓的。

  生活中的事情有极个别和轮盘赌一样,属于纯粹的随机事件,比如双色球。可是几乎每一个中了双色球的人都会告诉你啊,他们花了多少精力去钻研往期号码,研究历史规律,付出了多少辛勤的努力最终获得了成功。实际上,即使是纯粹由随机性主导的事情,只要参与的人的基数足够大,小概率事件总会发生。有趣的是,几乎所有在随机事件中的受益者,都会把这完全由运气决定的结果归功于自己的努力上。不仅仅是参与者本身,旁观者也会这么认为。再比如,中国好声音的冠军嘛。

  我们生活中遇到的所有事情基本可以分为三类,第一类纯粹由随机性决定,比如布朗运动和轮盘赌博,第二类纯粹由能力决定,比如英语六级考试,110米栏之类。第三类,也是我们最常遇到的,由能力和随机性共同决定,比如创业,投资,恋爱或是梦想。

  我对励志大师们总告诉年轻人要不惜一切代价追逐梦想感到深深厌倦的原因就在于,大多数人的梦想虽然不是纯粹的双色球,但也绝对是由随机性主导的。在强大的随机性面前,付出再多辛勤的汗水,就好比夜以继日蹲在轮盘赌旁边渴望参透其中规律。前面说到中国好声音的冠军,张碧晨的那一句you are my destiny,听得我也是醉了。但毕竟那一刻,中国又有多少唱歌唱的和她一样好甚至更好的姑娘,如果真把成为好声音冠军作为一生的梦想,一生中都得在痛苦中度过。我个人很喜欢黄渤,但绝对不会用黄渤作为例子去激励一个我这种长相差的年轻人不惜一切代价去追逐演员梦,注意是不惜一切代价。因为无论是唱歌还是演戏,再多的努力也只能让你变得很优秀,它们并不存在可以量化的评判标准,想成为万众瞩目明星,随机性的重要程度都远远大于实力。

  我想,一个人在年轻的时候,做的每一件事情,能清楚的区分其中随机性所占的比例并能心平气和的接受它,在我看来就是最宝贵的财富。

  那么在你的梦想中,运气又扮演了多重要的角色呢?当你深深的感知到这件事情的随机性也许不会青睐与你,是否还愿意坚持下去呢?对我而言,梦想永远是值得执着追求的,但我可以无比心平气和的接受,它就是永远无法实现。

  既然连梦都实现不了,还有什么事情值得努力呢? 

  去年这个时候,我发过一条微博。

  这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。

  这段话在网上的疯传,是我始料不及的。更出乎我意料之外的是,我在评论中看到了相当一部分的骂声,还有人认真的给我写下了相当深刻的话,“你在拥有自己的光亮时不要吹熄别人的蜡烛,你不能因为你自己的不喜欢就否定别人。”很莫名其妙是吧,即使你刚刚听完我上一段关于随机性的看法,你也会知道,我从来都不觉得努力是一件无所谓的事情。恰恰相反,我一直相信,在能力没达到一定程度之前,你连面对随机性的资格都没有啊。张碧晨能拿好声音冠军自然离不开运气,但换成杨幂,评委不但不会转身可能直接撒腿就跑了。

  可现在问题来了,那究竟什么才算是有价值的努力?这可以从我那条微博说起。去年这个时候我和朋友在琢磨去大庆做点服装生意,决定去考察几个商场。我当时住在北京,因为之前晚上和朋友在外面玩的比较尽兴回到家里已经比较晚了,担心睡觉睡过头会错过航班,那晚上就直接在沙发上靠了一晚。那是我第一次去哈尔滨,十一月份已经很冷了,衣服拿的不足,下了飞机冻得头疼。又因为没有提前订票,到了哈尔滨之后才买的火车票,发现就只剩站票了。于是,当我一晚上没睡,冻得头晕眼花,又在绿皮火车上站了两个多小时之后,抵达大庆的那一瞬间我觉得自己实在是太不容易了,将来必须要写进回忆录里面。可是,回头仔细一想,这些所谓的“努力”对我最终把那个服装生意做好,没有半毛钱关系。更何况,如果我前一天晚上能早点上床睡觉,多准备点衣服,提前在网上把火车票订好,完全可以舒舒服服的达到同样的目的。‍我的那次经历像是自己二十多年生活中很多事情的缩影,沉溺在对结果没有直接帮助只是因为自己遭受了一些痛苦的行为中,误以为那就是努力。

  当我终于意识到我并不是唯一曾经把无意义的消耗当作努力的时候,忽然发现,原来生活中我觉得很努力的人,也许没那么勤奋,如果在正确的方向上坚持行动,超过他们也并不困难。

  因为我们这一代人对于勤奋和努力的理解,几乎清一色的来自于学校,更精确的说,在前二十多年的生活中,我们眼中最努力的人,就是那些最能拼命看书和做题的人。实际上,这种理解是极其片面而幼稚的,因为看书和做题本身,都是为了一个极其鲜明的目的而存在的,就是通过考试。这种勤奋的付出极其纯粹,更多的复习时间,更高的复习强度,一般而言,都可以直接的提高考试的分数,它们之间的联系鲜明而直接,每个人都看的懂。‍

  但生活的美妙之处却在于,很多事情在我们没做到一定程度之前,是完全没法理解的。

  这就好比学英语,十几年漫长的岁月里我都在幻想,要通过多么复杂的流程,多么精密的设计,多么全面的涉及和多么不可思议的努力,终于有那么一天,或许就我就能因为前期的那些无懈可击的学习,说一口比较流利的英语,像说中文一样,可以边说边想,而不是说每一句话之前设计它的句式时态词汇然后在心里复述几遍再看上去流利的背诵出来。谁不是这么设想的呢?可惜,它不仅从来没有实现,并且让我看不到有任何实现的趋势,对于每一个设立目标的人来说,没有比这更痛苦的感受。

  但是在去了美国两年左右的时间之后,我忽然发现自己可以已经毫无障碍的说一口流利的英语了。这并非我采用了什么新的学习方法,而是因为去了印第安纳之后身边中国人很少,在没有选择的情况下,只能被迫用英语去交流和表达,在这个过程中我并没有认真想过自己每天进步了多少,也没有阶段性的检验学习效果,只是不停的去听和说,因为没有选择嘛。直到两年多后的忽然有一天我才意识到,咦,自己好像真的已经可以了。但是我确实无法总结出来是如何一步一步做到的,只是那两年的时间,我一直都在很不情愿地用英语去生活嘛。

  一个人能获得的最可贵的能力,都和掌握一门语言一样,你所付出的努力不是能够获得即时回馈的,甚至在很长的一段时间内没有任何收获,直到积累到了一定的阶段后,忽然爆发出惊人的力量,连你自己都不清楚这一切是如何发生的。比如锻炼身体,读书写作,或者是做生意。当你经历了足够的量变终于引起质变时拥有的技能,大部分人是终身难以企及的,不是因为他们太笨,恰恰相反,因为他们都太聪明了。

  触发人类行动的最基本原理被称为反射,我们是需要即时回馈的物种。所以绝大多数人对于世界的理解度是线性的,但更多情况下,事物却是以漫长的潜伏震荡后爆发突破的形式发展的。我现在时常觉得,人在少年时期更容易掌握语言,乐器,美术这些成年后很难学的技艺,并非那小时候就是天资聪颖,而是小孩子很少会一个星期质疑一次自己收获了多少,都是闷头一练就是好几年,直到学会了才知道哦自己已经会了。只有聪明的成年人,才相信1本书读懂易经,10句话揭秘马云的成功之道,30天成为吉他高手的故事。

  简而言之,现实生活中,付出和结果之间往往没有那么立竿见影。在离开学校之后,当我们遇到的很多事情不再像做题和考试之间联系的那么紧密的时候,很多人的付出都是浅尝辄止的。而最可贵的努力,是选择一个正确的方向,那些无法立即获得回报的事情,依然能付出十年如一日的专注和热情,最终的结果也许不足以让你独孤求败,但足以出类拔萃。

  人这一生中是否有一个节点,过了之后一切都会好起来?

  前面说了这么多,谈论的都与目标和实现目标有关。仔细想想,我们的一生好像都是在实现目标中挣扎着度过的。上初中的时候,老师告诉你,中考的淘汰率是最高的,只要闯过去,上了高中一切就好了。但上了高中的时候发现不是那么回事嘛,高中老师又说了啊,考上大学就进了天堂。于是你考上了大学,依然空虚迷茫各种草样年华,父母老师又告诉你,找到工作就好了。工作之后发现烦恼和忧虑依然都在,女朋友给你看马云的故事,告诉你等你事业有成就好了…… 

  你发现了吗,其实人这一辈子的每一个阶段都有新的痛苦和顾虑,周而复始,生生不息。绝对不会因为你考上大学,事业有成,迎娶了女神就从此happily ever after。但每一个阶段也有每一个阶段的快乐,无法替代。生活不是安徒生童话也不是好莱坞电影,从出生的那一刻起直到生命的尽头,都不存在什么节点,过去了之后一切幸福美满无忧无虑。

  每一段岁月都有它存在的价值,没有高低贵贱之分,都不应该被辜负。而我能想到的人这一生能做的最愚蠢的事情,就是把全部人生的希望都孤注一掷到未来的某个节点上,而忽略了生活本身应有的乐趣。哪怕你以后真正实现了那个执念中的目标,才会发现它远远没你想的那么美好。年轻的时候和哥们在操场上打篮球喝可乐的快乐,是以后高尔夫会球所品里红酒替代不了的。尤其男生,千万不要总想着等将来老子有钱了如何如何,且不说你以后很可能不会太有钱,而且相信我,就是有钱了也真的不能怎么样。生命就在每天的生活里,一切执念都是虚妄,和身边的人愉快相处,认真安排好每一天的活动,用心去感受每一天的心境,就是生活的意义本身。这其实是我今天最想分享给你们的事情。

  谢谢大家。

  于宙

  2014.11.26

堪比Google Analytics网站统计的Piwik,不用再装Awstats

被称为赶超Google Analytics的Piwik是一套基于Php+MySQL技术构建的开源网站访问统计系统,前身是 phpMyVisites。协议为GPL。

本文的网站统计主角是 Piwik ,但我想在开头说一说 Awstats 跟 Google Analytics 。



Awstats 是我一贯使用的流量分析工具,它是通过分析 HTTP 服务器的访问日志得到最精确的流量数据,丝毫无差。但就因为这样,HTTP 日志里头有什么,它就只能出什么,单单就只是流量相关的参数。并不能向Piwik, Google Analysis 那样可以获取到访问者的屏幕分辨率,用户的访问忠诚度,连接速率…等更加详细的统计资料。因为后者都基于的是 javaScript 的脚本。

但 Awstats 的流量数据更加准确,因为所有请求都通过 HTTP 服务器,即使是一个小小的 gif 图片,还是一个微不足道的html页面,css,js … HTTP 的日志都会如实记录。

而基于 javaScript 的脚本的 Piwik 跟 Google Analysis, 就只能在你已经把该脚本插入到 <body> 里头的页面才在统计范围,也就是纯页面。所以你会发现,统计流量的话,基于这种方式的的结果会比 Awstats 少了许多。

所以,Awstats 跟他们这是基于2种不同原理的统计方式,各有各好处只能互补,不能替换。

Google Analytics 是提供基于 javaScript  这种统计方式也的第三方机构,同类型的机构也有很多。有的还会在你网页的底部多出一个logo,叫你相当不爽。

要使用 Google Analytics 你并不能简单做一个注册,申请就ok,由于Google Analytics收到大量注册申请,目前对新注册用户数量仍有所限制。需要先进行申请,提交用户姓名和E-mail,进行排队。不过,这个时间似乎并不太长,据某位站长所说,等待时间大概为半个月。(对于我来说有点呛)  而且它还是第三方的统计系统,你不会知道它会拿你的浏量去干什么… 当然,如果是用于改善增加 google 对你的收录数,这是好事。(有这么好吗?)

然而,有了 Piwik ,只要你有一个支持 PHP+Mysql 的环境,你就不需要排队,不需要把事情寄托于第三方。

Piwik 的安装方式超级简单,(比装个Discuz还要简单) ,特别一点的可能就是它要求PHP配置有 mysql_pdo 。

windows环境可以直接在 php.ini 中打开,而Linux环境如果没有的话就需要重新编译php了。

然而这都不是什么问题的话,几分钟你就能把 Piwik 建立起来了。

在安装向导中,会提示让你输入统计站点的域名,然后生成一段 javaScript   的代码用于插入在统计站点网页的 

<body> </body>  里头。

最终配置完成后,你就能在 Piwik 中刷新看到实时的数据。

 

Piwik 的使用很傻瓜化,首页的布局你可以像弄自己的blog 那样随意拖动,或者添加栏目(小工具)。

添加小工具,意思是把常用的图表都直接在首页上列出来。

统计图表基于flash,有动态的现实效果,还能随意切换,列表,柱形,饼型。



也能通过导航栏更加细致地阅读图表。

数据一应俱全,称得上追赶 Google Analytics 并非扯谈。

Piwik 支持多国语言, 所以你们才能看到以上的截图是中文显示。但它的页面显示有几个缺点。

首先是首页能像 blog 一样修改布局的功能,对浏览器的兼容比较差。IE7,IE8 会出现拖动错误的情况。

而Firefox 则相安无事。再就是界面体表显示虽好,但字体无法修改大小,整体看上去页面相当粗糙。

所以!就出现了开发者建立桌面应用(调用Web Serves API)来可视化Piwik数据统计,Desktop Web Analytics 和 Piwik Connector

这2个东西是基于AdobeAIR的应用。所以使用之前要先把该平台装上。然后程序才能运行。你可以在Desktop Web Analytics 的首页上在线一次过自动配置好,也能单一自己下载。按照提示经过简单的API连接配置,就能在本地,无需浏览器,获取到 Piwik 的数据跟漂亮的图表。

更重要一点,AdobeAIR 是跨平台的,所以 Piwik 的“客户端”不管在 Windows,Linux,Mac 都能完美地运行。

怎样,强大吧?!

腾讯云CDN开放音频视频云通讯及收费模式公布,支持5000人同时通话每人仅需26元

承载亿级QQ用户的音视频和即时通讯技术,数十年技术积累值得您的信赖,腾讯云将为您提供超乎寻常音视频和即时通讯聊天服务。

 

1、腾讯云CDN开放音频视频云通讯的优势:

1)一站式服务:只需APP植入SDK,即可获得音视频通讯和即时通讯能力。用户不必关注后端服务的运营部署,以极小的开发代价、低廉的运营成本享受与QQ一样的通讯质量。
2)跨平台通讯:支持音视频实时通讯;支持单聊、群聊,支持文本、图片、语音等即时通讯;支持Android、iOS、PC主流平台互通,跨终端全平台的服务。

3)云引擎Sharp系统:新一代音视频媒体传输、处理引擎,通过采用传输通道选路智能化,流控策略控制云端化,分布式混音等技术手段,为用户提供更优质的音视频通讯质量。
 
2、腾讯云CDN开放音频视频云通讯的音视频通讯能力
1)支持平台:支持Android、iOS、PC主流平台互通,跨终端全平台的服务

2)支持双人/多人音视频通讯:单次多人通话最高可支持万人接入;满足视频社交,互动直播,在线教育,远程医疗等多种应用场景

3)音频通讯:支持最高同时收取6路语音,支持窄带、宽带语音链接,保证高质量音频通讯

4)视频通讯:支持最高720P高清视频,云端流控策略优化,保证高质量视频通讯
 
3、腾讯云CDN开放音频视频云通讯计费模式

音视频通讯根据最高同时通话人数,按阶梯原则给予不同的价格差异。

计费公式:月实际使用费用 = 月最高同时通话人数 * 阶梯单价
  • 通话人数:1个接入音视频通讯的用户为1个通话人数
  • 月最高同时通话人数:月最高同时(双人通话人数/2+多人通话人数)
详细价目表
月最高同时通话人数 单价(元/月/通话人数) 费用(元)
X≦10 42 42*X
10<X≦100 39 39*X
100<X≦500 37 37*X
500<X≦1000 34 34*X
1000<X≦2000 31 31*X
2000<X≦5000 29 29*X
X>5000 26 26*X
示例:用户在1月15日开通音视频云通讯,1月15日~1月31日期间最高的同时通话人数为50则1月实际使用费用=50×39=1950

申请链接:http://www.qcloud.com/product/avcomm.html

携程网App网络性能优化案例分析

在4月23日~25日举行的QCon全球软件开发大会(北京站)上,携程网无线开发总监陈浩然给大家分享了《移动开发网络性能优化实践》,总结携程网在App网络性能优化方面的一些实践案例经验。在2014年接手携程网无线App的框架和基础研发工作之后,陈浩然面对的首要工作就是App客户端性能优化,尤其是网络服务性能,这是所有App优化工作的重中之重。

首先介绍一下携程App的网络服务架构。由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现。网络通讯属于基础&业务框架层中基础设施的一部分,为App提供统一的网络服务:

  • Native端的网络服务

Native模块是携程的核心业务模块(酒店、机票、火车票、攻略等),Native模块的网络服务主要通过TCP连接实现,而非常见的Restful HTTP API那种HTTP连接,只有少数轻量级服务使用HTTP接口作为补充。
    
TCP连接网络服务模块使用了长连接+短连接机制,即有一个长连接池保持一定数目长连接,用于减少每次服务额外的连接,服务完成后会将该连接Socket放回长连接池,继续保持连接状态(一段时间空闲后会被回收);短连接作为补充,每次服务完成后便会主动关闭连接。
    
TCP网络服务的Payload使用的是自定义的数据及序列化协议;HTTP服务的Payload比较简单,即常见的JSON数据格式。

  • Hybrid端的网络服务

Hybrid模块由于是在WebView中展示本地或者直连的H5页面,页面逻辑发起的网络服务都是通过系统WebView的HTTP请求实现的。少量业务场景(需要加密和支付等)以Hybrid桥接接口形式的Native TCP通道来完成网络服务。

下图是网络服务的部署架构图:

携程App所有网络服务,无论是TCP还是HTTP都会先连接到一个API
Gateway服务器。如果是TCP服务,会先连接上TCP Gateway,TCP
Gateway会负责将请求通过HTTP转发到后端的SOA服务接口。HTTP Gateway的原理与之类似。TCP Gateway和HTTP
Gateway的区别仅仅在客户端到服务端的连接方式不同而已。Gateway的作用除了业务请求还有流量控制和熔断。

要发现常见网络性能问题,先来看看一个网络服务做了哪些事情:

1.DNS Lookup

2.TCP Handshake

3.TLS Handshake

4.TCP/HTTP Request/Response

首先会是DNS解析,然后TCP连接握手,TLS连接握手(如果有的话),连接成功后再发送TCP或HTTP请求以及收
到响应。如果能够将这些过程逐一梳理并确保不会存在明显的性能问题,那么基本可以确保获得不错的网络性能。网络服务里有一个重要的性能标准,即
RTT(Round-Trip
Time),往返时延,它表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认)所间隔的时间。理想情况下可以假设
4G网络RTT为100ms,3G网络RTT为200ms,很容易就能计算出我们的App网络服务耗时的下限,当然还要加上服务器处理时间。

常见的网络性能问题有如下几种:

  • 问题一:DNS问题

DNS出问题的概率其实比大家感觉的要大,首先是DNS被劫持或者失效,2015年初业内比较知名的就有Apple内部
DNS问题导致App Store、iTunes
Connect账户无法登录;京东因为CDN域名付费问题导致服务停摆。携程在去年11月也遇到过DNS问题,主域名被国外服务商误列入黑名单,导致主站
和H5等所有站点无法访问,但是App客户端的Native服务都正常,原因后面介绍。

另一个常见问题就是DNS解析慢或者失败,例如国内中国运营商网络的DNS就很慢,一次DNS查询的耗时甚至都能赶上一次连接的耗时,尤其2G网络情况下,DNS解析失败是很常见的。因此如果直接使用DNS,对于首次网络服务请求耗时和整体服务成功率都有非常大的影响。

  • 问题二:TCP连接问题

DNS成功后拿到IP,便可以发起TCP连接。HTTP协议的网络层也是TCP连接,因此TCP连接的成功和耗时也成为
网络性能的一个因素。我们发现常见的问题有TCP端口被封(例如上海长宽对非HTTP常见端口80、8080、443的封锁),以及TCP连接超时时长问
题。端口被封,直接导致无法连接;连接超时时长过短,在低速网络上可能总是无法连接成果;连接超时过长,又有可能导致用户长时间等待,用户体验差。很多时
候尽快失败重新发起一次连接会很快,这也是移动网络带宽不稳定情况下的一个常见情况。

  • 问题三:Write/Read问题

DNS
Lookup和TCP连接成功后,就会开始发送Request,服务端处理后返回Response,如果是HTTP连接,业内大部分App是使用第三方
SDK或者系统提供的API来实现,那么只能设置些缓存策略和超时时间。iOS上的NSURLConnection超时时间在不同版本上还有不同的定义,
很多时候需要自己设置Timer来实现;如果是直接使用TCP连接实现网络服务,就要自己对读写超时时间负责,与网络连接超时时长参数类似,太小了在低速
网络很容易读写失败,太大了又可能影响用户体验,因此需要非常小心地处理。

我们还遇到另一类问题,某些酒店Wi-Fi对使用非80、8080和443等常见HTTP端口的服务进行了限制,即使发送Request是正常的,服务端能够正常收到,但是Response却被酒店网络proxy或防火墙拦截,客户端最终会等待读取超时。

移动网络和传统网络另一个很大的区别是Connection
Migration问题。定义一个Socket连接是四元组(客户端IP,客户端Port,服务端IP,服务端Port),当用户的网络在WIFI/4G
/3G/2G类型中切换时,其客户端IP会发生变化,如果此时正在进行网络服务通讯,那么Socket连接自身已经失效,最终也会导致网络服务失败。

  • 问题四:传输Payload过大

传的多就传的慢,如果没做过特别优化,传输Payload可能会比实际所需要的大很多,那么对于整体网络服务耗时影响非常大。

  • 问题五:复杂的国内外网络情况

国内运营商互联和海外访问国内带宽低传输慢的问题也令人难非常头疼。

看下携程App用户的网络类型分布:

 

Wi-Fi用户占比已超过60%,4G用户量正接近3G用户量,2G用户在逐步减少,用户的网络越来越好。4G/3G/2G网络的带宽和延迟差别很大,而带宽和延迟是网络性能的重要指标:

 

针对携程App用户的网络带宽和延迟,我们采样了海内外各8个城市的数据:

 

 

注意网络带宽和延迟并没有直接相关性,带宽高不意味着延迟低,延迟再低也不可能快过光速。从上图我们可以看到海内外带宽相差很大,但是延迟基本一致。

针对上面这些问题,在网络复杂环境和国内运营商互通状况无能为力的情况下,就针对性地逐一优化,以期达到目标:连得上、连得快、传输时间短。

  • 优化实践一:优化DNS解析和缓存

由于我们的App网络服务主要基于TCP连接,为了将DNS时间降至最低,我们内置了Server
IP列表,该列表可以在App启动服务中下发更新。App启动后的首次网络服务会从Server
IP列表中取一个IP地址进行TCP连接,同时DNS解析会并行进行,DNS成功后,会返回最适合用户网络的Server IP,那么这个Server
IP会被加入到Server IP列表中被优先使用。

Server IP列表是有权重机制的,DNS解析返回的IP很明显具有最高的权重,每次从Server
IP列表中取IP会取权重最高的IP。列表中IP权重也是动态更新的,根据连接或者服务的成功失败来动态调整,这样即使DNS解析失败,用户在使用一段时
间后也会选取到适合的Server IP。

  • 优化实践二:网络质量检测(根据网络质量来改变策略)

针对网络连接和读写操作的超时时间,我们提出了网络质量检测机制。目前做到的是根据用户是在2G/3G/4G/Wi-Fi的网络环境来设置不同的超时参数,以及网络服务的并发数量。2G/3G/4G网络环境对并发TCP连接的数量是有限制的(2G网络下运营商经常只能允许单个Host一个TCP连接),因此网络服务重要参数能够根据网络质量状况来动态设定对性能和体验都非常重要。 

不过目前携程App网络00质量检测的粒度还比较粗,我们正在做的优化就是能够测算到用户当前的网络RTT,根据RTT
值来设置参数,那会更加准确。Facebook App的做法是HTTP网络服务在HTTP
Response的Header中下发了预估的RTT值,客户端根据这个RTT值便能够设计不同的产品和服务策略。

  • 优化实践三:提供网络服务优先级和依赖机制

由于网络对并发TCP连接的限制,就需要能够控制不必要的网络服务数量,因此我们在通讯模块中加入了网络服务优先级和依
赖机制。发送一个网络服务,可以设置它的优先级,高优先级的服务优先使用长连接,
低优先级的就是用短连接。长连接由于是从长连接池中取到的TCP连接,因此节省了TCP连接时间。

网络服务依赖机制是指可以设置数个服务的依赖关系,即主从服务。假设一个App页面要发多个服务,主服务成功的情况下,才去发子服务,如果主服务失败了,自服务就无需再关心成功或者失败,会直接被取消。如果主服务成功了,那么子服务就会自动触发。

  • 优化实践四:提供网络服务重发机制

移动网络不稳定,如果一次网络服务失败,就立刻反馈给用户你失败了,体验并不友好。我们提供了网络服务重发机制,即当网
络服务在连接失败、写Request失败、读Response失败时自动重发服务;长连接失败时就用短连接来做重发补偿,短连接服务失败时当然还是用短连
接来补偿。这种机制增加了用户体验到的服务成功概率。

当然不是所有网络服务都可以重发,例如当下订单服务在读取Response失败时,就不能重发,因为下单请求可能已经到达服务器,此时重发服务可能会造成重复订单,所以我们添加了重发服务开关,业务段可以自行控制是否需要。

  • 优化实践五:减少数据传输量

我们优化了TCP服务Payload数据的格式和序列化/反序列化算法,从自定义格式转换到了Protocol
Buffer数据格式,效果非常明显。序列化/反序列算法也做了调整,如果大家使用JSON数据格式,选用一个高效的反序列化算法,针对真实业务数据进行
测试,收益明显。

图片格式优化在业界已有成熟的方案,例如Facebook使用的WebP图片格式,已经被国内众多App使用。

  • 优化实践六:优化海外网络性能

海外网络性能的优化手段主要是通过花钱,例如CDN加速,提高带宽,实现动静资源分离,对于App中的Hybrid模块优化效果非常明显。

经过上面的优化手段,携程App的网络性能从优化之初的V5.9版本到现在V6.4版本,服务成功率已经有了大幅提升,
核心服务成功率都在99%以上。注意这是客户端采集的服务成功率,即用户感知到的网络服务成功率,失败量中包含了客户端无网络和服务端的错误。网络服务平
均耗时下降了150-200ms。我们的目标是除2G网络外,核心业务的网络服务成功率都能够达到三个九。

数据格式优化的效果尤其明显,采用新的Protocol Buffer数据格式+Gzip压缩后的Payload大小降低了15%-45%。数据序列化耗时下降了80%-90%。

经历了这半年的网络性能优化,体会最深的就是Logging基础设施的重要性。如果我们没有完整端到端监控和统计的能
力,性能优化只能是盲人摸象。Logging基础设施需要包括客户端埋点采集、服务端T+0处理、后期分析、Portal展示、自动告警等多种功能,这也
不是单纯的客户端框架团队可以完成的,而需要公司多个部门合作完成。

携程基于Elastic Search开发了网络实时监控Portal,能够实时监控所有的网络服务,包括多种维度,可以跟踪到单个目标用户的所有网络请求信息。
用户的性能数据都被喷到Haddop和Hive大数据平台,我们可以轻松制定并分析网络性能KPI,例如服务成功率、服务耗时、连接成功率和连接耗时等,
我们做到了在时间、网络类型、城市、长短连接、服务号等多纬度的分析。下图是我们的网络性能KPI
Portal,可以查看任一服务的成功率,服务耗时、操作系统、版本等各种信息,对于某个服务的性能分析非常有用。

最后看看业界网络性能优化的新技术方向,目前最有潜力的是Google推出的SPDY和QUIC协议。

SPDY
成为HTTP/2.0
Draft,有希望成为未来HTTP协议的新标准。HTTP/2.0提供了很多诱人的特性(多路复用、请求优先级、支持服务端推送、压缩HTTP
Header、强制SSL传输、对服务端程序透明等)。国内很多App包括美团、淘宝、支付宝都已经在尝试使用SPDY协议,Twitter的性能测试表
明可以降低30%的网络延迟,携程也做了性能测试,由于和TCP性能差距不明显,暂未在生产上使用。

QUIC
基于UDP实现的新网络协议,由于TCP协议实现已经内置在操作系统和路由器内核中,Google无法直接改进TCP,因此基于无连接的UDP协议来设计
全新协议可以获得很多好处。首先能够大幅减少连接时间,QUIC可以在发送数据前只需要0 RTT时间,而传统TCP/TLS连接至少需要1-3
RTT时间才能完成连接(即使采用Fast-Open TCP或TLS Snapshot);其次可以解决TCP Head-of-Line
Blocking问题,通常前一个TCP
Packet发送成功前会拥塞后面的Packet发送,而QUIC可以避免这样的问题;QUIC也有更好的移动网络环境下拥塞控制算法;新的连接方式也大
幅减少了Connectiont Migration问题的影响。

随着这些新协议的逐渐成熟,相信未来能够进一步提高移动端的网络服务性能,值得大家保持关注。

德国、英国、法国、比利时、澳大利亚、韩国、美国等海外著名电商

德国、英国、法国、比利时、澳大利亚、韩国、美国等海外著名电商,其中部分境外电商已经支持中文,支付也支持支付宝及银联支付,中国市场太大了!

好多海外电商,TLC Pharmacy中文站、BFSO日用百货商城、Bodyguard Apotheke中文站、PharmacyOnline中文站、美迪惠尔中文官网、Hollandboutique中文站、1001pharmacies中文站、WNC保健品专营店中文站、Melissa & Doug玩具店、Farmaline在线药房、百年香氛蜡烛世家、UKA优卡有机生活馆、EM居家百货、HCP品质生活馆

国家 商户简称 商户名称 境外海淘商家介绍 是否中文 支付
英国 TLC TLC Pharmacy中文站 TLC
Pharmacy Group由药剂师James Semple和Brendan
Semple联合创立,是苏格兰最具规模的药店连锁集团.旗下拥有多家隶属于英国国家医疗服务系统NHS的专业连锁药店,也是苏格兰最大的医学美容产品供应商。
支持中文 支付宝
银联
德国 BA Bodyguard
Apotheke中文站
Bodyguard
Apotheke 是德国连锁药房Einhorn Apotheke 的线上药房,德国国家认证,是德国最大的连锁药房之一.Einhorn Apotheke
由Kraus家族创办经营,已有百年历史。
支持中文 支付宝
银联
澳洲 PO PharmacyOnline中文站 Pharmacy
Online是一家家喻户晓的澳洲最大的药品保健品和营养品电商之一,总部位于澳大利亚新南威尔士洲,,客户 遍布世界各地四十多个国家。
支持中文 支付宝
银联
韩国 Mediheal 美迪惠尔中文官网 L&P
Cosmetic的面膜和护肤产品是由众多专业皮肤科医生共同研制创新,能够适合不同肌肤所需.L&P
Cosmetic推崇家用美学概念,足不出户,即能为大家缔造梦中的美肌。
支持中文 支付宝
银联
荷兰 HB Hollandboutique中文站 Holland
Boutique是荷兰最专业的母婴精品在线生活商城.有着最专业的团队对荷兰本土品牌进行实地调研、严格审查,并建立与品牌供应商的紧密合作,精心从中挑选最优质的母婴生活精品。
支持中文 支付宝
银联
法国 1001 1001pharmacies中文站 法国1001pharmacies倡导简单自然的生活理念,宗旨是向大家提供来自法国和欧洲的绿色环保的药妆,美容,生活,保健类的品牌和产品.让越来越多的消费者,享受高质量的产品和先进的电子商务技术所带来的美好的生活。 支持中文 支付宝
银联
美国 WNC WNC保健品专营店中文站 历史悠久的国家权威营养品药店
Willner
Chemists成立于1911年,从一个老式的社区药店转变成为美国权威的国家级营养保健品专营店.早在1970年,Willner自主研发了一系列营养补充剂,并且迅速成为广大内科医师指定维生素补充剂,销售广泛。
支持中文 支付宝
银联
美国 Melissa
& Doug
Melissa & Doug玩具店 美国品质玩具店
Melissa &
Doug是畅销欧美25年全世界最大的木制玩具公司,美国第一木制玩具品牌.纽约玩具帝国“FOA施瓦兹”、梅西连锁百货(MACY’S)、英国“哈洛德百货”(Harrods)等公司均有专柜展示!
不支持中文
比利时 FL Farmaline在线药房 比利时规模最大的电商
Farmaline在线药房由比利时注册药剂师Leen
Ponet博士创建,获得比利时药品和保健品监督局承认,是比利时规模最大的电商.其实体药房成立至今已超过50年的历史,专注于提供优良的产品和服务。
不支持中文
英国 SC百年香薰蜡烛世家 百年香氛蜡烛世家 Shearer
Candles由Shearer先生和Harvey先生创立于1897年,是英国历史最为悠久的蜡烛厂商,如今是全球蜡烛制造业内的时尚设计引领者.
不支持中文
英国 BFSO BFSO日用百货商城 BFSO是Manoj
Raja先生及其合伙人在英国Stafford创建的在线日用百货商店,有超过30年的零售及服务经验,是最受英国侨民欢迎的电商之一,同时是驻海外英国军队的供应商之一。
支持中文 支付宝
银联
德国 UKA UKA优卡有机生活馆 1990年东西德统一后,前东德区首次被批准创办私人企业.药剂师Wolf
Dietrich Spiegel即在格雷芬海尼兴创办了第一家药房.2004年德国首次授权网上药房销售资格,2005年即开通网上药房。
不支持中文
德国 EM EM居家百货 德国Top3的网上居家商城,Erwin
Müller是一家具有60余年历史的德国公司,力求以最优的产品价格与质量,为万千家庭缔造温馨和谐的家庭氛围.旗下拥有Baby Butt,Kinder
Butt等在欧洲极具知名度的子品牌。
不支持中文
德国 HCP HCP品质生活馆 HCP由Wulf
Dieter
Freude于1997年在德国汉诺威创立,拥有三家实体药店和一家位于法兰克福南部的保健品批发中心,不仅有自有品牌Nutrimexx运动营养食品,还在德国有多个独家品牌代理。
不支持中文

Google 发布Cloud BigTable兼容HBase接口,性能秒杀其它NoSQL

问题导读

1.Google Cloud BigTable使用场景有哪些?
2.Cloud Bigtable是否支持SQL查询、连接和多行事务?
3.Cloud BigTable性能比HBase和Cassandra高出上百倍,你是怎么认为的?

Google今天(2015年5月6日)美国时间凌晨发布了云数据库Google Cloud BigTable,基于Google几乎所有最大应用使用已超过十年的王牌技术BigTable(这一点说明了Google后续开发的Megastore和Spanner并没有大幅取代BigTable,而是互补使用的),支持BigQuery和Hadoop(2.4以上版本),但又可以通过业界标准的HBase API(支持1.0)里访问(但仍然有一些差异,细节请参考文档)。
Cloud BigTable最令人瞩目的是其性能,官方博客用了unmatched(无双、无与伦比)这样高调的字眼。它的读写延迟都是毫秒级的,与HBase和Cassandra读延迟好几百相比的确是秒杀,写延迟比Cassandra也好一倍以上。

对这个测试有疑问的同学,HN上的相关讨论可以参考。
相比之下,BigTable的价格似乎并不太具有优势。每小时每结点的价格是0.65美元,每集群最低要3个结点,这样每个月最低也要0.65 x 3 x 24 x 30 = 1404美元,这还没算网络和存储成本。而AWS的DynamoDB每月最低是5美元。当然,客观说,DynamoDB直接的对应的是Google的另一项云服务DataStore(起始使用免费)。
Google Cloud BigTable野心不小,它明确说针对的应用场景包括金融(交易历史、股价、汇率)、广告营销(购买历史和用户行为)、能源/物联网(电表和家电数据)、生物医药和电信等行业的大数据分析,包括时间序列数据。标杆案例也是金融软件巨头SunGuard的一个审计原型系统,每秒能处理250万条交易信息。
其他案例还包括:
Pythian将时间序列数据库OpenTSDB与Cloud Bigtable集成,开发了一个监控平台;
开源空间数控GeoMesa的贡献者CCRi通过与Cloud Bigtable集成,提供了实时空间分析平台;
IoT方案商Telit Wireless Solutions借助Cloud Bigtable大大提升了数据处理能力;
Qubit(也是由前Google员工创办的公司)已经将数P数据迁移到Cloud BigTable上。

根据文档,它的适合场景是:
单索引的、稀疏表,可以扩展到数亿行、数千列,存储T级甚至P级数据量。低于1TB就不要考虑了。
非常适合存储低延迟的海量单键数据。
是MapReduce运算的理想数据源。
Cloud Bigtable不是关系数据库,也不支持SQL查询、连接和多行事务。与Google云服务上其他存储方案的选型文档说得很清楚,翻译如下:
如果需要OLTP系统的完整SQL支持,考虑Google Cloud SQL。
如果需要OLAP系统的交互查询,考虑Google BigQuery。
如果需要存储大于10MB的不变blob,例如大的图片和视频,考虑Google Cloud Storage。
如果需要存储高度结构化对象,或者要支持ACID事务和类SQL查询,考虑Cloud Datastore。

参考链接
Google Cloud BigTable的文档:https://cloud.google.com/bigtable/docs/
Google官方已经在StackOverflow上开了标签:http://stackoverflow.com/tags/google-cloud-bigtable/
Hacker News上的讨论:https://news.ycombinator.com/item?id=9497060
官方开源客户端:https://github.com/GoogleCloudPlatform/cloud-bigtable-client

 

【天敏讲坛】关于DNS服务器影响网络在线播放的流畅性问题解决方案

导读

DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

现在 DNS一般有路由器的设置完成,在智能网络机顶盒通过DHCP拿到 IP地址后,DNS地址就就自动分配下来了。

路由器的厂家很多,在DNS的处理上也是各有不通过,具体这里无法一一说清楚,这里小编指出,如果你遇到以下问题,可以排查一下你的智能网络机顶盒是否拿到了正确的DNS地址。

1情况1

进入直播电视,切换频道很慢,(正常情况,电视盒子的电视直播很多台,切换1s左右)长达5、6秒,甚至更长,但是最后能够播放,一旦播放了,又很流畅。多数频道存在 这个问题的时候,可能就是路由器分配的DNS地址不对。

原因解析:每次切换频道的时候,比如是sohu的播放源,glsb.tv.sohu.com/****xx, 切台开始的时候,需要将域名解析成 IP,DNS服务器的好与坏,这个解析时间可长可短。

2情况2

进入首页后,某个站点的电影海报页面,翻页的时候图片下载很慢,10个图片需要很久才出来,但是播放开始后,无论是高清、超清都很流畅。

原因分析:可能也是DNS地址解析 过慢导致。

3情况3

部分站点播放卡顿, 但是 部分站点的 超清、高清都很流畅,这个问题情况很复杂,不能断定说是DNS的问题。

这里可能和DNS有关系的话,是因为很多站点的视频播放都采用了负载均衡技术和就近选取服务器的策略,那么有一部分站点,他就是依赖各地 的DNS来决定,用哪个服务器去响应你的点播请求。所以你用的DNS不是当地电信或联通的DNS的话,可能出现的情况。

a)明明你是电信的网络,结果响应你的是联通的服务器;

b)明明你在广东,结果响应你的,可能不是离你最近的服务器,可能跑到北方,或者某个角落的服务器

全能解决办法:检查路由器分配的DNS是否可以用,可以更换114.114.114.114、223.6.6.6、8.8.8.8等opendns