zoukankan      html  css  js  c++  java
  • 提高项目并发量,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原生操作---》实现了全文检索
    
  • 相关阅读:
    ios修改了coredata数据结构后,更新安装会闪退
    iOS开发系列--UITableView全面解析
    iOS七种手势
    iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义
    iOS学习必须了解的七大手势
    iOS中respondsToSelector与conformsToProtocol的相关理解和使用
    iOS-MBProgressHUD使用
    ios学习--第三方框架-MBProgressHUD以及扩展
    Problem 2169 shadow
    測试加入多级文件夹篇
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12838808.html
Copyright © 2011-2022 走看看