因为本人也是初次探索云原生,对云原生这个概念也不是很清楚,因此是属于边学习边输出的状态中,但其实云原生这个概念就在我们身边,比如我们学习和使用的Go语言,是云原生技术的高频编程语言,使用的Docker容器技术,是云原生的基础技术之一,广为人知的Kubernetes则是云原生的核心主流技术之一,平时使用的阿里云、腾讯云和百度云等等,也都是针对云计算和云原生的不同厂商构建的基础设施,因此我们需要的就是花一些时间去学习和了解他。
该篇文章主要是对一些优秀概念的摘取和自身了解后的一些理解,如果哪里有不对的地方还请读者和前辈指出。
在说云原生之前我们要有一个前提的概念,那就是云计算,因为云原生是由云计算技术衍生出的可以说是比较新星的技术,因此我们对云计算的理解是要有的,那我们下面先讲解云计算:
1 云计算
1.1 云计算概念
云计算(英语:Cloud Computing),也被意译为网络计算,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备,使用服务商提供的电脑基建作计算和资源。
为什么要使用云计算?
互联网上汇聚的计算资源、存储资源、数据资源和应用资源正随着互联网规模的扩大而不断增加,互联网正在从传统意义的通信平台转化为泛在、智能的计算平台。与计算机系统这样的传统计算平台比较,互联网上还没有形成类似计算机操作系统的服务环境,以支持互联网资源的有效管理和综合利用。在传统计算机中已成熟的操作系统技术,已不再能适用于互联网环境,其根本原因在于:互联网资源的自主控制、自治对等、异构多尺度等基本特性,与传统计算机系统的资源特性存在本质上的不同。为了适应互联网资源的基本特性,形成承接互联网资源和互联网应用的一体化服务环境,面向互联网计算的虚拟计算环境(Internet-based Virtual Computing Environment,iVCE)的研究工作,使用户能够方便、有效地共享和利用开放网络上的资源。
(以图片上由Sam Johnston - 本W3C状态不明的矢量图使用Inkscape创作 .CC BY-SA 3.0,https://commons.wikimedia.org/w/index.php?curid=6080417)
1.2 云计算的特征
互联网上的云计算服务特征和自然界的云、水循环具有一定的相似性,因此,云是一个相当贴切的比喻。根据美国国家标准和技术研究院的定义,云计算服务应该具备以下几条特征:
- 随需应变自助服务。
- 随时随地用任何网络设备访问。
- 多人共享资源池。
- 快速重新部署灵活度。
- 可被监控与量测的服务。
一般认为还有如下特征:
- 基于虚拟化技术快速部署资源或获得服务。
- 减少用户终端的处理负担。
- 降低了用户对于IT专业知识的依赖。
1.3 云计算的部署模型
(1)公用云
公用云(Public Cloud)服务可透过网络及第三方服务供应者,开放给客户使用,“公用”一词并不一定代表“免费”,但也可能代表免费或相当廉价,公用云并不表示用户资料可供任何人查看,公用云供应者通常会对用户实施使用访问控制机制,公用云作为解决方案,既有弹性,又具备成本效益。
(2)私有云
私有云(Private Cloud)具备许多公用云环境的优点,例如弹性、适合提供服务,两者差别在于私有云服务中,资料与程序皆在组织内管理,且与公用云服务不同,不会受到网络带宽、安全疑虑、法规限制影响;此外,私有云服务让供应者及用户更能掌控云基础架构、改善安全与弹性,因为用户与网络都受到特殊限制。
(3)社群云
社群云(Community Cloud)由众多利益相仿的组织掌控及使用,例如特定安全要求、共同宗旨等。社群成员共同使用云资料及应用程序。
(4)混合云
混合云(Hybrid Cloud)结合公用云及私有云,这个模式中,用户通常将非企业关键信息外包,并在公用云上处理,但同时掌控企业关键服务及资料。
2 云原生
2.1 概念引入
先引用下一个Apache大佬的演讲:
## 引用:
https://www.slideshare.net/bibryam/designing-cloud-native-applications-with-kubernetes
## 作者:
https://leanpub.com/u/bibryam
## 原文:
Applications adopting the principles of `Microservices` packaged as `Containers`
orchestracted by `Platforms` running on top of `Cloud infrastructure`,developed
using practices such as `Continous Delivery` and `DevOps`.
## 翻译:
基于`微服务`原理而开发应用,以`容器`的方式打包。在运行时`容器`由运行于`云基础设施`之上的平台进
行调度。应用开发采用储`持续交付`和`DevOps`实践。
综上,云原生应用也就是面向“云”而设计的应用,在使用云原生技术后,开发者无需考虑底层的技术实现,可以充分发挥云平台的弹性和分布式优势,实现快速部署、按需伸缩、不停机交付等。
直白的讲,我认为的云原生就是把云当做原生开发环境来对待:
- 不使用物理机进行项目的发布和维护,而是采用公有云
- 使用容器进行项目的运行
- 项目变更采用CI/CD和DevOps的方式
2.2 目前业界云原生的主要技术领域
(1)容器
容器(container)这一概念最早是在Linux中出现的,主要是通过Linux的Cgroups的资源管理能力和Namespace的资源隔离能力结合在一起实现进程级别的隔离。
(2)Kubernetes
由Google 基于 Borg 开源的容器编排调度系统,是一种基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,用户不需要再过度的关注资源的管理问题,降低操作的复杂度,提高了大规模容器集群管理的便捷性。
(3)微服务(Microservices)
微服务则是一种用于构建应用的架构方案,微服务架构有别于为传统的单体应用,它是将应用拆分成多个核心功能,每个功能都被称为一个独立的服务,可以单独构建和部署,其中某个服务出现故障也不会影响其他的功能模块,这句体现了其针对特定服务发布,影响小,风险小等特点。
(4)服务网格(Service Mesh)
服务网格指的是用于微服务应用的可配置基础架构层。在使用服务网格时通常会提供一个sidecar代理实例,主要处理 service 间的通信、监控、以及一些安全相关的考量,每个serivce里面都会有一个sidecar,同样也提供了服务发现、负载均衡、授权等功能。
(5)无服务(Serverless)
根据 CNCF 的定义,Serverless 是指构建和运行不需要服务器管理的应用程序的概念。即开发人员无需关注底层的基础设施,只需要关注应用程序的业务本身就行,且该服务是可以自动扩展。
(6)DevOps
早期的项目使用的是‘瀑布模型’进行软件交付,即一个阶段所有的工作完成之后再往下一个阶段,但这样的模式无法满足业务快速开发交付及变更需求的情况,于是后面就出现了敏捷开发这一概念,即一种快速应对需求变化软件开发能力,而DevOps就是基于敏捷开发将软件开发/测试人员/IT运维关联在一起,通过工具、组织等方式使开发、测试、发布流程自动化,软件发布频繁,高效。
(7)云(Cloud)
常常听到的‘公有云’,‘私有云’,‘混合云’都是基于这个生态衍生出来的各种场景,不同的云搭建环境,所需资源亦有所不同,比如公有云是在互联网上发布的云计算服务,而私有云则是在公司内网发布的云计算服务,目前没有一种云计算类型可以解决所有场景出现的问题,怎么选择适合自己的场景则需要根据技术需求决定。
3 总结
学习了云原生,我们不得不再回头看下在出现云原生之前我们如何开发。首先是拿来一台或多台堡垒机或一些电脑相互连接,并组成网络作为服务器集群并放在实地的机房中。首先每台单独的计算机必须是符合冯诺依曼体系的,其次网络也是符合IPv4或IPv6标准的,而且为了考虑安全,我们还会限制网络的入口规则、出口规则以及增加防火墙等等,在业务扩展时我们还需要扩展内容、硬盘或直接扩展计算机。而云原生技术的出现,让我们之前可以省略上述的很多地方,无需考虑使用的计算机是否符合冯诺依曼体系,无需手动去增加硬盘或内存,无需配置复杂的网络等等,甚至还无需考虑地域带来的业务延迟问题,因为云服务器可能再世界的任何一个地方。综上,就是我认为的云原生为什么越来越主流。
参考:
https://zhuanlan.zhihu.com/p/441747471
https://zh.wikipedia.org/wiki/%E9%9B%B2%E7%AB%AF%E9%81%8B%E7%AE%97
https://baike.baidu.com/item/%E4%BA%91%E5%8E%9F%E7%94%9F/53770166?fr=aladdin