微服务特点
- 按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
- 每个微服务都有自己独立的基本组件,例如数据库、缓存等,且运行在独立的进程中。
- 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
- 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
- 单个微服务能够集群化部署,并且有负载均衡的能力
- 整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
- 整个微服务系统有链路追踪的能力。
- 有一套完整的实时日志系统。
微服务功能
- 服务的注册和发现
- 服务的负载均衡
- 服务的容错
- 服务网关
- 服务配置的统一管理
- 链路追踪
- 实时日志
微服务相关概念
- 服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如服务名、IP地址等)告知服务注册中心。
- 服务发现是指当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所要消费服务的实例信息(如服务名、IP地址等)。通常情况下,一个服务即使服务提供者,也是服务消费者。
- 服务心跳:通常一个服务实例注册后,会定时向服务注册中心提供“心跳”,以表明自己还处于可用的状态。
- 负载均衡:服务消费者集成负载均衡组件,该组件会帮助服务消费者获取服务注册列表信息,并每隔一段时间重新刷新获取该列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(可以自定义配置),选择一个服务提供者的实例,向该实例进行服务消费,这样就实现了负载均衡。
- 熔断器:在分布式系统中,当用户的请求处于阻塞状态,并高并发的场景下,短时间内会导致服务器的线程资源消耗殆尽,最后导致整个系统处于瘫痪的状态也不就是雪崩效应,分布式系统引进了熔断器机制。
- 熔断器存在的意义:
- 将资源进行隔离,如果某个服务里的某个API接口出现了故障,只会隔离该API接口。不会影响到其他API接口。
- 服务降级的功能。当服务处于正常的状态时,大量的请求在短时间内同时涌入,超过了服务的处理能力,这时熔断器会被打开,将服务降级,以免服务器因负载过高而出现故障。
- 自我修复能力。当因某个微小的故障,例如网络服务商的问题,导致网络在短时间内不可用,熔断器被打开。
- 服务网关:微服务系统通过将资源以API接口的形式暴露给外界来提供服务。在微服务系统中,API接口资源通常是由服务网关(也称API网关)统一暴露,内部服务不直接对外提供API资源的暴露。通常情况下,网关层以集群的形式存在。在服务网关层之前,有可能需要加上负载均衡层,通常为Nginx双机热备,通过一定的路由策略,将请求转发到网关层。到达网关层后,经过一系列的用户身份验证、权限判断,最终转发到具体得服务。具体的服务经过一系列的逻辑运算和数据操作,最终将结果返回给用户。
- 服务网关存在的意义:
- 网关将所有的API接口资源统一聚合,对统一聚合,对外统一暴露,外界系统调用的API接口都是网关对外暴露的API接口。
- 网关可以做一些用户身份认证、权限认证,防止非法请求操作API接口,对内部服务起到保护作用。
- 网关可以实现监控功能,实时日志输出,对请求进行记录。
- 网关可以用来做流量监控,在高流量的情况下,对服务进行降级。
- API接口从内部服务分类出来,方便做测试
- 服务链路追踪:去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而使每个请求链路清晰可见,出了问题很快就能定位。