【摘抄总结】什么是云

223 阅读15分钟

什么是云?

"云"是可以使用通过互联网访问的服务器,同时包括这些服务其上运行的软件和数据库。

通过使用云计算,用户和公司不必自己管理物理服务器,也不用在自己的计算机上运行软件应用程序。

云有什么好处?

云使用户可以从几乎所有设备访问相同的文件和应用程序,因为计算和存储是在数据中心的服务器上进行,而不是在用户设备上(本地)进行。

这就解释了为什么用户可以在旧手机坏了后在新手机上登录自己的 Instagram 帐户并仍能找到旧帐户及其包含的所有照片、视频和对话记录。

它与 Gmail 或 Microsoft Office 365 等云电子邮件提供商以及 Dropbox 或 Google Drive 等云存储提供商的工作方式相同。

对于企业而言,转换为云计算可以削减一些 IT 成本和开销:

例如,不再需要更新和维护自己的服务器,因为他们选用的云供应商会做这些工作。

这对于那些可能无力负担自己的内部基础设施,但可以通过云以经济实惠的价格将其基础设施需求外包的小型企业来说,影响尤为显著。

有了云,员工和客户可以从任何位置访问相同的文件和应用程序.

因此,可以使公司更轻松地进行跨国经营。

云计算

什么是云计算?

云计算是指在云中运行工作负载,而云是一种能够抽象、汇集和共享整个网络中的可扩展资源的 IT 环境。云计算和云本身都不属于技术的范畴。

  • 云计算是指在云中运行工作负载的功能。
  • 而云是一种环境,是运行应用的地方。
  • 技术则是指用于构建和使用云的软件和硬件。

云计算是怎么工作的?

一种称为虚拟化的技术让云计算成为可能。借助虚拟化技术可以创建模拟的、纯数字化“虚拟”计算机,其行为就像一台自身有硬件的物理计算机一样。这种计算机的技术术语是虚拟机。正确实施后,同一主机上的虚拟机会通过沙箱化隔离,因而彻底不彼此交互。而且,一台虚拟机上的文件和应用程序对其他虚拟机也不可见,即使它们位于同一台物理计算机上。

  • 虚拟机还可以更有效地利用托管它们的硬件。通过一次运行多台虚拟机,一台服务器就变成了多台服务器,而一个数据中心也变成了一整群数据中心,同时为许多企业提供服务。因此,相比于采用其他方式,云提供商能够以非常低的成本,同时向比原来多得多的客户提供其服务器的使用权利。
  • 即使个别服务器出现故障,云服务器一般都能始终在线且始终可用。通常,云供应商会跨多区域在多台计算机上备份他们的服务(搭载集群)。
  • 用户可以通过浏览器或应用程序访问云服务,无论他们使用什么设备,都可以通过 Internet(即,通过许多互联的网络)连接到云。

云计算的主要服务模型

软件即服务(SaaS)SaaS 应用程序托管在云服务器上且用户可通过 Internet 访问它们,因此,不需要用户在自己的设备上安装应用程序。SaaS 就像租房子:房东负责维护房屋,但是租户通常可以像使用自己的房屋一样进行使用。SaaS 应用程序的示例有 Salesforce、MailChimp 和 Slack。

平台即服务(PaaS) :在这种服务模型中,公司不需要为托管应用程序付费,而是需要为构建自己的应用程序时所需的事物付费。PaaS 供应商提供通过 Internet 构建应用程序所需的一切,包括开发工具、基础设施和操作系统。PaaS 可以比作租用建造房屋所需的所有工具和设备,而不是租用房屋本身。PaaS 示例包括 Heroku 和 Microsoft Azure。

基础设施即服务(IaaS) :在这种服务模型中,公司从云提供商那里租用所需的服务器和存储空间。然后,使用该云基础设施构建自己的应用程序。IaaS 就像一家公司租用一块土地,该公司可以在这块土地上建设所需的一切,但是需要自己提供所需的建筑设备和材料。IaaS 提供商包括 DigitalOcean、Google Compute Engine 和 OpenStack。

以前,SaaS、PaaS 和 IaaS 是云计算的三个主要服务模型,并且基本上所有云服务都属于这些类别之一。但是,最近几年出现了第四种服务模型:

功能即服务(FaaS)FaaS 也称为无服务器计算,它将云应用程序分解为更小的组件,这些组件仅在需要时运行。想象一下,是否可以一次只租房屋的一小部分:例如,租户只在晚餐时支付餐厅费用、睡觉时支付卧室费用,看电视时支付客厅费用,而当他们不使用这些房间时,就不必支付租金。

FaaS 或无服务器应用程序仍然是在服务器上运行,云计算的上述所有服务模型都是如此。但是,之所以被称为“无服务器”,是因为它们没有在指定计算机上运行,而且构建应用程序的公司不必管理任何服务器。

此外,随着使用该应用程序的人不断增加,无服务器功能变得也可扩展或复制。想象一下,在有更多的人来吃晚饭时,租户的餐厅可以按需扩展的情景!了解无服务器计算(FaaS)的更多信息

云部署

云部署有哪些不同类型?

与上面讨论的定义如何通过云提供服务的模型相比,这些不同的云部署类型与云服务器的位置以及由谁管理有关。

最常见的云部署有:

  • 私有云:私有云是完全由一个企业专用的服务器、数据中心或分布式网络。
  • 公共云:是由外部供应商运行的服务,其中可能包括一个或多个数据中心中的服务器。与私有云不同,公共云由多个企业共享。通过使用虚拟机,不同的公司可以共享单台服务器,这种情况称为“多租户”,因为有多个租户在租用同一台服务器内的服务器空间。
  • 混合云:混合云部署是将公共云和私有云组合在一起,甚至可能包括本地旧版服务器。企业可以将其私有云用于某些服务,将其公共云用于其他服务,或者可以将公共云用作私有云的备份。
  • 多云:多云是一种涉及使用多个公共云的云部署。换句话说,拥有多云部署的企业从多个外部供应商那里租用虚拟服务器和服务。若继续沿用上文的类比方法,这种云部署就像是从不同的房东那里租了几块相邻的土地。多云部署也可以是混合云,反之亦然。

容器是 IaaS、PaaS、SaaS 或 FaaS 吗?

与虚拟机类似,容器是一种云虚拟技术。容器是 PaaS(平台即服务)云模型的一部分。容器虚拟化发生的位置要比虚拟机中发生虚拟化的位置高一个抽象层,在操作系统级别而不是内核级别(内核是操作系统的基础,并与计算机的硬件进行交互)。每台虚拟机都有自己的操作系统内核,但是同一台计算机上的容器共享同一个内核。

云原生

什么是云原生?

云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;

2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;到了2017年,Matt Stine在接受InfoQ采访时又改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而Pivotal最新官网对云原生概括为4个要点:DevOps + 持续交付 + 微服务 + 容器

总而言之,符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

云原生的四要素

微服务:几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,大概意思是组织架构决定产品形态。微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD来搞。

容器化:Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡,谷歌搞的,Docker和K8S都采用Go编写,都是好东西。

DevOps:这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

持续交付:持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

img

如何云原生?

首先,云原生借了云计算的东风,没有云计算,自然没有云原生,云计算是云原生的基础。

随着虚拟化技术的成熟和分布式框架的普及,在容器技术、可持续交付、编排系统等开源社区的推动下,以及微服务等开发理念的带动下,应用上云已经是不可逆转的趋势

云计算的3层划分,即基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)为云原生提供了技术基础和方向指引,真正的云化不仅仅是基础设施和平台的变化,应用也需要做出改变,摈弃传统的土方法,在架构设计、开发方式、部署维护等各个阶段和方面都基于云的特点,重新设计,从而建设全新的云化的应用,即云原生应用。

  1. 本地部署的传统应用往往采用c/c++、企业级java编写,而云原生应用则需要用以网络为中心的go、node.js等新兴语言编写。
  2. 本地部署的传统应用可能需要停机更新,而云原生应用应该始终是最新的,需要支持频繁变更,持续交付,蓝绿部署。
  3. 本地部署的传统应用无法动态扩展,往往需要冗余资源以抵抗流量高峰,而云原生应用利用云的弹性自动伸缩,通过共享降本增效。
  4. 本地部署的传统应用对网络资源,比如ip、端口等有依赖,甚至是硬编码,而云原生应用对网络和存储都没有这种限制。
  5. 本地部署的传统应用通常人肉部署手工运维,而云原生应用这一切都是自动化的。
  6. 本地部署的传统应用通常依赖系统环境,而云原生应用不会硬连接到任何系统环境,而是依赖抽象的基础架构,从而获得良好移植性。
  7. 本地部署的传统应用有些是单体(巨石)应用,或者强依赖,而基于微服务架构的云原生应用,纵向划分服务,模块化更合理。

可见,要转向云原生应用需要以新的云原生方法开展工作,云原生包括很多方面:基础架构服务、虚拟化、容器化、容器编排、微服务。幸运的是,开源社区在云原生应用方面做出了大量卓有成效的工作,很多开源的框架和设施可以通过拿来主义直接用,2013年Docker推出并很快成为容器事实标准,随后围绕容器编排的混战中,2017年诞生的k8s很快脱颖而出,而这些技术极大的降低了开发云原生应用的技术门槛。

img

虽说云原生的推介文档有引导之嫌,但面对它列举的优点,作为杠精的我亦是无可辩驳。这么说的话,云原生也忒好了吧,应用是不是要立刻马上切换到云原生架构?我的观点是:理想很丰满,现实经常很骨感,需从应用的实际需要出发,目前的问题是否真的影响到业务发展,而推倒重来的代价能否承受得来。

技术的趋势和影响

软件设计有两个关键目标:高内聚、低耦合,围绕这2个核心目标,又提出了单一职责、开闭原则、里氏替换、依赖导致、接口隔离、最少知识等设计原则。

软件工程师一直都在为这两个目标而努力奋斗,以求把软件编写得更加清晰、更加健壮、更加易于扩展和维护。

但后来,人们发现有更多的诉求,希望开发软件变得更简单、更快捷,程序员希望更少编写代码,非专业人员也希望能开发程序,于是,更多的更傻瓜的编程语言被发明出来,更多的编程技术和编程思想被发明出来,比如库、组件、云基础设施。

于是很多技术变成了屠龙之技,比如汇编,时代变了,建国后动物不能成精了,没有龙可以宰了,然后很多软件工程师摇身一变成了调参工程师、Call API砖家、用库包能手、拼组件达人,这是效率分工的结果,也是技术发展的使然。

纵观近二十年的科技互联网发展历程,大的趋势是技术下沉,特别是近些年,随着云计算的发展和普及,基础设施越来越厚实,业务开发变得越来越容易,也越来越没有技术含量,而之前困扰小团队的性能、负载、安全性、扩展性问题都不复存在,这不禁让互联网行业的油腻大叔们噤若寒蝉,仿佛分分钟就要被卷入历史洪流而万劫不复。

虽然不可否认技术的重要性在降低,但也还不至于那么悲观。遥想PC时代,当VB、Delphi、MFC出现的时候,也有类似论调,所见即所得,点点鼠标,就可以开发PC桌面程序,是不是很高端?那时候码农的担心相比现在恐怕是只多不少吧,但后来随着互联网兴起,出现了后端开发这个工种,码农很快找到了新的战场,网络、分布式、数据库、海量服务、容灾防错,于是又玩出一堆新花样。

如果说PC时代的基础设施是控件库,互联网时代的基础实施是云,那AI时代基础设施是什么?又会有什么高端玩法?