首页 存档 技术 查看内容

JavaEE面试宝典(五) 二、Redis(缓存数据库) 三、Solr 四、Fastdfs 五、FreeMarker

2018-3-30 13:00 |来自: 互联网 897 0

摘要: 电商项目中的技术点 一、Nginx(web服务器) 1、Nginx反向代理为什么可以提高网站性能? 对于后端是动态服务来说,比如Java和PHP。这类服务器(如JBoss和PHP-FPM)的IO处理能力往往不高。 Nginx有个好处是它会把 ...


电商项目中的技术点


一、Nginx(web服务器)


1、Nginx反向代理为什么可以提高网站性能?


对于后端是动态服务来说,比如Java和PHP。这类服务器(如JBoss和PHP-FPM)的IO处理能力往往不高。


Nginx有个好处是它会把Request在读取完整之前buffer住,这样交给后端的就是一个完整的HTTP请求,从而提高后端的效率,而不是断断续续的传递(互联网上连接速度一般比较慢)。


同样,Nginx也可以把response给buffer住,同样也是减轻后端的压力。


2、Nginx和Apache各有什么优缺点?


2.1 nginx 相对 apache 的优点:


轻量级,同样起web 服务,比apache 占用更少的内存及资源

抗并发nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

高度模块化的设计,编写模块相对简单

社区活跃,各种高性能模块出品迅速啊

2.2 apache 相对nginx 的优点:

rewrite ,比nginx rewrite 强大

模块超多,基本想到的都可以找到

bug nginx bug 相对较多

超稳定


存在就是理由,一般来说,需要性能的web 服务,用nginx

如果不需要性能只求稳定,那就apache 吧。


3Nginx多进程模型是如何实现高并发的?


进程数与并发数不存在很直接的关系。这取决取server采用的工作方式。


如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。等什么?最多的应该是等待网络传输。其缺点题主应该也感觉到了,此处不述。

而nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。

apache 是如何利用的呢,简单来说:同样的4个进程,如果采用一个进程负责一个request的方式,那么,同时进来4个request之后,每个进程就负责其中一个,直至会话关闭。

期间,如果有第5个request进来了。就无法及时反应了,因为4个进程都没干完活呢,因此,一般有个调度进程,每当新进来了一个request,就新开个进程来处理。

nginx不这样,每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。


那么,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。


由于web server的工作性质决定了每个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片不多。这是几个进程就解决高并发的秘密所在。


也正是nginx之所以然的技术基石。


4tomcat 与nginx,apache的区别是什么?


题主说的Apache,指的应该是Apache软件基金会下的一个项目Apache HTTP Server Project;Nginx同样也是一款开源的HTTP服务器软件(当然它也可以作为邮件代理服务器、通用的TCP代理服务器)。

HTTP服务器本质上也是一种应用程序它通常运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,这样客户端(一般来说是IE, Firefox,Chrome这样的浏览器)就能够通过HTTP协议来获取服务器上的网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)等等资源。下图描述的就是这一过程:


不仅仅是Apache HTTP Server和Nginx,绝大多数编程语言所包含的类库中也都实现了简单的HTTP服务器方便开发者使用:


HttpServer (Java HTTP Server )

Python SimpleHTTPServer


使用这些类库能够非常容易的运行一个HTTP服务器,它们都能够通过绑定IP地址并监听tcp端口来提供HTTP服务。

Apache Tomcat则是Apache基金会下的另外一个项目,与Apache HTTP Server相比,Tomcat能够动态的生成资源并返回到客户端。Apache HTTP Server和Nginx都能够将某一个文本文件的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的也就是说无论何时、任何人访问它得到的内容都是完全相同的,这样的资源我们称之为静态资源。动态资源则与之相反,在不同的时间、不同的客户端访问得到的内容是不同的,


例如:

包含显示当前时间的页面

显示当前IP地址的页面


Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。


如果想要使用Java程序来动态生成资源内容,使用这一类HTTP服务器很难做到。Java Servlet技术以及衍生的Java Server Pages技术可以让Java程序也具有处理HTTP请求并且返回内容(由程序动态控制)的能力,Tomcat正是支持运行Servlet/JSP应用程序的容器(Container):


Tomcat运行在JVM之上,它和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含以下指责:


管理Servlet程序的生命周期


将URL映射到指定的Servlet进行处理


与Servlet程序合作处理HTTP请求根据HTTP请求生成HttpServletResponse对象并传递给Servlet进行处理,将Servlet中的HttpServletResponse对象生成的内容返回给浏览器


虽然Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:


动静态资源分离运用Nginx的反向代理功能分发请求:

所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。


负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理


二、Redis(缓存数据库)


1、Redis 是什么?


通常而言目前的数据库分类有几种,包括 SQL/NOSQL,,关系数据库,键值数据库等等,分类的标准也不以,Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点。从而使它的位置处于关系数据库和键值数据库之间。Redis不仅能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,而且还能完成排序(SORT)等高级功能,在实现INCR,SETNX等功能的时候,保证了其操作的原子性,除此以外,还支持主从复制等功能。

2、Redis用来做什么?


通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求。而通常在一个电商类型的数据处理过程之中,有关商品,热销,推荐排序的队列,通常存放在Redis之中,期间也包扩Storm对于Redis列表的读取和更新。

3、Redis的优点?


3.1.性能极高 Redis能支持超过 100K 每秒的读写频率。
3.2.丰富的数据类型 Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3.3.原子 Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
3.4.丰富的特性 Redis还支持 publish/subscribe, 通知, key 过期等等特性。


4、Redis的缺点?


是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。


5、Redis持久化


5.1、RDB持久化:

该机制是指在制定的时间间隔内将内存中的数据集快照写入磁盘。

优点:1.只有一份rdb文件,可随时备份

2.比AOF文件小,加载效率高

3.只提供fork子进程,不阻塞主进程,IO操作比较少

5.2、AOF持久化:

该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

优点:1.每次改动同步数据安全性好

2.APPEND方式追加日志,不会对旧日志文件产生影响

5.3、无持久化

我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了

5.4、同时应用AOF和RDB


6、Redis集群

群指的是将几台服务器集中在一起,实现同一业务

  1. 目的:高可用、负载均衡、易扩展、数据安全、性能提升

2. 技术:集群地址(虚拟IP)、网络通信(监控消息)

    1. 功能:负载均衡、读写分离、故障转移


三、Solr


1、solr的原理


用通俗的语言描述下Apache_Solr是做什么用的?


solr 是基于lucene搜索库的一个搜索引擎框架。
1、简单来说所谓的索引是为了全文数据存储和查询准备的,全文数据即非结构化数据,比如一篇文章,如果你要用一般的手段进行搜索的话,比如用数据库的like命令会有不少限制,而且还不能支持一些相同语义的问题。举个简单的例子,你在亚马逊上面搜索solr,却可以查询出来lucene内容,这就是关联性查询和语义查询。

2、高性能的,上亿条数据通过索引的方式可以秒级查询出来,优化后可能更好。

3、solr将非结构化数据,通过分词、词法分析、过滤停词、语义分析等手段来转成结构化数据,存储为索引,里面有文档概念这个和mysql的一条记录又类似。


2、solr怎么设置搜索结果排名靠前(得分)?


可以设置文档中域的boost值,boost值越高计算出来的相关度得分就越高,排名也就越靠前。此方法可以把热点商品或者是推广商品的排名提高。


3、solr里面IK分词器的原理


IK分析器的分词原理本质上是词典分词。现在内存中初始化一个词典,然后在分词过程中逐个读取字符,和字典中的字符相匹配,把文档中的所有的词语拆分出来的过程。


四、Fastdfs


FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,设计基于高可用和负载均衡,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。


FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。


FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。


存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。


跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。


为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。


在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。


当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。


FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。


五、FreeMarker


1.什么是FreeMarker


FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写


FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)


FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件


FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境


FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库


FreeMarker是免费的


而且你还可以通过Eclipse的插件来编辑FreeMarker,经过验证,FreeMarker 最好的 Eclipse 编辑插件是JBoss Tools


2.FreeMarker特性


1、通用目标

能够生成各种文本:HTML、XML、RTF、Java源代码等等

易于嵌入到你的产品中:轻量级;不需要Servlet环境

插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等

你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器


2、强大的模板语言

所有常用的指令:include、if/elseif/else、循环结构

在模板中创建和改变变量

几乎在任何地方都可以使用复杂表达式来指定值

命名的宏,可以具有位置参数和嵌套内容


名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突


输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换


3、通用数据模型

FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示

你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰


4、为Web准备

在模板语言中内建处理典型Web相关任务(如HTML转义)的结构

能够集成到Model2 Web应用框架中作为JSP的替代

支持JSP标记库

为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员


5、智能的国际化和本地化

字符集智能化(内部使用UNICODE)

数字格式本地化敏感

日期和时间格式本地化敏感

非US字符集可以用作标识(如变量名)

多种不同语言的相同模板


6、强大的XML处理能力

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部