前言
上篇《云原生的前世今生(一)》跟大家分享了 Pivotal 和 CNCF 对云原生的定义,这篇聊聊我本人对云原生的了解。
先抛论断,我了解的云原生是一种利用云计算交付劣势来构建和运行利用的方法论,当你的利用依照云计算交付模式来构建的话,就能充沛贴合云计算的弹性伸缩、分布式、自动化等特点,而且随着容器和 Kubernetes 技术的呈现,这套本来只实用于私有云的架构思路,当初能够轻松在公有云、混合云、甚至单台服务器上搭建,开发人员只须要关怀利用是如何创立的,无需理睬在哪部署。
有些读者可能会感觉,云原生技术只实用于大公司,小公司可能玩不转。而我认为只有你想构建一个分布式、弹性伸缩、容错性好、易于治理、便于察看、在哪都能部署的利用,无论是大公司还是小公司,云原生技术都是一个不错的抉择。
什么是云计算?
要想了解什么是云原生,须要先了解什么是云计算。
云计算简略来说就是云平台提供(包含服务器、存储、数据库、网络、软件、剖析和智能)等云服务,通过因特网提供疾速翻新、弹性资源和规模经济。对于云服务而言,通常你能够依据业务需要的变动,随时增减服务和用量,从而帮忙升高经营老本,使基础设施更加无效地运行。总的来说,云计算的实质是按需分配资源和弹性计算。云计算的劣势有:
- 费用:云计算让你无需在购买硬件和软件以及设置和运行现场数据中心(包含服务器机架、用于供电和冷却 的全天不间断电力、治理根底构造的专家)上进行资金投入。
- 速度:大多数云计算服务作为按需自助服务提供,因而通常只需点击几下鼠标,即可在数分钟内调配海量计算资源,赋予企业十分大的灵活性,并打消了容量布局的压力。
- 性能:云计算服务商会定期降级到疾速而高效的硬件,保障云计算的性能最优。
- 可靠性:云计算可能以较低费用简化数据备份、劫难复原和实现业务连续性。
- 安全性:许多云提供商都提供了宽泛的用于进步整体平安状况的策略和技术。
- 工作效率:云计算防止了大量的软硬件保护工作,让团队能够专一于业务指标。
- 弹性伸缩:云计算最大的长处是弹性扩大能力。对于云而言,这意味着可能在须要的时候从适当的地理位置提供适量的资源。
什么是云原生利用?
随着提供云计算的厂商越来越多,应用云计算的老本也在逐渐升高,再加上云计算的劣势显著,所以越来越多的开发者在利用创立之初就抉择云服务,而不再购买低廉的服务器,这些自创立之初就被托管在云平台的利用,可称之为云原生利用。
云原生利用,是专门为在云平台部署和运行而设计的利用。云原生利用并非齐全颠覆传统的利用,采纳云原生的设计模式能够优化和改良传统利用模式,使利用更加适宜在云平台上运行。
在云计算越来越风行的明天,云原生成了一个必然的导向。云原生存在的意义是解放开发和运维,而不是让开发和运维工作变得更加简单和沉重。
其实,大部分传统利用即使不做任何改变,也能够在基于 Linux 操作系统内核的云平台上部署和运行,然而仅以可能部署和运行为次要目标,将云主机当作物理机一样应用,无奈充分利用云平台的能力。
让利用可能利用云平台实现资源的按需分配和弹性伸缩,是云原生利用被重点关注的中央。云原生还关注规模,分布式系统应该具备将节点扩大到成千上万个的能力,并且这些节点应具备多租户和自愈能力。
实质上来说,云原生是一种设计模式,它要求云原生利用具备伸缩性和可用性,以及自动化部署和治理的能力,可随处运行,并且可能通过继续集成、继续交付工具晋升研发、测试与公布的效率。
云原生的重要个性
云原生利用的个性很多,本文重点聊聊伸缩性和可用性。这两大个性能够拆解成 4 个关键词:负载平衡、可用冗余、容错转移、资源调配。
负载平衡:云平台通常用程度扩容的策略来调节计算能力,这就要求一个云原生利用,能够同时运行多个实例,且多个实例的状态是共享的、对立的,当利用的计算量激增时,云平台会被动为利用减少新的实例,以调节计算压力,在申请量升高时,云平台也会动静删除多余的实例,以保障资源最优。而在本地环境,如果须要更高的解决能力,只能更换到一个更弱小的服务器上,或者对这个服务器进行降级,比方:减少内存、磁盘容量等等。
可用冗余:云平台通常用冗余的策略来保障利用的可用性,假如你的利用须要达到 5 个 9 的可用性(示意在 1 年工夫里最多只能有 5.26 分钟的业务中断),那么在云平台上,通常会采纳异地双机房 * 双实例的部署模式,当任意实例产生故障时,申请会立刻切换到同机房的另一个实例上,当某个机房停电或光缆被挖断时,另一地区机房中的实例也能疾速响。如果想进一步提高的可用性,还能够持续减少实例,并且尽量扩散地区部署。而在本地环境,服务器偶然宕机或停电,马上就会导致服务不可用超过 5 分钟。
容错转移:当一个服务器生效之后,云平台会迅速把利用迁徙到另一台服务器,来复原这个利用的可用性。对于一个典型的云数据中心来讲,通常都是有几十万台服务器的,即使只有 1% 的错误率,每天这个云数据中心的谬误也是数以千计的,你的利用很有可能就部署在生效的那个服务器上,所以云原生利用须要做好随时被迁徙到另一台服务器上的筹备。
资源调配:利用迁徙不光呈现在服务器生效的时候,云平台有时也会被动调节不同服务器上的负载来达到一个资源优化,也就是说利用和服务器自身都没有问题,也有可能触发利用的迁徙。而在本地环境,服务器宕机是一件很大的事件,会间接导致你的服务不可用,并且很难疾速复原。
云原生的蓬勃发展
为了满足云原生利用个性的要求,云平台须要具备哪些具体的能力呢?
1、疾速、稳固地从新公布。无论是容错转移还是弹性伸缩,云平台须要能疾速的把你的利用,从新公布到另外一台服务器上。在历史上人们有很多不同的解决方案:1)一开始是部署脚本 + 安装程序的模式,但书写一个兼容性良好的部署脚本是一个十分复杂的工作;2)起初人们提出了虚拟化概念,通过虚拟机的模式,把利用和所有类库以及底层操作系统全副打包成一个虚拟机镜像,部署时间接用镜像进行还原,这个办法尽管解决了兼容性问题,但又产生了部署效率问题,因为一个残缺的虚拟机镜像,无论是在下载、还是在调度上,都须要很大的工夫开销;3)再起初呈现了容器技术,它对立解决了不同操作系统之间的兼容性问题,并给大家提供了一种轻量级的封装形式,反对把利用和它依赖的类库打包成一个尺寸较小的容器镜像,这种容器镜像不论是传输、还是从新公布,都能够达到很快的速度。
2、动静、灵便的网络。同样是容错转移或者是弹性伸缩,云原生利用的实例会不停的在数据中心进行迁徙,实例在迁徙的过程中要保障它和其余部件之间的连贯稳固,所以须要动静、灵便的网络。1)一开始人们也是提供这种配置脚本,对不同的网络硬件书写特定的脚本来进行配置,这个工作同样也是非常复杂的;2)起初有了 SDN 软件定义网络的形式,就是说在硬件网络根底层的下面,通过软件来定义网络的一些性能,比方路由的调配等等;3)再起初呈现了 kubernetes 和 Service Mesh,就是说在软件和硬件的网络架构上,能够再贴一层服务网格进行更灵便的、公有的、服务之间的连贯配置。
随着容器和 Kubernetes 等云原生技术的呈现,这套本来只实用于私有云的架构思路,当初能够轻松在公有云、混合云、甚至单台服务器上搭建,开发人员只须要关怀利用是如何创立的,无需理睬在哪部署。目前曾经从 CNCF 毕业的云原生我的项目次要有:
项目名称 | GitHub Star | 官网地址 | 我的项目形容 |
---|---|---|---|
Kubernetes | 80k+ | https://kubernetes.io/ | 是用于主动部署,扩大和治理容器化应用程序的开源零碎。 |
Prometheus | 39k+ | https://prometheus.io/ | 应用当先的开源监控解决方案为您的指标和警报提供反对。 |
etcd | 37k+ | https://etcd.io/ | 是一种开源的分布式对立键值存储,用于分布式系统或计算机集群的共享配置、服务发现和的调度协调。etcd 有助于促成更加平安的自动更新,协调向主机调度的工作,并帮忙设置容器的笼罩网络。 |
Helm | 20k+ | https://helm.sh/ | Helm is the best way to find, share, and use software built for Kubernetes. |
Envoy | 18k+ | https://envoy.com/ | 是专为大型古代 SOA(面向服务架构)架构设计的 L7 代理和通信总线。 |
Harbor | 15k+ | https://goharbor.io/ | Harbor 是一个开源注册表,它通过策略和基于角色的访问控制来爱护工件,确保图像被扫描且没有破绽,并将图像签名为受信赖的。Harbor 是 CNCF 毕业的我的项目,可提供合规性、性能和互操作性,帮忙您跨云原生计算平台(如 Kubernetes 和 Docker)统一且平安地治理工件。 |
Jaeger | 14k+ | https://www.jaegertracing.io/ | end-to-end distributed tracing. |
Vitess | 12k+ | https://vitess.io/ | 是一个数据库集群零碎,用于通过狭义分片对 MySQL 进行程度扩大。 |
Fluentd | 10k+ | https://www.fluentd.org/ | Fluentd 是一个开源的数据收集器,专为解决数据流设计,应用 JSON 作为数据格式。它采纳了插件式的架构,具备高可扩展性高可用性,同时还实现了高牢靠的信息转发。 |
TiKV | 9k+ | https://tikv.org/ | TiKV 是一个分布式的 KV 零碎,它采纳 Raft 协定保证数据的强一致性,同时应用 MVCC + 2PC 的形式实现了分布式事务的反对。 |
containerd | 9k+ | https://containerd.io/ | 是一种行业标准的集装箱运行工夫,强调简略性、坚硬性和便携性。它可作为 Linux 和 Windows 的守护神,可治理其主机零碎的残缺容器生命周期:图像传输和存储、容器执行和监督、低级存储和网络附件等。 |
Rook | 9k+ | https://rook.io/ | 是一款云原生环境下的开源分布式存储编排零碎,目前反对 Ceph、NFS、Edegefs、Cassandra、CockroachDB 等存储系统。它实现了一个主动治理的、主动扩容的、主动修复的分布式存储服务。Rook 反对主动部署、启动、配置、调配、扩容 / 缩容、降级、迁徙、劫难复原、监控以及资源管理。 |
CoreDNS | 8k+ | https://coredns.io/ | 是一个灵便可扩大的 DNS 服务器,能够作为 Kubernetes 集群 DNS。 |
Linkerd | 7k+ | https://linkerd.io/ | 呈现是为了解决像 twitter、google 这类超大规模生产零碎的复杂性问题。Linkerd 不是通过管制服务之间的通信机制来解决这个问题,而是通过在服务实例之上增加一个形象层来解决的。 |
Open Policy Agent | 5k+ | https://www.openpolicyagent.org/ | 官网简称 OPA, 为这类策略决策需要提供了一个对立的框架与服务。它将策略决策从软件业务逻辑中解耦剥离,将策略定义、决策过程形象为通用模型,实现为一个通用策略引擎,可实用于宽泛的业务场景 |
在国内,阿里云将云原生降级为技术策略,积极参与到云原生生态的建设,继续积淀简略易用的云原生产品,并在本身业务中充沛实际云原生,获得了十分不错的功效。
咱们灵活运用这些云原生技术,配合 CNCF 云原生实际路线图,置信大家能轻松的构建本人的云原生利用。
参考
- 《什么是云计算》https://azure.microsoft.com/zh-cn/overview/what-is-cloud-computing/
- 《架构新纪元(二):什么是云原生?》https://www.infoq.cn/article/xpFP8uclTKJQhhFqDyjZ
PS:关注公众号【劼哥舍】,一起学习成长