Published on

什么是微服务

Authors

什么是微服务

跟普通的web服务有什么区别?将业务拆分成各个相互独立的服务,服务间通过rpc调用,可独立部署,互不影响。

img

借用dubbo-go的架构图,可以发现微服务大致都有如下特性:

  • 注册发现

    客户端将请求提交到服务网关,服务网关查询注册中心并将请求转发到适合的服务示例。

  • 均衡负载

    均衡负载由服务网关来完成,将服务转发的不同的示例上。

  • 配置管理

    配置中心集中式的管理每个服务的配置,而且可以动态更新

  • 链路追踪

    监控追踪请求跨越多个服务的一系列路径,生成日志。每个请求都会生成一个uuid,在请求的过程中会记录有关信息,方便快速定位问题所在服务。

  • 监控指标(metrics)

    能监控各个服务的情况,包括响应时间、吞吐量、错误率、资源情况(cpu,内存,硬盘)

  • 限流熔断

    熔断是一种过载保护,当请求过大或者服务不可用时,暂时停止对该服务的调用。可根据策略,例如10分钟调用一次,若成功测慢慢减少间隔时间,直到恢复则停止熔断。

    限流是为了应对请求过大,防止服务器被压垮。

    降级,当服务压力过大时,下线非核心服务以保障核心服务的稳定运行。

传统的微服务

各语言推出的微服务框架,例如SpringCloud,go-zero,kratos,go-dubbo等等。

这些框架通过业务层的重构,并搭配注册中心,服务中心,性能监控,链路追踪等组件,实现微服务。

代码是侵入式的。

服务网格ServiceMesh

目前微服务的形式更倾向于服务网格,主流是istio+k8s,无需重写代码,Springboot或者Gin应用可以直接变成微服务架构。借用一张Rainbond的图。

img

上图中的 istio, linkerd 和 dapr都是ServiceMesh架构。

通过SideCar侧车代理接管k8s的流量入口,实现流量的限流,熔断,链路跟踪等特性。

https://www.zhihu.com/question/514083567/answer/2391879053