一、微服务框架
1、认识微服务,服务架构的演变
大型项目一定会做分布式架构,降低耦合度
服务拆分是一方面,将来保证高可用,还要做集群,如何治理?
一些演变如:webService,ESB ,Dubble,Spring Cloud等,目前这些分布式技术也再不断的升级和迭代 (spring Cloud 只是解决服务治理问题)
现在最火的就是微服务了!
最流行的一种就是微服务,跨服务调用-微服务(业务模块对外暴漏业务接口)
微服务架构特征:目的就是实现高内聚,低耦合,降低服务之间的影响
- 单一职责
- 面向服务:比如积分服务,需要暴露一个查询积分的接口,将来用户服务就可以去调用该接口,这样就可以获取积分信息了
- 自治:独立
- 隔离性强:比如某个积分服务挂了,那么用户服务去调用积分服务的时候发现挂了,需要把故障隔离起来,提前做好容错措施,避免积分服务宕机了导致用户服务也宕机了,即:避免级联问题
总结:微服务是分布式架构的一种,分布式架构就是将服务做拆分
2、分布式服务架构案例
微服务这种方案需要技术框架来落地,国内最著名的就是 Spirng Cloud 和 阿里的Dubbo
Spring Cloud 和 Dubbo 他们都需要做服务的拆分形成集群,而集群中的每个服务都要遵循单一职责的原则,而且要面向服务,对外暴露业务接口,这样服务之间就可以做一些相互的调用了
这么多服务需要维护,就用到了注册中心,他可以维护微服务里边每个节点的信息,并且去监控这些节点的状态
微服务技术对比,SpringCloudAlibaba 是 在 SpringCloud的基础上开发的,实现了SpringCloud的技术,并兼容了自己的Dubbo技术
Spring Cloud :服务调用直接用http协议,就像我们以前编写的Controller 就是http协议的(像Controller里的方法,参数支持HttpServletRequest 等这不是就http模式嘛),只要遵循restful,任何能够发http请求的都可以调用你
Restful风格,就是RestAPI,就是采用http协议,就像大象接口调用利用http协议调用不同模块暴露的接口,或请求保司的接口,因此服务调用就用Feign方式
像Dubblo如果要升级为SpringCLoudAlibaba+Dubbo 代码是不用动的,动的只是那些外部如注册中心,配置中心等
了解SpringCloud:集成了各种微服务组件,并且基于SpringBoot实现了这些组件的自动装配
Spring Boot 最擅长的事情就是自动装配
Spring Cloud 就是把原生官方开源的组件给整合进来嘞,并且基于Spring Boot做了装配,也就是说我们拿过来就可以用,而不需要复杂的配置
Spring Cloud 底层是基于Spring Boot做了自动装配,所以有版本兼容问题
左边是Spring Cloud版本,右边是Spring Boot版本,也就是说,如果Spring Cloud 用了Greenwich版本,那么SpringBoot就必须用2.1.几的版本,如果用2.0.x的版本,将来可能就会报错,或起不来
SR5用的是2.2.X版本,如果是SR5以上,那就得用2.3.x,我们课程里用的是Hoxton.SR10,所以是SpringBoot版本得是2.3.x
2.1 小节:服务拆分
比如说现在有一个需求,查询订单信息,同时把订单关联的用户信息、商品信息也都查出来
以前的开发模式是 写一个方法去查询订单,在订单查询的过程中得到了用户id,再去数据库里把用户查出来,得到商品id再去数据库里把商品查出来,这些功能全部写到订单模块里,其实是违背了微服务的原则 独立,每个模块是独立的,如果订单模块想要获取用户信息,用户模块需要暴露出一个接口供订单模块去调用
导入实用篇的代码cloud-demo,父工程cloud-demo负责管理整个项目的依赖,两个子工程,orderSerivce 和 userService,导入库表,来模拟服务分离
order-service对应的库是cloud_order、user_service对应的库是cloud_user
路径这就是Restful格式,controll 暴露方法遵循http协议,就是用http方式可以请求
所谓restful 风格,就是遵循http协议可以请求
路径里的参数接收可以用 @PathVariable(" ") 来接收
两个项目都起来以后,浏览器输入
http://localhost:8081/user/1 请求user服务
http://localhost:8080/order/101 请求order服务
每个服务有单一的职责,order服务查订单,user服务查用户,并且数据库我们也做了分离
导入项目后点几show service 就会显示,启动项目后idea有个好处,直接点击端口,就会访问浏览器了
总结:
2.2 小节:微服务远程调用
根据订单id 查询订单和用户,然后将数据组装起来,自己查自己,服务调用,暴露,面相服务