微服务解决方案调研

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wenwenxiong/article/details/79969180

微服务要点

微服务架构的各要点包括服务发现、负载均衡、高可用、集群容错、调度与部署、弹性伸缩、API网关、服务的故障隔离和熔断、配置管理、日志采集、分布式调用跟踪、监控告警。

方案一:kubernetes+springcloud+第三方套件

Spring Cloud 和 kubernetes 是基于不同视角的微服务框架,Spring Cloud是从java语言层面提供一整套微服务框架解决方案。kubernetes则是不拘于特定语言、从服务运行的平台层提供微服务框架需要的功能支持。
从应用的生命周期角度来看,K8S 覆盖了更广的范围,特别像资源管理,应用编排、部署与调度等,Spring Cloud 则对此无能为力。
从功能上看,两者存在一定程度的重叠,比如服务发现、负载均衡、配置管理、集群容错等方面,但两者解决问题的思路完全不同,Spring Cloud 面向的纯粹是开发者,开发者需要从代码级别考虑微服务架构的方方面面,而 kubernetes 面向的是 DevOps 人员,提供的是通用解决方案,它试图将微服务相关的问题都在平台层解决,对开发者屏蔽复杂性。
下面从微服务要点对比kubernetes和springcloud的功能支持

微服务要点 kubernetes springcloud 第三方套件
服务发现 kubernetes Service & kubernetes Ingress Resources Eureka Consul
负载均衡 kubernetes Service Ribbon -
高可用 kubernetes pod - -
集群容错 pod飘移 - -
调度与部署 kubernetes Scheduler & kubernetes deployment & docker - -
弹性伸缩 kubernetes Autoscale - -
API网关 kubernetes Ingress Controller zuul -
服务故障隔离与熔断 kubernetes pod Health Check Hystrix,Turbine&Ribbon -
配置管理 kubernetes ConfigMap & Secrets config Apollo,disconf,diamond
日志采集 - - 容器化部署EFK(Fluentd)或者ELK(LogStash)
分布式调用跟踪 - Sleuth 容器化部署Zipkin或者OpenTracing
监控 - Spectator&Atlas 容器化部署Heapster+Grafana或者Prometheus+Grafana

应用kubernetes和springcloud作为微服务解决方案,由kubernetes提供平台级的微服务框架要点功能支撑,针对java应用可以采用springcloud的组件来提供应用级别的服务故障隔离与熔断功能支持是一种优秀的方案。如果java应用强烈采用springcloud的应用级的微服务框架要点功能支撑,则将其不纳入kubernetes平台级的微服务管控,否则会出现管控混乱。

缺点:

  1. 微服务之间的认证授权需在API网关或应用程序内部实现,较难控制。
  2. 应用级别的服务故障隔离与熔断功能需在应用程序内部实现。
  3. kubernetes的配置管理对于configmap没有提供配置自动更新的功能。
  4. 采用第三方套件时有一定的学习成本。

方案二:kubernetes+serviceMesh+第三方套件

serviceMesh(服务网格):服务网格是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。在实践中,服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。
关于serviceMesh(服务网格)的介绍和开源组件对比见上篇博客《serviceMesh服务网格与开源工具》。
下面以serviceMesh开源组件Istio为例进行方案说明。
使用kubernetes加Istio方案可以从平台层面处理微服务架构要点,而不需要更改任何服务代码。应用开发者只需专注开发应用和服务,极大减少了应用程序的代码。

微服务要点 kubernetes Istio 第三方套件
服务发现 kubernetes Service & kubernetes Ingress Resources - Consul
负载均衡 kubernetes Service 支持 -
高可用 kubernetes pod - -
集群容错 pod飘移 - -
调度与部署 kubernetes Scheduler & kubernetes deployment & docker - -
弹性伸缩 kubernetes Autoscale - -
API网关 kubernetes Ingress Controller - -
服务故障隔离与熔断 kubernetes pod Health Check 支持 -
配置管理 kubernetes ConfigMap & Secrets - Apollo,disconf,diamond
日志采集 - Istio集成EFK(Fluentd) 容器化部署EFK(Fluentd)或者ELK(LogStash)
分布式调用跟踪 - Istio集成Zipkin 容器化部署Zipkin或者OpenTracing
监控 - Istio集成Prometheus+Grafana 容器化部署Heapster+Grafana或者Prometheus+Grafana

Istio的额外特性

特色功能 Istio
服务安全 支持服务间双向TLS认证
生成服务图展示 Istio集成ServiceGraph
服务间流量管控 支持流量百分比拆分,可应用于金丝雀部署;支持为服务设置带条件的流量速率限制
服务间访问策略管控 支持ACL检查,Istio的路由规则可以在路由请求到后端服务时获取更大的控制度,例如为服务上的指定URL的所有请求设置4秒的超时时间

缺点

  1. Istio是一个较新的服务网格开源组件,目前还没有在生产环境部署。
  2. 开发人员对Istio相关经验较少,有一定的学习成本。
  3. kubernetes的配置管理对于configmap没有提供配置自动更新的功能。
  4. 采用第三方套件时有一定的学习成本。
阅读更多

没有更多推荐了,返回首页