Giter Club home page Giter Club logo

7oxcloud's Introduction

7OxCloud

基于推荐系统的高性能分布式Web短视频应用

🎶在线演示:http://152.136.156.247

由于阿里短信的限制,这里我们提供演示账号:

手机号:17383836194
密码:test123456

由于演示服务器配置的限制,推荐系统相关代码并未部署到服务器上。

程序运行说明

后端

本项目建议在linux系统下运行。首先需要保证系统上有golang环境:

#克隆仓库
git clone https://github.com/Crazy-Young/7OxCloud.git

#安装依赖
go mod tidy

第三方依赖:

  • MySQL
  • Redis
  • Consul
  • Nacos
  • RabbitMQ
  • Docker
  • Nginx
  • 七牛云对象存储
  • 阿里云短信服务
  • ......

建议使用docker来安装和部署相应依赖,教程可见:

https://blog.csdn.net/m0_63230155/article/details/134090405?spm=1001.2014.3001.5501

后端混合使用vipernacos进行配置管理。需要分别编写api网关和微服务部分的config.yaml,这个config.yaml用于加载nacos的配置,例如:

host: '127.0.0.1'
port: 8848
namespace: '6a11f263-64a0-4ca5-8b69-1259cd14dc87'
user: 'nacos'
password: 'nacos'
dataId: '7OxCloud-Api.json'
group: 'dev'

然后编写网关部分的nacos配置:

{
    "api": {
        "name": "7OxCloud-Api",
        "host": "10.252.79.1",
        "tags": ["7OxCloud","Api"]
    },
    "service": {
        "user": "UserService",
        "video": "VideoService",
        "interaction": "InteractionService",
        "social": "SocialService"
    },
    "jwt": {
        "signingKey": "7OxCloudByPalp1tate",
        "expiration": 60
    },
    "sms": {
        "accessKeyId": "",
        "accessKeySecret": "",
        "signName": "",
        "templateCode": ""
    },
    "redis": {
        "host": "127.0.0.1",
        "port": 6379,
        "database": 0,
        "expiration": 120
    },
    "consul": {
        "host": "127.0.0.1",
        "port": 8500
    },
    "qiniuyun": {
        "accessKey": "",
        "secretKey": "",
        "bucket": "",
        "domain": ""
    }
}

由于使用的是分布式微服务架构,并引入了分布式配置中心,配置较为复杂,上述的两个操作只演示了网关部分,微服务部分的操作类似,在此不做赘述。

安装好相应的依赖并配置好后,只需要简单的命令即可启动项目:

#进入项目根目录
cd 7OxCloud

#提高脚本执行权限
sudo chmod 777 run.sh

#执行脚本
./run.sh

注意到该脚本也会自动启动nginx,确保其已经部署完成。

通过上述的操作,用户微服务、视频微服务、社交微服务、互动微服务、定时任务、两个api网关(nginx做反向代理)均会启动。当然每个微服务,网关可以同时开启多个,来提高整个系统的并发量。

前端

运行本项目需安装node,无node环境无法运行开发环境。如需安装node,请在官网安装稳定版,官网链接:Node.js (nodejs.org)

运行项目node版本须在 v16.0+。

开发环境

若需要运行开发环境,请在项目根目录下打开命令行使用以下指令,运行成功后项目运行在本地8080端口:

# 切换到web目录
$ cd ./web
# 安装依赖 也可以使用 npm i
$ npm install
# 运行项目
$ npm run serve

如需配置本地代理地址为本地网址,只需修改vue.config.jsproxy/api配置的target为本地后端服务地址即可。

如需配置生产环境地址,可修改.env.production文件中的VUE_APP_API_BASE_URL,此时打包文件请求接口基地址均为设定后端服务地址。

生产环境

生产环境请直接运行dist文件夹下的内容,也可以直接双击打开index.html文件(不推荐)。

请在项目根目录下使用以下指令(如使用指令时遇到选择,请选择 y ):

# 切换到web目录
$ cd ./web/dist
# 若有node环境,可执行:
$ npx serve
# 若有python环境,可执行:
$ python -m http.server

推荐系统

推荐系统部分基于2022年WWW(CCF A)顶会的Paper "Filter-enhanced MLP is All You Need for Sequential Recommendation"。本项目推荐系统代码部分为仓库主目录下的FMLP-RecSys文件夹

Requirements

请提前下载安装python环境,具体见Download Python | Python.org

项目需要的依赖及库已经形成于FMLP-RecSys/requirements.txt文件中,运行以下代码即可:

pip install -r FMLP-RecSys/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  • Install Python, Pytorch(>=1.8).
  • 如果你准备使用 GPU 计算,请安装 CUDA,并结合CUDA版本安装对应适配的Pytorch及相关库.具体可参考Pytorch官网:Start Locally | PyTorch

Usage

推荐系统部分被设计成一个服务端,用来与后端系统进行信息交互。因此在确保上述依赖和环境安装好的基础上,直接运行下述代码即可:

#如果想将该系统挂为后台应用,请参考使用linux screen命令
screen -S fmlp
screen -r fmlp

#注意运行server.py的主目录需要为FMLP-RecSys,否则可能会出现一些相对路径的问题
#切换到算法部分代码主目录
cd FMLP-RecSys

#将本机运行为服务端,请结合后端代码修改对应的监听端口
python server.py  

项目中main.py文件用于使用最新接受的数据来训练模型并生成模型文件,test.py文件用于根据后端发送过来的用户ID调用之前最新的模型以计算该用户最匹配的20个视频ID(为了方式与历史交互记录中的视频重合以及出现视频ID没有在任何人的交互记录中见过的情况,项目推荐结果生成之后会做一些筛选,因此总视频数可能会少于20)

后端系统会定期发送最新的交互记录记录(video-log.csv)并请求模型训练,代码将使用FMLP模型进行训练并保存本地模型文件;后端如若发送用户ID,代码将自动调用test.py文件的测试模型的接口进行该用户的top20匹配视频的推荐。

  • 如果本地没有最新的模型文件,推荐将变为随机推荐。
  • 用于训练的交互记录里(主要针对第一次训练),总视频ID总类需大于20,否则将会无法训练,继续使用随机推荐。
  • 模型会自动筛掉用于训练的交互记录中交互数量小于3条的用户,因为模型至少需要分割成train、valid、test集才可进行训练,但模型会保存用户交互记录至本地的data/video-log-sorted-mapped.json文件,该文件将持续更新。
  • 模型如果收到一个新用户的ID,将随机使用一位已记录过的其他用户的历史交互记录进行初始推荐,后续模型会根据该用户之后的交互进行更个性化更准确的推荐。

Parameter

注意:需保证main.py和test.py中的模型参数一致!!

下述例举一些比较重要、影响模型较大的超参,可以根据个人需求和硬件情况进行个性化的更改:

  • hidden_size:hidden size of model
  • num_hidden_layers:number of filter-enhanced blocks
  • max_seq_length:用于训练使用最长历史交互序列长度
  • epochs:训练轮数
  • batch_size:训练的batch大小
  • hidden_size: hidden size of model,模型使用的向量的大小。

7oxcloud's People

Contributors

palp1tate avatar tugitee avatar jaamiezheng avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.