{{ selected_gold.title }}

  • ¥ {{ selected_gold.original_price }}
  • ¥ {{ selected_gold.price }}
  • {{ selected_gold.number_of_order }} 人订阅
  • {{ selected_gold.total_likers_count }}
    由 {{ selected_gold.creator_name }} 编辑

    {{ title }}

    请登录购买({{ selected_gold.price }}元),即可解锁剩余教程
    点击购买

    • Air
    • 2019年12月21日

    初识云计算

    如何定义云计算?

    云计算(Cloud Computing)通常用于描述:用户可以通过网络来请求使用多少IT资源,并最终根据实际的使用情况来支付费用。这里的IT资源包括计算资源,存储资源,数据库资源,中间件资源,日志资源,分析服务资源和人工智能服务资源等等。用户只需要在自己的电脑上发送一些请求,就能申请并使用这些IT资源。当用户不需要这些IT资源时,则可以释放回去由他人使用。

    通过以上描述可知,云计算的背后是一个具有丰富IT资源的生态系统。这种生态系统不仅需要根据用户请求来分配,释放和管理IT资源,而且还需要时不时地丰富和增加新的IT资源(比如计算资源不够时,该生态系统的管理人员可以通过新增计算机资源,并在这些硬件上虚拟化出多台计算资源来增加计算资源)。除此之外,该生态系统中的IT资源种类丰富,并且某些类别的IT资源会使用到其它类别的IT资源(比如数据库资源会使用计算资源来运行数据库系统)。

    打造这种生态系统离不开一种技术:硬件虚拟化(Hardware virtualization),也就是在一台物理计算机上创建多台虚拟计算机,每台计算机就像一台真实的计算机,只不过这些虚拟机瓜分和共享了这台物理计算机的资源(比如瓜分内存和CPU,共享网卡等)。使用这项技术可以打造只有计算资源的生态系统,比如购买100台物理计算机,并在每台物理计算机上创建10个虚拟机,此时该生态系统中的计算资源则由1000台虚拟机构成。这些计算资源可供给外部用户使用,也可以用于内部来搭建其它类别的资源。比如使用700台虚拟机来打造数据库资源,每台虚拟机上都会运行数据库系统。此时的生态系统则由2类资源构成,它们分别是700台数据库资源和300台计算资源。同理,为了增加其它类别的IT资源,则需要使用更多的虚拟机,并在这些虚拟机上运行相应的软件,最终将这些资源管理起来形成新的IT资源。

    由此可见,云计算背后的生态系统还在演化,它随着资源类别增多而变得复杂。提供这类生态系统的企业往往被称为云服务提供商。这些云服务提供商所提供的服务各有区别,比如只提供计算资源的BandwagonHost,还有提供各种丰富资源的互联网巨头们,比如国外的AWS,Azure,GCP以及国内的阿里云,腾讯云,华为云。除此之外,还有一些云服务商提供了种类颇为丰富的资源,它们是IBM,Oracle,Digital Ocean等等。它们都在打造这类生态系统,不同的是其中IT资源的丰富程度以及不同的收费模式和资源性能。

    云计算解决了什么问题?

    云计算的出现旨在减少企业构建数字化解决方案时所遇到的障碍。它根据过去几十年的软件研发经验将通用的服务模块化,并将每一个模块抽象成对应的IT资源并最终提供给用户使用。当企业在研发一款数字化产品时,时常会遇到各种障碍,常见的障碍有:构建CICD,自动化测试,弹性计算,无限存储,权限控制和数据安全等等。为了扫清这些障碍,就要求云计算背后的生态系统提供对应的IT资源,而用户只需要通过组合使用这些IT资源就能架构出一套满足实际需求的数字化产品。

    因此,知名的云服务提供商都会提供丰富的IT资源,以便帮助用户扫清数字化过程所遇到的障碍。比如几乎所有的云服务提供商都会提供计算资源,用户只需要使用这些计算资源就能够执行程序。除此之外,它们还会提供存储资源,而用户只需要根据数据量的多少来决定申请对应的存储资源。作为用户,你要做的只是编写好程序,并上传到申请好的计算资源,并将数据存储到申请号的存储资源,而无需准备硬件机器,安装操作系统以及编写存储服务等等。同理,如果你需要网络安全功能,那么可以按需申请和使用网络安全相关的资源。基本上,知名的云服务厂商都会提供丰富的IT资源,这些IT资源足以让你构建满足各种场景的数字化解决产品,而你只需要支付实际的使用费用即可。

    接下来,让我们看看在现实世界里,各大云计算服务提供商所提供的IT资源都有哪些。首先是计算资源,这类资源的用途是执行应用程序,典型的代表有AWS的EC2,阿里云的ECS和腾讯云的CVM,它们的本质上是一样的,均提供了虚拟机服务。其次是存储资源,而存储服务又细分为块存储,文件存储以及对象存储,这类IT资源的作用在于存储数据,典型的代表有AWS的EBS,EFS和S3,阿里云的OSS,这些存储服务的特点和用途是不一样的,比如用户可以向OSS或S3发送存取数据的请求,而EBS只能用于挂接到计算资源上,有点类似于计算机的硬盘。接下来是中间件资源,典型的代表有AWS的SQS和SNS,阿里云的消息队列 Kafka 版等,这类资源有的是减轻下游服务的压力(比如SQS和消息队列 Kafka 版),有的则是提供消息通知机制(比如SNS)。除此之外,还有数据库资源,这类资源的作用在于存储关系型数据,典型的代表有阿里云的云数据库,AWS的RDS。另外,还有很多类型的资源,比如分析资源,AI资源,用户认证资源等等。每类资源都有其应用场景,用户只需要通过组合不同类型的资源,就能轻松构建基于云端的数字化解决方案。知名的云计算服务商通常会提供一百多种IT资源,感兴趣的读者可以自行到各大厂商的产品目录下了解文中未提到的IT资源。多个云计算服务商共存对于用户来说是有好处的,它们之间的竞争能够带来更好的产品和更低的价格。

    从以上描述可知,使用云计算服务的用户主要是企业和个人开发者。这些用户可以通过组合成熟的IT资源,便可以快速地向市场推出满足用户需求的数字化产品。比如企业可以借助Serverless服务来快速搭建性能测试框架,也可以将借助对象存储服务S3来存储富媒体文件(图片或视频),有时还可以在短期内构建一个类似于微博的产品。

    总体而言,云计算的出现给那些需要提供数字化产品的企业带来了诸多好处。这些企业能够花更低的成本从丰富且成熟的IT资源中选择合适的组合来快速构建高质量的产品,最终能及时投放到市场中试错或产生利润。

    使用云计算所面临的挑战?

    虽然云计算带来了诸多好处,但是也引入了许多挑战。

    如何将已存在的系统无缝迁移到云端?目前很多企业都会遗留一些古老的系统,这些系统已经运行了好多年,积累了大量的技术债务,同时它们还在为企业带来源源不断的利润。如何在不影响这些系统的运行状态的情况下无缝迁移到云端依然是一个棘手的问题,这些问题包括如何保证数据的迁移是完整且正确的,如何不影响当前线上系统的稳定性,如何分解庞大复杂的古老系统等等。除此之外,复杂系统的迁移所需要的时间非常漫长,有时甚至会超过3年。

    如何使用原生云来构建合适的解决方案?就算企业直接采用原生云来打造新的数字化产品,也会有不少问题。首先,需要学习各种基础资源,比如你可能需要学习如何使用计算资源,如何使用存储资源,如何使用搜索资源以及如何将这些资源有效地组合成一个整体。其次,如果涉及到安全,日志或运维等问题,你还得学习相关的服务,除了学习相关的产品你还得学习如何使用不同的工具。这些服务或工具所涉及的知识点非常广,通常需要专门的人才来负责某个方面的问题,比如需要安全方案方面的人才,也需要网络方面的人才和原生云架构方面的人才等等。只了解这些服务和工具是不够的,还需要学习和采用一些原生云应用的最佳实践。随着业务的发展,已经运行在云端的产品随时都需要更新迭代,以及收集一些用户行为等等,这些问题都会随着规模变大而变得异常复杂,这就要求团队成员需要持续跟进,以便推出更好的替代方案。

    如何确保数据的安全性和持久性?将数据放置在云端,尤其是公有云,将面临一些法律法规的问题,比如涉及到用户隐私的数据则需要加密存储,只允许用户访问属于自身的敏感数据。除此之外,对于体量庞大的数据,还要确保其完整性和持久性,比如有些数据需要存放几十年,在这段时间里,会有各种自然灾害发生,因此需要设计一种方案来备份数据,以便降低数据丢失的风险。然而在数备份的过程中有可能面临数据不完整的风险,因此在备份数据时还需要确保数据的完整性。

    如何降低使用云服务的成本?虽然云计算的出现能够提供规模经济的好处,但是实际上支付的费用依然很高,各大云计算厂商的各项服务费用依然处于较高的阶段。除此之外,如果稍微使用不当,则会导致高昂的费用,因此当你开始使用云服务时,需要考虑的另外一个问题是:如何提高回报和投入的比率。这就要求团队里的成员清楚哪些云服务是满足使用场景的,同时其价格也是较低的。

    云服务厂商更新速度较慢!虽然知名的云服务商提供了各种类别的云服务,但是实际上它们的创新速度依旧很慢,甚至有些服务已经被弃用。比如领先的云服务厂商AWS的EC2依然是基于古老的HVM虚拟化技术,而不是较为先进的KVM虚拟化技术,这就导致你无法及时通过更新技术来提高用户体验。另外,虽然这些巨头们能提高很好的云服务,但是这些云服务依然无法满足某些特定要求的应用场景,比如EC2虚拟机启动的时间很长,如果要支持秒杀活动,那么这类服务是很难满足的。相比那些开源软件,云计算的服务厂商能够招揽到很多人才为其研发优秀的产品,而开源软件的人才是来自全世界,有更多优秀的人才时不时地为开源软件做贡献,这就导致开源软件的更新速度更加快,质量也越高!

    企业如何更好地利用云计算?

    企业应该持有开放的态度拥抱云计算,并通过云计算的便捷性来为自身创造更多的价值。在使用云计算的过程中,首先要组建一支拥有云计算经验的团队,团队的成员要根据企业的自身情况来决定。一般而言,你需要一名原生云架构师,一名原生云研发工程师,测试工程师,DevOps工程师。

    组建好基本的团队之后,则需要分析即将解决的问题,找到问题的根源,将问题分解成若干子问题,并优先解决重要的问题。比如在研发初期,可以考虑优先研发业务逻辑相关的功能,随着业务的发展,可能会遇到安全问题,此时,应选择相应的服务以及新添团队成员。随着产品上线,还可能会遇到监控,运维和升级等问题,此时,再增加这些方面的人才,选择合适的服务来解决遇到的问题。

    对于那些人员明显不足,在云计算方面欠缺经验,但是想快速提供一个成熟的数字化产品的企业,则可以考虑借助第三方公司的帮助。这些公司往往能够提供现成的模板(Infrastructure as Code),很快就能够帮助这些经验欠缺的企业实现其想法。比如,一家媒体企业想将其新闻通过网页的形式推广到全球,这种问题对于拥有云计算经验的公司而言是比较容易实现的。

    对于那些要求极高的企业,比如类似Google,云服务厂商所提供的服务可能无法满足其需求,那么在这种情况下则需要自己定制一套解决方案。

    个人为何以及如何学习云计算?

    对于个人,学习云计算最直接的好处是能够涨薪。目前,阿里云,腾讯云,AWS等都在招募优秀的云计算从业者,它们都想提高自己在云计算市场上的份额,提高的方式就是招募大量云计算从业人员来为各个行业采用它们的云服务。除此之外,云计算的确能够为大多数企业带来好处,是整个社会数字化进程不可或缺的部分,它将改变软件研发的方式。以前你需要购买计算机,将这些计算机通过网络连接在一起,设置网关,搭建防火墙,设计程序,部署自动化测试,构建自己的存储系统等等,而现在,你只需要通过脚本(Infrastructure as Code)来创建这些基础设施,并编写与业务相关的程序便可以构建一个适合大规模用户的数字化产品。通过开箱即用的服务来提高研发效率的方式一定会取代过去低效的软件研发方式,同时增加了个人开发者的创业机会。比如,你想提供一个图床服务,那么你可能只需要借助云计算并编写几个文件就能够提供这种服务,而你所支付的成本几乎为0。

    当然,个人开发者要想享受云计算所带来的好处,则要付出一些时间和努力。一方面,因为云计算所涉及的知识点太多,一个人不可能把所有知识点都掌握,因此需要选择一些常用且基础的服务来学习。即便挑出常用的服务来学习,那么还会涉及到实践方面的问题,比如你得试一试实际结果是否与理论或文档上所说的一致,这些实践活动是非常耗时的。另外一方面,当你掌握了这些知识点之后,并不代表你就是这个行业的老手了,你依然处于一个初级阶段,为了进阶,你需要阅读大量云计算最佳实践的原则和理论,并通过一个真实的产品–比如,打造一个Twitter,来实践这些原则,并借助持续改进该产品的机会来积累和提高自己在云计算方面的经验。

    为了让读者能够更加容易地踏入云计算这个行业,本书将通过云计算架构师的角度来讲述常见的云服务,这些服务经常会出现在现实的项目中,因此学习这类服务是非常有必要的。在介绍了常见的基础服务之后,本书还会组合这些服务来构建一个数字化产品,从而进一步加深读者对基础服务的理解。因此,本书的内容安排如下:

    Part 1 基础知识

    1. 初识云计算
    2. 开启云计算的学习之旅
    3. 计算服务
    4. 存储服务
    5. 网关服务
    6. 日志服务
    7. 安全服务
    8. 中间件服务
    9. 流服务

    Part 2 实践篇