1.2 云平台下架构的不同点
毫无疑问,现在是云计算时代,前文也阐述了云计算不仅是一种 IT 资源的使用方式, 而且已经演变成一种生态,它不仅会对软件开发人员的开发流程带来一定改变,更重要的 是会为软件架构设计带来深刻影响。二者相互结合,也将导致对整个产品的上线和迭代速 度产生连锁反应,比如云计算使得开发者无须再关注硬件资源,使得交付流程更快。然而, 又可能由于依赖云服务厂商的技术稳定性不一样,所以在架构设计的时候要更多考虑到云 的特性来满足非功能需求。2013 年微服务的呈现到现在非常火热的场景刚好和云计算的发展一致,有些人甚至认为它就是云服务时代的产物。如何基于“云”做软件架构设计,或 者如何让自己原来的软件架构能迁移到“云”上,本书给出了原理和初步的方法,相信能 给读者带来一些启示,我们先来总结一下云计算对技术人员的影响。
1.2.1 开发模式的区别
开发人员和测试人员之间
传统的开发人员在本地开发或测试完成之后,还需要重新上传到服务器端进行环境的 安装、搭建和调试,在最后上线时又要重新做一次之前的工作,整个流程不仅烦琐,而且 容易出错;除此之外,测试人员也会对测试的内容质量没有完全的把握,因此不能完全保 证所有的运行环境完全一致,容易产生沟通矛盾等问题。
开发人员和运维人员之间
一般来说,产品经过开发测试之后,常常会分发到各阶段流程中,即产品上线。上线 的流程通常包括资源申请、系统安装、环境配置等,有些可能包括容量规划、资源申请与 审批、工单申请和反复沟通等,即使是在使用虚拟机的阶段,也需要有一个过程。根据权 威的调查报告,一般虚拟机的创建时间最长不超过 15 分钟,然而业务上线却要长达 2 到 3 周,整个流程非常缓慢。
图 1-1 中,基于物理的开发流程要经过业务需求、采购审批、安装机器、软件安装到 应用部署 5 个步骤,基于虚拟机的开发流程只要经过业务需求、软件安装和应用部署 3 个 步骤,相对来说流程有几步优化。但是实际上由于软件安排、升级的依赖性,团队仍然需 要大量的时间去做基础的重复劳动,效率提升不明显。基于以应用为中心的模式只需要从 业务需求到应用部署 2 个步骤,把第二种开发流程中烦琐的软件安装通过自动化的模式来 完成,保证了软件环境一致性,减少了系统依赖的风险,同时开发人员只要聚集在应用上, 其他由基础设施服务一键完成,大大提高了软件的生产效率。
1.2.2 交付模式的区别
开发人员或者架构人员在完成应用的开发测试后,还要编写对应的文档来和运维人员 描述系统的部署架构,但是开发人员和运维人员对技术的理解存在不一致,同时对业务的 理解也不一样。我们不可能让运维人员重新学习相关的业务知识,让他们完整理解整个业 务的架构又相当困难,毕竟运维人员不像开发人员一样能理解整个产品的需求和开发过程, 而且他们同时还可能兼任各个产品的运维任务,没有那么多精力来完全了解整个业务架构。 因此整个发布流程是中断、有隔离的,并不流畅,如图 1-2 所示。
除此之外,无论大小公司,还存在运维人员人力招聘、成本预算等问题,由于这个问 题和本书的主题关系不大,对应的背景和上下文在此就不再详述。总之,无论在创业型的互联网企业,还是在传统的互联网+企业,甚至是大型的互联网企业,都希望能够进行比较 流畅的开发测试上线的流程体验。最后,从开发到测试再到上线及监控反馈,整个过程应 该能够不断反馈和螺旋上升,如图 1-3 所示。
因此,为了解决相关的问题,除了流程、组织、工具等需要培养之外,既需要技术人 员在实现软件开发和交付模式的转变,也更需要在技术上关注架构的调整来满足软件的架 构需求作保证。
1.2.3 架构设计的区别
云应用架构设计意味着更快的迭代速度、持续可用的服务、弹性扩容及一些非功能需 求,包括追求产品创新时间的技术挑战、以用户体验为中心的挑战和移动互联网时代的突 发性挑战。
1.更快的迭代速度
无论是个人还是企业,抓住更多的商业机会、更加快速地交付软件是整个组织追求的 目标,软件开发人员也在更加快速地迭代持续交付软件,因此,除了提高软件的开发效率, 软件的整个生命周期效率的提高也是追求的一部分。
2.持续可用的服务
在互联网及互联网+的业务中,除了满足业务的基本功能性需求以外,对于需要持续提 供服务的业务,系统架构的设计还必须满足非功能性需求,如何保证业务永远在线是架构 设计的第一要素,因此,实现业务的 24 小时持续可用(即高可用)也是云应用的特点之一
3.弹性伸缩
病毒效应在互联网场景下非常明显,因此,能够根据业务的流量和系统压力进行智能的弹性计算,也是云应用的显著特点之一,特别是在面对流量爆发或者突发事情的情况, 还能保证业务的可用性,因此,业务设计的时候是否能够分析出业务的关键路径和热点部 件,同时在架构层面保持足够的灵活性,以满足业务的弹性要求,并在低压力的情况下, 保证资源的占用自动缩容,以减轻业务部门的成本支出;对于非核心的业务,启用避开峰 值的方式来实现在线或离线业务的计算,尽可能实现云计算最大利用率,也就是常说的用 好“云”,发挥云计算的最大价值。
4.非功能需求
随着技术的发展,很多创新型公司的发展速度也越来越快,很多企业能够在较短的时 间内达到独角兽的角色,甚至有些公司能够在一年之内就到达上千万用户量的规模。在业 务急速发展的过程中,对技术的架构将会形成极大的挑战,如果从一开始没有很好的技术 架构支撑,将导致后续的技术债越来越重,严重影响业务发展。除了业务对技术的影响外, 技术也会对业务带来影响,两者相辅相成。这类创业公司常常具有很多共同的特征,例如 追求产品创新和极致的用户体验,主要包括以下几部分。
云模式的产品创新
现在每年有非常多的企业诞生,很多企业都希望把传统行业和互联网结合来追求新的 商业模式,所以在不停地进行产品研究和创新,对此类企业而言,时间是一个非常重要的 因素。此外,产品上的改变也越来越多地依赖“云”上的技术来完成,比如人工智能、数 据推荐等技术,这些产品的创新必须依赖云计算的技术才能完成。
以用户体验为中心
良好的产品体验是吸引用户的首要因素,除去交互等体验外,无论是个人用户还是企 业人员本身,甚至是爬虫机器人,都会对业务的响应性能有较高的要求。对于服务用户的 产品来说,除了人性化的交付体验外,系统的响应时间也是非常重要的。根据 eBay 之前的 统计,系统的性能指标会影响到用户的转化率,更快的系统也会带来更好的口碑,另外, 高级的搜索系统也会根据系统的响应时间进行加权计算而影响相应的排名,因此打造良好 的用户体验对一个成功的产品必不可少,当然前提是保证产品的基本可用。
移动互联网的突发性
随着移动互联网的技术发展,越来越多的人依赖于移动终端而生活,因此对业务的可 用性提出了更高的要求,碎片化的时间使得用户能随时随地进行网络互联操作。另一方面,在节假日或者热点事件发生时,必须随时应对用户的突发访问压力,因此提高系统的非功 能性要求也给技术人员在架构设计方面提出了新的挑战,相应地,也能为新业务提供更多 的机会。 很明显,仅仅考虑快速验证和成本的投入因素,传统的软件生产方式根本无法满足产 品对技术的发展要求,因此,使用“云”是目前所有公司的首要选择方案之一。然而,如 果只是以资源为对象的方式来使用“云”,而不是以应用为中心、聚集于业务,将会导致效 率非常低下,仍然无法满足用户快速迭代等需求,因此需要根据“云”的特点从架构上来 进行设计,所以基于“云”的应用架构是所有技术人员从事开发必须考虑的首要条件。如 何基于云计算平台设计出具有高扩展、高可用的架构来满足业务需求,创造更大的商业价 值,也是原生应用架构设计的必经之路。那么,何为云原生应用?我们来一探究竟。
文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著
文章来源:网易云