架构演化发展历程 (2)

叁叁肆2018-11-13 10:22

欢迎访问网易云社区,了解更多网易技术产品运营经验。


1.4.3 分布式服务架构


一般而言,企业经过前面两个阶段的发展,就基本确定了业务的发展方向,接下来只 要面对竞争对手的跟随和大量用户访问请求的问题。这些企业也会提供各种不同的子产品 模块功能来满足业务的多样性发展,比如产品会设计不同的产品功能体系,运营人员会设 计不同的运营活动,客服人员会接到不同的用户反馈等。这些需求叠加在一起,会导致整 个业务越来越复杂,有些系统变得不再具有维护性,无法满足可用性的需求,只要一出现 流量高峰,系统必定宕机,所以很多公司面临重构架构设计,甚至推翻重来,比如京东大 部分的用户业务从.NET 转到 Java 语言的重构,淘宝从 PHP 转到 Java,升级 2.0,再到 3.0 的架构转变,可以看到,这个时间点的转型或重构可能不会到生死攸关的地步,但其成本 是非常高的。因此,如何在一开始就能做好这种转变的预见性,对架构设计有相当大的挑 战,本节先给出几点供读者来参考,更详细内容请参考第 5 章。



业务需求


通过云服务通常可以解决很多架构层面的问题,比如对象存储系统解决了文件分布式 存储的问题,CDN 解决了静态资源访问的性能问题,但实际上随着业务的不断发展,系统 访问压力增大,还可能有很多的请求变慢或者超时,应用服务器或数据库服务的压力波动 较大,只要不停地上线新业务,技术债就会越来越明显,业务的迭代也越来越跟不上产品 需求。为了解决这些问题,企业往往需要进行各种业务的拆分,把不同的功能模块拆分到 不同的服务器上进行独立部署。比如用户模块、商品模块、购物车模块、订单模块和支付 模块等,这些模块拆分并独立部署出来后,可以再进一步根据系统的瓶颈进行细分。但是 进行服务拆分之后,各模块之间的依赖又变得明显起来,比如数据库的连接数、数据的分 布式事务、数据库的性能开销等都是急切需要解决的问题。


同时,随着业务模块的拆分,除了上述的技术问题要解决外,还面临着工程实践的问 题,比如在业务的不同分支中,需要保证开发人员、测试人员、运维人员快速地开发环境、 测试环境、预发布环境的搭建和发布。在高速发展的企业中,迭代的频率非常高,以网易 考拉平台为例,所有系统的日发布总次数到达数千次,所以技术人员对效率的要求极高。 当扩大到一个公司多个产品线,整体的运行就要求像现代化工厂一样来运作,需要自动化 的能力平台去解决,纯手工根本无法满足企业的高效运转。


弹性扩容


随着需求和用户的不断增长,系统会出现波峰和波谷,为了更好地利用资源和成本预 算,弹性扩容成了必要需求,在峰值的时候能够根据业务的压力自动扩容,分担流量,在 压力低的时候自动缩容,减少成本或提高资源的利用率,把缩容的资源做离线业务计算。 也许在过去是简单地通过垂直扩大规模能力来处理更多的需求,或者是购买更强的服务器, 这在一定程度上是可行的,但过程很慢并且代价庞大,通过提前准备过多的资源,会导致 只根据峰值使用量预测来规划能力值,比如根据服务器的最高计算能力购买硬件予以满足, 这是不得已的做法。例如国外的黑色星期五、国内的双 11 等活动,当天请求非常高,需要 足够的资源来满足业务请求,而平时这些服务器的使用率很低,所以,只有依赖云的弹性 才能满足这种业务场景的需求。


服务化


不管是互联网还是传统行业转型的企业,基本都是在原有基础业务上发展而来的,不可能把业务停止从零开始,因此,直接对原有系统进行微服务改造比较困难,风险也较大。 这时基本上处于一种混合架构期,即新的业务会从头开发,逐步接入到老系统中,一步步 替换老系统不满足的地方,通过不断地快速迭代来保证业务的可持续性,同时又保证新业 务的快速需求。著名的架构大师 Martin Fowler 从 2013 年正式提出微服务架构的综述文章 至今,都没有提供统一的最佳实践方案。现在微服务的架构实现方式也各种各样,通常根 据应用的类型拆分成不同的微服务来实现,每个服务根据业务的特征采用不同的技术栈进 行组合,把每个服务划分成可以独立部署的隔离进程来运行。目前,微服务的基本框架都 类似,比如包括服务发现、降级、治理等方面。业务实现微服务的技术细节各不相同,没 有统一的实现方案,比如服务发现有自建服务基础设施的,也有依赖第三方开源的,技术 人员需要根据自己的场景来做选择。简化的架构模型如图 1-13 所示。


图 1-13 服务化架构模型


显然,这个架构模型只是整个业务服务架构的一部分,实际的系统可能要复杂几十倍。 如果业务的迭代速度非常快,同时每个业务之间的依赖从设计、开发、测试、上线到运维 都是一个非常庞大的复杂工程,因此,如何高效管理所依赖的服务和系统依赖,诊断并及 时对业务反馈响应是对服务架构的考验。


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,方便后续的备案、变更及应急切换。



总之,网易云提供丰富、稳定和可靠的基于场景化的云服务,云基础服务是网易云产 品体系里面最基础服务,容器服务又是云基础服务的最核心功能。此外网易云还有一大特 色,就是依赖产品体系、知识体系和服务体系来保障业务与云技术水乳交融。本书也是知 识体系的重要组成部分,除此之外还有通信、安全等产品体系,以及产品、前端开发和大 数据等知识体系。


文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用