zoukankan      html  css  js  c++  java
  • 课程交流网站项目架构

    课程交流网站项目架构

    课程交流网站项目最终赶在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解析。

  • 相关阅读:
    初识数据库
    局域网和广域网
    面试题汇总
    SSO单点登录解决方案
    接口加密问题
    幂等性问题
    消息队列的消费失败、重复消费问题
    Redis集群搭建
    HashCode详解
    HashMap的底层原理
  • 原文地址:https://www.cnblogs.com/lymmurrain/p/14507723.html
Copyright © 2011-2022 走看看