day3——SpringCloud微服务

1 SpringCloud

最简单使用逻辑:编写实体类、调用mapper,编写Service层,最后编写对外接口

2 Nginx

作用:反向代理,用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器。

3 Eureka

作用:解决服务管理问题

4 Robbin

作用:解决服务的访问问题,实现负载均衡

5 Feign 

作用:Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做

使用Robbin,存在大量重复代码,格式基本相同,Feign可以对齐优化

6 Hystrix(在Feign中会有集成)

通过Fallback这种融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延

7 Zuul

作为网关的其中一个重要功能,就是实现请求的鉴权。而这个动作我们往往是通过Zuul提供的过滤器来实现的。

(Zuul中默认就已经集成了Ribbon负载均衡和Hystix熔断机制)

为什么要用Zuul?

在该架构中,我们的服务集群包含:内部服务Service A和Service B,他们都会注册与订阅服务至Eureka Server,而Open Service是一个对外的服务,通过均衡负载公开至服务调用方。我们把焦点聚集在对外服务这块,直接暴露我们的服务地址,这样的实现是否合理,或者是否有更好的实现方式呢?

 

先来说说这样架构需要做的一些事儿以及存在的不足:

 

首先,破坏了服务无状态特点。

为了保证对外服务的安全性,我们需要实现对服务访问的权限控制,而开放服务的权限控制机制将会贯穿并污染整个开放服务的业务逻辑,这会带来的最直接问题是,破坏了服务集群中REST API无状态的特点。

从具体开发和测试的角度来说,在工作中除了要考虑实际的业务逻辑之外,还需要额外考虑对接口访问的控制处理。

其次,无法直接复用既有接口。

当我们需要对一个即有的集群内访问接口,实现外部服务访问时,我们不得不通过在原有接口上增加校验逻辑,或增加一个代理调用来实现权限控制,无法直接复用原有的接口。

 

无状态服务(Stateless Service):

是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的

 

有状态服务(Stateful Service):

是指该服务的实例可以将一部分数据随时进行备份,并且在创建一个新的有状态服务时,可以通过备份恢复这些数据,以达到数据持久化的目的。

 

 

8 Hook

参考链接:https://zhuanlan.zhihu.com/p/86534217

一、什么是 Hook 技术

  Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。

  要实现钩子函数,有两个步骤:

  1. 利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)

  2.动态代理(使用所有场景)

 

二、Hook 技术实现的步骤

  Hook 技术实现的步骤也分为两步

  1.找到 hook 点(Java 层),该 hook 点必须满足以下的条件:需要 hook 的方法,所属的对象必须是静态的,因为我们是通过反射来获取对象的,我们获取的是系统的对象,所以不能够 new 一个新的对象,必须用系统创建的那个对象,所以只有静态的才能保证和系统的对象一致。

  2.将 hook 方法放到系统之外执行(放入我们自己的逻辑)

 

我就以我觉得的比较简单的方式来理解一下Hook,我要实现的功能是:

1. 继承某个可以继承的对象,然后重写某个方法,添加中间处理,比如验证等。完事了既可以用super调用父类的方法.

2. 然后用这个新的对象变量替换掉原有的变量,实现对象变量的动态替换

3. 重点也就是Field、Proxy的基本使用

 

回调函数和钩子函数

https://blog.csdn.net/lipeionline/article/details/6369657

关于定义:

什么是回调函数?

简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

为什么要使用回调函数?

因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为 int )的被调用函数。

什么是钩子函数?

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。

猜你喜欢

转载自blog.csdn.net/qq_42198024/article/details/107824432