目录

十月末-solo博客

talk less,code more.

X

"囫囵吞枣" 一、云原生简介

“囫囵吞枣”——前言

从云到云服务

网络的目的是共享资源

云,这个概念已经听了很久了。那什么是云?
不同人有不同反应:异地网络服务、服务器机房、数据存储中心、算力共享平台等等。像云电脑等服务推出后,有人说云是“花钱远程租用第三方电脑的使用权”,这是一个很有意思的说法。在上世纪 60 年代,“个人电脑”是异想天开的事。庞大精密的计算设备固定在专业的实验室中心里,专业人员需要花钱向有关机构部门申请特定的使用时长,专家学者们也不一定有机会直接前往实验室中心,而是通过远程提交指令、代码,由实验室操作员代为执行,再耐心等待返回的计算结果。

看来,“云”早在计算机诞生的不久就存在了,现在的“云”和当时的“云”区别在哪?我本科的时候,给我讲计算机网络的老师有一句话:网络的目的是共享资源。云正是通过网络解决资源的共享,随着计算机和网络技术的发展,可以被共享的不再仅限于算力。

云共享的最大特性是:弹性和分布式。弹性:按需、可扩;分布式:异地。
但请记住,共享不等于免费

服务细分

“不购买的原因只是你不是目标用户”
细分服务才能扩大市场

当打开腾讯云等云服务厂商,光是计算一栏,就有“CVM”、“轻量应用服务器”、“GPU 服务器”等等,甚至不止有传统的硬件服务器,还有数据库、存储、负载均衡、大数据等等,甚至还有直接卖“WordPress、Hexo 等博客应用。

现在的云,不单单是“云服务器”本身,云转变成了云服务,按照需求供给消费。大体上可以分为 IaaS、PaaS、SaaS。

IaaS, PaaS or SaaS - Choosing The Perfectly Fittable Cloud ...

说人话:当租用服务器这种硬件基础设施,并在上面运行自己服务时,就是 IaaS。当租用的是如云深度学习等平台时,就是 PaaS。当直接开箱使用如云盘这类产品时,就是 SaaS。

这种细分好处在于:在租用对应服务时,开发者只需要关注上层的业务逻辑,而不需要关注底层。

其实还有 FaaS,函数即为服务平台,这类也称为无服务器(serverless)平台

这种商业模式使得云的消费对象不再只限像 60 年代的专业人员,普通的消费者也能体验云服务,云开始走入寻常百姓家。

注意,细分服务本身是需要技术的。

云原生浅说

技术变革,思想先行

我第一次听到这个词,第一印象是“数字时代的原生住民”,然后就想到当前“大火”的元宇宙,有关云的倒是压根一点都没想到。

先来点软件工程理论:软件工程始终围绕着“高内聚,低耦合”这两个词出发,围绕这 2 个核心目标,工程师们又提出了单一职责、开闭原则、里氏替换、依赖导致、接口隔离、最少知识等设计原则。
这么多的原则其实都是为了保证软件“内紧外松”,既要保证软件的稳定高效,又要保证软件的可重复利用、独立性强。

面向服务架构

最早的程序开发是单体式(Monolithic)的,应用内部包含了所有的功能模块(ALL IN ONE),每个功能直接耦合性强,但是这种做法并不适合后续的业务迭代。业界需要可复用、易解耦的方案,这不仅利于开发,在后续的测试和部署中都能减轻很多工作量。
面向服务架构(Service-Oriented Architecture,SOA)是软件开发中组件模型的一种架构,将程序的不同功能单元(服务)拆分,并通过服务之间的接口和协议联系起来。这种方式可以重用组件,并且组件之间是松耦合的。在早期在实施 SOA 的时候,通过企业服务总线(Enterprise Service Bus,ESB)整合众多的服务(可以把 ESB 看作统一的 API 接口)。


云原生概念

Cloud Native,云原生的概念,由来自 Pivotal 的 MattStine 根据其多年的框架经验总结于 2013 年首次提出,2015 年谷歌牵头成立了云原生计算基金会(CNCF)。云原生至今并没有一个被业界普遍认可的定义,但是云原生涉及的技术和知识面却是令新人直呼从入门到放弃。

不要被这个吓到,不妨先来看下云原生的代表性概念和技术,每个理念、技术之间是环环相扣的。本文并没有去详细的分析每个技术的演进过程和具体的优缺点,因此在采用技术的时候一定要“按需”——从应用的实际需求触发。更多请看参考文档。

微服务架构

随着分布式架构大规模运用,SOA 之后演进便诞生了微服务架构(Microservices)

2014 年,Martin FowlerJames Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理 能力,服务可以用不同的编程语言与数据库等组件实现 。「维基百科」

微服务架构的精髓在于:服务独立部署在不同的进程中(个人理解:微服务是 SOA 的一种实现方式,其服务解耦粒度到了进程级别。)

容器虚拟化技术

容器(container)这一概念最早出现在 Linux 中出现的,又称 LXC(Linux Container)。容器虚拟化技术通过 Cgroups 的资源管理能力和 Namespace 的资源隔离能力结合在一起实现进程级别的隔离。(进程隔离/服务隔离是实现微服务架构的重要一环)
但容器化不仅要解决封装部署,还要解决自动化管理等问题。

服务网格(Service Mesh)

随着微服务的增多复杂程度也增加,管理变得更加困难,微服务架构虽然解决了「网络调用、限流、熔断和监控」等问题,但大多数框架和开源软件对原有业务是侵入式的,也就是需要在业务服务程序中集成相关的「服务治理」组件。简单的说,服务网格就是微服务中的网络层。

DevOps

新的软件交付模式,新的组织形式,将软件开发/测试人员/IT 运维关联在一起,通过工具、组织等方式使开发、测试、发布流程自动化,软件发布频繁、高效(这一特性称之为“持续”,后续会专门讲 DevOps),可以快速应对需求变化。

总结

云原生是一种构建和运行应用程序的方法 ,是一套新的软件工程技术体系和方法论。IaaS、PaaS、SaaS 为云原生提供了技术基础和方向指引。随着云技术的普及,应用原生为云设计,充分利用云平台的弹性和分布式优势,在云上以最佳姿势运行。

在可见的未来,云基础设施和相关技术将成为了国家数字新基建的一部分,运行在上面的软件服务也成为了基建的一部分,并潜移默化地改变人们生活,不少的线上服务已经成为了社会维持正常运转的一部分。在数字化时代过度到智能时代背景下,开发稳健性服务、保障服务稳健运行是软件生命周期的重要课题。一场关于开发运维的革命正悄然进行——不久 DevOps 将拉开序幕。

参考

什么是微服务架构? - 程序员柠檬 chen 的文章 - 知乎
什么是云原生?这回终于有人讲明白了 - 华为云开发者社区的文章 - 知乎《Cloud Native DevOps with Kubernetes》John Arudel, Justin Domingus


标题:"囫囵吞枣" 一、云原生简介
作者:bingoct
地址:https://blog.bingoct.top/articles/2022/02/13/1644767769185.html
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.