5条建议,让应用软件服务发挥云计算平台的优势

简介: 传统的企业应用软件开发者,在软件开发的哪些方面应该做出调整,以利用云计算的优势,开发出可快速扩展、可自动维护的互联网级的应用服务?

传统的企业软件,往往部署在企业内网,以服务单个企业或集团为主,具有可以估算的系统吞吐量和访问量。基于估计的性能要求,采购相应规模的服务器,然后部署应用程序。这种背景下开发的应用软件,往往对于扩容能力要求不高,适应不了通过互联网对外服务的场景。通过互联网对外服务时,客户会越来越多,而访问量可能有明显的波动性。为了满足高峰时期的访问量而部署的计算能力,在平常时期是很大的浪费。不论是企业自己的互联网业务(B2C, B2B),还是应用软件开发商以软件即服务(SaaS)的形式提供的企业应用,都需要反思软件是否能适应这种更加动态的场景。

云计算给这种场景提供了更好的计算平台,容器云技术更使得我们可以接近实时地获取与释放计算资源;此外,云计算平台还提供了很多的支持性服务,能极大地简化基础服务的部署与维护。那么,我们如何设计应用软件服务,以发挥云平台的这些优势呢?

国外知名的云平台服务商Heroku提供了一份开发指南 the-twelve-factor-app, 从12个方面提供了建议。本文基于我对上述开发指南的理解,整理成5条建议。

把大型应用划分为服务和程序库

把大型应用按功能分解为多个服务。对于服务共用的代码,则按功能封装为程序库。这种化整为零的策略能降低大型应用开发与支持的复杂度。按服务和程序库来建立敏捷团队,进行设计、开发与交付。

每一个服务或程序库都有自己独立的代码库,而不是把大型应用的所有代码都放在单一的代码库中。这样能更好地发挥代码库的修订历史管理能力,让不同的服务和程序库以不同的节奏进行开发和发布,而不至于在代码修订上互相干扰。

通常,服务或程序库会依赖其他的服务和程序库,应该通过依赖管理工具,详细而准确地描述依赖关系,避免依赖库的版本引起的问题。

敏捷方法能尽早交付最有价值的服务,然后持续地交付改进和新功能。这种增量的交付方法意味着时常会发布新代码。为了避免新代码中的缺陷对生产环境稳定性影响的风险,应该建立多个执行环境。比如,开发人员的开发和测试环境,集成测试环境,准生产环境(或预备生产环境)和(正式)生产环境。

不同执行环境中,服务器的IP地址、名字是不同的;数据库、消息服务器等的方法URL和账号也是不同的。这些环境上的差异,应该通过配置项体现出来,而不是使用条件语句写入到代码中。配置项可以用系统环境变量来表示,也可以用配置文件来保存。如果使用配置文件,要特别注意,服务的代码库中只能保存示例配置文件,不能保存任何具体执行环境的配置信息,以免造成信息泄露,影响系统安全。

遵循“构建、发布版本、运行”三阶段的流程,将服务发布到这些执行环境中去。“构建”是基于代码库的某一次提交来将服务的代码文件(包括依赖库)打包;“发布版本”是将代码文件包和相应执行环境的配置打包;“运行”是在某执行环境启动服务进程。不应该在运行环境中手动修改代码或配置,以免丢失。构建包和发布版本包都应该使用版本号进行标记,并使用配置管理工具自动管理。

为了避免基础软件环境,比如操作系统、开发语言版本、数据库版本等不一致造成的问题,应该尽量让开发、测试与生产等环境保持一致。由于现在大多数服务是使用Java, PHP, Python, Ruby, Nodejs等语言开发的,程序代码是通过语言虚拟机或解释器运行的,为了提高开发者工作效率,可以允许使用不同的操作系统环境。

使服务能快速启动和优雅地关闭

云平台环境中,为了响应快速波动的应用访问,我们可以通过调用云平台API,自动地管理服务执行环境的创建与销毁。

一旦执行环境准备好,服务的启动应该尽量地快。传统的以应用服务器容器为中心的架构中(比如 Java EE),需要先启动应用服务器和一些列的自带服务,再启动应用服务。整个过程太长,太慢,对于依赖较多的服务,时间是分钟级别的。在以服务为中心的架构中,理想的服务进程的启动是秒级的。

当应用的访问波峰过后,多余出来的处理能力应该优雅地关闭:不再接收新的请求,等已入列的请求完成后,停止服务进程,然后回收服务器,退还给云平台。

由于运行服务的容器(或虚拟机)数量多,且会动态地创建与释放,因此服务的运行日志不应该保存在本地磁盘,而是应该以时间序列事件流的形式发送给专门的日志处理器。运维支持人员通过日志处理平台来查看、处理、分析日志数据。

把平台支持服务看成低耦合的、可分离的资源

应用服务会依赖很多的平台服务、支持性质的服务,比如数据库、队列、缓存等。这些服务,有可能是应用开发者公司自己部署管理的,也可能是云平台提供的,还可能是第三方的服务。应用服务应该把这些支持性质的服务看成以URL访问的资源。当应用服务管理员切换资源提供者时,只需要更新配置项中URL值,应用服务代码不需要修改。这种低耦合的设计,有助于灵活选择支持服务提供者,使得应用服务商可以根据业务需要进行切换。

这要求应用服务代码使用行业标准代码库来访问这些资源,避免在代码中直接使用服务提供商的私有代码。

基于进程的服务部署

应用的服务应该以一个或多个进程的形式运行,而且任何需要保存的状态应该由后台支持服务负责,应用的服务进程对于请求者而言应该是无状态的。对服务请求者而言,不能假设下一个请求会被调度到和上一个请求同一个服务进程上进行处理。因此,会话状态不能保存到进程本地,而是应该保存到后端的数据库服务中,如 memcached, redis等。会话建立以后,服务请求者每次请求都应该带上会话ID,应用服务根据会话ID从后端支持数据库中获取会话状态。

基于进程的部署使得向外水平扩展变得很容易,只需要新增服务器、部署运行更多进程即可分担请求。对进程的管理,应该像Linux管理启动服务那样简单。

相比于传统的让服务运行于某个应用服务器容器中,网络端口由容器分配的方案,我们更倾向于以应用服务为主体来分配和使用网络端口。在应用启动时调用网络服务库,启动网络服务端口;而不是等应用服务器容器启动以后,加载应用服务模块。这种方式能从逻辑上避免共享应用服务器容器带来的冲突。如果多个服务运行于同一个应用服务器进程中,那么我们就无法以简单的进程管理方式来启动和关闭某个服务。而且,多个服务所需要加载的依赖包,在同一个进程中加载,可能存在版本冲突,使事情变得更复杂。小型化、独立化是更适应自动化服务进程管理的设计思路。

提供管理脚本执行环境

应用服务代码除了提供常规的请求处理功能以外,通常还应该提供管理脚本。这些管理员脚本一般用于执行一次性的任务,如数据库结构更新、异常数据修复,或查看服务内部状态等。

执行这些管理脚本的环境,应该与服务进程的环境相同;应该在“版本发布”后的环境中执行这些一次性任务。

目录
相关文章
|
16天前
|
存储 Serverless 数据库
科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明
本文介绍了云计算服务的几种主要类型,包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)、BaaS(后端即服务)和FaaS(函数即服务)。每种服务模式提供了不同的服务层次和功能,从基础设施的提供到应用的开发和运行,再到软件的交付使用,满足了企业和个人用户在不同场景下的需求。文章详细阐述了每种服务模式的特点、优势和缺点,并列举了相应的示例。云计算服务的发展始于21世纪初,随着互联网技术的普及,这些服务模式不断演进,为企业和个人带来了高效、灵活的解决方案。然而,使用这些服务时也需要注意服务的稳定性、数据安全性和成本等问题。
362 3
|
3月前
|
Cloud Native 安全 网络安全
云计算与网络安全:技术融合与挑战云原生技术在现代软件开发中的应用
【8月更文挑战第28天】在数字时代的浪潮中,云计算和网络安全成为信息技术领域的两大支柱。本文将探讨云计算服务的分类、特点及其面临的安全威胁,分析网络安全的基本概念、重要性以及信息安全的关键要素。同时,文章将深入讨论云计算环境下的网络安全问题,包括数据保护、访问控制和合规性挑战,并提出相应的解决策略和技术措施。最后,通过一个代码示例,展示如何在云计算环境中实现基本的数据加密,以增强信息的安全性。 【8月更文挑战第28天】 随着云计算技术的飞速发展,云原生技术已成为推动软件行业创新的关键力量。本文将深入探讨云原生的核心概念、优势以及如何在现代软件开发中有效利用云原生技术。我们将通过具体案例,展示
|
29天前
|
边缘计算 安全 网络安全
|
30天前
|
机器学习/深度学习 边缘计算 人工智能
探索云计算的未来:技术趋势与应用场景
【10月更文挑战第4天】探索云计算的未来:技术趋势与应用场景
70 7
|
25天前
|
Cloud Native 持续交付 云计算
云端新纪元:探索云原生技术的奥秘在当今数字化时代,云计算已成为推动企业创新和增长的关键动力。随着云平台的不断成熟,云原生技术应运而生,以其独特的优势引领着一场新的技术革命。本文将深入探讨云原生的核心概念、主要特点以及它如何改变现代软件开发和部署的方式,为您揭开云原生这一神秘面纱。
云原生是一种构建和运行应用程序的方法,充分利用了云平台的弹性、分布式本质以及声明式基础设施。本文将解析云原生的十二要素,微服务架构的优势,以及容器化、持续集成与持续部署(CI/CD)等核心技术的实践应用。通过深入浅出的方式,让读者理解云原生不仅是一种技术,更是一种文化和方法论,它正在重塑软件开发流程,提高资源利用率和应用系统的可扩展性与容错性。
|
27天前
|
存储 安全 网络安全
云端盾牌:云计算时代的网络安全守护在数字化浪潮中,云计算以其高效、灵活的特性成为企业转型的加速器。然而,伴随其迅猛发展,网络安全问题亦如影随形,成为悬在每个组织头顶的达摩克利斯之剑。本文旨在探讨云计算服务中的网络安全挑战,分析信息安全的重要性,并提出相应对策,以期为企业构建一道坚实的云端防护网。
在当今这个数据驱动的时代,云计算已成为推动创新与效率的关键力量。它允许用户随时随地访问强大的计算资源,降低了企业的运营成本,加速了产品上市时间。但随之而来的网络威胁也日益猖獗,尤其是对于依赖云服务的企业而言,数据泄露、身份盗用等安全事件频发,不仅造成经济损失,更严重损害品牌信誉。本文深入剖析云计算环境中的安全风险,强调建立健全的信息安全管理机制的重要性,并分享一系列有效策略,旨在帮助企业和个人用户在享受云服务带来的便利的同时,也能构筑起强有力的网络防线。
|
4天前
|
Kubernetes Cloud Native 云计算
深度挖掘:云计算平台在数字化转型中的核心作用
【10月更文挑战第29天】作为一名技术博主,我深入探讨了云计算平台在数字化转型中的核心作用。本文分析了云计算的弹性、可扩展性和高可用性如何帮助企业快速适应市场变化,降低成本并提高效率。同时,文章介绍了云计算在创新加速、业务连续性和灾难恢复方面的优势,并通过实际案例展示了其在企业数字化转型中的应用。
18 0
|
2月前
|
机器学习/深度学习 安全 网络安全
云端盾牌:云计算时代的网络安全守护在这个数字脉搏加速跳动的时代,云计算以其高效、灵活的特性,成为推动企业数字化转型的强劲引擎。然而,正如每枚硬币都有两面,云计算的广泛应用也同步放大了网络安全的风险敞口。本文旨在探讨云计算服务中网络安全的关键作用,以及如何构建一道坚不可摧的信息防线,确保数据的安全与隐私。
云计算作为信息技术领域的革新力量,正深刻改变着企业的运营模式和人们的生活。但在享受其带来的便利与效率的同时,云服务的安全问题不容忽视。从数据泄露到服务中断,每一个安全事件都可能给企业和个人带来难以估量的损失。因此,本文聚焦于云计算环境下的网络安全挑战,分析其根源,并提出有效的防护策略,旨在为云服务的安全使用提供指导和参考。
65 8
|
2月前
|
云安全 安全 网络安全
探索云计算与网络安全的共生之道在数字化浪潮席卷全球的今天,云计算作为信息技术的一大革新,正重塑着企业的运营模式与服务交付。然而,随着云服务的普及,网络安全与信息安全的挑战也日益凸显,成为制约其发展的关键因素。本文旨在深入探讨云计算环境下的网络安全问题,分析云服务、网络安全及信息安全之间的相互关系,并提出相应的解决策略,以期为构建一个更安全、可靠的云计算生态系统提供参考。
本文聚焦于云计算环境中的网络安全议题,首先界定了云服务的基本概念及其广泛应用领域,随后剖析了当前网络安全面临的主要威胁,如数据泄露、身份盗用等,并强调了信息安全在维护网络空间秩序中的核心地位。通过对现有安全技术和策略的评估,包括加密技术、访问控制、安全审计等,文章指出了这些措施在应对复杂网络攻击时的局限性。最后,提出了一系列加强云计算安全的建议,如采用零信任架构、实施持续的安全监控与自动化响应机制、提升员工的安全意识教育以及制定严格的合规性标准等,旨在为云计算的安全可持续发展提供实践指南。
71 0
|
3月前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
61 0