对于微服务技术栈我比较熟悉的是Spring Cloud,最近公司在各应用升级到K8S部署。虽然对Docker与K8S我有所了解,但是一直没有深入的使用过。任何框架或者中间件的登场和消亡都有其历史原因,从历史角度会对各技术的演变有更深刻的理解
云计算
近年来,在互联网科技行业中,“云”这一虚无缥缈的词出现的频率越来越高,随之出现的专业名词“云计算”的存在感也来越强。但是,提到“云计算”还有很多人都是丈二和尚摸不着头脑,那么今天就来说说什么是云计算。
人类的发展总是伴随着劳动力技术的重大革新,而云计算正是诞生于第四次工业革命
- 第一次工业革命是以蒸汽机的发明为标志,以机械化为特征,人类从此进入蒸汽时代
- 第二次工业革命是以电和内燃机的发明为标志,以电气化为特征,人类从此进入电气时代
- 第三次工业革命是以计算机的发明为标志,以信息化为特征,人类从此进入信息时代
- 第四次工业革命则是以工业智能化、互联网产业化、全面云化、大数据应用化为标志,以智能化、自动化为特征,人类将进入智能时代。
云计算:即通过网络按需提供可动态伸缩的廉价计算服务。是与信息技术、软件、互联网相关的一种服务。云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算机资源共享池(资源包括网络、服务器、存储、应用软件、服务),这些资源能够被快速提供。
比方说以前一家公司要建信息系统来支撑自身业务,要自己建机房、买服务器、搭系统、开发出各类应用程序,设专人维护。这种传统的信息系统有以下缺点
- 其一,一次性投资成本很高;
- 其二,公司业务扩大的时候,很难进行快速扩容;
- 其三,对软硬件资源的利用效率低下;
- 其四,运维成本高,且平时维护麻烦。
那么云计算的出现可以很好的解决上述问题,云计算首先提供了一种按需租用的业务模式,客户需要建信息系统,只需要通过互联网向云计算提供商(比如华为云)租一切他想要的计算资源就可以了,而且这些资源是可以精确计费的。打个比方,云计算就像水厂一样,企业喝水再不用自己打井,接上管子就可以直接购买水厂的水。
总之,云计算不是一种全新的网络技术,而是一种全新的网络应用概念,云计算的核心概念就是以互联网为中心,在网站上提供快速且安全的云计算服务与数据存储,让每一个使用互联网的人都可以使用网络上的庞大计算资源与数据中心。
云计算的五大特点
- 大规模、分布式“云”一般具有相当的规模,一些知名的云供应商能拥有上百万级的服务器规模。而依靠这些分布式的服务器所构建起来的“云”能够为使用者提供前所未有的计算能力。
- 虚拟化云计算都会采用虚拟化技术,用户并不需要关注具体的硬件实体,只需要选择一家云服务提供商,注册一个账号,登陆到它们的云控制台,去购买和配置你需要的服务(比如 云服务器,云存储,CDN等等),再为你的应用做一些简单的配置之后,你就可以让你的应用对外服务了,这比传统的在企业的数据中心去部署一套应用要简单方便得多。而且你可以随时随地通过你的PC或移动设备来控制你的资源,这就好像是云服务商为每一个用户都提供了一个IDC(Internet Data Center)一样。
- 高可用性和扩展性那些知名的云计算供应商一般都会采用数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性。基于云服务的应用可以持续对外提供服务(7*24小时),另外“云”的规模可以动态伸缩,来满足应用和用户规模增长的需要。
- 按需服务,更加经济用户可以根据自己的需要来购买服务,甚至可以按使用量来进行精确计费。这能大大节省IT成本,而资源的整体利用率也将得到明显的改善。
- 安全网络安全已经成为所有企业或个人创业者必须面对的问题,企业的IT团队或个人很难应对那些来自网络的恶意攻击,而使用云服务则可以借助更专业的安全团队来有效降低安全风险。
云计算的类型
云计算按服务类型可以分为三类:
- 基础设施即服务IaaS (Infrastructure as a service)
- 平台即服务PaaS (platform as a service)
- 软件即服务SaaS (software as a service)
对于几种服务的理解,我们可以用自己建房子自己住来类比云计算的三种服务(IaaS ,PaaS ,SaaS )类型。
- On-Premises(本地部署):公司拥有所有的内容,包括机房设备、计算机网络、服务器等基础设施,同时也拥有数据库、应用软件等等,和自己盖房一样(
要自己买土地,买材料,设计房子结构
),所需的基础设施、硬件均由自己提供,这样的状态就是本地部署。这也可以看到采用本地部署的模式需要投入的成本很多,需要服务器、高昂的硬件等等。 - IaaS(基础设施即服务):用户无需花费高额成本购买基础设施服务,用户提供租金后可使用由云服务提供商提供的基础设施服务,包括服务器、存储和网络硬件等,在此基础上可以安装操作系统、管理应用程序等。就像购买毛坯房一样,节省了盖房的过程,(
可以直接租到一个毛坯房
),在IaaS模式下,用户节省了对基础设施的高成本投入。 - PaaS(平台即服务):由云服务提供商提供平台服务,把运行用户所需的软件的平台作为服务出租。PaaS比IaaS提供的内容更多,提供基础设施服务的同时,也将提供平台软件层,包括操作系统、数据库、中间件和运行库,就像简装房一样,房子经过了简单装修(
可以直接租到一个简装房
),只需在这个基础上完善房子的功能即可。在PaaS模式下,用户无需负责IT技术部分,只需负责管理应用软件即可。 - SaaS(软件即服务):云服务提供商连同软件服务一起提供,服务内容更加全面。云服务供应商将应用软件统一部署在自己的服务器上,用户通过互联网可以直接使用应用软件,不需要顾虑类似安装等琐事,用户通过互联网获得供应商提供的服务,一般情况下用户根据服务的多少和时间长短来支付费用,免去初期高昂的软件、硬件的成本投入。用户无需管理底层的架构、操作系统等,
就像到购买了精装房一样,直接拎包入住就行
。 - DaaS(数据即服务):云服务供应商负责建立起IT环境,并收集用户需要的基础数据,通过对数据的加工、清洗,保障数据质量,并通过BIaaS(商业智能)做数据分析,挖掘数据价值,为用户提供服务
虚拟化
近几年,随着Cloud Native技术的普及,又涌现出了一大批新技术,Docker、Kubernetes、Istio、Service Mesh,这些新技术的加入,又对微服务有了更深层次的定位。那Docker是怎么发展来的呢?
最开始呢,大家要搭网站部署应用是很麻烦的,要自己采购机器布网线,还要养一堆网络工程师,,有些小企业觉得这个成本高,所以大多都把网站放到运营商机房里,然后远程连上服务器进行管理,这个时候连上的服务器都是真实的物理机。但是硬件资源配置都是固定的,你想要4核16G的服务器机房里还不一定有,那买个高配的又嫌贵浪费,真是左右为难。
然后有人提出了云计算的概念,刚开始国内谁都不知道云计算是个啥,阿里的马老板被王博士”忽悠”了开始做阿里云。当时国内没几个人知道云计算具体要怎么做,看到谷歌发了那三篇著名的论文就以为云计算应该做成分布式存储分布式计算,然后阿里苦熬了几年换掉了玩具版的Hadoop做出了自主研发的分布式计算平台(刚开始叫飞天也就是现在的MaxCompute),但是这玩意儿小企业根本不需要呀,我只想部署个小网站我要你的分布式有毛用啊。另一边呢,远在大洋彼岸的另一个电商巨头亚马逊开始”不务正业”,搞了个AWS干起了卖虚拟机的生意,虚拟机的好处是资源可以弹性申请,解决了之前硬件资源配置的问题。虚拟机是依赖CPU的虚拟化技术,将硬件抽象化,在上面虚拟出的多个操作系统可以共享一组通用资源。
阿里云一看,原来云计算的生意是这么做的啊,云计算重点不是”计算”而是”云”,赶紧开始抄作业了。刚好美国有个Rackspace公司开发的虚拟化技术始终干不过AWS和VMware,一气之下开源了,也就是现在的OpenStack。阿里云真是幸运,想抄作业刚好有人把答案公开了,还不收钱,就这样阿里云开始做起了卖弹性云服务器(ECS)的生意。刚开始呢BAT的另外两位对云计算是嗤之以鼻的。小马哥内心想着,这玩意能赚钱我跟马云姓。
李彦宏心想,我不就不跟你们姓马了,我还是去耕耘我的互联网广告继续收割流量费吧。
现实就是这么啪啪啪打脸,阿里云靠着卖虚拟机挣得盆满钵满——一个教英语的老师给学计算机的李彦宏和小马哥上了一门叫《云计算》的商业课。然后就是众所周知的打脸现场了,百度腾讯华为等一众互联网公司开始抢食云服务市场,很多大企业为了隐私安全也用OpenStack搭起了自己的私有云
与此同时呢,10年的时候有个小公司基于Linux的容器化技术(LXC)开发了Docker,本质上呢就是Linux内核的cgroup和namespace两个功能,能限制一组进程的cpu、内存、网络等资源,但是小公司不好混呐,经济上捉襟见肘,走投无路之际想到了开源。这不开则已,一开惊人,旋即吸引了谷歌微软亚马逊等一众大厂前来围观。这玩意儿就是Linux上的一个运行沙箱,这可比虚拟机省资源呐。你看连微软都开始弄WSL、帮Docker移植到Windows,全面拥抱Linux,就知道这玩意儿到底有多香了。嗯,插句道听途说的话,谷歌内部其实早就开始研究容器化,而Docker最有价值的其实是它的Dockerfile,它能将容器的环境用标准化的文件描述出来,所以现在的云原生底层的容器运行时并不仅仅只有Docker。
容器化看上去已经挺完美的,但是你本地起一两个Docker容器玩玩还好说,docker-compose可以方便的管理几个容器,但是生产环境成千上万个容器可不好管理,跨机器网络怎么通信,怎么对容器增删改查。Docker官方开发了Swarm来管理集群化的容器,谷歌开发了K8S。最后大浪淘沙之下K8S已经成了容器编排的事实标准了。