- Published on
什么是微服务
- Authors
- Name
- JiGu
- @crypto20x
什么是微服务
跟普通的web服务有什么区别?将业务拆分成各个相互独立的服务,服务间通过rpc调用,可独立部署,互不影响。
借用dubbo-go的架构图,可以发现微服务大致都有如下特性:
注册发现
客户端将请求提交到服务网关,服务网关查询注册中心并将请求转发到适合的服务示例。
均衡负载
均衡负载由服务网关来完成,将服务转发的不同的示例上。
配置管理
配置中心集中式的管理每个服务的配置,而且可以动态更新
链路追踪
监控追踪请求跨越多个服务的一系列路径,生成日志。每个请求都会生成一个uuid,在请求的过程中会记录有关信息,方便快速定位问题所在服务。
监控指标(metrics)
能监控各个服务的情况,包括响应时间、吞吐量、错误率、资源情况(cpu,内存,硬盘)
限流熔断
熔断是一种过载保护,当请求过大或者服务不可用时,暂时,停止对该服务的调用。可根据策略,例如10分钟调用一次,若成功测慢慢减少间隔时间,直到恢复则停止熔断。
限流是为了应对请求过大,防止服务器被压垮。
降级,当服务压力过大时,下线非核心服务以保障核心服务的稳定运行。
传统的微服务
各语言推出的微服务框架,例如SpringCloud,go-zero,kratos,go-dubbo等等。
这些框架通过业务层的重构,并搭配注册中心,服务中心,性能监控,链路追踪等组件,实现微服务。
代码是侵入式的。
服务网格ServiceMesh
目前微服务的形式更倾向于服务网格,主流是istio+k8s,无需重写代码,Springboot或者Gin应用可以直接变成微服务架构。借用一张Rainbond的图。
上图中的 istio, linkerd 和 dapr都是ServiceMesh架构。
通过SideCar侧车代理接管k8s的流量入口,实现流量的限流,熔断,链路跟踪等特性。