1.5 云计算服务介绍
目前,早期的云服务厂商,通过资源提供的方式,将云计算划分为 IaaS、PaaS、SaaS 3 层服务模式,每层提供不同服务的使用范围和功能来满足不同的使用场景,并且这 3 层 有明显的层次关系:最上层的 SaaS 将应用作为服务提供给客户,无须开发者有软件背景, 直接使用软件就可以提供服务,比如 CRM、HR 等系统;第二层的 PaaS 将一个开发平台作 为服务提供给用户,一般需要开发者有相关的技术背景,开发者通过自行开发相关的代码 来使用平台的服务,最终为用户提供服务;最底层的 IaaS 将虚拟机或者其他资源作为服务 提供给用户,一般要求使用者有较强的技术能力才能比较好地掌握和利用好资源,只提供 最基本的计算、网络和存储等能力,同时也提供了更多的灵活性。
后来随着用户的需求越来越多,云服务厂商加了入越来越多的产品来为用户服务满足 业务的不同架构,从 IT 架构、数据架构到应用架构。比如,目前的云服务厂商,有国外的 AWS、Azure、Google 和国内的阿里云、腾讯云、网易云等。鉴于云服务的通用性和独特 性,下面以网易云为参考示例对云基础服务进行说明,其他云计算厂商的服务,请读者自 行参阅相关资料。
网易云基础服务是网易公司推出的场景化的虚拟机云和容器云平台,深度整合了 IaaS、 PaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解 决 IT、架构及运维等效率问题,使企业更聚焦于业务,以改变互联网软件的生产方式。目前主要提供 3 类的服务来迭代目标:第一,云计算基础服务(计算、网络、存储等);第二, 融合稳定的平台服务(关系数据库、负载均衡、缓存、对象存储等);第三,提供丰富完善 的 DevOps 工具链和多样的微服务基础支持。
服务端架构的设计是大部分技术人员在业务设计之初就会考虑的问题,技术人员既希 望能支撑业务的快速迭代,又希望能采用优雅高大上的架构,比如一开始就采用 SOA、微 服务或分布式架构。实际上,要较好地应用这些服务的架构是很有挑战性的,既要搭建微 服务基础设施,同时还要对服务进行编排,最后进行服务的治理、升级、监控等。为了实 现微服务的快速交付,在日常的开发中,团队需要进行开发测试线上环境的快速搭建,保 证环境一致、持续集成、一键发布等过程,这些过程大部分是烦琐或者低效的,采用 DevOps 的协作方式能比较好地解决这些效率问题,提供的容器服务、镜像服务和持续集成等基础 服务就是为了实现 DevOps 而设计的。
云基础服务具体包括容器服务、主机管理、镜像仓库等产品,这些基础产品提供基础 的计算、网络和存储等能力,另外,对网络隔离有要求或者规划较好的企业还要依赖虚拟 网络(VPC)等服务。容器和主机提供高可用、高性能、弹性伸缩的计算、存储和网络服 务,以达到在线扩容、快速响应业务变化,提升交付效率的目的。产品的性能和实现敬 请参考官网的参考数据和文档,在此不再详述。总之,这些服务能高效支撑各种互联网 使用场景,共同构建提供企业级闭环解决方案的基础服务,以网易云为例,整体的产品基 础服务架构如图 1-14 所示。
图 1-14 网易云基础服务架构
在平台服务层面,网易云提供负载均衡、数据库(RDS)、缓存服务(Redis)、对象存储(NOS)、CDN、安全服务和 IP 管理等平台级服务。高可用的负载均衡配合多变 规格的容器组成的微服务架构可以很好地支撑用户的弹性需求。关系型数据库和 Redis 缓存可以支撑各种常见的访问需求和数据存储能力,搭配对象存储的图片上传处理和 CDN 加速等技术,大大减少架构的复杂性,可以高效地弹性扩展,适应负载高峰。在安全层面,DDoS 安全、账号认证和安全验证等多重限制可以极大程度地保障用户的数据免 受外界冲击。
此外,由于国内网络环境的特殊性,还会提供相关的业务运营支撑系统,比如域名和 备案系统,可以完全满足企业域名的购买、域名的解析,以及对应的备案;弹性 IP 将允许 用户保留自己的 IP,方便后续的备案、变更及应急切换。
总之,网易云提供丰富、稳定和可靠的基于场景化的云服务,云基础服务是网易云产 品体系里面最基础服务,容器服务又是云基础服务的最核心功能。此外网易云还有一大特 色,就是依赖产品体系、知识体系和服务体系来保障业务与云技术水乳交融。本书也是知 识体系的重要组成部分,除此之外还有通信、安全等产品体系,以及产品、前端开发和大 数据等知识体系。
1.6 云计算解决方案
在云计算及服务中,我们会针对某个具体已经体现出的或者可以预期的问题、不足、 缺陷、需求等提出一个解决整体问题的方案,以及制定确保能有效执行的计划表。由于问题的多样及复杂性,常常会涉及很多系统及人的交互场景,因此产生不同的解决方案来处 理,需要在不同的阶段选择不同的方案来满足需求。
正如乐高积木提供的 1300 种不同形态的凸凹槽的积木,包括每个积木采用 12 种不同 的颜色,用户根据自己的喜好采用这些基础的组件就可以拼装组成一座座美妙的三维图形, 从最简单的积木到复杂的城堡、庄园等,被很多用户所喜好。云计算的基础设施提供的就 是这样一种能力,服务既可以提供简单的基础组件,又可以提供封装好的组件,开发者根 据业务的需求就能组成一系列的产品来服务于用户。
由于行业的多样性,云计算对行业的分类也非常广泛,按照相关的统计与行业的统称, 大致分为电商、金融、O2O、教育、视频、社交、游戏等行业。实际上每个行业都有不同的解决方案,即使是同一个行业,也会采用不同的方案来完成相关的业务,不可能有完全 一样的方案,因此网易云也只提供多种不同场景的解决方案供读者参考,相信开发者都有 能力根据业务的场景要求独立完成自身行业方案的建设。
大部分的云计算服务厂商也提供了各行各业的解决方案,尽管方案会有一些不同,但 是核心的内容相差不多,所以,下面仅以网易云为网易内部的电商平台提供的案例来说明 其应用,供开发者参考。
如图 1-15 所示,网易云电商行业解决方案整个过程如下。
图 1-15 网易云电商行业解决方案
1. 用户通过云厂商注册的域名访问 DNS,域名服务器将域名解析为 IP 地址,浏览器 根据 IP 请求服务。
2. 当访问静态 Web 页面时,直接从 CDN 读取,如果 CDN 不存在资源,则回到对象 存储服务上获取,并在 CDN 服务上缓存。
3. 当访问动态页面时,首先通过安全防护模块和应用防火墙,如果正常就把请求转发 到后端服务,否则拒绝请求。
4. 负载均衡根据请求和规则将请求分发到后端服务,先访问的是业务层的 API 服务。 基础通用服务一般提前在服务注册中心注册,API 业务通过服务发现调用各种服务组合业 务,异步业务层通过消息队列或者异步调用基础服务。
5. 基础通用服务层写入主数据库,主数据库同步到多个从数据库,为了加速基础服务 访问速度,减少性能开销,直接从 Redis 缓存读取热点即可。
6. 所有服务的业务日志可通过日志流将日志发给消息服务 Kafka。
7. 流计算从消息服务 Kafka 读取数据进行处理,将结果写入日志服务提供开放搜索。
8. 日志文件从消息服务 Kafka 读取数据上传到对象存储帮助交易数据进行大数据处 理,通过猛犸大数据平台(EMR)进行大数据计算,计算的结果部分进入分析型数据库, 部分进入推荐引擎。
9. 运营人员读取分析型数据库的数据,进行敏捷的数据分析或可视化操作,帮助用户 进行业务决策。
10. 产品人员可以利用推荐数据来更新用户的视图,推送给用户,进行下一轮的迭代。
上面是网易电商平台线上完整运行的一个案例,当然,这只是企业业务上线后的最后 架构运行状态的一个结果,实际上,这个结果的有效运行是依赖企业组织人员一起努力的 工作,是整个互联网软件生产中的一小部分,前期还包括架构设计、开发、测试、运维优 化等环节,比如,出问题时要搜索日志查看问题的原因,通过云监控查看监控信息及设置 服务能支持弹性扩容的条件。事实上,即使初创产品有机会上线,产品也需要不断迭代更 新和发展,否则很多业务无法走到这一步或者走的过程非常漫长。软件生命周期在产品里 程碑中占用的时间非常多,两者相互制约,相互促进,如果架构设计不是很优雅,当后续 的业务爆发增长时,就可能导致大量的重构和技术债,所以在设计之初就能考虑周全,受益是非常大的。
1.7 案例概述
无论是互联网行业还是传统行业加入互联网,项目的展现形式都各不相同,前文提及根据行业的类型,传统行业分为信息、金融、教育、食品、建筑、制造、批发和零售等领域,种类丰富。越来越多的传统行业积极加入互联网的浪潮中,进入到采用互联网思维进行企业的变革和转型中,所以,无论如何大部分企业都需要转型,采用云服务的思维加速 企业变革。
变革是一个漫长而又痛苦的过程,除了思想的改变之外,还包括很多方面,比如组 织机构、行政架构、技术架构甚至业务方向等。在这里,我们更多是探讨技术架构的上 “云”之路,如何根据自己的业务发展特点,在不同的阶段采用不同技术特征适合业务的 发展。
1.7.1 背景介绍
互联网业务丰富多样,根据业务的不同,我们通常会在不同阶段使用不同的服务架构 来支撑业务的发展,因此,为了让读者能够动手实践所有内容,我们根据各行业应用架构 发展的一些共同特性,提供单体架构、分布式架构和微服务化架构 3 个不同阶段的示例为 源代码给读者提供代码级别的参考,以麻雀虽小五脏俱全的案例为背景,提供完整的案例 供读者练习,来演示架构的变迁过程。
此外,为了给读者提供更丰富的内容和保证解决方案示例的一致性,我们选取了电商架构细节的内容作为本书的首选案例,对场景进行详细说明,原因之一是电子商务类的需 求也是大部分互联网及互联网+应用的诉求,比如电子商务通常包括会员、订单、购物车、 秒杀、详情页、评论、支付、物流等模块,后台还会包括各种管理系统,比如库存管理、 发货管理、优惠券等模块。此外,购物类网站包括的技术种类非常多,而且大规模的爆发 场景、支付一致性的场景等所依赖的技术非常具有代表性,无法简单地在源代码级别提供 示例。
我们希望每个用户都能在接下来的各个章节中找到对应的位置,根据业务的特点进行 有机组合,实现更好更快的上“云”之路,下面对源代码示例进行简单的说明和介绍实际操作步骤,读者可自行选择阅读或者略过直接进入第 2 章。
由于源代码里面有详细的指导说明文档,所以此处也不详述,欢迎读者在 Github 给开 发人员提意见,以展示更多的架构能力给其他读者,项目代码整个示例分为 3 个阶段,分 别如图 1-16、图 1-17、图 1-18 所示。
1. 单体架构(应用和数据分离)
图 1-16 单体架构
本分支主要给读者演示满足最基本需求的产品原型的工程实践,是第 2 章和第 3 章的 内容实践操作。
2. SOA 架构(前后端分离,服务化)
图 1-17 SOA 架构
本分支主要给读者演示满足企业在快速成长期的工程实践和挑战,是第 4 章的内容实 践操作。
3. 微服务架构(服务注册与发现、分布式配置管理、负载均衡、服务网关、断路器)
图 1-18 微服务架构
本分支主要给读者演示服务化架构下的工程实践和挑战,是第 5 章的内容实践操作。
本项目都是基于Spring Boot和Spring Cloud搭建,使用Maven作为构建工具,同时Maven 构建流程中包含 Docker 镜像的构建。在构建项目前,请先配置好运行环境,接下来将介绍 环境要求。
1.7.2 环境要求
本机需要安装如下环境。
· Maven 3
· Java 8
· Docker
· Docker Compose
1.7.3 项目构建
git clone https://github.com/163yun/cloud-cookbook-sample.git cd cloud- cookbook-sample mvn clean install
1.7.4 项目运行
项目运行的方法有多种,读者可根据自身的习惯自行选择,以下介绍常用的 3 种使用方法供读者参考。
1. 通过 IDE 运行
使用 IDE 导入工程找到包含 main 方法的 Class,比如 cloud-native-app-1 中的 CloudNativeApplication 类,右击,选择 Run 即可。
优点:快速简单,可调试。
2. 通过命令行运行
项目构建完之后,会在项目目录下生成 target 目录,该目录中包含可执行的 jar,可以 直接在命令行中启动该 jar。 以 cloud-native-app-1 为例,在 target 目录下会生成类似于 cloud-native-app-0.0.9- SNAPSHOT.jar 的可执行 jar 包,在命令行中执行
$ java -jar cloud-native-app-0.0.9-SNAPSHOT.jar
即可在当前控制台中看到日志输出。
3. 通过 Docker 运行
在每个项目下,都有一个 start.sh 脚本,该脚本可以方便地启动 Docker 容器,前提是 需要安装好 Docker,详情请看每个脚本说明。读者如果暂时没有相关的知识背景,可以先 跳过本段,第 2 章有 Docker 的详细说明,请参考后运行。
通过以上 3 种方式之一,都可以在本地打开浏览器,输入 http://127.0.0.1:8080/来访问 应用。
文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著
相关阅读: