课程交流网站项目架构

课程交流网站项目架构

课程交流网站项目最终赶在3月初部署成功。

其功能主要提供一个平台交流,分享课程评价及学习资料。

附有自用开发的智慧树刷课,网课答题助手,百度文库文本提取,漫画模块,都可免费使用。

如果你是暨大的,甚至还有抢课助手自动抢课。

网址课程交流网站

基础设施

所含基础设施:

  • 腾讯云香港服务器
  • 两台广州轻量云服务器
  • 腾讯云COS存储
  • 腾讯云短信服务
  • 域名 campusutopia.cn

项目架构图

服务解析

前端

网站前端页面分两种:

  • 前台页面应用传统服务器渲染,由django处理返回html。
  • 后台页面应用Vue作前后端分离,html文件由香港服务器返回,其余静态文件由广州返回。后端由django(drf)处理返回json数据。

域名campusutopia.cn解析到香港服务器(不用备案),所有html页面都由香港服务器返回,而所有api接口都直接指向广州服务器ip:81。

前端页面都使用了Vue及Element-ui组件。只不过服务器渲染方式中Vue充当JQ的角色,而前后端分离方式中Vue充当前端渲染的角色。

后端

香港服务器负责返回html,无论是nginx静态文件返回还是django处理模板后返回,都是html文件。

html文件中所引用的其他静态文件以及api接口,都指向广州服务器ip:81。

Docker

所有的服务都由docker-compose部署。

只不过香港使用docker-compose up 单机部署,广州两台服务器使用docker stack集群部署。

Nginx

nginx负责静态文件的返回以及对uwsgi的socket转发,负载均衡。

uwsgi+Django

Web服务器采用uwsgi,nginx将相应请求通过socket转发至uwsgi,uwsgi调用django完成业务逻辑处理后返回给nginx而后nginx返回给请求方。

香港服务器的django是原生django,采用处理请求,服务端渲染html返回的方式。

广州服务器的django加上了drf模块,采用restful形式标准设计,处理请求后返回json数据的方式。

spider

全站爬取某个漫画网站,采用scrapy-redis模块完成分布式爬取。利用redis存储请求队列,以及利用bloom filter去重。item存入mongo。docker swarm的管理节点利用crontap每天定时开启服务完成全站增量爬取。

MySQL

主要的数据存储采用mysql,并只有一个实例放在广州服务器。香港的web服务也是调用香港的mysql,但只做读操作。

Redis
  1. 作为api服务的cache
  2. 存储spider服务的请求队列。利用bloom filter去重spider服务上传的请求。
ES

提供建议以及全文搜索服务。

其数据来自mysql或者mongo,文档id与源数据库的主键一致。

mongo

存储漫画数据

腾讯云COS及短信服务

腾讯云COS存储文章中的图片以及每个课程的学习资料,短信服务用作注册或登录的验证。

认证方式JWT

认证方式采用JWT。

由于前端服务,api服务不同域名(甚至于api服务没有域名),token选择存储在campusutopia网站的localStorage中。请求时作为header的Authorization的值传至django解析。

原文地址:https://www.cnblogs.com/lymmurrain/p/14507723.html