迁移你的单体系统:最佳实践和关注领域

假设有这样一种情况:你有一个对你的业务十分重要的复杂单体系统,你已经阅读过相关的文章,希望将这一系统迁移到更加先进的、使用微服务和容器的平台上,但又不知道从何入手。

如果你正面临着这一问题,那么这篇文章一定会帮到你。接下来,我将从最佳实践以及需要关注的领域两个方面,帮助你将单体应用程序演进为面向微服务的应用程序。

概述

毋庸置疑,完全从头做起的、从基于容器的云服务开始入手的“绿地开发模式(Greenfield Development)“是最理想的开发模式。然而,对大多数开发团队而言,这并不现实。大多数开发团队要为多个已经存在几年的应用程序提供支持,并且需要利用现代工具集和平台对它们进行重构,这通常称为”棕地模式开发(Brownfield Development)“。

并非所有的应用程序技术都可以轻松放入容器。我们可以通过一番工作让现有的应用去适应容器,但疑问也随之而来:这样做是否真的值得?例如,你确实可以将整个大规模的应用程序迁移到容器或者云平台上,但这么做真的可以明显地提高灵活性或是降低成本吗?


评估所有现有组件


对应用程序的当前状态及其基础堆栈进行评估,这听起来并非一个革命性或创造性的想法,但是当你完整评估了所有的网络和基础架构组件之后,可以说你已经取得了阶段性的成功。你未必必须直接涉及应用程序的核心,小而渐进式的步骤才是让你的合作伙伴和支持团队更轻松地使用容器的最佳方式。

举一些容器友好的基础架构组件案例:Web服务器(如Apache HTTPD)、反向代理和负载均衡器(如haproxy)、高速缓存组件(如memcached)、甚至是队列管理器(如IBM MQ)。

假如你处于这样一种极端的情况:如果应用程序是Java编写的,那么可以让更轻量的Java EE容器在Docker中运行而不需要拆分应用程序吗?对这一问题,WebLogic、JBoss(Wildfly)和WebSphere Liberty是适用于Docker的Java EE容器的绝佳案例。


厘清现有应用组件



现在,基础设施层的容器已经开始运行,现在可以在应用程序内部查找组件的逻辑分解。例如,用户接口是否可以作为单独的可部署应用程序分割出来?一部分的UI是否可以绑定到特定的后端组件并单独地部署(比如带有结算业务逻辑的计费界面)?

在将应用程序组件组合成为单独的工件时,有两个重要的注意事项:

1、在单体应用程序中,总有一些共享库,它们会在一个新的微服务模型中被多次部署。多次部署带来的好处是每个微服务都可以遵循它自己的更新计划。仅因为一个公共库有新的特性,并不意味着每个人都需要它,且每个人都必须立即升级。

2、除非有一种非常明显的方式来分开数据库(如多schemas)或者该特性跨越多个数据库,不然的话就放弃它。单体应用程序倾向于交叉引用表,并构建典型的“属于”一个或多个其他组件的自定义视图,因为原始表是现成的,在时效上是公认的快。


下一步:业务改进

如果到这一步你已经完成,取得了一些进展,并且可能已经确定了可拆分成单独可部署工件的应用程序组件,那么现在是时候将业务改进作为你的首要发展道路,将应用程序重新设计为更小的基于容器的应用程序,这些最终将成为你的微服务。

如果你已将账单作为想要从主应用程序拆分出来的第一个区域,那么就需要完成与那些应用组件相关的所需增强功能和bug修复。一旦你已经准备好发布,将它们部署上去,并且将分离包含在发布版本中。

随着对应用程序的不断剥离,你的团队将会更加熟悉如何拆分组件,并且将它们放入自己的容器中。

结  论 


当将单体应用程序分解并部署为一系列使用容器的小型应用程序时,它将在效率上达到一个新高度。根据实际负载(而不是简单的构建峰值负载)独立扩展每个组件,更新单个组件(无需重新测试和重新部署所有内容)将大大缩短花费在QA上以及获得变更管理的批准的时间。由此可见,在容器上运行不同功能的小型应用会是未来(更有效)的方式。



原文地址:http://blog.51cto.com/12462495/2089942

时间: 2024-10-10 05:00:16

迁移你的单体系统:最佳实践和关注领域的相关文章

Zabbix企业级分布式监控系统最佳实践

[下载地址:https://pan.baidu.com/s/1VXBV7C3ULcwbdRtCbQ0xoQ ] <Zabbix企业级分布式监控系统>从运维(OPS)角度对Zabbix的各项功能进行了详细介绍,以自动化运维视角为出发点,对Zabbix的安装配置.自动化功能.监控告警.性能调优.Zabbix API.Zabbix协议.RPM安装包定制,结合saltstack实现自动化配置管理等内容进行了全方位的深入剖析.<Zabbix企业级分布式监控系统>分为初级内容.中级内容.高级内

Linux系统最佳实践经验

用户管理 1.groups 查看当前用户所在的组:将 newuser添加到组staff中# usermod -G staff newuser# usermod -aG dlong dlong 将用户dlong加入到dlong组,不退出原组.-d参数为删除该组用户.2.修改newuser的用户名为newuser1# usermod -l newuser1 newuser3.锁定账号 newuser1# usermod -L newuser14.解除对 newuser1 的锁定# usermod -

atitit. 日志系统的原则and设计and最佳实践(1)-----原理理论总结.

atitit. 日志系统的原则and设计and最佳实践总结. 1. 日志系统是一种不可或缺的单元测试,跟踪调试工具 1 2. 日志系统框架通常应当包括如下基本特性 1 1. 所输出的日志拥有自己的分类. 2 2. 日志按照某种标准分成不同级别. 2 3. 支持多线程. 2 4. 稳定性. 2 3. 一个理想的日志模式 2 4. 判断指定的方法是否被调用了 3 5. 给方法的输入输出加上日志通过Aop 3 6. 日志易读,易解析  对日志感兴趣的可以分为两类: 3 7. 输出日志使用的性能 3 8

SQL Server系统数据库备份最佳实践

原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信息等等. model 所有新数据库的模型,如果希望新数据库都有某些对象,可以在这里创建. tempdb sql server重启时重建,所以不需要备份 除了以上四种,其实还有一个数据库:Resource 从2005就引入的,一个只读.隐藏的数据库,包含所有在sql server中的系统对象.由于SQ

团队排表系统V3.0最佳实践及使用说明

团队排表系统V3.0最佳实践 1.从我这里获取团队代号, 例如"tuanzhangshishabi" 2.打开网页 填写以下信息. 请注意: 最好所有的打工和老板都填上真实的QQ, 有利于发号和管理. 第一个填写我给的团队代码的人将会是管理员 3.进入主页,选择左侧老板管理,添加老板.  团员管理 添加团员.  记住所有的qq 帐号 密码 区服 都尽量填写真实, 操作方式: 双击编辑, 右键删除, 加号添加, 左键选中可以批量删除, 批量导入(还未实现). 可以按区服,职业查询. 团员

设置java系统属性的最佳实践是什么,-D或System.setProperty()?(What is best practice for setting java system properties, -D or System.setProperty()?)

I need to set the codebase for the RMI application I'm working on at the moment and have done this successfully using first try{ ResourceBundle config = ResourceBundle.getBundle("myApp"); String codeBaseUrl = config.getString("codeBaseUrl&q

一篇文章彻底搞懂snowflake算法及百度美团的最佳实践

写在前面的话 一提到分布式ID自动生成方案,大家肯定都非常熟悉,并且立即能说出自家拿手的几种方案,确实,ID作为系统数据的重要标识,重要性不言而喻,而各种方案也是历经多代优化,请允许我用这个视角对分布式ID自动生成方案进行分类: 实现方式 完全依赖数据源方式 ID的生成规则,读取控制完全由数据源控制,常见的如数据库的自增长ID,序列号等,或Redis的INCR/INCRBY原子操作产生顺序号等. 半依赖数据源方式 ID的生成规则,有部分生成因子需要由数据源(或配置信息)控制,如snowflake

彻底搞懂snowflake算法及百度美团的最佳实践

写在前面的话 一提到分布式ID自动生成方案,大家肯定都非常熟悉,并且立即能说出自家拿手的几种方案,确实,ID作为系统数据的重要标识,重要性不言而喻,而各种方案也是历经多代优化,请允许我用这个视角对分布式ID自动生成方案进行分类: 实现方式 完全依赖数据源方式 ID的生成规则,读取控制完全由数据源控制,常见的如数据库的自增长ID,序列号等,或Redis的INCR/INCRBY原子操作产生顺序号等. 半依赖数据源方式 ID的生成规则,有部分生成因子需要由数据源(或配置信息)控制,如snowflake

传统IDC机房与云计算如何快速结合最佳实践的经验之谈

大家好,有两周没好好坐下来聊聊近期的实践课程了,今年也是对网工技能要求上的一个非常大的挑战,怎么说呢?因为上云的趋势已经来临,去年是所有的企业都在拥抱互联网,今年则是所有的企业都在拥抱云计算,加上各大产商的疯狂扩展与竞争,"价格战····"已经不计其数,但真正能协助用户落地实施方案成功上云的服务商,用手指在上海完全能数得过来. 这里就不点名了,点名就有点个人情绪在里面了,还是回归老本行扯扯技术,聊聊梦想. 我见过很多公司,号称自己有云.但是去聊了下,也其实就是虚拟化(kvm.xen.v