参考网上的开源你项目,自己开发一个《在线教育系统》,涉及到Spring Cloud 的一些相关知识,通过查阅资料,写一下自己的理解,如有不当之处,敬请指正,不胜感激!
1.微服务简介
简单来说:
- 微服务是一种架构风格
- 把一个项目拆分成独立的多个服务,多个服务是独立运行的,每个服务占用独立进程
1.1 微服务架构和单体结构的区别
- 耦合度
- 单体架构所有的模块全都耦合在一块,代码量大,维护困难。
- 微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。
- 数据库
- 单体架构所有的模块都共用一个数据库,存储方式比较单一。
- 微服务每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。
- 开发技术
- 单体架构所有的模块开发所使用的技术一样。
- 微服务每个模块都可以使用不同的开发技术,开发模式更灵活。
1.2 换种方式理解微服务架构
- 单体架构:一个会语数外全能的老师,为学生服务,这个老师生病了,那全校听课;
- 微服务架构:学校有了数学教研组、语文教研组、英语教研组,每个教研组有一群老师负责某科的教学,缺了谁,学校都照样运转。
1.3 常用微服务的开发框架
目前微服务的开发框架,最常用的有以下四个:
- Spring Cloud(现在非常流行的微服务架构)
- Dubbo
- Dropwizard关注单个微服务的开发)
- Consul(微服务的模块)
2.Spring Cloud 简介
2.1 简介
- SpringCloud 并不是一种技术,是很多技术的总称,很多框架的集合;
- SpringCloud里面有很多框架(技术),使用SpringCloud里面的这些框架实现微服务的操作;
- 使用SpringCloud,必须依赖于SpringBoot技术
2.2 Spring Cloud 相关基础服务组件
- 服务发现——Netflix Eureka (Nacos)
- 服务调用——Netflix Feign
- 熔断器——Netflix Hystrix
- 服务网关——Spring Cloud GateWay
- 分布式配置——Spring Cloud Config (Nacos)
- 消息总线 —— Spring Cloud Bus (Nacos)
2.3 常用注册中心
- Eureka(原生,2.0遇到性能瓶颈,停止维护)
- Zookeeper(支持,专业的独立产品。例如:dubbo)
- Consul(原生,GO语言开发)
- Nacos
简要说明一下注册中心 Eureka(Nacos):
- 每个教研组就是一个微服务集群,注册中心存放这个教研组老师名单的地方,学生们要先访问这个注册中心获取教师名单,再去访问老师。
2.3 Spring Cloud 调用接口的过程
- Feign – 服务调用
- 定义和实现依赖服务接口的定义。在Spring Boot中绑定服务提供发的接口
- Hystrix
- 熔断处理机制 Feign的调用关系,会被Hystrix代理拦截,对每一个Feign调用请求。如果请求判断需要熔断,则Hystrix直接熔断,抛出异常或者使用FallbackFactory返回熔断Fallback结果;如果通过,则将调用请求传递给Ribbon组件。
- 简单理解一下:Hystrix 可以当作学校的志愿者,当一个教研组集体罢课以后,学生找不到老师了,这些志愿者及时地告诉来访问的学生,相应的结果,异常信息等,免得大量的学生在学校等待,这些志愿者赶快把等待的学生梳理出去。
- Ribbon – 负载均衡
- 根据服务的服务质量,如平均响应时间,Load等,结合特定的规则,从列表中挑选合适的服务实例,选择好机器之后,然后将机器实例的信息请求传递给Http Client客户端,HttpClient客户端来执行真正的Http接口调用;
- 简单理解一下:学生根据负载均衡的方法去访问各自的老师,不至于让集群中的某一个老师累死,也不会让某一个老师太闲。
- http client
- Http客户端,真正执行Http调用根据上层Ribbon传递过来的请求,已经指定了服务地址,则HttpClient开始执行真正的Http请求;
- 简单理解一下:分配端口。
转载:https://blog.csdn.net/Kc635908933/article/details/117339428
查看评论