小测aryaka服务

aryaka是一家做互联网加速的互联网公司。我们大猫同学想要用他们的加速服务来进行互联网服务。

到底要多快呢,大猫同学设想的是中国到美国在100ms以内。这个有可能吗?

通过公开的资料,中国到到美国有2条海底光缆: 分别为TPE和CUCN,其中TPE全长17700KM, CUCN是36800KM。

参考资料:

http://en.wikipedia.org/wiki/TPE_(cable_system)

http://en.wikipedia.org/wiki/CUCN_(cable_system)

同时我们知道,tcp通讯基本都是全双工进行的,所以RTT都是是2倍的物理距离。 同时物理原理告诉我们,光速每秒是30万公里/小时。由此我们就可以计算中国到美国最快可以到多久之内完成呢。

17700(TPE)/300000(光速) * 2 = 118ms

由此可知要实现中美之间80ms以内传输是完全不行的,除非你认为塞班和关岛也算美国本土。

因此我在测试之前我就知道这个要求是根本无法实现的。 但是为了想看看aryaka的一个服务,于是还是稍微测试了一下,并用tcpdump做了记录。

要使用aryaka的服务必须先跟对方的pop点进行连接,连接了这个pop点后就可以直接通过aryaka内部的路由到达我们洛杉矶的AWS服务器上。

但是连接了之后发现,ping的延迟还是在200ms左右,于是问了aryaka的工作人员,他们说他们对tcp的连接做了加速,于是就用tcp进行测试,发现连接真的很快啊,几ms就已经建立完成了,可实际要传输数据的时候还是在200ms左右。

tcpdump

而从tcpdump里的数据可以看到,实际的IP并不是我发起方的一个IP,而是他们在美国的一个POP点的IP。 于是我基本可以推测出来,所谓的tcp层连接快其实是一个假象。

推测出来的结果来就是:

1. aryaka内部网络是始终保持连接的。

2. 你一旦连接了aryaka的一个pop点后,这个pop点会立刻进行返回,并告诉你连接已完成,对对端也是pop点跟对端之间连接完成就认为是连接完成。

3. 实际数据传输的时候还是走的aryaka的内部网络,这个说实话还是很快的,从北京去往洛杉矶下载可以在450KB/s, 而不走他们的网络是70KB/s。

4. 断开连接同样也是跟pop点断开就认为是全部断开了

不过测试下来感觉aryaka比较适合对于传送数据要求稳定的要求比较好,毕竟比直接介入MPLS会节省很多费用啊。不过我也没有问过aryaka的价格结算方式。


法国旅行前记

法国旅行前记

现在欧洲国家不景气,所以都希望吸引中国人过去,但是他们又害怕你留在那里打黑工。

说如何办理吧,有了上次签西班牙的过程,这次就方便多了。法国旅游签证貌似中智都代理了,中智这中介费挣的,所以还能在芳草地这样的地方租了一层,这都是广大百姓的钱啊。 而且现在法国签证48小时就出结果了,基本3天就可以到你手上了。

首先登录 https://cn.tlscontact.com/cnBJS2fr/login.php?l=zh_CN 进行注册和预约。

需要准备的材料都大同小异,可老婆大人就怕不过,所以弄了一堆。

2寸照片2张,但是最后又给回了一张,实际就用了一张,为了这个某些人还花了35元照了个像。
公司准假证明,网上有现成的模板,就是注意要公司盖章和人事签字。
护照和复印件
户口本和复印件
资产证明:银行流水,定期存款,房本等等,反正让他们相信你不稀罕在那打工就成。
往返机票订单
住宿酒店订单
行程单
其他参照网站说明吧。
然后就填写《短期申根签证申请表》和《短期申根签证申请补充问题》

接着就提前90天预约就行了。

到了芳草地,这地真不错,以前还真不知道东大桥附近还有这么高大上的地方呢。排队,提交材料,付钱,打印发票,走人,要不了一个小时的。
签证费500多,中介费200多,真你妈够黑的。
3天后就拿到签证了,真快,比以前那个啥啥啥国家快多了。

拿到签证才是自助游的第一步呢,后面定酒店,火车,住宿,租车,拼团,参观哪些景点,这些都让球球去弄吧,我负责付款就成。

飞机票: 看来看去还是kuxun上比较便宜,老东家qunar自从收编那些小破网站后明显涨价了。

住宿: 闲booking上太贵的话就上airbnb上订吧,booking是各种旅馆和宾馆,airbnb是民宿(基本就1-2个房间的)。booking上所谓的旅馆也就是大一点的民宿而已。

买火车票: 你总不能就在巴黎待着啊。直接上欧铁中文网站买的那是有钱人。自由行的就上下面2个上买吧。
https://www.idtgv.com/en/reserver
http://www.sncf.com/en/passengers

哦,说一句很多人都说付不了款,记得把自己信用卡开通3D验证。上次用了兴业的没有问题,就是货币转换费收的我肉疼,所以这次直接中行全币种卡,没有货币转换费,付款都没有问题的。

在巴黎基本坐地铁就行了,下面这个就是英文版巴黎地铁查询,貌似比天朝的要高大上很多啊。只是这个没有跟google map整合起来,导致没法在google进行搜索。
http://www.ratp.fr/plan-interactif/carteidf.php?lang=uk

法国南部就基本是靠火车是自驾了,看了很多qyer的分享公交车还是不靠谱啊。 看来今年车本必须出啊,不然以后怎么去德国和美国以及澳洲啊。

###########################################

Best regards
Timo Seven
Linux System Admin & MySQL DBA

小内存vps上wordpress优化

wordpress网站优化

由于图便宜,买了一个就128M内存的vps。所以非常关注性能的问题。

性能主要是2点,php和mysql的部分。

mysql的部分网上很多都有所有说到了,不启动innodb,限制binlog cache, 限制sort buffer等等。具体可以参见如下

[mysql]
no-auto-rehash

[mysqld]
user = mysql
port = 3306
open_files_limit = 600
back_log = 20
max_connections = 100
max_connect_errors = 200
table_cache = 60
external-locking = FALSE
max_allowed_packet = 16M
sort_buffer_size = 128K
join_buffer_size = 128K
thread_cache_size = 10
thread_concurrency = 8
query_cache_size = 0M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default_table_type = MyISAM
thread_stack = 192K
transaction_isolation = READ-UNCOMMITTED
tmp_table_size = 512K
max_heap_table_size = 32M
long_query_time = 1
log_long_format
server-id = 1
binlog_cache_size = 2M
max_binlog_cache_size = 4M
max_binlog_size = 512M
expire_logs_days = 7
key_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 2M
myisam_sort_buffer_size = 4M
myisam_max_sort_file_size = 10G
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
skip-innodb

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

php的部分。
使用fastcgi, 前端使用nginx来进行fastcgi代理。 fastcgi使用的php-fpm。

使用php-fpm要特别注意如下设置:

; Choose how the process manager will control the number of child processes.
; Possible Values:
; static – a fixed number (pm.max_children) of child processes;
; dynamic – the number of child processes are set dynamically based on the
; following directives:
; pm.max_children – the maximum number of children that can
; be alive at the same time.
; pm.start_servers – the number of children created on startup.
; pm.min_spare_servers – the minimum number of children in ‘idle’
; state (waiting to process). If the number
; of ‘idle’ processes is less than this
; number then some children will be created.
; pm.max_spare_servers – the maximum number of children in ‘idle’
; state (waiting to process). If the number
; of ‘idle’ processes is greater than this
; number then some children will be killed.
; Note: This value is mandatory.
pm = dynamic

; The number of child processes to be created when pm is set to ‘static’ and the
; maximum number of child processes to be created when pm is set to ‘dynamic’.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI.
; Note: Used when pm is set to either ‘static’ or ‘dynamic’
; Note: This value is mandatory.
pm.max_children = 50

; The number of child processes created on startup.
; Note: Used only when pm is set to ‘dynamic’
; Default Value: min_spare_servers + (max_spare_servers – min_spare_servers) / 2
pm.start_servers = 2

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to ‘dynamic’
; Note: Mandatory when pm is set to ‘dynamic’
pm.min_spare_servers = 1

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to ‘dynamic’
; Note: Mandatory when pm is set to ‘dynamic’
pm.max_spare_servers = 2

不然我的小内存vps很快就会挂的。

listen的部分使用sock的方式,毕竟都是本机,而且sock的速度要比tcp要来的快的多。

listen = /var/run/phpfpm.sock

以上就是php的部分。

下面是nginx的部分

开启fastcgi cache

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 64k;
fastcgi_temp_file_write_size 64k;
fastcgi_cache_path /opt/server/nginx/fastcgi_cache_dir levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=1g;

fastcgi_cache cache_fastcgi;
fastcgi_cache_valid 200 302 301 1h;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_key $request_method://$host$request_uri;

静态文件过期时间

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
}

gzip压缩
由于这个vps不光内存少,1个月的带宽也少,那能减少传输就减少一点。

gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/xml text/css application/x-javascript;

wordpress本身的优化

使用wp-super-cache插件,这个插件可以把动态的php转换成静态的html代码,这样减少了很多fastcgi的压力,其实这个是最根本的解决方法。而且这些html又被缓存到了nginx中,这样访问的速度就会非常非常的快了。

###########################################

Best regards
Timo Seven
Linux System Admin & MySQL DBA

track服务优化之二HTTP

首先我们要了解track服务的特征。

一般互联网广告公司的代码都是嵌入在客户网站中的部分页面,而这些代码的体积也不会很大,因此针对这个特征我们就需要进行对应的http server的优化。

keepalive: 在很多教程中都是推荐开启keepalive,这样可以复用连接,但是在track的http server中还是建议关闭吧,毕竟很多用户连接你的服务器很长时间内只会一次的,你开启了keepalive就会造成很多的无效连接。

TCP_NODELAY: 由于track代码一般都比较小,经常只有几百个字节,而默认tcp会开启nagle算法,这个算法是鼓励发送全尺寸的的数据段,而我们的track代码可能无法填充满一个分组,于是导致等待的延时。有时候会有100ms到200ms的延时。 如果你的track代码大于1500个字节的话,那也可以开启这个算法。

Connection header: 在http的头部中有个connection的部分, 由于一般track代码只运行一次,运行完成我们就需要尽快关闭连接,所以在connection头部返回的时候我们直接变成 Connection: close以此来尽快关闭连接。

增加缓存时间: 由于很多track code不会经常经常进行更改,所以为了避免每次都下载,可以增加相应的过期时间。

开启sendfile: 这个就现在http server基本都是默认开启的。原因就是省去在内核空间和用户空间进行切换了。

这篇文章写的有点干巴巴,没啥营养,基本上都是一些nginx http server的设置吧。 下一篇关于tcp部分的要好好写了。也算是看完tcp/ip详解卷一的一个总结吧。

track服务优化

track服务优化之一 : DNS和域名

在互联网广告公司里,有一些服务是用作跟踪用户的,而这些代码嵌入的不多,qps也不高,然后文件大小也比较小,对于这样的应用我们如何进行优化呢。

我们http请求第一步开始说起。

大部分的http请求都是通过dns来进行的,这样dns解析的速度也关系到整个访问的速度。 下图中我们可以很明显的看到,这个请求最大的2个部分就是dns和内容下载。

14142519581_cde92247c1_z.jpg

我们知道DNS的缓存时间都由DNS设置TTL时间来决定的(除了部分local dns做强制缓存),而当一个域名在local dns中没有缓存时,local dns就会以迭代的方式去查询这个域名的解析。比如我们通过trace来模拟一个本地没有缓存的迭代过程。

下面是我们解析www.sohu.com的一个例子。 我们可以看到这里,首先是找到根域名的服务器,然后找到所有.com域名的根服务器,然后找到sohu.com域名的根服务器,然后解析了www.sohu.com, 而由于www.sohu.com做了一次cname,所以要进行解析,最终得到对应的IP地址。

而这个过程中,我们发现实际去dns.sohu.com的时间才52ms,而他去到根域名服务器和.com根域的解析时间加起来要452ms,而这个时间都是算在整个请求的时间内的。

14142949292_3223302e28_z.jpg

从上可以看到加快DNS解析速度的重要性,而在local dns中缓存是重重之重。而这个第一步就是统一域名,发现国内某些广告商居然用好多域名来进行跟踪。而google却只用了一个单独域名来进行。

下图是我直接访问这家广告公司的跟踪域名,可以看到光dns解析的时间就903ms,这个还是他们使用了dnspod的服务器的情况下。
14142949232_ddcb4b2a20_c.jpg

而他们的很多广告都使用了不同的域名,不过经过查询是应该用了泛域名解析。但是实际dns请求的时候还是会有延迟啊,local dns可不管是不是泛域名呢。 而这家广告商的这些域名指向最终都是同一个IP,那为什么不用单个域名呢?
14165904063_24dcd230ba_z.jpg

而我们看google ga,所有的ga使用的域名都是同一个。这样从dns层面减少了响应的时间。
14142519561_8ec892a088_c.jpg

从上面我们得到,使用单一域名在dns层面的好处是比较大的。

加快DNS解析速度的另外一个因素就是TTL时间。这个从解析速度来看自然是越大越好,比如很多根域名服务器都是缓存1周的,但是我们看到大量的还是缓存1个小时的。毕竟时间放太长,一旦网络出了问题都没办法切换。所以有些请求量很大的域名的ttl时间都是120秒左右的,就是怕万一有问题来不及切换。

这个就没有绝对的要求,全看各自的dns服务器的分布和性能了。


tttest

test for share

2014年计划

一年之计在于春,就列一下今年的个人计划吧。

学习开车,没办法了,必须学了,在海淀驾校还是东方时尚之间选择呢。

锻炼身体: 身体太重要了,没有这个啥都干不成啊,先继续100个俯卧撑计划。至于去游泳,现在工作实在是太忙,而且稍微有点远,所以没法保证每周3次啊,等调整好了再报名参加。每周三次,平均每次成本在15元左右,这个还是可以接受的。

法国旅行: 也土炮一次上一个热门国家,这个计划就让我们家球球做了,但是之前的学习工作还是要做的。 看完林达的《带一本书去巴黎》,简略过一下LP的内容。旅行的意义不就是了解这个国家的文化和历史来的吗?

学习完成<head first python>, 并写完整和之后的运维管理系统,主要是资产管理,监控报警,服务台内容,初始化系统和密码管理这5项内容吧。 这个东西外面看了很多,可惜没有适合自己实际情况的。虽然很不想重复造轮子,可实在是被逼的。

加关注

每发布一篇新博文的同时向您的邮箱发送备份。

Join 204 other followers