由上图可以看出,服务网关的作用是非常关键的,服务网关就像我们微服务的一扇大门,把一切不速之客都挡之门外。
服务网关通过一系列的过滤器和断言匹配机制,保护着微服务的安全,同时也能够有效隐藏真实的服务地址。我们也可以把服务网关看作我们和服务提供者的中间商。
7.配置中心 设想一下,假如我们现在有几十个微服务应用,每一个微服务应用都配置了数据库的地址,账户和密码,那么某一天数据库的地址发生了改变,那我们岂不是要停止这几十个微服务应用,然后逐一对配置文件进行修改?这将是个灾难,我相信如果要这么做,那么运维直接Say no不干了。
那么针对这个情况,我们引出一个组件----配置中心。
我们通过配置中心,把一些公有的配置发到服务器上,然后当更新配置后,通过消息队列广播到各个微服务应用上,这样子就能解决以上问题了。当然我们也能够通过配置中心来简便的切换各个开发环境,如测试环境,开发环境和生产环境。
8.链路跟踪 当我们需要对每一个微服务的健康状况进行监控,甚至要细化到接口上的时候,我们就需要一个微服务组件----链路跟踪。
什么是链路跟踪?链路跟踪就像我们路口上一个个监控摄像头,你的车子只要行驶过去,你的速度,驾驶人,车牌等等信息都会被摄像头所获取,那么我们的微服务也一样,链路跟踪能够把我们每一次调用的各种信息都获取到,包括调用方法,调用类,调用时间等。
9.服务限流 服务限流这个词顾名思义就是对微服务应用进行流量限制,常用的组件是阿里巴巴的Sentinel,服务限流细分有两个策略,一个是QPS限流,一个线程数限流。那么就说说QPS限流和线程数限流的区别。
每秒查询率(QPS,Queries-per-second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
通过以上文字,我们可以知道QPS就是每秒的请求量。那么通过QPS限流的含义就很明显了,就是设置一个QPS的阈值,然后当达到这个阈值后,请求将失败,警告或者排队。
线程数,当请求A过来访问该接口,该请求处理的很慢,还没有返回数据;此时请求B也过来访问该接口,这个时候处理请求B需要额外开启一个线程,请求B则会报错;
我们可以通过一个小小举例来认识QPS和线程数的区别。假设有一个银行,银行内只有一个窗口,外面有很多人想要办理业务就必须通过该窗口来办理,那么QPS限流就是,不管业务窗口能处理多少个业务,他只管把人放进来,当人数超过阈值时,则会把所有人都赶出去,任何业务都无法办理。而线程数限流就是,逐一的把人放进来,当排队的人超过指定的线程阈值,则进行限流。
QPS单纯的代表每秒的访问次数,只要访问次数到达一定的阈值,这进行限流操作。
线程数,代表的是每秒内访问该api接口的线程数,如果该接口的操作比较长,当排队的线程数到达阈值的时候,进行限流操作,相反的如果接口的操作很快,即是每秒内的QPS很大,同样不会进行限流操作。
总结一个完整的微服务包括的组件:注册中心,配置中心,熔断,限流,链路跟踪,路由
在微服务中,有些组件为必须组件(必须启动存在),客户端才能正常调用
必须组件:注册中心,后台服务(Provider)
非必须组件:配置中心,熔断,限流,链路跟踪,路由