浅谈如何提高网站的并发量(性能)
前端处理
前端的静态文件处理:买cdn
cdn
cdn:接收到的前端网页静态资源放到cdn上
前端缓存
控制图片的缓存事件(HTTP响应中max-age)
精灵图
后台处理
在后台:请求来了之后后台承受的并发量是有限的
解决办法:
百度:累加服务器
集群化部署
集群化部署(Nginx、lvs)----->用缓存(Redis)/不从数据库里拿数据,直接从缓存里面拿
用缓存
用缓存(Redis)---->如果缓存里面没有然后进视图函数里拿(涉及到同步异步的问题)
同步,异步
同步异步:同步的话一直链接着,特别耗费时间和资源,可以用celery框架处理
数据库读写分离、分库分表
然后到数据库这一层----->涉及到读写分离,分库分表
读写分离:
本质上就是多数据库,比如两个数据库,一个用来读取,一个用来写
数据库同步做好主从,一个指定用来读,一个指定用来写
逻辑:DATABASES字典的default里面配置两个数据库(default,db1),一个项目依赖两个数据库,链接到服务器,两个数据库好数据同步
手动方式来实现数据库的读写分离:
settings.py
DATABASES = { 'default':{ 'ENGINE':'django.db.backends.sqlite3', 'KAME':os.path.join(BASE_DIR, 'db.sqlite3'),
}, 'db1':{ 'ENGINE':'django.db.backends.sqlite3', 'KAME':os.path.join(BASE_DIR, 'db2.sqlite3'), } }
在urls.py
from django.conf.urls import uel
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^test1/',views.test),
url(r'^test2/',views.test2),
]
在views.py
from django.shortcuts import render,Httpserponse
from app01 import models
def test(request):
#默认写数据,写到default中
models.User.objects.using('db1').create(name='wxb',pwd='123')
return HttpResponse('新增成功')
def test2(request):
#using('default'),是queryset对象的方法
res = models.User.objects.all().using('defult')
print(res)
return HttpResponse('查询成功')
在models.py里创建两个表,然后把两张表同步到数据库中:
class User(models.Model): name = models.CharField(max_length = 32) pwd = models.CharField(max_length = 32)
然后做数据库迁移(makemigrations),在执行migrate--database = db1可以指定把哪张表同步到哪个数据库里
python manage.py makemigrations #在migrations文件夹下 生成记录,迁移前检查
python manage.py migrate #真正执行数据库迁移命令,该命令执行之后创建表
在models里面
通过配置文件实现数据库的读写分离,通过django官网提供的class Routerl
新建myrouter.py脚本,定义Router类:
class Router:
def db_for_read(self, model, **hints):
return default'
def db_for_write(self, model, **hints):
return 'db1'
然后配置Router
在settings.py中指定DATABASE_ROUTERS
DATABASE_ROUTER = ['myrouter.Router',]
数据库做集群
同样数据库也可以做集群
用Redis或者MongoDB
mysql数据性能低,可以用Redis来存储数据,以及MongoDB存储
代码逻辑优化
代码逻辑的优化
SQL语句的优化
建索引
orm(default与only)