淺談如何提高網站的並發量(性能)


前端處理

    前端的靜態文件處理:買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)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM