1、互联网架构的演变过程php
1.一、 垂直扩展前端
1.二、 分拆架构java
1.三、 横向扩展python
1.四、 架构优化nginx
1.五、 业务拆分git
2、K8S要解决的问题golang
3、微服务要解决的问题面试
4、k8s和Spring冲突的功能算法
运维就要无所不知,无所不会spring
你们好,我是史丹利。今天和你们聊一聊K8S
和微服务的生存之战,或者说将来这片战场到底会不会有。
我先抛2个问题:
liveness
检测谁来作:spring
全家桶是微服务的标配。其中 Eureka
监管全部服务的生命周期。用了k8s
后,一般会使用svc
便可。SVC
和 Eureka
谁能笑到最后。Linux
内核的实现思想也是微内核」。全部的高层应用,不说微服务,感受都不是作IT的。那你遇到过一个简单的服务拆成几十个微服务的吗**?容器化后的成本,算谁的?好了,这么简单的问题描述,想必不少朋友压根没看懂。
不要紧,文章较长,要有耐心。我一点点把问题抽出来。基础好的大佬,直接跳到最后便可。
互联网的架构发现一直在演变,一直到今天都未中止。但这不是咱们本次要讨论的重点,我尽量简单的带过,节省篇幅。
互联网行业有一个明显的特性是爆发性成长。在很长一段时间里,投资人对互联网行业的印象都是先有流量再谈盈利。即便是亏损状态,只要流量和模式在,也会巨额投入。像如今你们耳熟能详的携程、饿了么、小黄车、摩拜、小红书、滴滴、新蛋等等,几乎全部叫的上名字的公司,都离不开这样的模式。
这同步带来一个问题,就是如此巨大的流量+中国爆炸的人工红利+全球计算机硬件的普及,如何支撑业务正常运营成为全球互联网公司的难题。
随着互联网技术的不断成熟,互联网技术也在不断迭代成长。咱们姑且认为互联网是从1990年进入中国的。到如今也有30年的时间了。互联网架构大体有以下几个阶段的演变
下面咱们来逐一介绍。
业务上线前,公司一般都是老板和合伙人本身出钱,穷的不行。一切都是成本和速度优先。这个阶段有没有运维都是两码事。
一般在初创阶段,全部的应用都是 AllInOne
,即全部的服务都运行在一台服务器上。架构也是最简单,当时最流量最轻量的 LNMP 架构。
Lamp架构
随后业务逐步有转机,流量变大。垂直扩展是容易便捷的解决问题方式。从4c8g 提高到 32c64g 能在一段时间内解决问题。
但一夫难挡万人勇,服务器的网络、性能、存储、运算能力总归会见顶。一台服务器不可能再支撑流量的时候,这时最快捷的办法就是分拆硬件架构。
把数据库和存储分拆出去,再把运算模块分拆出去,再把流量模块分拆出去。
初步分拆架构图
总归一个字:拆。就对了。
各类拆完,若是仍是抗不住,说明公司规模已经不错了,离盈利不远或者已经有盈利了。这时就要考虑一些高可用技术,稍微有点挑战的技术了。
LVS
的10w
并发起步的流量负载均衡,;
MySQL
的分库分表, 主从分离,MMM 高并发架构;
数据的冷热分离;
较复杂的架构
这个阶段,仍是纯技术的升级迭代,对抗这个阶段的压力还可行。但就实际来说,早应该在软件架构层面作优化了,好比业务功能分拆、优化缓存策略、先后台分离
再往下就是架构优化了,这个层面已经不只仅是运维能力能造就的成果。须要引入外部财力、开发架构改造等资源。
早期为了省钱CDN
没买的,要搞了。session
不只后台技术要作缓存,前端也要作。CTO
甚至要亲自下手狠抓代码质量,弥补前期追进度丢质量的坑。「咱们就深有体会,并且一抓就抓了3年多,最后仍是走在了放弃的路上,计划全新重构。。。」
Redis,RabbiqMQ等异步架构,在非及时场景,都尽量合入。
原来随便调用,随便穿洞引用的调用关系,要全新梳理,定规范,定制度。收缩入口和出口。
按热度、流量、功能特性,作模块拆分。其实,就是打造中台的过程。只是阿里把这个口号喊的太大,把你们带偏了。有能力没能力都想搞个中台。。
原来混在一块儿的模型作分层,代理层、缓存层、网关层、业务层、数据层、存储层
若是4个打法还不能支持业务,恭喜你骑在了一头独角兽身上。公司上市指日可待。
这个阶段已经不只仅是技术层面能解决的问题了。很大可能已经进行了部门重组,业务拆分。以电商狗东为例:
原来PC端和手机端极可能是一个团队作的,如今拆分红2个部门。
原来购买、下单、秒杀、搜索、售后可能都是一个团队作的,如今要拆分红4个团队,专门的市场拉新、智能运营、大数据杀熟团队、智能搜索,下面还要再细化。
而后,把前面的步骤再来一遍就行了。
好了,终于啰嗦完了。但愿说的还明白。
总结下来就是一句话:运维要有快速平行扩展业务迅猛扩张的流量压力的能力。
你们请先记住这句话。
其实,一直在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
,从技术手段逼迫架构优异。不再用,和开发乱打洞,乱路由对抗了。你们今后就是酒桌上的好朋友,不用再是工做中的死对头。
k8s
生态提供了成熟的CICD的工具。由于使用容器镜像,因此CICD变的更加容易且规范。运维重心也将从原来的环境构建变为镜像传输和维护。
k8s
生态提供的插件,会将全部的原生数据所有收集起来,数据收集再也不是难题。数据汇总和汇报,才有更大的价值。
k8s
收缩了服务器的登陆权限,使用 conf 认证文件,便可在全部网络互通的服务器上登陆,并管理k8s
集群。生产环境更安全。
最重要的k8s
收缩了系统管理的权限,由于全部人不须要再管理系统。只需管理k8s
。k8s
本身就是系统。
资源配额太简单了。原来须要系统,代码各类配置。如今只须要修改容器参数。最后体如今修改 yaml 便可
k8s
相对云原生和serverless有一点差距。但彻底不影响普通大多数公司的功能需求。很是便利。
其他的看图本身体悟。
k8sarch
我是可爱的分隔线。扯淡这么久,为何感受和题目没毛线关系。
是的,由于我不铺掂好k8s
的做用, 他和微服务的冲突会很难讲清楚。
微服务要解决哪些问题呢?扯开了讲,又是一大篇。咱们只能精简了说。
若是说k8s
拯救了运维,那微服务拯救了开发。主要是java
开发。相对于python
, golang
, php
等个性化很强的语言,所谓的模块化开发,主要靠前期业务模块分工,每一个人预估模块的工做量,领取工做项。但最后都得合在一块儿,作为总体应用,统一对外提供惟一服务,最多算是半个微服务。
java
则比较幸福,业内当前主要流行的是 spring cloud
全家桶。从接口规范、服务管理、健康检测、全连接监控、配置管理。提供了一整套解决方案,真的是爽翻天了。
摘自网图的spingcloud的架构图
可是!!!
一整套解决方案
这几个字是否是有点眼熟。。。
是的。老朋友都知道,咱们前面已经啰嗦的不能再啰嗦了。k8s
也提供了一整套完整的解决方案。
这就有点尴尬了,不巧的是,k8s的理念和springcloud的理念并不彻底相同,也不是一家公司的。
咱们就咱们如今遇到的问题为例,给你们举例说明。
这里不得不画图了,你们知道,画图特别费时间。。。
svc相对是无状态的
Eureka
注册的ip
地址不能是pod
地址,你们知道的。但svc
后面能够跟不少pod
,因此注册到Eureka
也是假的。。
因此 ,我说明白了吗?
这个问题要怎么解呢?
当下 k8s
也只是和 Eureka
的功能上的重叠,只是思想不一致。在 AllIn
容器化的大前提下, Eureka
的方式可能会被废弃。改用 k8s
的全套方案。
其它
k8s
提供了相似 cronjob
的定时任务功能apollo
使用 configmap
代替zuul
网关也能够去掉。主要看顶层的设计和深刻度了。好了,今天聊到这里。无论你懂了没有,史丹利已经累趴~ ^ ^