我们是否真的需要k8s?

文章目录

    • 背景
    • k8s相关的讨论
      • 为什么要用k8s
      • k8s带来了什么
      • 当前业务使用到k8s的核心优势了吗
      • 直接自己买服务器会不会更便宜?
      • 其他QA
        • 没有人可以说出来为什么一定要用k8s而不是其他的
        • 没有人可以解释为什么成本核算困难以及成本这么高的原因
        • 没有人给出面向C端,面向B端交付的不同部署方案
    • 互联网发展趋势讨论
      • 集约和分散
      • 合久必分和分久必合
    • 总结

背景

      这篇文章来源于一次内部讨论,大家突然聊到为什么要用k8s部署,是否还有其他的部署方案呢?大家现在好像都默认k8s部署服务,那么凭什么呢,k8s的核心优势有用到吗?私有化部署场景下需要k8s吗?甚至拆分这么多微服务是否合适,合并成大的单体应用是否可行?

      以上问题虽然较多较杂,但都振聋发聩。是啊,难道除了k8s一把梭就没其他的部署方式了吗?这是否代表大家也缺少对于业务和成本的思考呢。

      微服务的思想深入人心,可是部分业务真的有必要拆分成5-6个微服务吗?薄是真的薄,但是大家手头都维护好几个微服务是否会手忙脚乱呢?合并成一个单体应用就不能跑了吗?

k8s相关的讨论

为什么公司的云服务都用k8s部署,不用k8s行不行?公司当前的业务非要用k8s不可吗?

为什么要用k8s

      是啊,为什么现在的服务默认就使用k8s了呢?因为大家都用?因为习惯?因为运维那边的云厂商基建?因为成本低?

      博主记得18年的时候公司还是自有机房,从19年就开始全面上k8s,再之后就是使用云厂商的服务。公司的运维也是经历了从机房到云厂商的转变,越来越方便的部署和低运维成本以及丰富的云厂商功能,使整个运维部门逐渐面向云厂商运维。

      对于开发人员来说呢,一方面是对于新技术的追求,一方面是市面上的面试都开始问k8s相关的八股文。什么,你一个后端开发没用过k8s?回去等通知吧。所以近几年明显感受到大家对于k8s的热情,一直到现在,似乎服务不部署到k8s上就是low。

k8s带来了什么

      k8s相对于传统服务器来说,可以根据请求量动态扩展pod,再结合云厂商的无限资源,让公司可以坦然面对流量高峰以及低谷,不必为了高峰大量采购服务器,也不必因为低谷而心疼服务器的开销。特别是电商公司的促销以及节日场景尤为适合。

      其次就是整个云原生的生态,从负载均衡到各种资源监控,到服务治理,服务网格等,强大而丰富的生态也促使云原生更加的深入人心。

      现在可以说是微服务时代,一方面是服务数量多,一方面是异构服务多,使用k8s也可以节省研发的部署成本,异构服务间调用和运维成本。

      另外就是CI/CD,让服务可以在分钟级别完成部署,相应的需要运维同学去开发这些运维平台,目标是尽量屏蔽掉部署细节,方便开发人员使用。

这么看起来,k8s带来的优势似乎很多很多。

当前业务使用到k8s的核心优势了吗

当前部门业务有2个特点,一个是新业务流量较低,一个是考虑私有化部署。

      流量低也就意味着大量服务开启2个pod,但使用率低下,且没有扩容场景。服务治理限于日志、指标、链路追踪等,不需要更复杂的治理场景。

      私有化部署意味着客户的服务器资源有限,且客户不需要依赖云厂商的基建服务。客户的网络情况可能没互联网公司这么清晰。

      举个例子,公司语音服务私有化部署遇到的问题,第一是基于minikube部署服务,发现minikube占用大量资源导致服务器资源不够用。第二是k8s的网络问题导致服务迟迟访问不了,需要不断的排查dns解析和网桥。 最终解决方案是使用docker compose的部署,占用资源低,网络要求低,一把起来。

      分析完业务,那么问题来了,不使用k8s可以吗? 如果我的场景流量比较固定,那么我就不需要动态扩展pod。如果我的服务不需要那么多云原生插件,那么整个k8s容器服务对我来说是不是就过于笨重了呢?如果私有化部署,k8s丰富的生态对我来说是不是累赘呢?

可以参考这篇文章:你是否真的思考过自己的业务模式是否真的需要k8s
参考:https://www.predicagroup.com/blog/why-kubernetes-2022/

直接自己买服务器会不会更便宜?

      成本这个可以参考Ruby on Rails作者的博客,他们是做邮件服务的,业务比较稳定,流量也基本可控。云厂商的账单让他们逐渐产生疑惑,最终他们选择来离开aws。结果是一年预计节省100w美金。。。
Why we’re leaving the cloud
Our cloud exit has already yielded $1m/year in savings

      都2023年了,硬件成本特别是存储设备的价格也下降不少,小型计算机的配置逐渐提升,且价格合理。那么核心且流量大的服务,可以使用自建服务器。内部服务或者小流量的服务,使用apple mini或者小型计算机是不是就ok了呢?比如博主的英特尔NUC,i512代cpu+16GB内存,跑几个内部后台服务绰绰有余,3000块的成本仍到机房,相比云厂商服务的每月收费来说,便宜太多了。

      就算是使用GPU的算法服务,性能要求不高的场景下,apple的m2芯片也足以胜任了,问题applemini的成本才多高?使用阿里云的A10卡,每个月就要6k+,一年下来7w。。

其他QA

没有人可以说出来为什么一定要用k8s而不是其他的

      k8s只是一种方案,我们可能基于某种原因选择了k8s,而不是说我们只能和必须选择k8s。

      对开发人员来说,服务不是开发完就结束的,部署方案是必须要考虑的部分,可能大家现在好像都默认使用云厂商的k8s服务,连第二方案都没考虑。。。(这一条更针对架构师这种角色)

没有人可以解释为什么成本核算困难以及成本这么高的原因

      开发人员逐渐丧失了对于成本的敏锐性,对自己的服务可能需要多少成本,带来多少收益,甚至支撑多少业务量都不知道,问就是运维在负责,不清楚。

没有人给出面向C端,面向B端交付的不同部署方案

      对自己手头的业务以及整个项目的思考太少。如果部门目标是C端和B端,那么使用统一使用云厂商更适合C端的服务,但是B端交付的部署方案呢?去掉k8s和云原生的组件,你的服务还能跑起来了吗?替代方案有吗?

互联网发展趋势讨论

集约和分散

      社会分工是越来越精细的,例如新能源车,上游专供各个组件,下游厂商进行统一的组装,精细化和专业化是趋势也是资源分散的方式。

      集约更体现在面向人的场景,例如大型超市,早就不单单是卖货了,是销售,广告,娱乐一体化的综合性经营场所,是资源集中的方式。

      互联网发展这么多年,岗位类别越来越多,前端,后端,算法,测试,运维等等。大家都更关注眼前的一亩三分地,超出部分就不了解或者细节被屏蔽,大大增加了沟通成本。微前端, 微服务的产生又让相同岗位之间产生巨大的沟通成本。。。 如果场景适合回归到单体应用的话,是否代表超级个体的时代又要回来了呢? ?

      底层细节的屏蔽确实带来了方便,某种意义上也带来了技术上的掌控力下降。团队没有大牛的情况下,不出问题就算了,出问题就是大问题,普通开发人员对于k8s的熟悉度不够,排查问题的难度也提升不少。

合久必分和分久必合

      国内互联网从无序扩张到现在存量市场,除了新兴方向的业务会大量增长,那么是否有相当一部分业务都是“可预见”的呢?或者业务已经是稳定的状态了?
      稳定的业务或者可预见的用户增长,是否代表回归机房才是最佳选择呢? 成本?可维护性?甚至是:单体应用–>微服务–>单体应用 ?

      有点三国的味道了,未来究竟会如何谁也不知道。就像金融市场很多时候是用脚投票一样,广大互联网公司也会逐渐选择最适合自己的方式吧。

总结

      以上部分更多是探讨性质的,但是也能看出来,面向B端和面向流量稳定的服务来说,自建服务器和容器部署也是不错的方案,部署方式简单且成本低了。

      但是,针对流量较大的业务,例如电商业务来说,使用云厂商的k8s服务依然是最佳选择。云原生的丰富生态更有利于保证大型服务的稳定性。

      所以仁者见仁智者见智了,抛开业务模式谈部署也是耍流氓,关键是我们要拔高思维层次,尽量考虑的全面。凡事有plan B才能波澜不惊,才能成为别人眼中靠谱的大佬。

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吉力宝:智能科技鞋品牌步力宝引领传统产业创新思维

在现代经济环境下,市场经济下产品的竞争非常的激烈,如果没有营销,产品很可能不被大众认可,酒香也怕巷子深,许多传统产业不得不面临前所未有的挑战。而为了冲出这个“巷子”,许多企业需要采用创新思维&#…

NLP 03(LSTM)

一、LSTM LSTM (Long Short-Term Memory) 也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比: 能够有效捕捉长序列之间的语义关联缓解梯度消失或爆炸现象 LSTM的结构更复杂,它的核心结构可以分为四个部分去解析: 遗忘门、输入门、细胞状态、输出门 LSTM内部结构…

C++(string 类模拟实现)

前提知识:上一章介绍了库里面关于string的诸多接口,这章我要根据库里的相关接口,自己实现。 1.成员变量: 我们需要定义起始位置,已经有效字符个数和容量。 private:char* _str;size_t _size;size_t _capacity; 2.默认…

力扣算法题:34、在排序数组中查找元素的第一个和最后一个位置.java版

版本说明 当前版本号[20230930]。 版本修改说明20230930初版 34.在排序数组中查找元素的第一个和最后一个位置 34. 在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的…

MyBatisPlus(六)字段映射 @TableField

字段注解(非主键) TableField 用于映射对象的 属性 和表中的 字段 。 当 属性名 和 字段名 差异较大的时候,无法通过默认的映射关系对应起来,就需要指定 属性名 对应 的 字段名。 官网示例 代码实例 package com.example.web.…

js 实现删除数组指定元素

文章目录 需求分析1. 使用 splice() 方法2. 使用 filter() 方法3. 使用 splice 和展开运算符(ES6): 新的需求新的分析 需求 删除数组中的指定元素,阁下该如何应对 分析 有多种方法可以实现 JavaScript 数组删除指定元素。以下是其…

MATLAB算法实战应用案例精讲-【人工智能】机器人标定方法

目录 前言 算法原理 为什么机器人需要标定? 哪种情况不需要标定? 理论详解

【网络原理】初始网络,了解概念

文章目录 1. 网络通信1.1 局域网LAN1.2 广域网WAN 2. 基础概念2.1 IP2.2 端口号 3. 认识协议4. 五元组5. 协议分层5.1 分层的作用5.2 OSI七层模型5.3 TCP/IP五层(四层)模型 6. 封装和分用 1. 网络通信 计算机与计算机之间是互相独立,是独立模…

【小沐学前端】Node.js实现UDP和Protobuf 通信(protobuf.js)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子:awesome.proto 结语 1、简介 1.1 node Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 Node.js 是一个开源…

Z检验scipy.stats.norm的相关计算

Z检验(Z-test)是一种用于检验一个样本的均值是否与已知的总体均值相等的统计方法。它通常用于以下情况: 总体参数已知: 当总体的均值和标准差已知时,可以使用Z检验来确定样本均值是否与总体均值相等。 大样本&#xff…

Leetcode---364场周赛

题目列表 2864. 最大二进制奇数 2865. 美丽塔 I 2866. 美丽塔 II 2867. 统计树中的合法路径数目 一、最大二进制奇数 这题只要你对二进制有了解(学编程的不会不了解二进制吧),应该问题不大,这题要求最大奇数,1.奇数:只要保证…

数据结构 | 二叉树

基本形状 可参照 数据结构:树(Tree)【详解】_数据结构 树_UniqueUnit的博客-CSDN博客 二叉树的性质 三种顺序遍历

区块链实验室(26) - 区块链期刊Blockchain: Research and Applications

Elsevier出版物“Blockchain: Research and Applications”是浙江大学编审的期刊。该期刊自2020年创刊,并出版第1卷。每年出版4期,最新期是第4卷第3期(2023年9月)。 目前没有官方的IF,Elsevier的引用因子Citescore是6.4。 虽然是新刊&#xf…

Android studio升级Giraffe | 2022.3.1 Patch 1踩坑

这里写自定义目录标题 not "opens java.io" to unnamed module错误报错信息解决 superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner报错报错信息解决 Android studio升级Giraffe | 2022.3.1 Patch 1后,出现项目…

ElementUI之CUD+表单验证

目录 前言&#xff1a; 增删改查 表单验证 前言&#xff1a; 继上篇博客来写我们的增删改以及表单验证 增删改查 首先先定义接口 数据样式&#xff0c;我们可以去elementUI官网去copy我们喜欢的样式 <!-- 编辑窗体 --><el-dialog :title"title" :visib…

MT8385 Android AB分区系统升级(命令模式)

AB系统分区升级使用的是update_engine,RecoverySystem 只适用于单分区的系统升级 1.解压开update.zip 可以查看到palyload的属性 2.使用ADB命令update_engine_client即可对AB分区进行升级 使用adb shell 命令进行升级 update_engine_client --payload xxx --update --hea…

Qt扩展-QCustomPlot绘图基础概述

QCustomPlot绘图基础概述 一、概述二、改变外观1. Graph 类型2. Axis 坐标轴3. 网格 三、案例1. 简单布局两个图2. 绘图与多个轴和更先进的样式3. 绘制日期和时间数据 四、其他Graph&#xff1a;曲线&#xff0c;条形图&#xff0c;统计框图&#xff0c;… 一、概述 本教程使用…

Error: node: unknown or unsupported macOS version: :dunno 错误解决

一、原因 今天安装 brew install node报错了&#xff0c;错误信息如下&#xff1a; 二、解决方案 1&#xff09;查找homebrew-cask安装位置 echo $(brew --repo homebrew/homebrew-cask) // 输出 /opt/homebrew/Library/Taps/homebrew/homebrew-cask2&#xff09;使用 gi…

linux 查看CPU架构是AMD还是ARM

要查看 Linux 系统的 CPU 架构是 AMD 还是 ARM&#xff0c;可以使用以下命令&#xff1a; 使用 lscpu 命令并查找 Architecture 字段&#xff1a; lscpu | grep Architecture如果输出结果中包含 x86_64 或 i686&#xff0c;则表示系统的 CPU 架构是 AMD&#xff08;或者是 x86…

wxWidgets(1):在Ubuntu 环境中搭建wxWidgets 库环境,安装库和CodeBlocks的IDE,可以运行demo界面了,继续学习中

1&#xff0c;选择使用 wxWidgets 框架 选择这个主要是因为完全的开源&#xff0c;不想折腾 Qt的库&#xff0c;而且打包的文件比较大。 网络上面有很多的对比&#xff0c;而且使用QT的人比较多。 但是我觉得wxwidgets 更加偏向 c 语法本身&#xff0c;也有助学习C。 没有太多…