赞
踩
目前 Dubbo、Spring Cloud、K8s是开发微服务的三个主流开源框架和平台,那么Dubbo、Spring Cloud、K8s到底该如何选型?他们分别有什么样的适用场景?有什么异同?
如果缺乏足够的经验,对微服务架构原理以及整个行业服务化演进的历史缺乏了解。那么对这三个产品该如何选择,的确会感到困惑,服务框架和平台的选择是搭建微服务架构的一个基础。好比构建一个大厦的一个基建材料,它的重要性是不言而喻的。
特别值得一提的是Dubbo、Spring Cloud、K8s分别是阿里巴巴、Netflix还有谷歌三家互联网公司,他们在应对大规模微服务开发带来的挑战时,各自独立演进出来的解决方案。换句话说,Dubbo、Spring Cloud、K8s,都是对同一个问题,也就是分布式微服务开发框架的一个解。
都是对同一个问题的解,只不过三家的解法侧重点和抽象级别不太一样。
因为都是对同一个问题的解,所以这些产品当中有部分功能是重叠的,而且可能还是排他的。
也就说,如果你选中了其中一家的产品,就不要随便混搭再选择其他家的产品。因为这三家都是自成一体的,虽然技术上可以做到把他们当中的两个甚至三个硬揉在一起。但是架构上会缺乏一致性,这时候你要同时维护多套体系,维护成本会变高。
所以对于互联网开发人员,尤其是架构师,应该对这三个产品有比较深入的理解。这样才能正确的做出选型决策,不至于在一开始打基础的时候就犯下方向性错误。
所以我们下面就来详细的剖析一下这三个产品如何选型,我们的 staffjoy 项目为什么选Spring Boot加上K8s。
我们知道微服务最终的目标是实现业务价值,交付业务价值,但是为了让开发人员能够专注于业务交付,微服务需要底层基础设施的支撑,这些基础设施也称为微服务的公共关注点(common concerns)。
我们解决微服务的技术问题,很多的时候就是在解决这些公共关注点的问题,我们具体来分析一下这些公共关注点。
配置管理
第一个是配置管理,对微服务应用的可变参数进行配置;这些参数可以是启动期一次性配置的,比方说数据库连接字符串;也可以是运行期动态配置的,比方说调整缓存的过期时间、业务促销限购数量等等,这些是可以动态配置的。
服务发现和LB
第二个是服务发现和负载均衡(LB)。服务分布在不同的节点上,服务之间要相互调用,首先要定位找到对方,这个就是服务发现。他是微服务架构的基本问题。另外,服务一般以多实例方式部署,调用方需要以某种负载均衡的策略去访问目标服务实例,这就是LB负载均衡。
弹性和容错
第三个关注点是弹性和容错,分布式微服务通过网络互联,网络有可能会不稳定,服务实例有可能产生延迟、出错、甚至宕机。微服务系统必须具备弹性和容错能力,才能保障服务质量和用户体验。
API管理
第四个关注点是API管理,这里主要指微服务系统对外暴露API。一般通过API网关进行管理,网关是微服务的大门,需要支持反向路由、安全鉴权、日志监控和限流容错等基本功能。高级的网关还要支持AB测试、蓝绿和灰度测试等高级功能,这是API管理的范畴。
服务安全
第五个关注点是服务安全,用户访问微服务首先需要认证。对某些敏感的服务进行操作还要进行鉴权,服务之间调用也需要一定的权限管控。
日志监控
第六个关注点是日志监控。服务访问日志需要进行集中的采集、存储和分析,方便后续进一步的分析微服务的性能,甚至是用户的行为。
Metrics监控
第七个关注点是Metrics监控。对微服务的调用需要进行Metrics埋点监控,Metrics监控既可以对服务的性能,包括调用量、延迟、错误数等等进行监控。也可以对重要的业务指标,如登录数、下单数进行监控。
调用链监控
第八个关注点是调用链监控。分布式微服务之间的依赖关系错综复杂,通过调用链监控,能够实时掌握微服务之间的依赖关系,服务之间调用的性能。出现问题的时候能够通过分析调用链,及时的进行排障。
调度和发布
第九个关注点是调度和发布。微服务最终是要发布到生产环境当中去的,目前推荐的微服务交付手段主要是容器云环境。容器云需要支持自动的容器资源调度和发布,高级的需要支持滚动发布,还有蓝绿发布这些高级的发布机制。
自愈和自动伸缩
第10个关注点是自愈和自动伸缩。云环境当中的节点有可能会宕机或者飘移,网络可能随机不稳定,恢复平台需要有自动侦测问题和自动恢复的能力,这个就是自愈,。也就是self-healing的能力。另外,用户流量可能会突发骤增,微服务平台理想的需要根据用户的流量的变化自动的伸缩,英文叫auto scaling,这样做可以节省硬件资源,同时又不影响用户体验。
如果把微服务的上述这些关注点,把它们抽象封装和沉淀下,最终产生的软件产品就是微服务开发框架或者说平台,那么Dubbo、Spring Cloud、K8s就是阿里巴巴、Netflix、谷歌这三家公司各自演进沉淀并且开源贡献给社区的解决方案。
在解决分布式微服务开发框架或者说平台的时候,他们三家给出的解法和侧重点不太一样,接下来做一个全面的横向比对,来分析一下这三家的产品有哪些不同点。
一、服务发现和负载均衡
服务发现和负载均衡是微服务的基本问题,三家都给出了解决方案:
二、API网关
三、配置管理
四、容错限流
五、日志监控
六、Metrics监控
七、调用链监控
八、应用打包
九、服务框架
十、发布和调度
十一、自动伸缩和自愈
十二、进程隔离
十三、环境管理
十四、资源配额
十五、流量治理
Dubbo亮点:
Dubbo不足:
Spring Cloud 亮点
Spling Cloud不足
K8s 优势
K8s 不足
Dubbo 和 Spring Cloud 比喻
Dubbo 和 Spring Cloud 是框架和组件,K8s它是一个平台。
架构风格比对:
建议:
微服务最终的目标是实现业务价值,交付业务价值,但是为了让开发人员能够专注于业务交付,微服务需要底层基础设施的支撑,这些基础设施也称为微服务的公共关注点(common concerns)。
我们解决微服务的技术问题,很多的时候就是在解决这些公共关注点的问题。
如果把微服务的上述这些关注点,把它们抽象封装和沉淀下,最终产生的软件产品就是微服务开发框架或者说平台,那么Dubbo、Spring Cloud、K8s就是阿里巴巴、Netflix、谷歌这三家公司各自演进沉淀并且开源贡献给社区的解决方案。
Dubbo、Spring Cloud、K8s 分别是阿里巴巴、Netflix还有谷歌三家互联网公司,他们在应对大规模微服务开发带来的挑战时,各自独立演进出来的解决方案。都是对同一个问题,也就是分布式微服务开发框架的一个解。
都是对同一个问题的解,只不过三家的解法侧重点和抽象级别不太一样。
K8s、Dubbo、Spring Cloud 比对:
建议 K8s + Spring Boot :
《Spring Boot 与 Kubernetes 云原生微服务实践 ~ 全面掌握云原生应用的架构设计与实现》 杨波
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。