我们是否真的需要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
相关文章:
我们是否真的需要k8s?
文章目录 背景k8s相关的讨论为什么要用k8sk8s带来了什么当前业务使用到k8s的核心优势了吗直接自己买服务器会不会更便宜?其他QA没有人可以说出来为什么一定要用k8s而不是其他的没有人可以解释为什么成本核算困难以及成本这么高的原因没有人给出面向C端,面…...
基于蜉蝣优化的BP神经网络(分类应用) - 附代码
基于蜉蝣优化的BP神经网络(分类应用) - 附代码 文章目录 基于蜉蝣优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜉蝣优化BP神经网络3.1 BP神经网络参数设置3.2 蜉蝣算法应用 4.测试结果:5.M…...
前端系列-1 HTML+JS+CSS基础
背景: 前端系列会收集碎片化的前端知识点,作为自己工作和学习时的字典,欢迎读者收藏和使用。 笔者是后端开发😶前端涉猎不深,因此文章重在广度和实用,对原理和性能不会过多深究。 1.html 1.1 html5网页结…...
Learning Invariant Representation for Unsupervised Image Restoration
Learning Invariant Representation for Unsupervised Image Restoration (Paper reading) Wenchao Du, Sichuan University, CVPR20, Cited:63, Code, Paper 1. 前言 近年来,跨域传输被应用于无监督图像恢复任务中。但是,直接应用已有的框架…...
1.4.C++项目:仿muduo库实现并发服务器之buffer模块的设计
项目完整版在: 一、buffer模块: 缓冲区模块 Buffer模块是一个缓冲区模块,用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 二、提供的功能 存储数据,取出数据 三、实现思想 1.实现换出去得有一块内存空间,采…...
AndroidStudio精品插件集
官网 项目地址:Github博客地址:Studio 精品插件推荐 使用需知 所有插件在 Android Studio 2022.3.1.18(长颈鹿)上测试均没有问题,推荐使用此版本Android Studio 2022.3.1.18(长颈鹿)正式版下…...
java图书管理系统
一、 引言 图书管理系统是一个用于图书馆或书店管理图书信息、借阅记录和读者信息的应用程序。本系统使用Java Swing框架进行开发,提供直观的用户界面,方便图书馆管理员或书店工作人员对图书信息进行管理。以下是系统的设计、功能和实现的详细报告。 二…...
大屏自适应容器组件-Vue3+TS
1.引言 在做数字大屏时,图表能跟着浏览器的尺寸自动变化,本文采用Vue3前端框架,采用TypeScript语言,封装了一个大屏自适应组件,将需要显示的图表放入组件的插槽中,就能实现自适应屏幕大小的效果。 2.实际…...
java图书信息管理
一、项目概述 本图书信息管理系统旨在提供一个直观的用户界面,用于管理图书馆或书店的图书信息。系统包括图书添加、查询、借阅和归还等功能。 二、系统架构 系统采用JavaSwing作为前端UI框架,后端使用Java Servlet处理业务逻辑,数据存储在…...
apache服务器出现No input file specified.解决方案
APACHE服务器出现No input file specified.解决方案 thinkcmf程序默认的.htaccess里面的规则: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA…...
你写过的最蠢的代码是?——全栈开发篇
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
正点原子嵌入式linux驱动开发——TF-A初探
上一篇笔记中,正点原子的文档简单讲解了一下什么是TF-A,并且也学习了如何编译TF-A。但是TF-A是如何运行的,它的一个运行流程并未涉及。TF-A的详细运行过程是很复杂的,涉及到很多ARM处理器底层知识,所以这一篇笔记的内容…...
【网安别学成开发】之——python篇
经典入门编程题 1.猜数字 经典的猜数字游戏,几乎所有人学编程时都会做。 功能描述: 随机选择一个三位以内的数字作为答案。用户输入一个数字,程序会提示大了或是小了,直到用户猜中。 #!/usr/bin/env python3import randomresu…...
vue图片显示
一、Vue图片显示方法: 1.直接使用<img>标签: 最简单的方法是使用<img>标签,并将图片的URL作为src属性的值。例如: <img src"path/to/your/image.jpg" alt"Image"> 如果是绝对路径&#x…...
S32K144 GPIO编程
前面的文章介绍了如何在MDK-Keil下面进行S32K144的开发,下面就使用该工程模板进行GPIO LED的编程试验。 1. 开发环境 S32K144EVB-Q100开发板MDK-Keil Jlink 2. 硬件连接 S32K144EVB-Q100开发板关于LED的原理图如下: 也就是具体连接关系如下…...
域名备案流程(个人备案,腾讯云 / 阿里云)
文章目录 1.网站备案的目的2.备案准备的材料2.1 网站域名2.2 云资源或备案授权码2.3 电子材料 3.首次个人备案准备的材料3.1 主体相关3.2 域名相关3.3 网站相关3.4 网站服务相关3.5 变更相关 4.个人备案流程4.1 登录系统4.2 填写备案信息🍀 填写备案省份ἴ…...
子网ip和子网掩码的关系
子网ip和子网掩码的关系 一个IP地址被分为两部分:网络地址和主机地址。这是通过子网掩码来实现的。 子网掩码(Subnet Mask)是一个32位的二进制数,它用来区分一个IP地址中的网络地址和主机地址。在子网掩码中,网络地址…...
openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT
文章目录 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT88.1 前置条件检查88.2 转换88.3 转换示例 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT …...
网络-Ajax
文章目录 前言一、Ajax优点:缺点: 二、使用步骤XNLHttpRequest对象完整代码 总结 前言 本文主要记录Ajax技术的简介,以及用法。 一、Ajax Ajax是一组用于在Web浏览器和Web服务器之间进行异步通信的Web开发技术。 它代表着Asynchronous Java…...
Autowired和Resource的关系
相同点对于下面的代码来说,如果是Spring容器的话,两个注解的功能基本是等价的,他们都可以将bean注入到对应的field中 不同点但是请注意,这里说的是基本相同,说明还是有一些不同点的: byName和byType匹配顺…...
HashTable, HashMap, ConcurrentHashMap 之间的区别
HashMap: 线程不安全. key 允许为 null。 Hashtable: 线程安全. 使用 synchronized 锁 Hashtable 对象, 效率较低. key 不允许为 null.。只是简单的把关键方法上加上了 synchronized 关键字。如 get 和 set ,这相当于直接针对 Hashtable 对象本身加锁,如…...
Maven下载源码出现:Cannot download sources Sources not found for org.springframwork...
Maven下载源码出现:Cannot download sources Sources not found for org.springframwork… 最近重装了IDEA再次查看源码时发现总是报错,网上找了很多,发现解决方法都是在项目终端执行如下命令: mvn dependency:resolve -Dclassi…...
C进阶--字符函数和字符串函数介绍
✨ 更多细节参考 cplusplus.com/reference/cstring/ 使用方式: ⭕ 求字符串长度 🖌 strlen 函数原型: size_t strlen ( const char * str ); 作用: 获取字符串长度 ✨补充: ⭐字符串以 \0 作为结束标志&…...
算法通关村第五关-二叉树遍历(层数优先)之经典问题:简单的层序遍历、层序遍历分层、自底向上的层序遍历
基础知识(青铜挑战) 了解二叉树的基础知识 实战训练(白银挑战) 简单的层序遍历 基本的层序遍历思路很清晰: 给你一个二叉树根节点,你需要创建一个队列 queue 来遍历节点,一个链表 list 来存储…...
C++左右值及引用
1 左值和右值 简单记法:能取地址的是左值,不能取地址的是右值 右值一般是常量 例: i 是右值,因为先把 i 赋值给临时变量,临时变量在1,而临时变量是将亡值,&i取地址会报错 i是左值…...
如何备份和恢复数据库
目录 1.xtrabackup 是什么2.全量备份3.增量备份4.使用备份进行恢复5.原理6.参考 本文主要介绍如何使用xtrabackup 进行数据库的备份和恢复,并在最后介绍了原理。 1.xtrabackup 是什么 XtraBackup是由Percona开发的一款开源的MySQL数据库备份工具。它可以对InnoDB和…...
简化数据库操作:探索 Gorm 的约定优于配置原则
文章目录 使用 ID 作为主键数据库表名TableName临时指定表名列名时间戳自动填充CreatedAtUpdatedAt时间戳类型Gorm 采用约定优于配置的原则,提供了一些默认的命名规则和行为,简化开发者的操作。 使用 ID 作为主键 默认情况下,GORM 会使用 ID 作为表的主键: type User st…...
保姆级Anaconda安装教程
一.anaconda下载 建议使用清华大学开源软件镜像站进行下载,使用官网下载速度比较慢。 anaconda清华大学开源软件镜像站 : https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 一路next即可,注意添加环境变量得选项都勾上。 二.验证…...
你写过的最蠢的代码是?——后端篇
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂🦖…...
快速幂
876. 快速幂求逆元 - AcWing题库 AC代码: #include <iostream> #include <cstring> #include <algorithm>using namespace std;typedef long long ll;int n;int qmi(int a,int k,int p) {int res1;while(k){if(k&1)res(ll)res*a%p;k>&…...
制作个人免费网站展示设计/武汉网优化seo公司
首先 下载并安装好网易MuMu模拟器: https://mumu.163.com/mac/index.html 运行网易MuMu,打开后在首页打开设置->开发者选项->打开USB调试模式 如果已经打包好的apk文件,则直接将apk文件拖动到模拟器窗口,apk会被自动安装 ADB connect 这里需要说明…...
山西做网站优势/b2b平台都有哪些网站
深度学习基础 - 积分 flyfish 考虑平方根函数f(x)xf(x) \sqrt {x}f(x)x ,其中x∈[0,1]x∈[0,1]x∈[0,1] 。在区间[0,1]上,函数f“下方”的面积是多少?问题中的“下方”面积,是指函数), yf(x)y f(x)yf(x)的图象与x…...
电影网站建设费用/必应站长平台
函数说明示例String.fromCharCode()返回Unicode码对应的字符串String.fromCharCode(20013); // "中"charCodeAt()返回字符的Unicode码中.charCodeAt(); // 20013charAt()返回指定位置的字符abc.charAt(1); // "b"concat()连接两个字符串ab.concat(cd); // …...
方维网站建设/营销策划的概念
分享讲师:王文广—达观数据副总裁,浙江大学计算机系硕士,在系统架构设计及研发方面有十余年工作经验。讲师简介:曾在百度负责MP3搜索的架构设计和开发,及百度第一版的语音搜索系统和百度音频指纹系统;曾负责…...
厦门外贸网站建设公司/西安霸屏推广
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼怎样转换下面的二维数组到一维数组,然后输入数字,然后显示出输入数字在数组中相对应的词char commonWords[13][60] {"C is a structured, procedural programming","language that has been …...
网站估值/网站功能开发
在我们的日常工作生活中,许多时候需要将手机中的图片文字提取出来,然而很多人都不会,只会照着手打出来,但是这样做不仅效率不高,也很耗时。那么安卓华为手机如何识别图片中的文字?有没有什么快速简单的方法…...