微服务之服务监控和治理、容错隔离、Docker总结概述

492次阅读  |  发布于2年以前

1.微服务监控系统?

1.1 什么是监控系统?

在微服务架构中,监控系统按照原理和作用大致可以分为三类:

1.2 日志监控

组件介绍

工作流程图

1.3 调用链监控

1.3.1 什么是调用链监控?

1.3.2 为什么需要调用链监控?

1.3.3 调用链监控的作用

1.生成项目网络拓扑图

2.快速定位问题

3.优化系统

1.3.4 调用链监控的原理

主要原理就是子节点会记录父节点的id信息,要理解好三个核心的概念:Trace、Span、Annotation。

Trace

Span

Annotation

具体流程:

1.3.5 调用链监控开源应用

CAT

Open Zipkin

pinpoint

方案选型比较

1.4 度量监控

1.4.1 什么是度量监控?

Metrics一般有5种基本的度量类型:

1.Gauges(度量) 2.Counters(计数器) 3.Histograms(直方图) 4.Meters(TPS计算器) 5.Timers(计时器)

1.4.2 时序数据库有哪些?

Prometheus

OpenTSDB

InfluxDB

1.5 微服务监控体系


系统层

应用层

用户层

监控指标

2.微服务容错隔离

2.1 什么是容错隔离?

2.2 常见的可用性风险有哪些?

1.单机可用性风险

2.单机房可用性风险

3.跨机房集群可用性风险

2.3 容错隔离的方案有哪些?

1.超时

2.限流

3.降级

4.延迟异步处理

5.熔断

断路器其实就是一个状态机原理,有三种状态:

Closed:闭合状态,也就是正常状态

Open:开启状态,也就是当后端服务出故障后链路断开,不提供服务的状态

Half-Open半闭合状态,就是允许一小部分流量进行尝试,尝试后发现服务正常就转为Closed状态,服务依旧不正常就转为Open状态。

2.4 开源容错隔离应用

Hystrix原理图

Hystrix断路器的原理图

3.微服务的访问安全

3.1 什么是访问安全?

3.2 传统单机服务的访问安全机制

传统单体应用的访问示意图:

3.3 微服务如何实现访问安全?

在微服务架构下,一般有以下三种方案:

3.3.1 网关鉴权模式(API Gateway)

3.3.2 服务自主鉴权模式

3.3.3 API Token模式(OAuth2.0)

如图,这是一种采用基于令牌Token的授权方式。在这个模式下,是由授权服务器(图中Authorization Server)、API网关(图中API Gateway)、内部的微服务节点几个模块组成。

流程如下:

注意:此处也可以不换成JWT而是直接返回原Access Token。但是换成JWT更好,因为Access Token是一串不可读无意义的字符串,每次验证Access Token是否合法都需要去访问Authorization Server才知道。但是JWT令牌是一个包含JOSN对象,有用户信息和其它数据的一个字符串,后面微服务节点拿到JWT之后,自己就可以做校验,减少了交互次数。

这里面就使用到了OAuth2.0的原理,不过这只是OAuth2.0各类模式中的一种。

3.4 OAuth2.0 的「 访问安全 」

3.4.1 什么是OAuth2.0 ?

OAuth2.0 的流程如下图:

3.4.2 OAuth2.0 主要名词解释

用户数据/资源存放的地方,在微服务架构中,服务就是资源服务器。在上面的例子中,微信头像存放的服务就是资源服务器。

是指用户,资源的拥有人。在上面的例子中某个微信头像的用户就是资源拥有者。

是一个用来验证用户身份并颁发令牌的服务器。

想要访问用户受保护资源的客户端/Web应用。在上面的例子中的视频网站就是客户端应用。

Access Token,授予对资源服务器的访问权限额度令牌。

客户端应用用于获取新的 Access Token 的一种令牌。

用户的账号密码,用于在 授权服务器 进行验证用户身份的凭证。

3.4.3 OAuth2.0有四种授权模式

1.授权码(Authorization Code)

工作流程图:

2.简化式(Implicit)

工作流程图:

3.用户名密码(Resource Owner Credentials)

4.客户端凭证(Client Credentials)

4.容器技术

4.1 为什么需要容器技术?

4.2 什么是容器?

先来看一下容器与虚拟机的对比区别:

4.3 容器是如何做到资源隔离和限制?

Docker容器对这个进程的隔离主要采用2个核心技术点:

总结来说就是:Namespace 为容器进程开辟隔离进程,Cgroups限制容器进程之间抢夺资源,从此保证了容器之间独立运行和隔离。

Namespace 技术

举例:打个比方,就像是一个班级,每个人在这个班里都有一个编号,班里有90人,然后来了一位新同学,那他在班里的编号就是91,可是老师为了给这位同学特别照顾,所以在班里开辟了一块独立的看不到外面的小隔间,并告诉这个同学他的编号是1,由于这位同学在这个小空间里隔离着,所以他真的以为自己就是班上的第一位同学且编号为1,当然了,事实上这位同学在班上的编号依然是91。

Cgroups 技术

例如:在 /sys/fs/cgroup/cpu 下面创建一个 dockerContainer 子目录,系统就会自动在这个新建的目录下面生成一些配置文件,这些配置文件就是用来控制资源使用量的。例如可以在这些配置文件里面设置某个进程ID对CPU的最大使用率。

4.4 什么是容器镜像?

举个例子,假如有文件夹 test1 和 test2 ,这两个文件夹里面的文件 有相同的,也有不同的。然后我们可以采用联合挂载的方式,将这两个文件夹挂载到 test3 上,那么 test3 目录里就有了 test1 和 test2 的所有文件(相同的文件有去重,不同的文件都保留)。

4.5 容器技术在微服务的实践

随着微服务的流行,容器技术也相应的被大家重视起来。容器技术主要解决了以下两个问题:

1.环境一致性问题

例如java的jar/war包部署会依赖于环境的问题(操着系统的版本,jdk版本问题)。

2.镜像部署问题

例如java,ruby,nodejs等等的发布系统是不一样的,每个环境都得很麻烦的部署一遍,采用docker镜像,就屏蔽了这类问题。

部署实践

下图是Docker容器部署的一个完整过程:

4.6 容器调度

目前基于容器的调度平台有:

总结

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8