热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

向微服务数字化转型的方法DZone

技术团队和管理层非常热衷于使用一个称为微服务的新流行语。但这涉及转换的成本。您如何进行这种转变?进行转换值得吗?还是继续进行一些修改以继续使用当前方法是否好?您如何决定?从遗留系统



技术团队和管理层非常热衷于使用一个称为微服务的新流行语。但这涉及转换的成本。
您如何进行这种转变?进行转换值得吗?还是继续进行一些修改以继续使用当前方法是否好?您如何决定?
从遗留系统本身定义微服务的过程是一个传奇。
让我们以单体/整体/旧式系统的POS应用程序域为例。这是每个人都普遍理解的领域。
它由庞大的系统中内置的以下广泛模块组成:


我们如何计划此类系统的迁移?当我们迁移整个系统时,这看起来很容易。但是企业不能等到一切都迁移了。
当采用增量方法并将域切成多个垂直部分并逐步迁移时,存在一些体系结构方面的挑战。
我将解释实现微服务目标所需的一些步骤。如上所述,所有步骤都不必是连续的。例如,三个团队可以并行执行步骤1、2和3。步骤1和2是在考虑其他步骤之前进行计划的非常重要的步骤。
 

步骤1
迈向微服务方法的第一步是为您的微服务规划DevOps。完成一些准备部署的功能后,您应该为构建,测试和部署微服务设置连续的部署方法。
您还可以查看用于Kubernetes的容器和工具进行编排。由于这是一个通用主题,因此我们将不涉及技术细节,并将继续让您选择自己喜欢的技术。
在此之中,重要的是可以用来组成多个API的API网关技术。
 

步骤2
接下来的一件重要的事情,也许是最重要的一件事情,是确定将用于新的微服务重写的单一登录技术。这一点至关重要,因为其他服务将是独立的,并且在一次登录时浏览应用程序以查找不同的微服务时提供流畅的体验非常重要。
 

步骤3
重写的下一步是确定系统中的垂直业务域子系统。在我们的示例中,我们有客户,购物车,产品,促销和付款。
我建议您仔细阅读Eric Evans的领域驱动原理DDD,以创建一个框架来识别核心域并支持系统中的域。深入了解“边界上下文”原理,以将域垂直拆分为解耦的层,这一点也很重要。
在这些业务域子系统中,假设您选择重写的第一个域是促销。
选择促销模块作为第一个重写的优点是什么?
团队对微服务的了解可能在一开始就不成熟。因此,一开始选择一个非常核心的业务领域组件(例如购物车或付款)可能会更加冒险。同时,核心业务仍将需要在旧系统中运行,并且在一段时间内,其他支持域或辅助域可以与旧系统集成而无需紧密耦合,并且可以与旧系统集成运行。
在此过程中,应尽可能减少对整体的依赖,并且必须将模块与其他服务分离。在某些罕见的地方可能需要依赖。为此,请从整体中公开一个新的API,然后通过新服务中的API网关访问该API。
 

步骤4
还根据域的垂直切片对数据层进行切片。请记住,微服务中的所有内容都应与其他服务分离。重要的是,除了UI和API层之外,还为给定的微服务创建了数据层,而没有任何交叉引用。这对于在不等待其他服务完成的情况下按自己的速度独立构建和部署微服务也很重要。
 

步骤5
从传统中切分微服务的原则应该将重点放在功能上,而不是解耦代码并从整体中提取代码重用。专注于重写功能并摆脱旧的代码。原因是:


  • 现有代码取决于许多环境依赖性,例如运行时配置,数据存储,缓存和会话,并使用旧框架。这些代码大部分都需要重写。托管微服务的新基础架构将需要一种非常不同的样板代码。
  • 现有代码可能未使用明确的域概念编写。这导致保留了不能反映新域模型并且需要进行大量重组的数据结构。
  • 经历了许多更改和开发生命周期的旧版代码可能具有较高的代码毒性级别和较低的重用价值。


步骤6
然后是计划下一个需要处理的模块。到这个时候,团队将对微服务过渡进行充分的演练。团队可以在订单付款,购物车,产品,客户中进行转换。最后,我考虑了客户,因为它在所有模块中都具有依赖性,并且由于购物车使用其他依赖性作为主数据,因此回溯到遗留的依赖性将最小。您可能会考虑并行开发某些模块,并继续与各自的团队进行维护。在任何情况下,团队都应按照上面给出的顺序保持设计目标,以实现平稳过渡。
设计单个服务时仍然存在挑战。由于体系结构代码的数量很容易膨胀。为了简化此方面,我构建了FlexBase。
FlexBase会为您的功能需求生成60-80%的管道代码,在遵循上述步骤5时非常有用。使用Flexbase,过渡到微服务的过程变得更加容易,并且不易出错。
 

推荐阅读
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • 云原生SRE
    序言年底了,没有分手的朋友的赶紧分了,所谓新年新气象,年年不重样。去留无意,望看风卷残云。。。运维不会消失,但 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
  • 博客_2018年博客总结
    本文由编程笔记#小编为大家整理,主要介绍了2018年博客总结相关的知识,希望对你有一定的参考价值。前言     ... [详细]
  • 【限时免费】       架构和运维技术高峰论坛·成都站来啦~~     报名请点击左下角 阅读原文运维和架构系列论坛,由IT趣学社主办,以目前最火热的运维技术体系为核心,邀请业界 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 目前有哪些主流的编程语言呢?1、Java:应用广泛,Android的编程,大部分是用Java;相关岗位:软件工程师,软件架构师和DevOps工程师。2、Python:简单易学,软件 ... [详细]
author-avatar
手机用户2502909227
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有