微服务是相对于单体服务来说的,即将单体服务按照一定的规则进行拆分,如按照业务类型,如:
单体服务:如hubble-api,hubble-job
微服务:如hubble-biz-cm(配置服务),hubble-biz-host(资产服务)、告警查询服务、告警投递服务、数据统计服务等
进化过程:单体服务 → 部分拆分 → 服务间交互? –> 架构标准化,术语标准化
主要角色:
注册中心,服务提供者,服务消费者
优点:
缺点:
优点:
缺点:
基于spring boot可快速开发单个微服务。框架的框架,简化配置文件,降低开发难度。
类比:
Spring cloud:互联网
Spring boot:服务器
理念:约定优于配置。目的在于减少软件开发人员所需要做出的决定的数量。
优点:
K8S
Docker
服务网格。它是一组和应用服务部署在一起的轻量级的网络代理。使微服务治理与服务本身解耦。
1、多样化的灰度发布(金丝雀发布);
2、故障注入(类似小鹿乱撞,但场景较少)。支持随机向服务通信中注入故障(如模拟延时/网络中断),检测服务的可靠性;
3、提供非侵入的熔断,超时,重试机制;
4、安全认证。无侵入式地为服务增加认证、鉴权和加密通信的能力。
相关配置
#按照流量比例灰度
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: vs-hubble-biz-host
namespace: hubble-manager-istio-host
spec:
gateways:
- hubble-gateway
- mesh
hosts:
- istio.hubble.qiyi.domain
- m-biz-host.hubble-manager-istio-host.svc.cluster.local
http:
- match:
- uri:
prefix: /api/biz/host
route:
- destination:
host: m-biz-host.hubble-manager-istio-host.svc.cluster.local
subset: hubble-biz-host-2-2-7-005
weight: 10
- destination:
host: m-biz-host.hubble-manager-istio-host.svc.cluster.local
subset: hubble-biz-host-2-2-7-006
weight: 90
#按照用户灰度(比如hubble-query,访问量比较多的组token,可以按照用户升级,好处是方便和业务沟通效果)
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
很多系统都会涉及服务注册与发现,如K8S,Promethus,Spring Cloud(eureka),zookeeper、Dubbo,consul
服务注册:针对服务提供者。服务提供方将自己调用地址注册到服务注册中心,让服务调用方能够方便地找到自己。
注册中心:中间代理,价值就是管理服务,管理一个健康的服务列表。
服务发现:针对服务消费者。服务调用方从服务注册中心找到自己需要调用的服务的地址。
3.1、介绍
针对Service资源对象而言。
发现的含义:pod怎么找到另一个pod,并发送请求
3.2、注册与发现流程
注册过程:
发现流程:
3.3、使用案例
比如prometheus server将告警消息打到alertmanager:http://prometheus-api.qiyi.domain/prometheus/prometheus/
比如prometheus operator ServiceMonitor配置:QKE
3.4、K8S服务注册与发现总结
服务注册:Service
注册中心:DNS
服务发现:服务使用者,如Pod,从注册中心(DNS)拉取服务列表
原理:借助第三方服务发现代理,如k8s服务发现,eureka服务发现,consul服务发现
Configuration | Prometheus
K8S(kubernetes_sd_configs):http://prometheus-api.qiyi.domain/prometheus/prometheus/
Promethus服务发现角色总结:
服务注册:无
注册中心:第三方注册中心,如eureka,k8s的Service
服务发现:针对第三方注册中心开发发现逻辑
介绍
eureka服务注册与发现组件,是spring cloud推荐的注册中心实现,是分布式开发的核心组件之一
http://10.49.4.119:9500/
架构
高可用(ap)(对比zookeeper(cp))
eureka:集群部署,数据备份,当某个节点挂掉之后,客户端请求会自动切换 到新的Eureka节点;当宕机的服务器重新恢复后,Eureka会再次将其纳入到服务器集群管理之中;
zookeeper:虽然也是集群部署,数据备份,但是zookeeper当集群中只有master提供服务,当master节点挂了之后,会进行重新选举,选举需要花费秒级的时间;
自我保护机制
当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。
对服务进行声明式调用,封装了接口调用,让接口调用变的简单,代码层面类似于调用方法
普通web调用:
|
缺点:
feign调用:
声明:@FeignClient(name = "hubble-biz-aiops")
List
Feign优势:
响应压缩配置:
|
ribbon 是一个客户端负载均衡器,可类比于nginx的负载均衡模块功能。
服务提供者往往是通过集群部署,ribbon的职责是将请求均匀的转发服务集群中的所有服务器/POD
和nginx区别
nginx:独立的负载均衡服务,消费者与服务提供者的中间组件
ribbon:进程内负载均衡,类库
|
熔断器。
作用:当发现服务提供者有问题时,及时停止调用,避免影响自己和服务提供者。
详情见六单独描述
作用:网关,参考nginx
对比nginx无优势,性能差不多
配置中心。
作用:动态更新配置。
当前hubble微服务未使用
消息总线。
作用:用于在集群(例如,配置变化事件)中传播状态变化,可与Config联合实现热部署,达到自动化动态更新配置。
服务注册与发现。
作用:类似Eureka,Eureka2.x已经闭源。
原理:基于Consul,封装了Consul操作
安全认证。
如登录系统时的用户名,密码
我们统一使用公司单点登录
熔断的目的:是为了保证服务高可用。不能因为系统中的一个小服务不可用,从而导致整个系统崩溃。
目标:1、快速失败。2、自愈。
熔断策略:
状态:
状态切换:
1、当请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态(Open)。这时所有请求会直接失败而不会发送到后端服务。
2、断路器保持在开路状态一段时间后(默认5秒),自动切换到半开路状态(HALF-OPEN)。这时会判断下一次请求的返回情况,如果请求成功,断路器切回闭路状态(CLOSED),否则重新切换到开路状态(OPEN)。
Fallback
Fallback相当于是降级操作。对于重要的查询操作可以将缓存数据返回,让业务无感知。
资源隔离技术
通过线程池实现。每个应用名称对应一个线程池。
|
Hystrix遵循的设计原则总结: