嘉宾 |赵新(于雨)  整理 | 雷济慈

出品 | CSDN(ID:CSDNnews)

蚂蚁集团可信原生部(TNT),dubbogo社区负责人于雨在2022云原生超级英雄会上做了Apache/Dubbogo的K8s解决方案分享。

点击看完整版视频

K8s VS Dubbogo

K8s提供最基础的功能就是管理Pod,浅显来说就是卖服务器的节点。基于对Pod的管理,K8s也提供了service,对一组Pod进行服务管理,可以认为是非常简单的服务管理体系,但达不到服务治理的目的。

在微服务从业者看来K8s service跟标准的微服务体系差异还是很大的。它仅提供了一套服务发现机制,在此之上进行服务治理还有很多额外的工作需要做,而这些都要求相关从业者对K8s代码非常熟悉,而且它自身的扩展功能并不强。大公司对K8s的使用仅是用来管理Pod/容器/虚机,向上提供服务资源,很少直接使用service。所以在云原生时代,不会因为K8s提供了service,大家就抛弃了传统的微服务基础设施。

话题转到微服务框架如Dubbo/Dubbogo,Dubbo v2时代提供了一套完整的基于接口粒度的微服务治理体系。在云原生时代,可以认为K8s的service大概等于Dubbogo某些部分,但整体来说,它的功能并没有生产级微服务设施那么完善。

Dubbogo v1 解决方案

如何在K8s之上使用微服务,如何让你的微服务在K8s平台之上run起来?大概有这么几个方案:

1.endpoint维度

在微服务平台之上,每个endpoint把自己的信息注册到K8s的API server里面,把API server当做微服务的注册中心,进行服务的监听调用。

2.operator维度

每个角色使用K8s的扩展机制,自己的信息通过API server注册到etcd之内,它仍然是把K8s的master节点(APIServer + etcd)当做自己的注册中心,又额外扩展了一个operator。这个方案的优点是高度可定制,但需要你对K8s有一定的掌控力度,当然还需额外的operator的维护成本。把K8s的API server当做注册中心来使用,如果在中小公司,这个方案基本上不会有什么问题,但在大公司的话,很少有人会这么做。

如果微服务平台也把K8s的master节点当做注册中心,不管是底层K8s自身的kubelet节点或者Paas平台把Master节点打挂了,还说上层应用因为数据太多流量太大把K8s的master的节点打跨,整个系统就会瘫痪了,无论是K8s还是应用自身都不可用,这是极大的风险。所以,个人建议只把K8s当做pod的管理平台,也就是资源提供角色。把K8s的API server也就是master节点暴露给微服务基础设施层,显得并不明智。

这个方案本质是endpoint维度的方案,把K8s的API server当成注册中心,它的好处是比较简单。

微服务基础设施里面有两个经典的角色:服务的提供者provider和服务的使用者consumer,这两个角色启动时从pod里获取自己的信息。

Dubbogo 3.0的K8s解决方案

云原生时代,怎么在K8s之上运行基于微服务基础设施的应用?

它的方案其实很多,先说是Dubbo3里面几个概念。Dubbo/Dubbogo 3.0里面有三大注册中心:

1. 注册中心

2. 元数据中心

3. 配置中心

三个节点在K8s这个平台上并不都需要部署。

Dubbogo 3.0注册有两种模式,根据元数据中心是否在这里面进行部署,分为local模式和remote模式。

如果使用传统注册中心,元数据中心在云平台层面进行部署之后,provider在启动时把信息注册到元数据中心里,当consumer启动时,就去远程元数据中心拉取元数据,这是 remote 模式。

但是如果不部署元数据中心,provider自动启动metadata线程,充当伪装的元数据中心,其服务启动的时候先把服务元数据注册到metadata线程上面,我们称为meta data service。然后consumer发现provider之后,第一个先调用的服务就是meta data service,拉取整个元数据,这种模式之下在平台上就可以只部署一个注册中心,无需配置中心,它也是最简单最方便的部署模式。

除此之外还有三种部署模式:

第一种,无需注册中心,把K8s的API server当作注册中心,但是这种方式有它的利弊。

第二种,只部署元数据中心,不要注册中心,但是consumer怎么拉取 provider列表?有K8s service/CoreDNS/API server等解决方案。这种模式使用的通讯方式是通信直连模式,基本上大部分的微服务框架都是支持的。

第三种,注册中心加元数据中心都不要,注册中心依然使用K8s的service,或者是借助于CoreDNS实现服务的注册,consumer寻找provider的元数据时,使用local模式,启动时去调用 getMetaDataService,拉取元数据。这种通信直联方式下,也无需配置中心。

而配置中心的好处,相当于可以在微服务基础设施 Dubbogo这个平台下,拉取一些动态的配置参数,动态拉取路由条件进行灰度发布、蓝绿发布,非常灵活。

微服务基础设施的使用和部署,需要根据各个技术特点来保证我们的服务的稳定性,这中间除了我们开发人员,需要运维以及测试等各个方面通力合作。通过考虑公司的规模以及各种特点,综合决策使用哪种技术方案。

END

《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造

— 推荐阅读 —

☞俄罗斯 IT 存储空间告急,未来 2 月或将耗尽?
☞代码投毒、删库跑路,开源生态链安全该如何保证?
☞大厂螺丝钉还是开源极客?开源新手该怎么选?

一键三连 「分享」「点赞」「在看」

成就一亿技术人

2个维度5大方法,让你的微服务在K8s上跑起来相关推荐

  1. 改善WPF应用程序性能的10大方法(转)

    细数改善WPF应用程序性能的10大方法 2010年11月16日00:05 it168网站原创  作者:IT168 黄永兵  编辑:胡铭娅 评论:0条 本文Tag: ASP.NET WPF .NET   ...

  2. Kaggle上主要有两大方法:梯度提升机和深度学习

    Python深度学习: 在2016年和2017年,Kaggle上主要有两大方法:梯度提升机和深度学习.具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题.使用前一种方法的 ...

  3. Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略

    Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略 目录 graph_feature函数:为给定的特征生成特征谱系图

  4. 9大方法为云安全保驾护航

    "云安全"这个词,对一部分人而言是相对陌生的,但是它早已经潜入我们的生活,尤其是对一起企业,一些企业都在使用云服务提供商所提供的一定程度的安全防护.下面让我们通过9大方法为云安全保 ...

  5. 10 大方法,让您的客服中心提供更出色的服务

    在过去的 5 年中,客户服务中心所经历的变化,超过了以往 35 年的总和.由于客户期望提高.接触渠道增多和社交媒体的流行,客户服务所面临的挑战较以往任何时候都更为复杂.客户的服务体验仍旧是其认知品牌的 ...

  6. Java数组的十大方法

    Java数组的十大方法 以下是Java Array的前10种方法.他们是来自stackoverflow的投票最多的问题. 0.声明一个数组 String[] aArray = new String[5 ...

  7. java数组 方法_Java数组的十大方法

    Java数组的十大方法 以下是Java Array的前10种方法.他们是来自stackoverflow的投票最多的问题. 0.声明一个数组 String[] aArray = new String[5 ...

  8. 击穿线程池面试题:3大方法,7大参数,4种拒绝策略

    前言:多线程知识是Java面试中必考的点.本文详细介绍--线程池.在实际开发过程里,很多IT从业者使用率不高,也只是了解个理论知识,和背诵各种八股文,没有深入理解到脑海里,导致面试完就忘.--码农 = ...

  9. Object类九大方法之notify和notifyAll方法

    Object类九大方法之notify和notifyAll方法 notify()方法表示,当前的线程已经放弃对资源的占有, 通知等待的线程来获得对资源的占有权,但是只有一个线程能够从wait状态中恢复, ...

最新文章

  1. LNMP架构——OpenResty实现缓存前移(到达Nginx前端层面)
  2. Windows Message Queue(优先队列)
  3. 时序分析:DTW算法(基于模板)
  4. php email 发送,php 发送 Email
  5. 山海伏妖录java_山海伏妖录攻略大全 剧情结局加点妖兽大全
  6. hibernate缓存理解
  7. C语言之-fPIC编译与代码位置无关.a/.so库(二)
  8. 毕设题目:Matlab图像评价
  9. oracle数据库建语句吗,Oracle建表语句是什么_数据库
  10. vs code 格式化代码配置
  11. 计算机控制系统感受,计算机控制系统实验报告一.doc
  12. 你有必要不沾计算机一段时间英语,八年级英语下册第一单元词组
  13. arduino定时器控制舵机_用 Arduino 控制舵机
  14. 邮件的服务器密码不正确,企业邮箱foxmail提示接收密码错误解决方法
  15. 【J2EE】模仿天猫商城(后台篇)
  16. A-Level商务例题解析及练习
  17. ffmpeg新手成长之路——使用av_seek_frame做seek定位
  18. 数据库读写分离与分库分表
  19. vim下载安装 配置方法(图)
  20. CTF-MD5之守株待兔,你需要找到和系统锁匹配的钥匙 WP

热门文章

  1. [转]Java实现定时任务的三种方法
  2. Java中的资源文件加载方式
  3. 【机房收费系统】---结账
  4. 敏捷开发“松结对编程”实践之一:人员结构篇(大型研发团队,学习型团队,139团队,师徒制度)...
  5. Linux学习总结(八)-磁盘格式化,挂载,swap扩容
  6. 夺命雷公狗-----React---5--props对象的传递
  7. Ajax 与 XmlHttpRequest
  8. ubuntu配置LAMP
  9. Head First Python 学习笔记(第二章:分享你的代码)
  10. 常见机器学习算法分类及名称