K8S怎么就和微服务成死对头了?

  • 1、互联网架构的演变过程php

    • 1.一、 垂直扩展前端

    • 1.二、 分拆架构java

    • 1.三、 横向扩展python

    • 1.四、 架构优化nginx

    • 1.五、 业务拆分git

  • 2、K8S要解决的问题golang

  • 3、微服务要解决的问题面试

  • 4、k8s和Spring冲突的功能算法


K8S怎么就和微服务成死对头了?

运维就要无所不知,无所不会spring

你们好,我是史丹利。今天和你们聊一聊K8S和微服务的生存之战,或者说将来这片战场到底会不会有。

我先抛2个问题:

  1. liveness检测谁来作spring全家桶是微服务的标配。其中 Eureka 监管全部服务的生命周期。用了k8s后,一般会使用svc便可。SVC和 Eureka 谁能笑到最后。
  2. 成本管理上涨: 自从微服务火了以后「其实吧,这个概念早就有了,从人类第一个登月工程开始《人月神话》就已经有的,Linux内核的实现思想也是微内核」。全部的高层应用,不说微服务,感受都不是作IT的。那你遇到过一个简单的服务拆成几十个微服务的吗**?容器化后的成本,算谁的?

好了,这么简单的问题描述,想必不少朋友压根没看懂。

不要紧,文章较长,要有耐心。我一点点把问题抽出来。基础好的大佬,直接跳到最后便可。

1、互联网架构的演变过程

互联网的架构发现一直在演变,一直到今天都未中止。但这不是咱们本次要讨论的重点,我尽量简单的带过,节省篇幅。

互联网行业有一个明显的特性是爆发性成长。在很长一段时间里,投资人对互联网行业的印象都是先有流量再谈盈利。即便是亏损状态,只要流量和模式在,也会巨额投入。像如今你们耳熟能详的携程、饿了么、小黄车、摩拜、小红书、滴滴、新蛋等等,几乎全部叫的上名字的公司,都离不开这样的模式。

这同步带来一个问题,就是如此巨大的流量+中国爆炸的人工红利+全球计算机硬件的普及,如何支撑业务正常运营成为全球互联网公司的难题。

随着互联网技术的不断成熟,互联网技术也在不断迭代成长。咱们姑且认为互联网是从1990年进入中国的。到如今也有30年的时间了。互联网架构大体有以下几个阶段的演变

  • 垂直扩展
  • 分拆架构
  • 横向扩展
  • 业务拆分
  • 架构优化

下面咱们来逐一介绍。

1.一、 垂直扩展

业务上线前,公司一般都是老板和合伙人本身出钱,穷的不行。一切都是成本和速度优先。这个阶段有没有运维都是两码事。

一般在初创阶段,全部的应用都是 AllInOne,即全部的服务都运行在一台服务器上。架构也是最简单,当时最流量最轻量的 LNMP 架构。

图片Lamp架构

随后业务逐步有转机,流量变大。垂直扩展是容易便捷的解决问题方式。从4c8g 提高到  32c64g 能在一段时间内解决问题。

1.二、 分拆架构

但一夫难挡万人勇,服务器的网络、性能、存储、运算能力总归会见顶。一台服务器不可能再支撑流量的时候,这时最快捷的办法就是分拆硬件架构。

把数据库和存储分拆出去,再把运算模块分拆出去,再把流量模块分拆出去。

图片初步分拆架构图

总归一个字:拆。就对了。

1.三、 横向扩展

各类拆完,若是仍是抗不住,说明公司规模已经不错了,离盈利不远或者已经有盈利了。这时就要考虑一些高可用技术,稍微有点挑战的技术了。

  • LVS10w并发起步的流量负载均衡,;

  • MySQL 的分库分表, 主从分离,MMM 高并发架构;

  • 数据的冷热分离;

图片较复杂的架构

这个阶段,仍是纯技术的升级迭代,对抗这个阶段的压力还可行。但就实际来说,早应该在软件架构层面作优化了,好比业务功能分拆、优化缓存策略、先后台分离

1.四、 架构优化

再往下就是架构优化了,这个层面已经不只仅是运维能力能造就的成果。须要引入外部财力、开发架构改造等资源。

  • 加缓存

早期为了省钱CDN没买的,要搞了。session 不只后台技术要作缓存,前端也要作。CTO甚至要亲自下手狠抓代码质量,弥补前期追进度丢质量的坑。「咱们就深有体会,并且一抓就抓了3年多,最后仍是走在了放弃的路上,计划全新重构。。。」

Redis,RabbiqMQ等异步架构,在非及时场景,都尽量合入。

  • 分拆模块

原来随便调用,随便穿洞引用的调用关系,要全新梳理,定规范,定制度。收缩入口和出口。

按热度、流量、功能特性,作模块拆分。其实,就是打造中台的过程。只是阿里把这个口号喊的太大,把你们带偏了。有能力没能力都想搞个中台。。

  • 业务分层

原来混在一块儿的模型作分层,代理层、缓存层、网关层、业务层、数据层、存储层

1.五、 业务拆分

若是4个打法还不能支持业务,恭喜你骑在了一头独角兽身上。公司上市指日可待。

这个阶段已经不只仅是技术层面能解决的问题了。很大可能已经进行了部门重组,业务拆分。以电商狗东为例:

原来PC端和手机端极可能是一个团队作的,如今拆分红2个部门。

原来购买、下单、秒杀、搜索、售后可能都是一个团队作的,如今要拆分红4个团队,专门的市场拉新、智能运营、大数据杀熟团队、智能搜索,下面还要再细化。

而后,把前面的步骤再来一遍就行了。

好了,终于啰嗦完了。但愿说的还明白。

总结下来就是一句话:运维要有快速平行扩展业务迅猛扩张的流量压力的能力

你们请先记住这句话。

2、K8S要解决的问题

其实,一直在k8s出现以前,上面啰嗦了这么长的一段内容都是由运维完成。也俗称运维架构能力。但自从k8s出现以后,运维只要掌握了 k8s ,就掌握了绝大部分的运维架构能力。

说白了,就像 git 的出现同样,技术世界再次演绎了一次,经过技术手段降维打击技术门槛的好戏。

  • 快速迁移环境的能力

原来仅仅快速迁移环境的能力,就是运维头大不能自已。测试开发环境不统一,测试环境永远不够用,跨平台部署环境难上加难。

如今只是Dockerfile 和k8s yaml 的编写能力。指数级降维打压

  • 高可用架构能力

原来,运维须要掌握F5,A10 等高端硬防设备。掌握nginx 7层代理,lvs四层代理, 4种转发10种算法,面试各类被问原理。看尽面试官的装完逼回头给本身同事讲,其实刚问的那些问题我也不会。。。。

如今全然不用,由于面试官k8s 本身也是只知其一;不知其二!吹完 k8s 就能够回家等通知,拿高薪了。由于k8s 他敢说 yes

  • 分布式数据存储能力

原来运维还要懂 ceph, gfs, hdfs, swift, 等一大坨牛逼的分布式存储,搞不搞还要被问原理。

问尼大爷啊,老子就是搞运维的,世界难题就是存储了,我要懂了早就去拯救世界了。混毛的运维”,不知道有多少朋友有这样的想法。

如今全然不用,对不起,k8s yml 全然搞定。运维专一业务便可。

  • 网关架构分层能力

k8s把全部的出入口收缩到 svc 和 ingress,从技术手段逼迫架构优异。不再用,和开发乱打洞,乱路由对抗了。你们今后就是酒桌上的好朋友,不用再是工做中的死对头。

  • CICD 流程建设能力

k8s生态提供了成熟的CICD的工具。由于使用容器镜像,因此CICD变的更加容易且规范。运维重心也将从原来的环境构建变为镜像传输和维护。

  • 数据收集监控能力

k8s生态提供的插件,会将全部的原生数据所有收集起来,数据收集再也不是难题。数据汇总和汇报,才有更大的价值。

  • 权限管理能力

k8s收缩了服务器的登陆权限,使用 conf 认证文件,便可在全部网络互通的服务器上登陆,并管理k8s集群。生产环境更安全。

最重要的k8s收缩了系统管理的权限,由于全部人不须要再管理系统。只需管理k8sk8s本身就是系统。

  • 资源配额管理能力

资源配额太简单了。原来须要系统,代码各类配置。如今只须要修改容器参数。最后体如今修改 yaml 便可

  • 流量管控能力

k8s相对云原生和serverless有一点差距。但彻底不影响普通大多数公司的功能需求。很是便利。

其他的看图本身体悟。

图片k8sarch


我是可爱的分隔线。扯淡这么久,为何感受和题目没毛线关系。

是的,由于我不铺掂好k8s的做用, 他和微服务的冲突会很难讲清楚。

3、微服务要解决的问题

微服务要解决哪些问题呢?扯开了讲,又是一大篇。咱们只能精简了说。

若是说k8s拯救了运维,那微服务拯救了开发。主要是java开发。相对于pythongolangphp 等个性化很强的语言,所谓的模块化开发,主要靠前期业务模块分工,每一个人预估模块的工做量,领取工做项。但最后都得合在一块儿,作为总体应用,统一对外提供惟一服务,最多算是半个微服务

java则比较幸福,业内当前主要流行的是 spring cloud全家桶。从接口规范、服务管理、健康检测、全连接监控、配置管理。提供了一整套解决方案,真的是爽翻天了。

图片摘自网图的spingcloud的架构图

可是!!!

一整套解决方案

这几个字是否是有点眼熟。。。

是的。老朋友都知道,咱们前面已经啰嗦的不能再啰嗦了。k8s也提供了一整套完整的解决方案

这就有点尴尬了,不巧的是,k8s的理念和springcloud的理念并不彻底相同,也不是一家公司的。

咱们就咱们如今遇到的问题为例,给你们举例说明。

4、k8s和Spring冲突的功能

这里不得不画图了,你们知道,画图特别费时间。。。

图片svc相对是无状态的

Eureka注册的ip地址不能是pod地址,你们知道的。但svc后面能够跟不少pod,因此注册到Eureka也是假的。。

因此 ,我说明白了吗?

这个问题要怎么解呢?

当下 k8s 也只是和 Eureka 的功能上的重叠,只是思想不一致。在 AllIn 容器化的大前提下, Eureka的方式可能会被废弃。改用 k8s的全套方案。

其它

  • 冲突的功能还有  xxljob。k8s 提供了相似 cronjob 的定时任务功能
  • apollo 使用 configmap代替
  • 甚至于连 zuul 网关也能够去掉。主要看顶层的设计和深刻度了。

好了,今天聊到这里。无论你懂了没有,史丹利已经累趴~  ^ ^

相关文章
相关标签/搜索