提高項目並發量,elasticsearch全文檢索,kibana的一些配置


1 如何提高項目並發量

# 1 web,app,微信小程序
# 2 web項目
	-前端:
		-用cdn,靜態資源,放到cdn上(js,css,靜態圖片)
		-用精靈圖(一個大圖,上面又很多小圖,用定位,定位到小圖)
		-前端緩存(響應頭設置緩存時間)cache-control  (django如何向響應頭寫鍵值對:響應對象["aaa"]="aaa")
	-nginx:
		-nginx做集群(dns解析,負載均衡硬件 f5)
		-動靜分離(靜態資源直接通過nginx轉發,拿去;uwsgi只負責處理動態請求)
		-負載均衡(nginx的配置)
		-集群化部署
		-拆服務(把項目做成分布式)
	-使用uwsgi(c寫的wsgi服務器)部署,使用gunicorn(python寫的wsgi服務器)部署
	-代碼層面:
		-緩存(redis)--》本來一個請求,要查5個表,耗時3s---》json格式--》放到緩存中--》下次再發請求,直接去緩存查---》0.001秒就返回了-----》(存在問題:緩存擊穿,緩存穿透,緩存雪崩   雙寫一致性問題)
		-頁面靜態化(不適用於app和小程序),提前生成一個首頁頁面(被訪問頻繁的頁面)
			-/index--->(查數據庫(用了緩存)---》dtl渲染頁面)--》提前生成出index.hmtl---》django模板渲染
			-數據不一致(當有數據增加,再重新生成一次這個頁面),同步?異步?
			-用異步:用celery,django的信號(異步操作),當對象保存時,重新生成靜態頁面
		-異步操作(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)
    #
    # return HttpResponse(html)
    
    
    render('index.html',{'key':'value'})

2 Elasticsearch介紹

# 1 產生背景:大規模數據如何檢索,數據安全(單點故障),備份,檢索速度
# 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
  -日志的收集和分析系統
# 8 Elasticsearch特點和優勢
	-筆記看一下即可
# 9 為什么使用es?
	-13年初,GitHub拋棄了Solr,采取ElasticSearch 來做PB級的搜索
	-我們用在什么地方?
  	-我們項目如果有搜索功能,都可以用
    -日志存儲分析
    -大數據量的存儲和檢索
# 10 Elasticsearch索引到底能處理多大數據
	-es一個索引(數據庫)可以有多個分片,一個分片是一個lucene的索引
	-lucene一個索引不能處理多於21億篇文檔,或者多於2740億的唯一詞條
	-理論上是可以無限加的



在線教育---》用戶去瀏覽---》瀏覽記錄---》停留時間---》存到日志---》日志分析的系統---》Linux感興趣---》定向推薦----》linux課程上新了,打折了,短信推送,微信推送,都行
日志記錄,收集

3 Elasticsearch安裝配置

# 1 基於java開發的,安裝jdk,windows上安裝(jdk 1.8 以上),一路下一步(jdk,jre),(不需要配置環境變量了)
	-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. 注意版本一定要對應)
	-版本問題:2 5版本  6版本  7版本  7.6.2版本最新(講課用7版本),公司可能會用6或者6之前的版本
  -haystack:不支持es,6以上版本,django上做全文檢索的框架(對接es,對接solr,對接whoosh)
  -whoosh-純Python的全文搜索庫,Whoosh是索引文本及搜索文本的類和函數庫。它能讓你開發出一個個性化的經典搜索引擎
  -6以后,不允許一個索引下建多個type(類型)---》一個數據庫只能有一個表
# 3 解壓到指定目錄(隨便,不要有空格,中文   c://soft  )
  
# 4 啟動es
	-到es的bin路徑下,elasticsearch.bat
  -Kibana 就是es的客戶端(官方提供,相當於Navicat)
  -Elasticsearch-head 就是es的客戶端(第三方的,相當於Navicat)
# 5 啟動kibana
	-修改kibana配置文件
  	server.port: 5601
		server.host: "127.0.0.1"
		server.name: alen
		elasticsearch.hosts: ["http://localhost:9200/"]
	-配置跨域(改es的配置)
  	-elasticsearch.yml 
      http.cors.enabled: true
      http.cors.allow-origin: "*"
	-到kibana的bin路徑下,kibana.bat 啟動
  
# 6 啟動Elasticsearch-head(第三方用node 寫的一個es客戶端)
	-node 環境要裝好
	-下載:https://github.com/mobz/elasticsearch-head
  -解壓
  -執行
    npm install
    npm run start
    http://localhost:9100/

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


免責聲明!

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



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