ES介绍,安装

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: lqz
		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 :看集群的状态,索引的状态

kibana-docker-compose

version: '3'
services:
  prometheus:
    container_name: kibana
    image: kibana:7.7.1
    ports:
      - "5601:5601"
    restart: unless-stopped
    volumes:
      - /es/esData/config/kibana.yml:/usr/share/kibana/config/kibana.yml

es-docker-compose

version: '3'
services:
  prometheus:
    container_name: elasticsearch
    image: elasticsearch:7.7.1
    ports:
      - "9200:9200"
      - "9300:9300"
    restart: unless-stopped
    volumes:
      - /es/esData/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
      - /es/esData/data:/usr/share/elasticsearch/data \
      - /es/esData/plugins:/usr/share/elasticsearch/plugins \
      - /es/esData/es/logs:/usr/share/elasticsearch/logs \
    environment:
      discovery.type: "single-node"
      ES_JAVA_OPTS: "-Xms64m -Xmx128m"
posted @ 2020-07-15 21:58  Jeff的技术栈  阅读(254)  评论(0编辑  收藏  举报
回顶部