2018年10月

由于项目需要,我们建立了某日本插画网站的全站作品和图片数据库。
利用php-phash为每张图片生成了唯一的标识码,通过计算汉明距离进行匹配。
那么有了这些数据之后,就应该开始搭建图片搜索引擎了。

数据量

  • 作品数:3700万左右
  • 空间:1.9TB
  • 数据库:MongoDB 4.0.3

前端

  • pixiv.FUN RiseFront - 可通过Redis缓存搜索结果,组织搜索队列
  • NGINX - 反向代理RiseFront

后端

  • Pifrise - 全称为pixiv.FUN Reverse Image Search Engine

    • 通过连接MongoDB初始化数据,以及作品信息
    • 接口为HTTP协议
    • 只支持全部搜索
    • Java
  • AoiHammer - 开源的汉明距离搜索引擎,通过本地文件初始化数据

    • 接口为TCP ANSI协议
    • 支持摘要搜索和全部搜索
    • C++

性能

  • Pifrise

    • i5-2300 3600w 900ms
    • E5645 x2 3650w 490ms
    • Mem: 6GB
  • AoiHammer

    • F i5-2300 3600w 100~200ms
    • S i5-2300 3600w 500ms
    • Mem: 8GB

iTXTech Rpf

是一个为 SimpleFramework 2.1swoole 4.2 设计的可扩展的反向代理框架

几行代码就能完成一个可用的反向代理

require_once "load_env.php";

use iTXTech\SimpleFramework\Console\Logger;
use iTXTech\Rpf\{Handler, Launcher};
use Swoole\Http\{Request, Response};
use Swoole\Coroutine\Http\Client;

Logger::info("Constructing");
$launcher = (new Launcher())
    ->listen("127.0.0.1", 80)
    ->handler(new class() extends Handler{
        public function ssl(bool $ssl){
            $this->ssl = true;
        }

        public function request(Request $request){
            Logger::info("Got request from " . $request->server["remote_addr"] . " to " .
                $request->header["host"] . $request->server["request_uri"]);
        }

        public function complete(Request $request, Response $response, string $body){
            Logger::info("Got response from " . $request->header["host"] . $request->server["request_uri"] .
                " len: " . strlen($body));
        }

        public function response(Request $request, Response $response, Client $client){
            $response->header["X-Powered-By"] = "iTXTech Rpf";
            $client->body .= "\n<!-- Powered by iTXTech Rpf --!>";
        }
    });

Loader::load($launcher);

开源协议

Copyright (C) 2018 iTX Technologies

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Introduction

Bypass TLS reset (based on Server Name Indication detection) of GFW on iOS.
Details for the GFW's new feature

RESEARCH ONLY PROJECT

Roadmap

  1. Find a web framework to implement a Reverse Proxy (Kitura or Perfect)
  2. Test on macOS first
  3. Integrate with OpenSSL for self-signed certificate
  4. Build an iOS app
  5. Use Network Extension to setup a VPNService in order to intercept packets with a TUNInterface
  6. Maybe NEKit will be used to modify packets for redirection

Notes

  1. This project will be my first Swift/Objective-C project.
  2. All these technologies has been tested on Android (Using Undertow or Nginx)
  3. Contributions are welcomed. See my GitHub homepage.

Records

写在前面

垃圾王的一次亏本捡垃圾(运费120)

先占坑

本机最高支持到X5670(95W TDP),然而现在只有X5677了,推迟测试

周老板给的 C6100 终于到手了,那我不批判一番岂不是很不给面子?

写在前面

第一次魔改出了点意外,找了个有问题的电源,改好电源插口之后上电无法触发,无奈只能再找了一个电源魔改。
本次魔改并没有采用DPS-400AB-12B(因为那个接口本来就少)
建议找500W以上电源带双路CPU
计划有机会把E5645换成X5675

Dell C6100 Mod

  • 魔改电源 - 基于台达 DPS-400AB-12B(金牌400W,应该够)

    • 店家魔改的电源配置
    • ATX 24+4pin
    • CPU 8pin * 2
    • 大4pin * 2 (风扇都是那种连环插的,最后插4p转SATA,完美 :)
    • 从双CPU供电各引一路12V
    • 5VSB就不魔改成12VSB了,反正问题不大
    • 总电源 - 插线板开关
    • 电源直接短接开机脚,主板再按开机键(不知道行不行呢)
  • 魔改USB

    • 后端只有两个USB,肯定不够用是吧
    • 主板上还有USB*2,直接焊接连线出来,魔改一个机箱前面板的USB上去
    • 供电计划直接从电源引出解决供电不足(可以先放放)
  • 魔改散热

    • 两个12cm扇子接电源12V搞定(吹CPU大散热片)
    • 一个3cm扇子也直接12V(吹南北桥,估计还得从其他主板拆个散热片)
  • 魔改机箱

    • 捡垃圾不需要机箱,鞋架 + 木板 + 螺丝搞定
  • 终极魔改

    • 设计单片机接管开机,散热控制(今年是没空了)

预计实际配置

  • 主板:Dell C6100
  • CPU:Xeon E5645 * 2(有一个少了一个电容,不过我觉得问题不大,不行就补一个试试)
  • 实在不行刷一波 BIOS 上 X5677 * 2 (至少周老板认为刷BIOS就行了,我还没试)查了一下,好像直接支持130w的CPU
  • 内存:SK Hynix DDR3 REG ECC 1333 4G * 6
  • 显卡:先板载,没想好 可能HD5450吧,几乎所有刀卡都坏了 :( 板载
  • 固态:宇瞻 120G(不知道可不可靠)
  • 机械:希捷 SV35 2TB(05:1352,C5:0) 只用来跑计算,用不上
  • 电源:台达 DPS-400AB-12B 半岛铁盒 N600(emmmmmmmm,懂我意思吧)

功耗估算

配件 名称 数量(pcs) 功耗(w)
主板 C6100 1 20
CPU E5645(TDP 90w) 2 220
内存 SK Hynix 4G 6 20
显卡 HD5450/GTX650 1 70
固态 120G 1 10
机械 SV35 2TB 1 20
合计     290
  • 以上功耗为满载(也是按大的来估算的,显卡都是不带独立供电的那种)
  • PCI-E 限制输出为 75w,所以按70w计算 不装显卡了


正片开始

电源

  • 紫色到第五条黄线接CPU 8pin的 4x12V
  • 第六条到第九条接ATX 24pin的 2x12V(1接2)
  • 后面的黑线(接地),随便接,都一样

外观

  • 先这样把,架子慢慢搞

跑分

  • CPU-Z 看看就好
  • 毕竟睿频才2.67GHz,满载80w

系统

  • 现在使用的是 Ubuntu Server 18.04.1 LTS

其他

  1. 其实本来想上一个显卡,结果试了 HD5450/GTX650 都还是集成输出,而且BIOS里面Video Enumeration已经修改成Add-in Cards
  2. 编译php 7.2.11超快的(make -j 24
  3. 因为没有改12VSB,没有开关机信号的,所以电源直接把PS_ON和一路COM焊死了
  4. 开机状态,HDD读写,电源键,PS_ON信号其实都在主板尾部的Front Panel那个接口上面,然而懒得改了
  5. 已启动 NUMA numactl --interleave=0 xxxxxx