我正在尝试使用
构建视频上传,查看和分享网站软件:
后端数据库MySQL 5.7.19
HTTP服务器:Apache 2.4.27
服务器硬件信息:
Window 2012 server 至强处理器32 GB RAM
240 GB Intel 730 Series SSD
4 SAMSUNG 850 PRO 2.5" SSD 1TB(总计4TB)
Memcached 1.45 for caching
BACKEND': 'django.core.cache.backends.memcached.MemcachedCache
我担心性能和可扩展性。
我想分享我的方法,请纠正我如果我错了,或者你可以建议我更好的方式。
我已经在Django.contrib.auth.model>>用户上拥有默认用户数据库 并将使用相同的用户信息上传,喜欢,观看和与视频的其他互动
01。创建Model.py(这是示例)
from django.db import models
from django.contrib.auth.models import User
class Channel(models.Model):
name = models.CharField(max_length=100)
subscribers = models.ManyToManyField(User, related_name='+', blank=True)
creation_time = models.DateTimeField(auto_now_add=True)
modified_time = models.DateTimeField(auto_now=True)
class Subscription(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='+')
channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
notifications = models.BooleanField(default=True)
class Playlist(models.Model):
name = models.CharField(max_length=100)
video = models.ManyToManyField('Video')
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Category(models.Model):
name = models.CharField(max_length=100)
class ChannelSettings(models.Model):
channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
verified = models.BooleanField(default=False)
02创建View.py
渲染Html模板框架。 如视频查看页面,频道页面,播放列表页面,历史页面,搜索页面 我不会使用Django模板标签来填充任何信息。
03创建api.py
使用django rest框架创建Rest API 有了这个,我将得到并提供视频信息,元数据,喜欢,观点和其他更新。
04 JavaScript
通过Ajax读取信息并动态呈现页面。 例如,获取监视历史记录列表并使用缩略图进行渲染。在HTML页面中等。
请建议我使用视频上传进度,自动缩略图创建和重要视频压缩来构建视频上传页面的最佳方式。
有关我的视频上传网站的一般信息:
截至目前的近似视频:5000+(平均时间30分钟)
用户:400 +
原始视频尺寸 - 4K,2K和最小1280 * 720
这种方法对于性能和规模是否足够好?
答案 0 :(得分:5)
以下是一些建议:
我宁愿选择像Ubuntu这样的Linux服务器。
播放列表有多个视频,所以我想你错过了那里。 (您使用ForeignKey而不是ManyToMany)
当谈到像4K这样的高质量流媒体视频时,你应该专注于你将用来提供文件的服务器。我的意思是建立一个网站,只显示一些包含播放器的内容,这些视频不会成为您最难的问题,文件服务器将是因为它是最困难部分的文件服务器。
我建议你做一些处理文件的后台任务。比如将它们移动到另一台服务器(或直接将视频上传到另一台服务器),如果你需要像youtube那样创建一个视频文件的多个分辨率,你需要另一台服务器来做这件事,并需要一堆代码来处理它你。
我建议你写两个连接到一个数据库的不同项目(或者你可以在你的主项目上创建一个API),其中一个用来处理用户的东西并为你渲染网站,另一个处理文件。
我认为nginx是文件服务器的理想选择。
制定一些限制,以便用户/机器人无法同时上传过多视频。那可能会导致重负荷。
建立一个队列来处理工作,不要一次完成这些工作,或者只是在他们上传后,等待合适的时间来处理文件,这样你就不会让你的服务器崩溃(s )在重载时间。
如果您有预算,可以使用jwPlayer。
我会选择PostgreSQL而不是MySQL。它也被django建议,你有一些在MySQL上无法使用的功能。
如果您正在考虑扩展,可以考虑这些建议。但是你提到的数字可以用更少的数量来实现。基本上这些数字并不大,所以它并不难处理。
如果有人想到后者,我会写更多。