浅谈如何提高网站的并发量(性能)

前端处理

    前端的静态文件处理:买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)

  

posted @ 2019-06-02 17:48  PTSD-追光者  阅读(1329)  评论(0编辑  收藏  举报