Dubbo 在 K8s 下的思考

本文探讨了Dubbo在K8s环境下的适用性,包括K8s的基本概念、Service机制,以及Dubbo、SpringCloud、gRPC等RPC框架的对比。文章分析了Dubbo在K8s场景下的挑战,如服务注册粒度与K8s模型的匹配问题,以及在Service Mesh中的生存空间。提出了多种Dubbo与K8s集成方案,包括Dubbo+Zookeeper、Dubbo+K8s DNS、Dubbo+Api Server等,并讨论了服务查询和治理的改进方法。
摘要由CSDN通过智能技术生成
作者 | 曹胜利 Apache Dubbo PMC

导读:Dubbo 作为高性能 Java RPC 框架的刻板印象早已深入人心,在 Cloud Native 的架构选型上,Spring Cloud 或许才是业界的优先选择。实际上,Dubbo 已经悄然地衍进为 Cloud Native 基础设施,不仅承袭过去 RPC 时代的荣耀,而且也完善了现有基础设施的缺失。自从容器和 K8s 登上舞台之后,给原有的 RPC 领域带来了很大的挑战,本文主要讲述 RPC 领域遇到的问题,以及 RPC 怎么去拥抱 K8s 的一些思考。

K8s 介绍

Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效, Kubernetes 提供了应用部署、规划、更新、维护的一种机制。Kubernetes 简称 K8s。

在 Kubernetes 中,最小的管理元素不是一个个独立的容器,而是 Pod 。Pod 的生命周期需要注意以下几点:

  • 容器和应用可能随时被杀死;
  • Pod Ip 和主机名可能变化 (除非使用 StatefulSet 进行定制);
  • 写到本地的磁盘的文件可能消失,如果想不失效,需要用存储卷。

应用 & 容器 & Pod 的关系

  • 应用部署在容器中,一般情况下一个应用只部署在一个容器中;
  • 一个 Pod 下可以包含一个或多个容器,一般情况下一个 Pod 只建议部署一个容器。下列场景除外:
    • side car;
    • 一个容器的运行以来与本地另外一个容器。如一个容器下应用负责下载数据,另外一个容器下应用向外提供服务。

Service

如果一些 Pods 提供了一些功能供其它的 Pod 使用,在 Kubernete 集群中是如何实现让这些前台能够持续的追踪到这些后台的?答案是:Service 。

Kubernete Service 是一个定义了一组 Pod 的策略抽象,这些被服务标记的 Pod 一般都是通过 label Selector 决定的。Service 抽象了对 Pod 的访问。

默认的 Service ,通过一个集群 IP 获取 A Record 。但是有时需要返回所有满足条件的 Pod IP 列表,这时候可以直接使用 Headless Services 。

参考:https://kubernetes.io/

推荐书籍:kubernetes in action

RPC 介绍和分析

随着微服务的普及,应用之间的通信有了足够多的成熟方案。

  • Dubbo 在 2011 年开源之后,被大量的中小型公司采用;
  • 在 Spring Boot 推出之后,Spring 逐渐焕发出第二春,随即 Spring Cloud 面世,逐渐占领市场,在中国市场中,和 Dubbo 分庭抗争;
  • gRPC 是 Google 推出的基于 Http2 的端到端的通信工具,逐渐在 K8s 市场上占据统治地位,如 etcd,Istio 等都采用 gRPC 作为通信工具;
  • Service Mesh 从开始概念上就火热,现在逐渐走向成熟;
  • Istio + Envoy (其他 sidecar )逐渐开始走上舞台。

应用开发者视角

从功能层面来说,对开发者有感知的功能有:

  • 服务实现
  • 服务暴露(注解或配置)
  • 服务调用(注解或配置)
  • 服务治理等

从选型角度会关注以下几点:

  • 易用性(开发易用性和开箱即用)
  • 性能
  • 功能
  • 扩展性等

框架开发者视角

关键流程:

  • 服务暴露
  • 服务注册
  • 服务发现
  • 服务调用
  • 服务治理

关键知识点:

  • 序列化
  • 网络通信
  • 服务路由
  • 负载均衡
  • 服务限流
  • 熔断
  • 降级等服务治理

主流技术实现

Dubbo / HSF

  • Dubbo 提供了面向接口的远程方法调用。应用开发者定义接口,编写服务并暴露;
  • Client 端通过接口进行调用;
  • Dubbo 注册服务的维度是接口维度,每个接口会在注册中心写入一条数据;
  • Dubbo 支持条件路由,脚本路由,Tag 路由等。这些路由规则都是强依赖于 IP 地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值