Django如何实现分布式(2023年最新分享)

导读:很多朋友问到关于Django如何实现分布式的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

[Django] celery的替代品 funboost

Django开发web应用的过程中,一个老大难问题是异步调度问题。例如用户传来一个非常耗时的请求,这时候最好的处理方式是先把这个操作请求记录下来,先响应请求,等后面有空的时候再去计算,而不是让用户干等着着急。

这种优化方式就是典型的生产者+消息队列+消费者设计模式,而Django框架本身并没有直接提供该设计模式的实现,大多教程都是利用第三方组件celery+redis来实现这个调度。

遗憾的是celery和redis官方都不支持windows,而我习惯的开发环境还是win10,所以需要找一个替代品。经过调研,发现了一个很好的【python分布式函数调度框架——funboost】. 它的优点很多,对Django开发来说,最大的亮点是完全无需启动第三方服务,即可实现生产消费设计模式。一个 pip install funboost 即可干活,开箱即用。它可以使用SQLite文件来做消息队列,足以应对小型应用开发。当然也可以使用Kafka这种高级的消息中间件,实现高可用。

要说缺点吧,这个组件的日志打印太啰嗦,而且没有提供关闭选项,控制台已被它刷屏。

Django如何实现分布式(2023年最新分享)  第1张

如何在阿里云上部署django

前提条件

1. 为 Python 应用程序安装 virtualenv 和 virtualenv wrapper,目的在于为 Python 项目创建独立的环境。

● 安装 pip

sudo apt-get install python-pip

● 安装 virtualenv

sudo pip install virtualenv

● 创建目录以存储您的 virtualenv

mkdir ~/.virtualenvs

● 安装 virtualenwrapper

sudo pip install virtualenvwrapper

● 将 WORKON_HOME 设置为您的 virtualenv 目录

导出 WORKON_HOME=~/.virtualenvs

● 将 WORKON_HOME 设置为您的 virtualenv 目录

导出 WORKON_HOME=~/.virtualenvs

● 将 virtualenvwrapper.sh 添加到 .bashrc

将此行添加到 ~/.bashrc 的末尾,以便加载 virtualenvwrapper 命令。/usr/local/bin/virtualenvwrapper.sh

退出,然后重新打开您的 shell,或者使用 .bashrc or source ~/.bashrc 命令重新加载 .bashrc,然后一切准备就绪。

2. 安装 git。

apt-get install git

3. 安装 Nginx 作为 Web 服务器,这样您便可在其之后运行您的应用程序。

Sudo apt-get install nginx

启动您的第一个 Linux 实例

接下来向您介绍使用阿里云管理控制台运行 ECS 实例的相关步骤。

1. 登录到您的帐户,然后导航到“产品与服务”部分下的“云服务器”。单击侧边栏菜单中的概览。这会显示运行中的实例列表。单击购买实例从任意地域购买实例,或者继续到下一步创建新实例。

2. 单击侧边栏菜单中的实例。在实例列表中选择所需地域,然后单击右上方栏中的创建实例。

3. 系统会将您重新定向到“产品购买”控制台,在此您需要选择偏好的资源包 - 对 ECS 实例和数据传输提供特殊定价的初级资源包或提供两种定价模式的高级购买资源包。您可以根据自身需求选择订阅(按月或按年)或者按量付费。此案例中,我们选择了“按量付费”。

4. 在此窗口中,选择要在其中启动 ECS 实例的数据中心地域和可用性区域。如果选择了地域但未选择可用性区域,系统会将实例随机放在任何区域。

5. 现在您需要选择自己想要创建的实例类型。根据自身需求,从“生成”选项卡中选择生成实例类型。生成类型根据配置和所用的计算能力表示不同的实例类型。

6. 接下来,选择网络类型以启动您的 ECS 实例。可根据自身需求选择经典网络或专有网络。在经典网络中,阿里云以分布式方式分配 IP 地址。它适合于需要简单快速地使用 ECS 的用户。专有网络更多的是一种逻辑隔离私有网络,它支持专用连接。它适合于熟悉网络管理的用户。选择适当的网络类型后,选择网络计费类型:数据传输或固定带宽。在这两种情况下,您都需要设置网络带宽峰值(最大数据传输速率)。

7. 现在,您需要选择操作系统。每个选项下都提供了不同操作系统版本的列表。选择 Ubuntu。

8. 根据自身需要,从下拉菜单中选择系统磁盘类型。您还可以通过单击“添加磁盘”向此列表添加更多磁盘。

9. 在“安全设置”部分中,您可以创建密码以提高安全性,或者在此阶段跳过此步骤并稍后从管理控制台执行此操作。

10. 在“采购计划”部分中,键入您的实例名称并设置要启动的实例的数量。

11. 在“概览”部分查看配置详情和总价,然后单击立即购买。

12. 单击开通确认业务订单并启动实例。

13. 启动实例后,您可以在控制台的实例选项卡中查看该实例。

安装和部署 Django 应用程序

您已使用阿里云管理控制台创建和启动 ECS 实例,接下来让我们了解如何安装和部署 Django 应用程序。

1. 使用 ssh 命令登录到您的服务器

2. 输入密码

3. 通过创建一个新的 virtualenv 为部署 Django 应用程序设置环境:

mkvirtualenv DjangoApp

要退出新的 virtualenv,请使用 deactivate。

您可以使用 workon 在环境之间切换。要加载或在 virtualenv 之间切换,请使用 workon 命令:workon DjangoApp

4. 在您的当前环境中安装 Django

pip install Django

5. 使用 django-admin 命令创建样本项目并将目录更改为项目文件夹。

django-admin startproject todoApp

cd todoApp/

6. 迁移或引导您的数据库。

python manage.py migrate

7. 创建超级用户以访问管理面板。

python manage.py createsuperuser

8. 设置用户后,通过运行由 manage.py 操作的 runserver 命令测试您的应用程序

python manage.py runserver 0.0.0.0:8000

您将看到以下内容在端口 8000 上运行

转至 /admin,这是您的管理面板,您可在此管理应用程序。

现在使用 Nginx 将您的应用程序置于 Web 服务器之后。

9. 创建数据库架构 开通 python 环境。

● 将目录更改为 Django 项目目录

● 运行以下命令

python manage.py migrate

10. 收集所有静态文件(css、js 等)

● 运行以下命令以在任意特定位置收集所有静态文件

Python manage.py collectstatic --noinput

● 开发人员负责将 STATIC_URL 路径设置为将收集所有静态文件的位置。

● 这些变量在项目目录内的 setting.py 中定义。

1. STATIC_URL

2. STATICFILES_DIRS

3. STATIC_ROOT

11. 使用 uwsgi 服务器安装 uwsgi 库并启动服务器。

pip install uWSGI

● 创建用于部署 Django 应用程序的 ini 文件vim uwsgi.ini

● 将其保存到应用程序目录上的 uwsgi.ini。如需进一步了解如何编写 ini 文件,请参阅 Python/WSGI 应用程序快速入门。运行此命令以启动您的应用程序。

uwsgi uwsgi.ini (您的 ini 文件)

12. 更改 nginx 配置文件以用于应用程序。

server   {       listen 80 default_server;         listen [::]:80 default_server ipv6only=on;         server_name localhost;  location /static/   {         include uwsgi_params;         alias /root/todoApp/public/;  }  location  /    {        include uwsgi_params;        uwsgi_pass unix:/tmp/uwsgi.sock;     } }

13. 重启 nginx,随后您的应用程序将启动并在端口 80 上的 nginx 之后运行。

django实现实时消息推送有什么好的方案

django实现实时消息推送,数据库数据一有变化就实时反应在页面上用作系统实时监控。 在一个HTTP访问周期里,如果要执行一个长时间任务,为了避免浏览器等待,后台必须使用异步动作。

与此同时也要满足实时需求,用户提交了任务后可以随时去访问任务详情页面,在这里用户能够实时地看到任务的执行进度。针对异步任务处理,使用了Celery把任务放到后台执行。

Celery 是一个基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,关于它的使用方法《网易乐得RDS设计》也有提到。Celery在处理一个任务的时候,会把这个任务的进度记录在数据库中。

消息推送直接找专业的平台,例如极光。深圳市和讯华谷信息技术有限公司(极光 Aurora Mobile,纳斯达克股票代码:JG)成立于2011年,是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。

Django配置Celery执行异步和同步任务(tasks))

celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度。采用典型的生产者-消费者模型,主要由三部分组成:

比如系统上线前后台批量导入历史数据,发送短信、发送邮件等耗时的任务

1.安装RabbitMQ,这里我们使用RabbitMQ作为broker,安装完成后默认启动了,也不需要其他任何配置

Ubuntu linux安装

CentOS Linux 安装

苹果mac 安装需要配置

配置环境变量 (苹果用户)

启动rabbitmq-server

2.安装celery

3.celery用在django项目中,django项目目录结构(简化)如下

4.创建 oa/celery.py 主文件

5.在 oa/__init__.py 文件中增加如下内容,确保django启动的时候这个app能够被加载到

6.各应用创建tasks.py文件,这里为 users/tasks.py

7.views.py中引用使用这个tasks异步处理

8.启动celery

9.这样在调用post这个方法时,里边的add就可以异步处理了

定时任务的使用场景就很普遍了,比如我需要定时发送报告给老板~

1. oa/celery.py 文件添加如下配置以支持定时任务crontab

3.启动celery beat,celery启动了一个beat进程一直在不断的判断是否有任务需要执行

Django 项目分布式部署【UWSGI + NGINX】

使用USGI配置Django项目的多进程部署,使用NGINX进行静态文件的部署和负载均衡的配置

django from django_redis import get_redis_connection后如何为该redis添加分布式锁呢?

有效的,不过如果使用redis,他内部是单线程实现,大部分操作不加锁,也不会有并发问题,是安全的。

结语:以上就是首席CTO笔记为大家介绍的关于Django如何实现分布式的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:22
下一篇 2023-09-23

相关推荐

发表回复

登录后才能评论