概念

!!! info 个人理解微服务
将原本在一起提供功能的代码抽取出来,各自独立部署 提供服务

UserController UserService UserServiceImpl UserMapper + 配置文件 + 存储用户信息的数据库
这一整套关于User的操作起初是和其他功能在一个文件夹中,比如Controller文件夹中就可能还含有 OtherController

如果单单是因为文件在一起就拆分,那可能是有强迫症

我觉得真正需要将服务拆分的原因还是因为:

一个功能的被访问次数过多会影响其他服务的性能,这是单体项目所不能避免的
当然我们可以提供加机器的方式做集群,来使得服务高可用
但是单体架构的项目一旦某个功能出现异常,也还是会影响其他正常功能。

从扩展性方面看,每一个服务单独部署,我就可以将用户量请求大的服务多部署几个,做一下负载均衡,请求量小的或者说压力小的就没有必要了。

!!! warning 不要迷信微服务
我参考网上java的学习顺序进行自学,按照以往的学习习惯,后期学的东西应该是比前期学的更加高级,应该经常使用。
我觉得并不是这样,微服务与单体的适用范围并不相同,纵使微服务有诸多好处,但是它的复杂性也很大。
如果应用小,需要快速开发试错,使用单体架构才是一种更合适的选择。
虽然现在企业不管大小,都要求人懂SpringCloud,nacos,zookeeper,好像说错了,大公司好像没有这样的要求,人家要求基础扎实。但是要求应届生甚至是实习生会这些真的现实吗?
当然,每个人对会的理解不同,就不多说了。

SpringCloud

SpringCloud 原先我以为是跟SpringBoot平级的框架,但是在我了解了微服务项目之后才知道,SpringBoot 引入个依赖就是SpringCloud了,啊哈哈哈。
当然这是片面的说法,SpringCould还包括了一堆的组件,学习这些是重中之重。

nacos 注册中心 配置中心

注册中心其实早就知道了,第一款知道的是Zookeeper,是在学Dubbo这个RPC框架的时候知道的。 那时候理解的只是注册中心的名字

微服务进行拆分之后,某些服务之间肯定是需要相互调用的,在原先的单体架构中,导个包就解决了。

现在服务之间想要使用对方的功能就需要通过网络来实现,java确实也提供了网络编程包,你要进行网络连接,首先你得知道URL,URL好说,毕竟是我们自己部署服务,部署在哪台机器上的哪个端口还是知道的,可问题在于 每个服务只部署一次吗?
显然不是,你都用微服务了,可见项目肯定非常大,某些服务肯定不会只部署在一台机器上,那这个时候URL怎么写,负载均衡怎么做?

  1. 将机器的URL放入集合中,随机选用一个作为请求参数……
  2. 注册中心
    第一种方式我没做过,之后会遇见什么问题我也不知道

注册中心在经过配置之后,会在服务启动时将提供的服务注册到注册中心,当某一个需要这个服务的 服务(说的有点绕)调用的时候,就不要知道提供服务的那一方的url,只需要知道注册中心的url就好了,而且nacos注册中心还提供负载均衡的配置,十分方便。

简化远程调用

SpringCloud 集成了OpenFeign (声明式HTTP客户端框架) ,它的作用就是简化远程调用,就是让编码更简约。

与他功能相似的中间件还有 Dubbo(RPC框架),还没有深入学习……