常规接口性能优化方案+django方案

前言:

经验值,一般来讲,用户端接收一个请求,比较好的响应时间在30-50ms

qps在100以上的,要求响应时间小于5ms;qps在20到100之间的,响应时间小于10ms。

1.代码逻辑

2.1如果一个大业务方法中,各子业务相互独立,互不依赖,而此时业务耗时又不达标时,可以考虑使用并发处理,即多线程并发查询数据。有个前提是该接口应至少高于20ms,如果再低,线程切换等因素可能会抵消掉多线程带来的性能提高。

2.2 代码层对数据库查询方式的优化

同一个请求尽量减少对数据库的操作次数,减少io次数达到提升效率目的;数据量大时批量插入

结合数据库优化查询语句,提升查询效率

2.3 合理,高效的代理逻辑与算法应用

2.缓存

3.1 缓存热点数据,不用每次都去访问DB,减少耗时。

3.2 跨平台数据存入缓存,异步程序更新跨平台数据以保持跨平台数据的实时准确性。

3.数据库优化

  • 加索引:根据查询字段常见合适的索引,提高数据库查询速率

  • 避免返回不必要的数据: 不要使用select * from table1 where  id >100;具体到需要的哪几列数据

  • 优化sql结构:

  • 分库分表:

  • 读写分离:数据库集群读写分离到不同的入口

4.大数据/耗时操作考虑异步,消息队列

例如:

1.服务的接口会同时接收大量的数据写入数据库,考虑先将数据推向消息队列,再存入DB。

2.一个请求会经过几个服务的处理,取最终的结果,考虑使用MQ

5.CPU+内存

物理上的扩容

针对DJANGO工程的优化

django的部署方式对性能影响:

1. 单进程多线程:python manage.py runserver 0.0.0.0:80

2.Gunicorn部署:可选择进程与线程数

3.wsgi:

4.uwsgi部署:多进程,多线程

uWSGI 是一个Web 服务器,它实现了WSGI 协议(web服务网关接口)、uwsgi(线路协议)、http 等协议。注意uwsgi 是一种通信协议,而uWSGI 是实现uwsgi 协议和WSGI 协议的Web 服务器。uWSGI 具有超快的性能、低内存占用和多app 管理等优点,并且搭配着Nginx 就是一个生产环境了,能够将用户访问请求与应用app 隔离开,实现真正的部署。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。

5.进一步提升,使用nginx负载均衡

Gunicorn,uWSGI部署参考:使用uwsgi和gunicorn部署Django项目 - 简书

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue3 中调用 Django3 的登录接口,需要在 Django3 中编写登录视图,并使用 Django 自带的用户认证系统来验证用户身份。以下是实现步骤: 1. 在 Django3 项目中创建一个 app,并在 app 中创建一个登录视图: ```python from django.contrib.auth import authenticate, login from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt @csrf_exempt def login_view(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return JsonResponse({'success': True}) else: return JsonResponse({'success': False, 'message': '用户名或密码错误'}) ``` 在这里,使用 Django 自带的 `authenticate` 函数来验证用户身份,并使用 `login` 函数将用户登录。登录成功时返回 `{'success': True}`,登录失败时返回 `{'success': False, 'message': '用户名或密码错误'}`。 2. 在 Vue3 组件中使用 axios 发送登录请求: ```javascript import axios from 'axios' export default { data() { return { username: '', password: '' } }, methods: { async login() { try { const response = await axios.post('/api/login/', { username: this.username, password: this.password }) if (response.data.success) { // 登录成功后的逻辑 } else { console.error(response.data.message) // 登录失败后的逻辑 } } catch (error) { console.error(error) // 登录失败后的逻辑 } } } } ``` 在这里,假设 Django3 的登录接口是 `/api/login/`,并且接收 `username` 和 `password` 两个参数。登录成功时调用登录成功后的逻辑,登录失败时调用登录失败后的逻辑。 这样就可以在 Vue3 中调用 Django3 的登录接口了。注意,在开发过程中,需要同时启动 Vue3 和 Django3 的开发服务器,并且将 Vue3 的开发服务器代理到 Django3 的开发服务器上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值