入坑CDN
文章平均质量分 58
入坑CDN过程中的点点滴滴
lotluck
我会成为你的眼睛,为你看清未来
展开
-
Python实现伪源站服务器
学习python是因为当时学习的C语言实现一个东西太难了,做一个图形界面又丑又难看,而且还很难写。python高度封装,简洁,第三方库也超多,像列表这种东西用起来真是太爽了,对于字符串简直无所不能,所以还是那句话人生苦短,我用python。当时对语言的性能并没有太多的认知,写代码大多也就一两百行的样子,内存、CPU都是可以随意挥霍的东西。python的性能还是比不上C语言,但是开发速度还是很可以的,大家都说一种很折中的go语言,开发速度与执行效率介于python和C语言之间,以后有时间在学校吧。通过看源码w原创 2015-05-09 09:57:08 · 2130 阅读 · 0 评论 -
使用iostat分析IO性能
对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。1.不加选项执行iostat我们先来看直接执行iostat的输出结果:转载 2015-06-02 22:20:48 · 2598 阅读 · 0 评论 -
利用pstack 和 strace分析程序在哪里耗时?
目前测试了nws服务器代码中的while(!stop){...}死循环,发现while循环一次有的线程需要100ms左右,这个时间就有点长了。于是利用如下linux的ps、pstack和strace对程序进行了分析。 ps -aux | grep nws 可以看出nws的pid为171211 pstack 171211 打印出nws进程下所有的线程栈信息。可以看出程序好几个线程都卡在pwrite这一步。strace -o output.txt -T -tt -e trace=all -原创 2017-09-12 13:23:58 · 12197 阅读 · 2 评论 -
利用伪B站做测试的时候遇到304的一点小问题
用户先请求nws服务器,如果本地可以命中,nws直接返回文件给用户; 如果本地没有命中,nws回源向伪B站请求文件,就是简单的cdn的思路。Created with Raphaël 2.1.0用户nws服务器 伪B站作为一个做cdn的,用户永远之上。 用户要求怎么做,我们就怎么来。 基于这样的想法,我在测试nws是否可以正确的吐出伪B站给数据, 就算伪B站给nws的数据是错误的,不符合常规,nws也原创 2017-09-28 11:32:27 · 616 阅读 · 0 评论 -
将进程绑定到特定的cpu - taskset命令
在测试斗地主程序的时候,发现单核cpu的运行时间总比多核cpu运行时间块,用taskset命令一看,果然是一个进程运行在两个cpu上。 Score of team 1 is : -1154 Score of team 2 is : 148 Score of team 3 is : 1006 real 4m12.768s user 0m12.307s sy...原创 2017-10-12 09:57:03 · 2492 阅读 · 0 评论 -
GCC在C语言中内嵌汇编 asm __volatile__
在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。1、简单的内嵌汇编例:__asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volatile__"表示编译器不要优化代码,后面的指令 保留原样,"volatile"是它的别名。括号转载 2017-10-24 09:46:19 · 596 阅读 · 0 评论 -
新增加的HTTP状态码 -- 103
IETF公布了新的HTTP状态码-103, 总结一下就是提前预加载(css、js)文档,提升用户的访问速度。Summary: a new status code that lets the server send headers early, before the main headers. This helps with optimisations like preloading. Example原创 2017-11-08 16:21:10 · 4438 阅读 · 0 评论 -
内嵌汇编 - cmpxchgl 指令学习笔记
一、背景又是关于汇编,头真是大,当年欠吴旭老师的汇编终究还是要还的。 在看nws源码的时候,里面有这样一段代码static __inline__ unsigned long atomic_cmp_set(volatile void *ptr, unsigned long old, unsigned long set){ unsigned l原创 2017-12-13 16:35:14 · 4895 阅读 · 0 评论 -
linux pmap
pmap查看某个进程的内存使用情况最核心就是最后一句: mapped:23344Kwriteable/private:1280Kshared:4K\color{red}{mapped: 23344K writeable/private: 1280K shared: 4K}mapped表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz\col原创 2018-01-17 11:29:24 · 443 阅读 · 0 评论 -
清理cache sync && drop_caches
问题描述在linux上用iostat观察磁盘的时候,发现sda周期性的出现毛刺最后调查原因发现是因为cache的原因,linux会集中写入sda,导致毛刺\color{red}{因为cache的原因,linux 会集中写入sda,导致毛刺}解决办法周期性的执行下面两个命令,让日志不集中写入sda就可以,时间自己把握[root@ying ]# sync[root@ying原创 2018-01-17 16:54:37 · 1433 阅读 · 0 评论 -
[CDN 技术] HTTP参数中Etag的重要性
Etag在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件后面添加一个唯一的参数(相当于查询参数字符串),Etag有服务器端生成,并且随着文件的改变而改变,这样浏览器端就会只重新请求获取 Etag发生变化的文件,减少浏览器端数据的流量,加快浏览器的反应速度,重要的是减轻服务器端的压力,所以服务器端Etag的实现就比较重要了.现在我们有个问题为什么要使用Etag呢?Etag主要为了解决Last-Modified无法解决的一些问题.他能比Last_转载 2017-11-04 20:18:21 · 2429 阅读 · 0 评论 -
HTTP中的Range: bytes=0-
HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传。Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的表示第二个500字节:bytes=500-999表示最后500个字节:bytes=-500表示500字节以后的范围:bytes=500-第一个和最后一个字节:bytes=0-0,-1同时指定几个范围:byt原创 2017-11-09 10:13:07 · 10622 阅读 · 0 评论 -
Transfer-Encoding 和Content-Encoding
Transfer-Encoding: chunked分块编码,对应Content-Length计算实体长度。 有的时候服务器发送的数据并没有具体的长度,这是时候就需要chunked分块编码 Content-Encoding:gzip 内容编码, 很多网站都使用了gzip压缩,这样使传输的数据量减少了3/4,但是一般图片不建议压缩,因为图片都是压缩过的Content-Encoding 和 Trans原创 2017-12-26 21:28:20 · 2169 阅读 · 0 评论