这个blog最初就是拿来试手做的, 以前的贴文我说过这个,就是想看看正经做一个站而不是采集垃圾站会怎么样。中间有过几次波折,比如域名选取不当而被迫中途改域名。现在时间够久了,可以回顾性发言了。

首先blog的内容,从搜索引擎角度来说应该都是优质内容,因为是全部原创的,而且文字多,关键字集中,内容角度应该算一个非常优质的网站。不过外链比较少,毕竟这年头想不花钱不大会有人给你外链。 近大半年下来,蜘蛛仍然只保持非常低的爬取频率,说明一件事,外链的重要性还是超过了内容本身的。
另外一个影响因素是,页面过少。页面过少的两大问题,一是搜索引擎觉得你的站点内容少价值不大,另外就是,就算给高权重也不会有多大流量。

以上两点决定了,这个站注定是失败的。

下面贴一下google/bing的统计图。
先说结论:
一、google的流量相对bing少了很多。这点符合预期,因为墙的原因,google价值远低于Bing。
二、bing上有展示数和点击数,可以看出,展示与点击的比率是非常高的,表明内容确实是优质受欢迎的。在webmaster工具里也看以看到,好几个关键词都是排第一,大多数关键词都是排前3,然而如此少的点击和展示表明两件事,一是关键词本身就没人有兴趣,因为这个站主要是主机内容偏多过于小众,另外就是,页面实在太少。

问题已经是很清楚明确的,不过也是无法解决的,要想优质就不可能有大量内容,想要大量内容就只能是垃圾采集。
一句话,做站已死,有事烧纸。

google.jpg

bing.jpg

这几天折腾typecho中,当然,免不了折腾些小工具,昨晚花了一个晚上捣鼓几行代码,晕得很,不过总算成了。
它的功能是找到评论页里的csrf token,然后提交一个请求,懂的自然懂,用处不解释了。

                import "github.com/dop251/goja"
....
		tokenRe := regexp.MustCompile(`input\.value[\s\S]*?\(\);\s*`)
		tokenScriptMatch := tokenRe.FindStringSubmatch(string(commentBody))

		var token string
		var formData url.Values
		if len(tokenScriptMatch) > 0 {
			js := tokenScriptMatch[0][14:]
			token = executeJS(js)
			fmt.Println("Found token:", token)
			formData = url.Values{
				"author": {author},
				"mail":   {mail},
				"url":    {postURL},
				"text":   {text},
				"_":      {token},
			}
		} else {
			fmt.Println("No token found in the comment page.")
			formData = url.Values{
				"author": {author},
				"mail":   {mail},
				"url":    {postURL},
				"text":   {text},
			}
		}

....

func executeJS(jsCode string) string {
	vm := goja.New()
	val, err := vm.RunString(jsCode)
	if err != nil {
		fmt.Println("Error executing JavaScript:", err)
		return ""
	}
	return val.String()
}

用久了typecho,觉得还蛮轻巧好使,我喜欢轻量及极简(寒碜)风格。不过,功能确实也简陋了。
目前已经发现的更改需求:

  • 首页需要把分类标签做在导航条上。
  • 首页仅显示指定的分类的文章,其余分类在自己的分类标签下才能看到。
  • 最近文章,需要根据分类来,就是只显示当前分类的最近文章而不是全部。
  • 资源使用相对路径,方便更换域名和套cdn。

差不多都完成了。再继续找痛点继续改,把它改完善些,到时候我再贴出来代码。
当然,这样一改就是和官方版完全绝缘了,不过官方也不指望他的更新了。

gpt越来越忘事,花了一上午调教,终于调好了。
心得是,在每一个修改要求后都唠叨一下:

给我完整代码! 在修改时,请严格保持yaml的字段名等你不允许擅自修改,同时我没让你改的代码严禁你改。

至于代码干啥,先卖关子了,毕竟还在继续改,只贴一下yaml文件,基本就能猜到了:

http_port: "880"  # HTTP 监听端口
https_port: "8443" # HTTPS 监听端口
backend: "http://1.2.3.4"  # 后端服务的完整 URL,包含协议、端口和路径
cert_file: "./cert"    # HTTPS 证书文件
key_file: "./key"      # HTTPS 密钥文件

replaces:                              # 替换规则
  "fnc2o": "www"
  "foobar": "barfoo"

host: "www.domain.com"  # Host header for backend requests

max_requests: 4  # 每分钟最大请求次数
max_404s: 3         # 针对一个 IP 的最大 404 返回次数
unblock_time: 10         # 解封时间,单位为秒

省流,先说二条结论:
小鸡IO跑分并不可靠。
LXC未必比KVM性能好(越垃圾的IO越如此)。

前几天博文有KS-1跑分,HDD,4*2T,RAID10,我再贴一下:

---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 1.27 MB/s      (318) | 18.04 MB/s     (281)
Write      | 1.30 MB/s      (327) | 18.66 MB/s     (291)
Total      | 2.58 MB/s      (645) | 36.70 MB/s     (572)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 80.67 MB/s     (157) | 82.15 MB/s      (80)
Write      | 84.95 MB/s     (165) | 87.62 MB/s      (85)
Total      | 165.63 MB/s    (322) | 169.78 MB/s    (165)

可以看到,4K是相当的慢,这也是HDD的常态。
那么,这台机器开一个小鸡再跑一下分呢:

---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 294.61 MB/s  (73.6k) | 1.76 GB/s    (27.5k)
Write      | 295.38 MB/s  (73.8k) | 1.77 GB/s    (27.6k)
Total      | 589.99 MB/s (147.4k) | 3.53 GB/s    (55.2k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 2.96 GB/s     (5.7k) | 2.95 GB/s     (2.8k)
Write      | 3.11 GB/s     (6.0k) | 3.15 GB/s     (3.0k)
Total      | 6.07 GB/s    (11.8k) | 6.10 GB/s     (5.9k)

看到看到没,起飞啦起飞啦! 这已经是很不错的NVME的水平!

为什么会这样呢? 因为小鸡的磁盘是启用的write-back(unsafe)模式。简单的说,就是尽可能的母鸡缓存IO。内存够空的话,读写磁盘近乎等于读写内存。能不快吗?

结论1就是这样得出的。
结论2得出理由是,lxc是直接主机的io,不能设置write-back(unsafe)模式。主机的通常缓存不大,毕竟要考虑数据安全。一旦开始刷盘,那性能就嘎嘎往下掉了。