Nginx、FastDFS、Solr

1.FastDFS与Nginx

Nginx:高性能的http和反向代理服务器

Nginx ("engine x")是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

正向代理

是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理

正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的名字空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

典型用途方面

正向代理:

[if !supportLists]1)[endif]是为在防火墙内的局域网客户端提供访问Internet的途径。

[if !supportLists]2)[endif]正向代理还可以使用缓冲特性减少网络使用率。

反向代理:

[if !supportLists]1)[endif]将防火墙后面的服务器提供给Internet用户访问。

[if !supportLists]2)[endif]为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

[if !supportLists]3)[endif]启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

安全性:

正向代理:

允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

反向代理:

对外都是透明的,访问者并不知道自己访问的是一个代理。

打个比方,a,b,c三个人,正向代理是a通过b向C借钱,a知道c的存在 。反向代理是a向b借钱,b又向C借,a不知道c的存在。

FastDFS为什么要结合Nginx?

我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。其使用非常简单。FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了192.168.1.80,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.1.30,如果复制没有完成,客户端就用这个ID在192.168.1.30取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。

nginx负载均衡的5种策略

nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。

nginx的upstream目前支持的5种方式的分配

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 

2、指定权重指定轮询几率,

weight和访问比率成正比,用于后端服务器性能不均的情况。 upstream backserver { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }

 3、IP绑定 ip_hash每个请求按访问ip的hash结果分配,

这样每个访客固定访问一个后端服务器,可以解决session的问题。

 upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }

 4、fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver { server server1; server server2; fair; } 

5、url_hash(第三方)按访问url的hash结果来分配请求,

使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 

upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; } 在需要使用负载均衡的server中增加 proxy_pass http://backserver/; upstream backserver{ ip_hash; server 127.0.0.1:9090 down; (down表示单前的server暂时不参与负载) server 127.0.0.1:8080 weight=2; (weight默认为1.weight越大,负载的权重就越大) server 127.0.0.1:6060; server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) } max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 

fail_timeout:max_fails次失败后,暂停的时间

FastDFS与HDFS

FastDFS是阿里巴巴开源的一套轻量级,天生就是分布式设计的文件系统是由C语言开发。

HDFS(Hadoop Distributed File System)Hadoop实现了一个分布式文件系统,主要用于大数据计算存储,简称HDFS。 Hadoop是Apache Lucene创始人Doug Cutting开发的使用广泛的文本搜索库。它起源于Apache Nutch,后者是一个开源的网络搜索引擎,本身也是Luene项目的一部分。Aapche Hadoop架构是MapReduce算法的一种开源应用,是Google开创其帝国的重要基石。


2. 什么是solr?Solr的使用场景

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Solr是一个高性能,采用Java5开发,基于Lucene(全文搜索引擎)的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎

Solr,站内搜索,小米6

Select * from product where namelike %小米6% or sale_point like %小米6%

数据量会不断上升,500万

效果:查询越来越慢

场景:读多写少

优化:加索引name加索引

为什么?

Table1全表扫描

加索引避免全表扫描

like小米6% 索引

like %小米6% 索引失效 --- 全表扫描

 

Solr

应用程序----> DB

应用程序---->搜索库(来源DB)


百度,google互联网的搜索引擎 爬虫收集互联网数据---分析---提供搜索(站内搜索)

简单来说呢:

1.solr主要用于对其他存储系统中已有的一些数据做分析,查询,然后显示结果。当然它也可以直接存储数据,但,这不是它的强项。

2.对原有的数据作分析,需要对文本作一些处理(格式,分页高亮等等),然后导入到solr中,利用solr强大的搜索功能,找到自己想要的结果。

3适用场景:

[if !supportLists]1)[endif]对于存储在文件中的日志,可以导入到solr中做分析。

[if !supportLists]2)[endif]对于关系型数据库中需要做全文搜索的字段,可以导入到solr中。

4.安装solr(中文分词器)


Nginx、FastDFS、Solr_第1张图片

5.将数据库数据导入索引库

6.实现数据库与索引库的同步

你可能感兴趣的:(Nginx、FastDFS、Solr)