微服务解决方案调研

微服务要点

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

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

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

微服务要点kubernetesspringcloud第三方套件
服务发现kubernetes Service & kubernetes Ingress ResourcesEurekaConsul
负载均衡kubernetes ServiceRibbon-
高可用kubernetes pod--
集群容错pod飘移--
调度与部署kubernetes Scheduler & kubernetes deployment & docker--
弹性伸缩kubernetes Autoscale--
API网关kubernetes Ingress Controllerzuul-
服务故障隔离与熔断kubernetes pod Health CheckHystrix,Turbine&Ribbon-
配置管理kubernetes ConfigMap & SecretsconfigApollo,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方案可以从平台层面处理微服务架构要点,而不需要更改任何服务代码。应用开发者只需专注开发应用和服务,极大减少了应用程序的代码。

微服务要点kubernetesIstio第三方套件
服务发现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. 采用第三方套件时有一定的学习成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值