Elasticsearch1 項目如何提高並發量,Elasticsearch介紹,Elasticsearch安裝配置,kibana使用,Elasticsearch-head使用


1 如何提高項目並發量

# 1 web,app,微信小程序
# 2 web項目
    -前端:
        -用cdn,靜態資源,放到cdn上(js,css,靜態圖片)
        -用精靈圖(一個大圖,上面又很多小圖,用定位,定位到小圖)
        -前端緩存(響應頭設置緩存時間)cache-control  (django如何向響應頭寫鍵值對:響應對象["aaa"]="aaa"-nginx:
        -nginx做集群(dns解析,負載均衡硬件 f5)# dns解析到不同的nginx集群上(百度各地ip不同)     負載均衡硬件f5也能抗並發量,轉到不同的nginx集群中(硬件層面實現)
        -動靜分離(靜態資源直接通過nginx轉發,拿取;uwsgi只負責處理動態請求)
        -負載均衡(nginx的配置)
        -集群化部署
        -拆服務(把項目做成分布式)
    -使用uwsgi(c寫的wsgi服務器)部署,使用gunicorn(python寫的wsgi服務器)部署
    -代碼層面:
        -緩存(redis)--》本來一個請求,要查5個表,耗時3s---》json格式--》放到緩存中--》下次再發請求,直接去緩存查---》0.001秒就返回了-----》(存在問題:緩存擊穿,緩存穿透,緩存雪崩   雙寫一致性問題)
        -頁面靜態化(不適用於app和小程序),提前生成一個首頁頁面(被訪問頻繁的頁面) # 下方代碼示例
            -/index--->(查數據庫(用了緩存)---》dtl渲染頁面)--》提前生成出index.hmtl---》django模板渲染
            -數據不一致(當有數據增加,再重新生成一次這個頁面),同步?異步?
            -用異步:用celery,django的信號(異步操作),當對象保存時,重新生成靜態頁面(celery有返回值,信號無返回值)
        -異步操作(celery),一個請求需要耗時3s,設計成異步--請來了--》直接返回(任務已提交,請求正在處理)
            -小米秒殺:您正在排隊(前端設置了定時,每隔5s,發送一個請求,查是否秒殺成功)
            -保存視頻,發送郵件,保存文章,
            -后台管理,統計最近三,五,半年,個月的訂單量--》折線圖,餅狀圖展示
            -消息隊列:rabbitmq,kafka。。。異步,解耦
        -請求打到數據庫了(只要打到數據庫,性能就下來了)
            -優化sql,外鍵盡量不建立,適當建索引
            -讀寫分離,數據庫集群,分庫分表
        -優化代碼,多線程處理,盡量不在for循環里查數據庫
        
        -換框架(異步框架),換語言
--最本質的一句,代碼優化不了了,壘機器
        
        
        
    django的cache如何實現的?
    -配置,緩存到文件,redis,mysql
    -可以緩存對象(set了對象,pickle序列化成二進制,存到了redis中)
    -cache.set()
    -cache.get()
   # ================================django模板修改的視圖函數      提前生成一個頁面
    # from django.template import Template,Context
    # now=datetime.datetime.now()
    # t=Template('<html><body>現在時刻是:<h1>{{current_date}}</h1></body></html>') #模板文件
    # #t=get_template('current_datetime.html')    # 或者獲取一個模板文件
    # c=Context({'current_date':str(now)})   # 把變量渲染進去
    # html=t.render(c)    # 生成字符串(完整的html頁面),可以存入html格式文件
    #
    # return HttpResponse(html)
    
    
    render('index.html',{'key':'value'})  # 此行用於回憶

 

2 Elasticsearch介紹

es物理設計如下

# 1 產生背景:大規模數據如何檢索,數據安全(單點故障),備份,檢索速度  # mysql如果是innodb引擎在千萬級數據量,速度直線下降
# 2 Elasticsearch介紹
    -是一個基於Lucene的分布式搜索和分析引擎,全文檢索引擎
    -Elasticsearch使用Java開發
  -但是它的目的是通過簡單的RESTful API來隱藏Lucene的復雜性,使得全文檢索變得簡單
# 3 Lucene與Elasticsearch關系
    -Lucene只是java一個庫----》只能java來使用
      -python中集合--》只能python來用--》java,go用不了,其它語言想用,怎么做?
    -做成服務---》django搭建一個服務---》對外通過restful接口  --->  get  /key  post /key=value
  -基於Lucene封裝 ,做成服務,通過restful來調用,使用全文檢索
# 4 Elasticsearch vs solr
    -solr 也是一個全文檢索引擎
  -跟es關系就像是mysql和oracle的關系
  -傳統搜索用solr多,es新興互聯網用的多
  
# 5 es核心概念
    -集群:多台服務器的集合,稱為es的集群
  -節點:集群的每個服務器稱為節點
  -分片:10g的數據(一個表中),對10g數據分片(自動調度),分成2g,3g,5g,把這些數據,分別放在不同的節點上(查任意一台服務器,都會在匯總的數據(自動調度,無需關注)中檢索)
  -副本:為提高查詢吞吐量或實現高可用性,可以使用分片副本(每個服務器備份其他服務器部分分片(自動調度),一旦某個服務器掛了,另一個服務器備份了他的數據部分升為分片,繼續運行,
然后這些分片再做副本分配到其他服務器上;如果再加一台機器(數據必須為空或與其他節點數據相同),又會默默副本操作)
-全文檢索:分詞,全文檢索---》可以根據關鍵字搜索 # 6 es跟mysql比較 (存直接存文檔不用建類型,索引,它會自己倒推;查索引->類型->文檔) mysql es 數據庫 索引(index) 表 類型(type) 一條一條數據 文檔(document) 一列一列(字段) 字段(field)(name,age) 字段屬性(主鍵,類型,索引) 映射(mapping) 索引 所有字段建索引(倒排索引)、 增刪查改 get、post、delete。。。 # 7 ELK是什么? -ELK=elasticsearch+Logstash+kibana -日志的收集和分析系統 # Logstash日志搬運工,收集日志存到es中,kibana前端展示 # 8 Elasticsearch特點和優勢 -筆記看一下即可 1)分布式實時文件存儲,可將每一個字段存入索引,使其可以被檢索到。 2)實時分析的分布式搜索引擎。 分布式:索引分拆成多個分片,每個分片可有零個或多個副本。集群中的每個數據節點都可承載一個或多個分片,並且協調和處理各種操作; 負載再平衡和路由在大多數情況下自動完成。 3)可以擴展到上百台服務器,處理PB級別的結構化或非結構化數據。也可以運行在單台PC上(已測試) 4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等 # 9 為什么使用es? -13年初,GitHub拋棄了Solr,采取ElasticSearch 來做PB級的搜索 -我們用在什么地方? -我們項目如果有搜索功能,都可以用 -日志存儲分析 -大數據量的存儲和檢索 ** 應用場景:** 1)新系統開發嘗試使用ES作為存儲和檢索服務器; 2)現有系統升級需要支持全文檢索服務,需要使用ES # 10 Elasticsearch索引到底能處理多大數據 -es一個索引(數據庫)可以有多個分片,一個分片是一個lucene的索引 -lucene一個索引不能處理多於21億篇文檔,或者多於2740億的唯一詞條 -理論上是可以無限加的 在線教育---》用戶去瀏覽---》瀏覽記錄---》停留時間(前端傳給后端)---》存到日志---》日志分析的系統---》Linux感興趣---》定向推薦----》linux課程上新了,打折了,短信推送,微信推送,都行 日志記錄,收集

 

3 Elasticsearch安裝配置

kibana連接如下

 Elasticsearch-head連接如下

# 1 基於java開發的,安裝jdk,windows上安裝(jdk 1.8 以上),一路下一步(jdk,jre),(不需要配置環境變量了)    #jre java運行環境   # jdk java開發
cmd下輸入      java -version
  Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
# 2 安裝es前下載(去官網下載相應的版本,es+kiban. 注意版本一定要對應一致)
# 此次我下載:elasticsearch-7.5.0-windows-x86_64.zip  kibana-7.5.0-windows-x86_64.zip
    -版本問題:2 5版本  6版本  7版本  7.6.2版本最新(講課用7版本),公司可能會用6或者6之前的版本
  -haystack:不支持es,6以上版本,django上做全文檢索的框架(對接es,對接solr,對接whoosh)  # django開源搜索框架
  -whoosh-純Python的全文搜索庫,Whoosh是索引文本及搜索文本的類和函數庫。它能讓你開發出一個個性化的經典搜索引擎
  -6以后,不允許一個索引下建多個type(類型)---》一個數據庫只能有一個表 #6兼容,7只能有一表
# 3 解壓到指定目錄(隨便,不要有空格,中文   c://soft  )
  
# 4 啟動es   (如果在c盤,注意權限問題,可能kibana等工具無法刪除文件等操作,放d盤保險)
# 索引數據路徑:..\elasticsearch-7.5.0\data\nodes\0  (單機配置)
  -cmd到es的bin路徑下,輸入elasticsearch.bat # 看到publish_address {127.0.0.1:9200}監聽地址,已啟動   瀏覽器輸入http://127.0.0.1:9200/ 可看到版本等信息如下
    {
  "name" : "LAPTOP-41G9JFOT",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "SpkA_Se6TuyqMw9iT_m3wQ",
  "version" : {
    "number" : "7.5.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "e9ccaed468e2fac2275a3761849cbee64b39519f",
    "build_date" : "2019-11-26T01:06:52.518245Z",
    "build_snapshot" : false,
    "lucene_version" : "8.3.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
  -Kibana 就是es的客戶端(官方提供,相當於Navicat)
  -Elasticsearch-head 就是es的客戶端(第三方的,相當於Navicat)#比Kibana好用
# 5 啟動kibana
    -修改kibana配置文件  ..\kibana-7.5.0-windows-x86_64\config\kibana.yml #里面最下面加入這4句話(頂格,去注釋)
           server.port: 5601           # kibana監聽端口號   
        server.host: "127.0.0.1"     # kibana監聽地址
        server.name: lqz              # 名字隨便起
        elasticsearch.hosts: ["http://localhost:9200/"] # 讓kibana連到es上
    -配置跨域(改es的配置)  # 因為端口不一樣    修改完配置,重啟es
      -elasticsearch.yml   ..\elasticsearch-7.5.0\config\elasticsearch.yml #最下面加入
      http.cors.enabled: true    # 允許跨域
      http.cors.allow-origin: "*"   # 允許的域,任意客戶端來訪問
    -cmd到kibana的bin路徑下,輸入kibana.bat 啟動 
    # 得到http server running at http://127.0.0.1:5601  瀏覽器訪問
  
# 6 啟動Elasticsearch-head(第三方用node 寫的一個es客戶端)
    -node 環境要裝好
    -下載:https://github.com/mobz/elasticsearch-head
  -解壓 
  -執行 (進入Elasticsearch-head文件夾,cmd下運行下方2行代碼)
    npm install    # 裝依賴
    npm run start    # 啟動  返回http://localhost:9100
    http://localhost:9100/  # 輸入瀏覽器

  
  # kibana:官方提供的es客戶端,主要用來做增刪查改,有提示(postman,Elasticsearch-head)
  # Elasticsearch-head :看集群的狀態,索引的狀態
  
  
  
  # 你在工作中碰到的問題和如何解決的?
      -django+haystack+whoosh   實現全文檢索
    -換成es,性能更高       目標
      -項目里加全文檢索,django---》haystack---》es版本必須6以下    問題
    -django+es原生操作---》實現了全文檢索      # 原生操作也就是http請求

 


免責聲明!

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



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