整个微服务学习将结合实际案例开展,选择熟悉的电商项目中的用户,商品和订单模块为例。
在开发电商系统的过程中,针对每个阶段会产生不同的需求,我们会使用SpringCloud Alibaba中的组件来实现。
例如:
● 涉及服务治理和服务配置的需求时,我们会使用Nacos实现
● 涉及到负载均衡的需求时,我们会使用Ribbon实现
● 涉及远程服务调用的需求时,我们会使用Fegin实现
● 涉及到服务容错的需求时,我们会使用Sentinel实现
● 涉及到服务网关的需求时,目前SpringCloud Alibaba中并未提供自己的网关,所以,这里使用SpringCloud中的Gateway实现。
● 涉及到链路追踪的需求时,使用Sleuth+ZipKin实现
● 涉及到消息服务的需求时,使用RocketMQ实现
● 涉及分布式事务的需求时,我们使用Seata实现
● 涉及到数据存储的需求时,我们使用Mysql + ElasticSearch实现
微服务介绍
微服务的介绍
一个系统,尤其是大型系统使用微服务架构模式进行搭建和开发时,虽然总体上提高了研发效率,支持更高并发,提高系统整体的性能和可靠性,及可维护性。
但在实现的细节上存在不少的问题。将系统拆分为各个微服务后,
- 如果管理和感知那么多的服务?
- 各微服务之间如何通信?
- 一旦系统出现问题,如果快速定位问题呢?
- 如果最大程度的保证系统的可用性?
- 客户端如何访问那么多的微服务?
项目模块划分
为了方便开发和维护,同时为了模块的复用性。整体项目在搭建时,会将用户微服务,商品微服务和订单微服务放在一个Maven父工程下,作为父工程的子模块,同时,将用户微服务、商品微服务和订单微服务都会使用的JavaBean单独作为一个Maven模块,以及各服务都会使用的工具类单独作为一个Maven模块。
其中各模块的说明如下所示:
● shop-springcloud-alibaba:Maven父工程。
● shop-bean:各服务都会使用的JavaBean模块,包含实体类、Dto、Vo等JavaBean。
● shop-utils:各服务都会使用的工具类模块。
● shop-order:订单微服务。
● shop-product:商品微服务。
● shop-user:用户微服务。
这里为微服务模块之间的交互流程。
微服务常见的概念
服务调用
将一个系统拆分为各个微服务后,各个微服务之间协同工作才能对外提供完整的服务,这就涉及到各个微服务之间的调用问题。目前各个微服务之间一般采用Restful接口或者RPC协议进行调用。
- Restful接口
一般是基于HTTP协议实现的,这种协议使用比较广泛。 - RPC协议
RPC是一种远程过程调用,能够做到像调用本地服务一样调用远程服务。RPC框架底层屏蔽了数据的传输方式,序列化方法和交互的细节信息,让使用RPC框架开发微服务的人员觉得更加简单,实现起来更加容易。
服务治理
服务治理,说白了就是如何自动化的管理各个微服务。
核心功能就是服务的注册,发现和剔除。
- 服务注册
各个微服务实例在启动时,能够将自身提供的服务注册到某个注册中心 - 服务发现
当某个微服务将自身提供的服务注册到注册中心时,其他微服务实例能够通过注册中心感知这个微服务提供的服务,并且能够获取到这个微服务的实例信息。
通过这个微服务的实例信息就能够调用这个微服务的方法,来进行相应的读写操作。 - 服务剔除
如果某个微服务实例出现故障,或者连接一直超时。则注册中心会认为当前微服务实例不可用,就会将这个微服务的实例剔除出注册中心。使其不再被其他微服务感知和调用到。
注册中心
提供微服务注册,服务发现和剔除的服务组件
服务网关
服务网关是所有微服务的入口,客户端在访问各个微服务时,首先需要经过服务网关。接入服务网关后,会将所有API的调用统一接入到API的网关层。由网关层统一接受参数进行路由转发,将返回的结果返回给客户端。
通常情况下,一个服务网关最基本的功能包括:统一接入,限流,熔断,降级,安全防护,协议适配,容错等。主要专注是对系统安全,流量和路由等的管理。这样,业务开发人员就可以专注开发业务逻辑。
服务限流
在高并发大流量下,经常会出现某个服务或在某个接口,因为调用的流量过大而导致不可用的情况,这可能会导致整个系统的崩溃。此时,就会对系统采取限流的手段来进行防护,当请求达到一定的频率或者速率时,对这些请求采取排队,等待,降级等策略,甚至是拒绝服务。
服务熔断
如果某个服务出现故障不可用,或者调用超时。为了不让其他服务受到牵连而导致整个系统不可用,则断开与这个服务的连接,暂停对个服务的调用。
服务降级
服务降级主要是从整个系统的负载情况进行考虑,如果某个服务的负载情况比较高,则为了预防某些功能出现负载过高而导致响应慢的问题。会在提供这些的功能的方法内部暂时舍弃对一些非核心接口的调用,直接返回一个提前准备好的错位进行处理信息。
服务降级是有损服务,但是能够保证整个系统的稳定性和可用性。
服务容错
服务容错指的微服务能够容纳一定错误情况的发生。
链路追踪
当系统被拆分为各个微服务后,一次请求往往会涉及多个服务之间的调用关系。如果系统出现问题,则会增加定位问题的难度。为了解决这个问题,就需要对一次请求涉及到的多个服务链路的日志进行追踪和记录,一方面记录调用的链路,另一方面还可以监控系统中各个调用环节的性能。
学习内容为冰河大佬的星球项目,需要的访问他的主页看看。
https://binghe.blog.csdn.net/?type=blog