资讯专栏INFORMATION COLUMN

容器和应用程序:扩展、重构或重建?

tigerZH / 529人阅读

摘要:综上所述,为使传统应用程序容器化,有以下几种路径扩展重构或者重建。在中运行应用程序的最大障碍之一是临时文件系统。大体来说,利用容器技术实现传统应用程序的现代化并没有硬性规则。

技术领域是不断变化的,因此,任何应用程序都可能在很短时间内面临过时甚至淘汰,更新换代的速度之快给人的感觉越来越强烈,我们如何使传统应用程序保持活力不落伍?工程师想的可能是从头开始重建传统应用程序,这与公司的业务目标和产品时间表通常是相悖的。如果现阶段正在运行的应用程序是正常工作的,这时候你很难找到正当而充分的理由让技术人员花六个月重写应用程序。代码债似乎注定意味着失败。

众所周知,产品开发向来都不是非黑即白那么简单,必须要权衡各方妥协折衷进行,虽然完全重写的可行性不大,但应用程序现代化的长远利益仍然值得重视。虽然许多组织尚未能构建全新的云本地应用程序,但通过使用一些技术比如Docker等容器技术,仍然能够实现传统应用程序的现代化。

这些现代化技术最终可以归纳为三种类别:扩展,重构和重建。在开始介绍它们之前,让我们先来谈谈关于Dockerfile的一些基础知识。

Dockerfile基础知识

对于初学者来说,Docker是一个容器化平台,它包含了基本上可以安装在服务器上的所有东西,即“在一个完整的文件系统中包含一个软件运行所需的一切:代码,运行时,系统工具,系统库”, 而且没有虚拟化平台的开销。

虽然容器的优点和缺点不在本文的讨论范围之内,但还是不得不提,Docker的最大优点之一即只需几行代码就能够快速轻松地启动轻量级、可重复的服务器环境。这种配置是通过一个名为Dockerfile的文件完成的,Dockerfile本质上是Docker用来构建容器镜像的蓝图。在这里,Dockerfile启动了一个简单的基于Python的Web服务器以供参考:

# Use the python:2.7 base image
 FROM python:2.7

# Expose port 80 internally to Docker process
 EXPOSE 80

# Set /code to the working directory for the following commands
 WORKDIR /code

# Copy all files in current directory to the /code directory
 ADD . /code

# Create the index.html file in the /code directory
 RUN touch index.html

# Start the python web server
 CMD python index.py

这个例子比较简单,但已经很能说明关于Dockerfile一些基础知识,涵盖扩展预先存在的镜像、暴露端口以及运行命令和服务。只要基础源代码架构设计合理,此时只需几个指令就可以启动非常强大的微服务。

应用程序现代化

从根本上说,传统应用程序容器化并不困难,困难在于并不是每个应用程序都是建构在容器化的基础上。Docker有一个临时文件系统,这意味着容器内的存储并不持久。如果不采取一些特定措施,保存在Docker容器中的任何文件都可能丢失。此外,并行化是应用程序容器化的面临另一个难题,因为Docker的一个最大优点就在于它能快速适应日益增长的流量需求,这些应用程序需要能够与多个实例并行运行。

综上所述,为使传统应用程序容器化,有以下几种路径:扩展、重构或者重建。哪种方法最适合,则完全取决于组织的需求和资源。

扩展

一般来说,扩展非容器化应用程序的已有功能在这几种办法中最为简便,但如果处理不好,所做的更改可能会导致技术债显著增加。利用容器技术扩展传统应用程序的最好办法是通过微服务和API。虽然传统应用程序本身并没有被容器化,为使产品实现现代化,可将新特性从基于Docker的微服务中隔离,同时开发遗留代码,易于将来重构或重建。

从高层面来说,对于那些在不久的将来很可能变得落后或必须经历重建的应用程序而言,扩展是很好的选择——不过代码库越老,为适应Docker平台,应用程序的某些部分就越需要彻底重构。

重构

但有时,通过微服务或API扩展应用程序是不实际甚至不可行的。无论是欠缺要添加的新功能,还是通过扩展添加新功能很困难,重构旧代码库的某些部分都可能是必要的。将当前应用程序的各个现有功能从容器化的微服务中隔离出来,就能轻松完成重构了。例如,将整个社交网络重构到Docker化的应用程序可能是不切实际的,但通过退出运行用户搜索引擎,就能够将各个组件作为多带带的Docker容器隔离。

重构传统应用程序另一途径是用于写入日志、用户文件等内容的存储机制。在Docker中运行应用程序的最大障碍之一是临时文件系统。这种情况可以通过几种方式进行处理,最常见的是通过使用基于云的存储方法,如AmazonS3或Google云存储。通过重构文件存储方法以利用这些平台,应用程序可以很容易地在Docker容器中运行而不丢失任何数据。

重建

当传统应用程序无法支持多个运行的实例时,不从头重建的话,可能无法添加Docker支持。传统应用程序服务周期可以很长,但如果应用程序的架构和设计决策在初始阶段就不够合理的话,则可能影响将来对应用程序的有效重构。意识到即将发生的阻碍对于识别生产率风险至关重要。

大体来说,利用容器技术实现传统应用程序的现代化并没有硬性规则。至于哪种才是最佳决策则要视产品需求和业务需求而定。但是,要想确保应用程序稳定运行而不损失生产力,充分了解哪些决策会如何影响组织长期运行,是至关重要的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26825.html

相关文章

  • 托管还是重建 企业如何用好公有云?

    摘要:许多人认为数字化转型是提高竞争力的关键,也是保持快速变化的商业环境的必要条件,对于许多企业来说,云计算对于其业务的成功至关重要。每个企业的云计算战略都是独一无二的,而遵循相同的原则,企业的云迁移之旅都将获得业务的发展机会。数字化转型继续为企业的业务发展创造机会。由于英国脱欧的不确定性,英国很多企业正在考虑实施数字化转型计划,以确保业务持续增长。许多人认为数字化转型是提高竞争力的关键,也是保持...

    kid143 评论0 收藏0
  • 真正的云原生应用是什么样

    摘要:云原生是指出生在云里的应用,与本地应用截然不同。可以看看关于甲骨文的这篇报道,弄明白什么是真正的云收入。这包括通过以下方式重构应用,以较大限度地利用云原生的好处一从传统的数据存储如甲骨文迁移到云原生数据存储如。 最近关于云原生的谈论很多,人们像之前了解云的其他概念一样在寻求对这个术语的解释。凯德·梅斯在Wired上写道:这个词在近年来有如此多的含义。但请记住:这些含义来自IBM、HP、EMC...

    kk_miles 评论0 收藏0
  • 第2章:软件构建的过程工具 2.2软件构建的过程,系统工具

    摘要:建模语言建模语言是可用于表达信息或知识或系统的任何人造语言,该结构由一组一致的规则定义,目标是可视化,推理,验证和传达系统设计。将这些文件安排到不同的地方称为源代码树。源代码树的结构通常反映了软件的体系结构。 大纲 软件构建的一般过程: 编程/重构 审查和静态代码分析 调试(倾倒和记录)和测试 动态代码分析/分析 软件构建的狭义过程(Build): 构建系统:组件和过程 构建变体...

    godiscoder 评论0 收藏0
  • 云迁移周期4个阶段多条问题检索

    摘要:不过,根据近期的一份调查问卷表示,在所有的参与者之中,只有的组织对于他们的云迁移体验感到非常满意。在本文中,我们将探索整个云迁移周期中的四个阶段。可以肯定的是,云迁移是一项不会真正结束的任务。 软件组织正在快速地实施云技术,但迁移始终是一个无法回避的挑战。哪些部分是需要你密切留意的?哪些应用程序更适合于进行迁移?如何对应用程序进行重构以适用于云端?经历了这一转变的先行者为我们留下了什么启示?...

    ls0609 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<