1.什么是反射?
准确的说:在运行的状态中,对于任意一个类都能够知道这个类所有的属性和方法,并且对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
生成Class对象的三种方式
Class.forname(“类的全路径”)
类名.class
对象.getClass;
2.什么是Feign?
Feign是一个声明式的Web Service客户端,目的就是让Web Service 调用更简单,它提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP的请求参数、格式、地址等信息。
是服务内部调用关系实现通信
/**
* 1.调用哪个服务
* 2.调用哪个路径
* 3.提交什么参数
*/
@FeignClient(name = "item-service") //调用的服务名称
public interface ItemClient {
@GetMapping("/{orderId}") //调用的路径
JsonResult<List<Item>> getItems(@PathVariable String orderId); //提交的参数
@PostMapping("/decreaseNumber")
JsonResult<?> decreaseNumber(@RequestBody List<Item> items);
}
3.什么是Nginx?
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
代理服务器:
一般指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。
正向代理:
“它代理的是客户端”,是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理服务器先原始服务器转交请求并将获得得内容返回给客户端。(客户端必须要进行一些特别的设置才能使用正向代理。)
特点:
客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,并不知道来自哪个具体的客户端;正向代理隐藏了真实客户端信息。
用途:
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录,对外隐藏用户信息
反向代理
代理的是“服务端”,主要用于服务器集群分布式部署,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则发送了后端的业务处理服务器进行处理。
特点:反向代理隐藏了服务器的信息;
用途:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载;
Nginx负载均衡调度算法
1.weight 轮询(默认 )
接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
2.ip_hash:
每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
3.fair:智能调整调度算法
动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
4.url_hash:
按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。