二面准备
如何学习技术? 在什么地方学的?
如何学习
- 视频: 浅显易懂,缺点也很明显,不够全面,没
有深入源码级别,只是到简单的应用级别,可
以用来入门
博客: 可以用来解决某一具体的问题,但是
水很深,博客的水平参差不齐的,要找一些点
击量多的学习
相关的书籍书籍最大的好处就是定义准确
对名词和概念有精确的定义,可以全面深入
的介绍这个技术
官网技术文档,官网也是非常好的学习方
法,好多的细节也有,但是缺点是英文,翻译成
中文也容易出现错误,要是碰见问题,要想着
查官网文档和相应的书籍,而不是直接百度
博客
在什么地方学的
-
优秀的社区平台
-
培训机构的官网
-
掘金后端
-
CSDN
-
力扣算法
-
牛客面试
如何进行团队合作
合理利用 git
项目基本开发好了之后,项目经理推送(push)到代码托管中心。in如果项目需要修改某些需求,则开发人员先从代码托管中心克隆(clone)整个项目到本地库,进行修改。开发人员修改好了之后,再推送(push)到代码托管中心。in此时项目经理如果需要查看最新修改的代码,从代码托管中心进行拉取(pull)即可。
如何保持在技术前沿的竞争力
持续学习新技术
开发自己的个人项目或者参与到开源项目的共建上
把自己对技术的理解,形成自己的文章或架构图,并整理尝试输出到互联网,接受批评和指正。
如何确保系统和数据安全
保证数据安全需要解决三个问题: 机密性,完整性、身份验证 (抗抵赖性)
-
机密性:传输内容非明文,即使数据被外界截获,也不能被他人解释或破解,机密性可通过加密算法保证,加密算法定义了明文、密文之间如何转换,也就是加解密的过程。
-
非对称加密
- 对称加密指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密秘钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钢就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。常见的对对称加密算法主要有DES,AES3DES、RC2、RC4和RC5等
-
对称加密
- 非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(privatekey)。公开出钢与私有出是对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法常见的非对称加密算法: RSA、DSA、ECC等完整性: 传输过程中内容不能够被篡改,若信息被篡改或不完整,接收方能够得知信息完整性可通过提取并对比消息摘要的方式来实现。消息摘要就是根据一定的运算规则对原始数据进行某种形式的信息提取,通过消息摘要后的消息摘要的长度总是固定的,它也叫做数据指纹,因为它可以唯一的标识一段数据。常见的摘要算法有: shal、sha256、md5
crc32等
- 非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(privatekey)。公开出钢与私有出是对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法常见的非对称加密算法: RSA、DSA、ECC等完整性: 传输过程中内容不能够被篡改,若信息被篡改或不完整,接收方能够得知信息完整性可通过提取并对比消息摘要的方式来实现。消息摘要就是根据一定的运算规则对原始数据进行某种形式的信息提取,通过消息摘要后的消息摘要的长度总是固定的,它也叫做数据指纹,因为它可以唯一的标识一段数据。常见的摘要算法有: shal、sha256、md5
-
-
完整性和身份验证
- 身份验证 (抗抵赖性) : 接收方能够验
证数据的实际发送方,确保数据不是被
人“冒名顶替”而伪造的
通过数字签名机制,我们既可以保
证数据完整性,也可以对数据来源
进行身份验证
- 身份验证 (抗抵赖性) : 接收方能够验
保证系统安全
-
用户密码采用MD5加密,这是一种安全性非常高的加密算法,是普遍使用广泛应用于文件验证,银行密码加密等领域,由于这种加密的不可逆性,在使用10位以上字母加数字组成的随机密码时,几乎没有破解的可能性。
-
保存于COOKIES中的数据采用了以MD5加密为基础,加入随机加密因子的改进型专用加密算法。由于使用的不是标准MD5 加密,因此本系统COOKIES中保存的数据不可能被解密。因此,黑客试图用伪造COOKIES攻击系统变得完全不可能,系统用户资料变得非常安全。
-
SQL注入防护
-
寻找sql注入的方法
(1)通过get请求
(2)通过post请求
(3)其他http请求,如cookie -
MyBatis防止sql注入
-
MyBatis的SQL是一个具有“输入+输出”的功能,类似于函数的结构,并且启用了预编译功能,在SQL执行前,会先将上面的SQL发送给数据库进行编译;等到执行时,直接使用编译好的SQL
-
MyBatis是如何做到SQL预编译的呢?其实在框架底层,是JDBC中的PreparedStatement类在起作用,PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的SQL语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行同一个SQL时,能够提高效率。原因是SQL已编译好,再次执行时无需再编译。
-
#{}:相当于JDBC中的PreparedStatement,会先进行预处理,然后使用占位符?替换,是安全的,避免sql注入问题
${}:是输出变量的值,就像取配置文件里的值一样。不做任何处理,就可能存在sql注入的危险。
-
-
在编写MyBatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止SQL注入攻击。
-
木马和病毒防护
针对可能的木马和病毒问题,系统认为,在服务器设置安全的情况下,外部带来的安全问题,主要是用户可能上传病毒和木马,本系统作了如下四层的防护
第一、 客户端文件检测,在上传之前,对准备上传的文件进行检测,如果发现不是服务器设置的允许上传的文件类型,系统拒绝进行上传。如果客户端屏蔽了检测语句,则上传程序同时被屏蔽,系统无法上传任何文件。
第二、 服务器端文件安全性检测,对上传到服务器的文件,程序在将文件写入磁盘前,检测文件的类型,如发现是可能构成服务器安全问题的文件类型,即所有可以在服务器上执行的程序,系统都拒绝写入磁盘。以此保证不被上传可能在服务器上传播的病毒和木马程序。
第三、对有权限的服务器,系统采用即上传即压缩策略,所有上传的除图片文件、视频文件外,其它各种类型的文件一但上传,立即压缩为RAR,因此,即使包含木马也无法运行。不能对网站安全带来威胁。
第四、底层的文件类型检测 系统对文件类型作了底层级检测,由于不仅检测扩展名,而是对文件的实际类型进行检测,所以无法通过改扩展名方式逃过安全性验证。 -
权限控制系统
-
ip记录
全吉饭店技术选型理由
技术栈:SpringBoot+Spring Cloud + Nacos +Spring Task+JWT+阿里云
OSS+Redis+WebSocket
-
spring优势:简化开发
是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 容器管理,降低了组件之间的耦合性。
声明式事务的支持
通过配置就可以完成对事物的管理,而无须手动编程, 提高开发效率和质量。
便于集成其他框架
其内部提供了对各种优秀框架的直接支持(如MyBatis、Hibernate)。
降低 Java 开发难度
包括了 J2EE 三层的每一层的解决方案(一站式)-
spring的.作用
①.Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。
②.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
③.Spring 能非常简单的帮我们管理数据库事务。
④.Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
⑤.Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
⑥.Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
-
-
nacos
- 什么是Nacos?
Nacos是一个开源的分布式服务发现、配置管理和服务治理平台,提供了服务注册和发现、配置管理、服务路由和流量管理等功能,是构建微服务架构的重要组成部分。
Nacos的主要特点有哪些?
Nacos具有以下特点:
- 什么是Nacos?
功能丰富:
Nacos提供了服务注册和发现、配置管理、服务路由和流量管理等功能,能够满足企业构建微服务架构的需求。
可扩展性强:
Nacos支持多数据中心的部署和插件机制,可以方便地扩展和定制。
高可用性和可靠性:
Nacos采用了去中心化的设计和Raft算法,保证了服务注册和发现、配置管理的高可用性和可靠性。
易于使用:
Nacos提供了可视化的Web界面和开放的API接口,可以方便地进行服务注册和发现、配置管理等操作。
社区活跃:
Nacos有一个活跃的开源社区,能够及时解决问题和提供技术支持。
-
spring task
- Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。
Spring3.0以后自主开发的定时任务工具,可以看做是一个轻量级的Quartz框架。使用起来很简单,除spring相关的包外不需要额外的包
作用:定时自动执行某段Java代码
- Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。
-
jwt
-
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
头部(Header)
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
{“typ”:“JWT”,“alg”:“HS256”}
在头部指明了签名算法是HS256算法。 我们进行BASE64编码(http://base64.xpcha.com/),编码后的字符串如下:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
载荷(playload)
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品 -
JWT token 泄露了怎么办?
使用 https 加密你的应用,返回 jwt 给客户端时设置 httpOnly=true 并且使用 cookie 而不是 LocalStorage 存储 jwt,这样可以防止 XSS 攻击和 CSRF攻击 -
Secret如何设计?
jwt 唯一存储在服务端的只有一个 secret,个人认为这个 secret 应该设计成和用户相关的属性,而不是一个所有用户公用的统一值。这样可以有效的避免一些注销和修改密码时遇到的窘境。 -
- 注销和修改密码?
传统的 session+cookie 方案用户点击注销,服务端清空 session 即可,因为状态保存在服务端。但 jwt 的方案就比较难办了,因为 jwt 是无状态的,服务端通过计算来校验有效性。没有存储起来,所以即使客户端删除了 jwt,但是该 jwt 还是在有效期内,只不过处于一个游离状态。分析下痛点:注销变得复杂的原因在于 jwt 的无状态。提供几个方案,视具体的业务来决定能不能接受:
仅仅清空客户端的 cookie,这样用户访问时就不会携带 jwt,服务端就认为用户需要重新登录。这是一个典型的假注销,对于用户表现出退出的行为,实际上这个时候携带对应的 jwt 依旧可以访问系统。
清空或修改服务端的用户对应的 secret,这样在用户注销后,jwt 本身不变,但是由于 secret 不存在或改变,则无法完成校验。这也是为什么将 secret 设计成和用户相关的原因。
借助第三方存储自己管理 jwt 的状态,可以以 jwt 为 key,实现去 Redis 一类的缓存中间件中去校验存在性。方案设计并不难,但是引入 Redis 之后,就把无状态的 jwt 硬生生变成了有状态了,违背了 jwt 的初衷。实际上这个方案和 session 都差不多了。
修改密码则略微有些不同,假设号被到了,修改密码(是用户密码,不是 jwt 的 secret)之后,盗号者在原 jwt 有效期之内依旧可以继续访问系统,所以仅仅清空 cookie 自然是不够的,这时,需要强制性的修改 secret。
- 注销和修改密码?
-
- 如何解决续签问题
传统的 cookie 续签方案一般都是框架自带的,session 有效期 30 分钟,30 分钟内如果有访问,session 有效期被刷新至 30 分钟。而 jwt 本身的 payload 之中也有一个 exp 过期时间参数,来代表一个 jwt 的时效性,而 jwt 想延期这个 exp 就有点身不由己了,因为 payload 是参与签名的,一旦过期时间被修改,整个 jwt 串就变了,jwt 的特性天然不支持续签。
解决方案
- 如何解决续签问题
-
- 每次请求刷新 jwt。
jwt 修改 payload 中的 exp 后整个 jwt 串就会发生改变,那就让它变好了,每次请求都返回一个新的 jwt 给客户端。只是这种方案太暴力了,会带来的性能问题。
2.只要快要过期的时候刷新 jwt
此方案是基于上个方案的改造版,只在前一个jwt的最后几分钟返回给客户端一个新的 jwt。这样做,触发刷新 jwt 基本就要看运气了,如果用户恰巧在最后几分钟访问了服务器,触发了刷新,万事大吉。如果用户连续操作了 27 分钟,只有最后的 3 分钟没有操作,导致未刷新 jwt,无疑会令用户抓狂。 - 完善 refreshToken
借鉴 oauth2 的设计,返回给客户端一个 refreshToken,允许客户端主动刷新 jwt。一般而言,jwt 的过期时间可以设置为数小时,而 refreshToken 的过期时间设置为数天。 - 使用 Redis 记录独立的过期时间
在 Redis 中单独为每个 jwt 设置了过期时间,每次访问时刷新 jwt 的过期时间,若 jwt 不存在与 Redis 中则认为过期。
-
redis
-
NoSQL的全称是Not-Only SQL,指的是非关系型数据库,它是关系型数据库的补充,没有表与表之间的关系,主要用于海量数据的处理问题。
Redis (REmote DIctionary Server): 是基于C 语言编写的一个开源的单线程的高性能键值对(key-value)数据库。可以用来做缓存(长久保存,且不经常变化的数据),处理即时信息(临时性的,经常变化的),解决服务器集群中session分离问题(本质还是处理即时信息)。 -
Redis的数据类型有哪些?它的数据操作是怎么样的?
Redis有5种主要数据类型:string、hash、list(有序、可重复)、set(无序、不可重复)、zset(不可重复,基于score实现排序)
数据操作:
Redis中的数据存储方式是key-value形式;
Redis不能保存JAVA对象,需要转为JSON对象后存入Redis。 -
请列举几个常用的Redis指令。
Set、del、get、ping、select index(切换数据库)、keys(查询key) -
Redis为什么存取速度那么快?
①完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1);
②数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;
③采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
④使用多路 I/O 复用模型,非阻塞 IO;
⑤使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求; -
Redis的持久化方式有哪些
有两种:RDB和AOF。
RDB是二进制快照形式,数据体量小,保存效率高,但丢失风险也较大,因为它是定时定量更改才会自动持久化,无法实时存储,如果在快照之前丢失,则无法找回。
AOF是过程命令形式,数据体量大(可以用AOF重写解决该问题),效率低于RDB,记录每个操作,存储格式也更复杂,但数据相对完整(最快可以每秒同步一次),且弥补了RDB不能实时存储的缺点。- AOF数据体量大,那有什么办法可以解决这个问题吗?
Redis中引入了AOF重写机制可以压缩文件体积——执行压缩命令即可。
AOF重写可以降低磁盘占用量,也能提高数据恢复效率,它会对同一数据的多条写命令合并为一条写命令,且为了防止数据量过大造成缓冲区溢出,每条指令最多为64个元素。
AOF重写其实是一个同步开启的子进程,Redis执行指令时,子进程也会开启重写,主进程会将写入的数据同步到子进程,子进程则开始重写AOF文件,写完后再返回给主进程,完成AOF重写。
选用:如果对数据非常敏感用AOF,如果追求大数据集的恢复速度选RDB。
- AOF数据体量大,那有什么办法可以解决这个问题吗?
-
什么是缓存穿透、缓存雪崩、缓存击穿?
缓存穿透:就是指反复查询一个数据库一定不存在的数据,导致数据库压力过大,这种情况一般只有恶意攻击才会出现。
解决办法:把查询的对象设为空值,也放入缓存,并设定较短的缓存过期时间,用户下次访问就会查询到null值,如果还是频繁查询这个null值。
-
缓存雪崩:指某一个时间段内,缓存集中的过期失效,导致大量请求过来,压力都集中到数据库。
解决办法:1、设置缓存的失效时间尽量错开(比如30天+随机数),热门数据时间长点,不热门的时间短点。2、设置多级缓存,Nginx缓存+redis缓存+ehcache缓存……每一个缓存都是一个集群,相同的数据会在多种服务器进行缓存,可以100%解决缓存雪崩。3、侧面解决:优化数据库,提升效率,使用页面静态技术代替从redis中取值。
缓存击穿:是指一个热点key的redis缓存失效,导致大量请求瞬间集中到数据库。
解决办法:将热点数据设置长时间缓存即可,一般只在特殊时期设置热门产品时用。
- redis主从复制
redis主从复制模式其实是一个读写分离模型,将主服务器用来处理写操作,从服务器只提供读操作,不过主从复制是所有内容完全一致的,而不是分库分表的,严格来说不算集群。
主从复制模式最大的问题是只有一个主节点,没有实现高可用,所以还需要哨兵机制来实现高可用。
- redis的哨兵
什么是Redis哨兵?
sentinel(哨兵)是用于监控redis集群中Master状态的工具,其本质就是一个独立运行的进程,是Redis 的高可用解决方案。
sentinel可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求,并且其余从节点开始从新的主节点复制数据。(它会直接修改配置文件,来实现修改主服务器)
在redis安装完成后,会有一个redis-sentinel的文件,这就是启动sentinel的脚本文件,同时还有一个sentinel.conf文件,这个是sentinel的配置文件。
但哨兵也可能会挂,所以需要对哨兵也实现高可用。
哨兵的核心知识
哨兵至少需要 3 个实例,来保证自己的健壮性。
哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性。
对于哨兵 + redis 主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练。
- 什么是Redis脑裂?会存在什么问题?
一个集群中的 master 恰好网络故障,导致与 sentinal 联系不上了,sentinal 把另一个 slave 提升为了 master。此时就存在两个 master了。
当我们发现的时候,停止掉其中的一个 master,手动切换成 slave,当它连接到提升后的 master 的时候,会开始同步数据,那么自己脑裂期间接收的写数据就被丢失了。
- redis集群
- 为什么要搭建Redis集群?
Redis有内置集群cluster,redis Cluster是无中心节点的集群架构,本身就是去中心化的,也就是说,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
cluster集群中内置了哨兵机制,不需要再额外启动哨兵程序。
Redis cluster为了保证数据的高可用,加入了主从模式,主节点只用来存,从节点只用来取,如果主节点挂掉了,就会在从节点中选取一个来充当主节点。当然,如果通过集群命令,还可以使现在任何一个节点写入。
- edis集群模式的工作原理是什么?
Redis Cluster并没有使用一致性hash,而是采用slot(槽)的概念,一共分成16384个槽,假如有ABC三个节点,那么这16384个槽会分配到这三个节点所负责的区域上。
如果第一次查询正好查到对应所在的槽,直接返回数据;
如果第一次没查不对劲,则返回对应数据所在的分区。
-
阿里云OSS
- 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。
OSS可以被理解成一个即开即用、无限大空间的存储集群。
OSS将数据文件以对象/文件(Object)的形式上传到存储空间(Bucket)中。OSS提供的是一个Key-Value键值对形式的对象存储服务。用户可以根据Object的名称(Key)唯一地址获取该Object的内容。
可以进行以下OSS相关的操作:
创建存储空间,并向存储空间中上传文件。
获取已上传文件的地址,进行文件的分享和下载。
修改存储空间或文件的属性或元信息,为其设置相应的权限。
在对象存储OSS控制台进行基础和高级OSS操作。
通过开发者工具包SDK或直接在应用程序中调用RESTful API,进行基础和高级OSS操作。
特点
易用性:简单易用,便于管理,深度集成数据处理服务
高可靠:为数据持久存储提供稳定保障
多份副本:多份副本保存,有效应对各类硬件故障
冗余架构:OSS全冗余的基础架构,消除单点隐患,保障服务的高可用性
异地容灾:提供跨区域复制功能和灾备方案,支持数据自动备份在不同城市,实现异地容灾能力
强安全:多重访问控制细粒度的授权管理。Bucket|Object权限控制、Access ID和请求签名、VPC网络链路层访问控制、RAM&STS主子账号授权
低成本:数据按照冷热分层提供最具性价比的存储方式
————————————————
版权声明:本文为CSDN博主「迷雾总会解」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44766883/article/details/128636083
-
web socket
-
是一个长时链接,实现与服务端的全双工,双向的通讯。【客户端与服务端的双向通讯】
-
因为 HTTP 协议有一个缺陷:通信只能由客户端发起。http基于请求响应实现。
(准确来说HTTP只能由 客户端 单向向 服务端 请求
【如果想实现连续获取服务端的数据变化,只能通过 “轮询” 的方式获取】
(例如: 保持登录的状态的 心跳检测 机制)) -
基本步骤
浏览器发出链接请求(链接不受同源策略的影响)
服务器告知链接成功
双方进行双向通讯
关闭连接
-
-
nginx
- 是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
nginx专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告nginx能支持高达50000个并发连接数
- Nginx简介
1.反向代理,将多台服务器代理成一台服务器。
2.负载均衡,将多个请求均匀的分配到多台服务器上,减轻每台服务器的压力,提高 服务的吞吐量。
3.动静分离,nginx 可以用作静态文件的缓存服务器,提高访问速度
正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可以访问目标服务器的另外一台服务器,而这台服务器就被当做是代理人的角色 ,称之为代理服务器,于是客户端把请求发给代理服务器,由代理服务器获得目标服务器的数据并返回给客户端。客户端是清楚目标服务器的地址的,而目标服务器是不清楚来自客户端,它只知道来自哪个代理服务器,所以正向代理可以屏蔽或隐藏客户端的信息。
反向代理:从上面的正向代理,你会大概知道代理服务器是为客户端作代理人,它是站在客户端这边的。其实反向代理就是代理服务器为服务器作代理人,站在服务器这边,它就是对外屏蔽了服务器的信息,常用的场景就是多台服务器分布式部署,像一些大的网站,由于访问人数很多,就需要多台服务器来解决人数多的问题,这时这些服务器就由一个反向代理服务器来代理,客户端发来请求,先由反向代理服务器,然后按一定的规则分发到明确的服务器,而客户端不知道是哪台服务器。常常用nginx来作反向代理。
- 反向代理小结
第一个例子:
浏览器访问www.123.com,由host文件解析出服务器ip地址192.168.25.132 www.123.com
然后默认访问80端口,而通过nginx监听80端口代理到本地的8080端口上,从而实现了访问www.123.com,最终转发到tomcat 8080上去
第二个例子:
访问http://192.168.25.132:9001/edu/ 直接跳转到192.168.25.132:8080
访问http://192.168.25.132:9001/vod/ 直接跳转到192.168.25.132:8081
实际上就是通过nginx监听9001端口,然后通过正则表达式选择转发到8080还是8081的tomcat上去
- 负载均衡
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端,可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡
- 子主题 1
如何进行技术选型
1.有需求,再引入
2.选择最熟悉、使用最多的技术
3.强大社区支撑的技术
4.从业务、项目规模出发