分类 iTXTech 下的文章

由于项目需要,我们建立了某日本插画网站的全站作品和图片数据库。
利用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.

SimpleFramework

SimpleFramework 是一款高效,轻量级,易扩展的 php cli 程序框架。
实际上只是一个过家家的玩具

2.0.1版本中已有特性

  • 能够自动解析依赖的模块(Module)下载并启用 - 然而其实没几个
  • 彩色终端和命令支持
  • 异步任务(AsyncTask)和多线程(需要 pthreads)支持
  • 网络和配置文件工具
  • 全面支持 php 7.2
  • 可以配合swoole实现网络应用的快速开发,尽管没有实现MVC架构

2.1.0 将带来的新特性

  • 优化 Curl 工具类上传文件
  • 支持单脚本在不从SimpleFramework启动的情况下使用其所有API
  • 独立的 模块管理器(ModuleManager) - 意味着可以自己管理模块加载了
  • 优化异步回调,支持自定义 - 不再与Framework绑定
  • 优化AsyncPool API,支持自行调度AsyncTask的分配
  • 支持检查模块(Module)所需的扩展(extension)

简单来说,进一步降低了耦合

吹了那么多,那么什么时候才能发布呢?

我也不知道

这些特性什么时候可用呢?

已经全部可用了,直接clone就行了

iTXTech Daedalus 1.12.0 将带来以下更新

  • 更多 DNS 协议支持

    • DNS over TLS
    • DNS over HTTPS (IETF 草案)
    • DNS over HTTPS (Google JSON格式)
  • 优化 Android O 的体验

    • 规则下载改用 OkHttp3
    • 修复无法发送通知
  • 更新 DNS 服务器提供者列表

    • 下线 FunDNS(受到监管部门警告)
    • 下线 AIXYZ DNS(实际已不可用)

加入讨论!(TG)

现已正式上线