一、云计算
云计算发展历程
在学习k8s的过程中接触到了Serverless的概念,这里先对云计算的发展历程做一个简单的总结,以便引入Serverless。2006年,Google董事长 Eric Schmidt 在搜索引擎大会首次提出云计算(Cloud Computing)的概念,一转眼十多年过去了,云计算的发展势如破竹,从传统的IDC到现在的FaaS,<font color=#0000FF>逐渐快捷,愈发高效</font>。
- IDC( Internet Data Center ):互联网数据中心。自建或者租用。自建自己干全套;租用就是服务器自己买,租人家的机柜,硬件安装和调试都由被托管方负责。
- IaaS(Infrastructure as a Service):基础设施即服务。IaaS提供商给你提供硬件, 想怎么用自己搞。
- PaaS(Platform as a Service):平台即服务。PaaS提供商给你提供硬件并装好操作系统、相关中间件及运行库等基础环境,至于要装什么应用看需求。
- SaaS(Software as a Service):软件即服务。所有的东西都由IaaS提供商提供,用户只管用。
- FaaS(Function as a Service):函数即服务。将应用程序抽象成函数,只有当程序被调用时才会执行函数启动,平时不启动不占用资源。
<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190806215644083-889473300.png"> </div>
Serverless
Serverless是无服务器架构,这并不是说不用服务器了,而是通过技术手段将服务器透明化了,让开发者减少对服务器资源的关注,能够更加专注于自己的开发工作(业务)。Faas就是Serverless概念的一种体现。
-
低成本
- Serverless将用户的服务器,数据库,中间件委托于FaaS,用户不再参与基础设施及软件的维护,而是直接使用相关的资源,大大节约了维护成本,降低了开发难度。
-
按需计费
- 不同于以往云计算的计费方式,FaaS是按照请求次数及运行时间计费,最大程度利用了资源并降低了成本
-
简化管理
- 自动化的弹性扩展、减小了打包和部署的复杂度、可以快速发布出去。
二、容器化的演变过程
-
传统服务
-
在微服务和容器化还没有盛行的时候,系统服务架构如下图,这种单体架构的好处就是便于管理和初次部署,但是当后续产品规模越来越大时,坏处就体现出来了。
- 项目过于臃肿。大大小小的模块都几种在同一个项目中,开发者不易维护
- 资源无法隔离。如果其中一个模块出现内存泄漏,整个系统都会被拖垮
- 无法灵活扩展。有时并不是产品的每个模块都会提供对外访问,访问量大做集群负载时无法轻易水平扩展。
-
<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190806230359397-815584005.png"> </div>
-
微服务
-
微服务是近几年流行的一种架构思想,它提倡化整为零,将单一应用程序划分为一个一个的小服务,每个小服务运行在一个单独的环境中,互不影响却又能相互协调、相互配合达到化零为整的效果。微服务有以下特点:
- 独立测试、部署、升级、发布。可以单独只测试某一个模块。
- 便于扩展。比如商品模块访问量比较大,一个节点扛不住,那就再弄一台服务器部署一个商品模块,前端做LB。
- 提高了容错,比如某个模块出问题了,不会影响到其它模块
- 提高了管理的复杂度。当你单个服务过多时,互相之间的调用就是问题,如果单个写静态配置文件的话对运维人员会是一个不小的挑战。这时候就需要一个叫服务注册中心的东西,每个单服务实例在启动的时候,向注册中心注册自己的IP地址等信息,这样别的服务调用它时,都会先去注册中心查询,然后根据查询到的信息再去调用。比如订单模块之前调用的是支付模块A,支付模块A的服务挂了,那一定时间内注册中心就会移除支付模块A的注册信息。订单模块连接不上原本的支付模块A了,就会再次向注册中心查询有没有其他的支付模块。
- 客户端调服务端都需要一个统一的入口,就是API Gateway。此处的客户端是一个相对的说法,除去外部访问,内部访问A调用B,相对B来说A就是客户端。API Gateway有身份验证、请求分片、负载均衡等功能。个人理解有限,想深入了解的自行查资料。
-
<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190806230559540-204756891.png"> </div>
-
容器化
-
容器概念的出现是要比微服务晚不少的,近几年流行的docker,为微服务架构提供了有效的容器。资源的有效隔离是微服务的设计原则之一,而docker恰好可以实现。
- 一般情况下一个容器一个服务
- 容器的资源隔离(PID、IPC、UTS等)、限制(CPU、Mem等)。
- 可扩展性、可移植性。
-
<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190807111659674-1353402736.png"> </div>
三、容器编排工具
-
容器编排工具概念
- 当容器数量达到一定规模,就需要编排工具去管理,就是容器生命周期管理工具。容器编排工具提供调度和管理集群的技术,提供用于基于容器应用可扩展性的基本机制。这些工具使用容器服务,并编排他们以决定容器之间如何进行交互。 ---百度百科
-
容器编排工具的核心价值
- 准备和部署容器
- 容器的高可用和负载均衡
- 应用规模的自动扩缩容
- 底层硬件故障,能够把容器迁移到其他节点上,用户无感知。
- 容器资源分配
- 容器的注册与自动发现
- 容器和宿主机的健康检查
- 容器配置和存储管理
-
容器编排工具种类
- Docker Swarm:docker自己的容器编排工具。
- Apache Mesos and Marathon:Mesos是一个数据中心的资源统一管控的工具,本身没有编排容器的功能,需要和Marathon结合使用。后来Apache Mesos自己说不但支持Marathon也支持Kubernetes,且当时docker也说不但原生支持docker swarm也支持k8s。。。。。k8s的地位已经显而易见了。
- Kubernetes: 压轴滴啦,请看下篇文章k8s介绍。
写作不易,转载请注明出处,谢谢~~
来源:oschina
链接:https://my.oschina.net/u/4275499/blog/3437576