FinOps有望降低企业50%+的云成本! 了解详情
写点什么

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

  • 2020-04-12
  • 本文字数:1563 字

    阅读完需:约 5 分钟

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

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


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

概述

毋庸置疑,完全从头做起的、从基于容器的云服务开始入手的“绿地开发模式(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://rancher.com/moving-your-monolith/


2020-04-12 20:40415

评论

发布
暂无评论
发现更多内容

TiDB 和 Java 的简单 CRUD 应用程序

TiDB 社区干货传送门

Go-Excelize API源码阅读(十四)——GetSheetFormatPr

Regan Yue

开源 源码刨析 Go 语言 8月日更 8月月更

大数据毕业设计

Geek_Q

TiFlash Proxy 模块介绍

TiDB 社区干货传送门

利用现有数据库管理系统创建一个安全的分布式数据库集群

亚马逊云科技 (Amazon Web Services)

大数据 分布式 Tech 专栏

基础到高级涵盖11个技术,Alibaba最新出品711页Java面试神册真香

收到请回复

Java 大数据 架构 编程语言 语言 & 开发

采访22年第一批秋招上岸的同学后,我整理了这份Java面试手册

Java面试那些事儿

Java 编程 程序员 架构 面试

膜拜阿里!首次发布「10亿级并发系统设计文档」(内部绝密)

退休的汤姆

阿里 面经 Java工程师 秋招 并发系统设计

2022 OceanBase 年度发布会:发布四大策略,迈入4.0时代

OceanBase 数据库

离线部署系列文章之二:TiDB集群升级(5.3.0->5.4.2)&缩扩容 TiDB Server、PD、TiKV、TiFlash

TiDB 社区干货传送门

版本升级 集群管理 管理与运维 安装 & 部署

TiDB 和 Golang 的简单 CRUD 应用程序

TiDB 社区干货传送门

PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务

TiDB 社区干货传送门

传统堡垒机数据可以迁移到云堡垒机上吗?方式有哪些?

行云管家

云计算 网络安全 堡垒机

如何让 TiDB 集群管理“更省心”?TiUniManager(原 TiEM)使用教程来了

TiDB 社区干货传送门

大数据训练营毕业总结

Geek_Q

一对一直播软件——如何实现音视频传播?

开源直播系统源码

软件开发 直播系统源码 一对一语音聊天软件 语音直播系统

五天玩转EMAS Serverless

云端explorer

云计算 Serverless emas

私有化部署的低代码平台 更安全的信息化解决方案

力软低代码开发平台

X-mask神秘面具NFT挖矿dapp系统开发逻辑详情

开发微hkkf5566

HarmonyOS Connect FAQ第四期

HarmonyOS开发者

HarmonyOS

对话ACE第五期:到底什么才是真正的HTAP?

OceanBase 数据库

多并发下线程创建、释放的阻塞问题

TiDB 社区干货传送门

魅族高校新生充电计划进行中,直播课让科目一新生直呼厚道

Geek_2d6073

希捷亮相OCP China Day 2022,与生态伙伴共话绿色存储之道

Geek_2d6073

云堡垒机主要针对运维过程中的什么进行管理和审计?

行云管家

运维 堡垒机 IT运维 云堡垒机

某站下载量过W的近4000页“Java面试合集”号称大厂面试零门槛

收到请回复

Java 程序员 面试 金九银十

开源一夏 | 原生js实现吃掉病毒,还森林一片祥和!

法医

开源

手把手教你实现 TiFlash 向量化函数丨十分钟成为 TiFlash Contributor

TiDB 社区干货传送门

离线部署系列文章之一:TiDBv5.3.0集群部署&源码部署 Haproxy v2.5.0

TiDB 社区干货传送门

实践案例 版本升级 管理与运维 安装 & 部署 扩/缩容

离谱!这份笔记及实战手册帮助你四天快速上手SpringSecurity

了不起的程序猿

Java springsecurity java程序员 框架

什么!阿里最新版Spring Cloud Alibaba项目文档,竟将重要组件弃用

收到请回复

Java spring 阿里巴巴 面试 spring-cloud

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
迁移你得单体系统:最佳实践和关注领域_文化 & 方法_Rancher_InfoQ精选文章