迁移到云原生:如何使用微服务迁移应用程序

企业遇到大规模部署和监督生产中的应用程序的任务。幸运的是,我们可以使用大量技术和工具。然而,从传统的,整体的结构转变为云态一个人提出了自己的障碍。在这里,您会发现将应用程序从整体设置转移到基于微服务的体系结构时要进行的基本初始步骤列表。

无缝过渡的逻辑步骤

Compared to traditional big applications, microservices are like small independent units that handle specific tasks and collaborate to make an application work.使用这些分布式组件提供了许多好处,但它也带来了自己的一系列挑战。

维护软件质量在从传统系统转移过程中可能很难。通常,它使团队无法开始过渡。但通过一些计划和准备,这是可以做到的。该过程可以分为几个步骤。让我们一起穿过它们。

第 1 步:定义边界

初始阶段涉及描绘应用程序的边界和功能,这是揭示整体结构内耦合程度的关键一步。耦合是主要的挑战,通常被轻蔑地称为“意大利面条代码”。在单体应用程序的背景下。该术语源于代码库随着大小和年龄的增加而积累越来越多的耦合水平的趋势。

事实证明,在过渡期间解耦紧密互连的元素具有挑战性,虽然代码库的年龄和大小是耦合问题的潜在指标,但它们并不是确定的。单一应用程序本质上并不是紧密耦合的;这取决于编码实践。将耦合视为对手,我们强调完善的编码实践,在整体创建过程中平衡内聚性和耦合,有助于更平滑的过渡。

有效的转换取决于单体内部正确的边界定义,其中微服务充当具有特定功能的单个单元。在整体应用程序中应用类似的边界原则有助于实现更易于管理的过渡。

第 2 步:识别耦合

虽然第一步侧重于描绘系统的功能,但第二步建立边界(有界上下文),包含这些功能的集合。例如,在销售点应用程序中,购物车可能由一侧的库存边界组件和另一侧的身份限制元素组成。购物车对象充当巩固和集成这些元素的手段。

第 3 步:转向 RPC

在第三步中,我们的重点是识别和记录有界上下文之间的互连,辨别哪些引用了其他上下文,并确定需要跨上下文进行函数调用的功能。这种耦合体现在两个主要类别:函数/API 和数据库模式。

对于函数/API,从网络中涉及远程过程调用的过渡涉及远程过程调用( rpc )通常通过HTTP,GRPC等执行。同步RPC作为中间步骤,但它不是分布式系统的可持续解决方案。最终目标是用异步消息系统替换同步的RPC调用。

在此过程中,每个边界都保持其数据自治。微服务不鼓励直接使用共享数据库,因为它引入了不需要的耦合。解耦后,可以避免从一个限界上下文的模式查询另一个限界上下文的模式。

总结这些步骤,我们通过将所有进程内通信转换为网络上的 RPC 调用,从本质上将我们的架构转变为分布式整体架构,这是实现云原生应用程序的重大一步。

第 4 步:定义数据所有权

此阶段的目标是消除数据与保留应用程序状态的状态存储机制的刚性耦合。这种转变允许过渡到更加无状态的模型,其中微服务之间传输的数据仅包含微服务边界内任务的必要信息。例如,购物车对象可以保留购买者的身份和产品的库存ID,直到在结帐时使用它们,而不是频繁地访问持久存储区域以检索和更新购物车中的数据。

第 5 步:实现异步消息传递

最后,第五步是,需要付出额外的努力来实现服务的自治。隔离有界上下文后,该过程涉及将相同的原则应用于其他边界和功能,直到整个转换完成。命令和事件被分派并广播到消息代理,从而消除了对 RPC 的需要。这简化了与维护服务之间的远程过程调用所需的访问权限相关的复杂性,即使它们在不同的主机上运行。用基于角色的访问控制证书取代这种交互标志着实现服务自主性的重大进步。

为云原生开发选择正确的编程语言

现在,让我们探索一些适合现代云原生开发的编程语言。

根据我的经验,我将从一些经过时间考验的可靠选项开始,然后深入研究随着教育环境中越来越多的教授而日益受到重视的新语言。

让我们从随着互联网的发展而演变的语言开始:

Java

被认为是一种多才多艺的通用编程语言,Java 巩固了其作为云计算首选之一的地位,受到数以百万计的开发人员,并在全球超过 150 亿个终端上执行。Java 提供无与伦比的多功能性,是少数能够使用统一代码库为网站、桌面、移动设备和视频游戏创建应用程序的语言之一。

Java 的主要优点包括:

  1. 面向对象:采用面向对象范例。

  2. 无依赖使用:可以在没有依赖关系的情况下使用。

  3. 平台无关性:真正平台无关,兼容各种操作系统。

  4. 易于学习:以其相对简单的学习曲线而闻名。

  5. 通用代码库:用 Java 开发的云计算程序可以在不同操作系统(例如 Windows、iOS、Blackberry 和 Linux)上无缝运行,从而保持解释一致的代码库。

Java 拥有内置的强大安全功能,使其成为那些旨在实现无服务器架构的人的首选。Java 利用不同框架的提前 (AOT) 编译,有效地解决了大分布式大小和长冷启动时间的问题。诸如Amazon Web Services(AWS),Microsoft Azure和Google Cloud Platform(GCP)之类的主要云提供商在其SDK中为Java提供了强有力的支持,从而确认其在云开发方面的据点。

Python

Python 成为当前云领域最重要的语言之一。With a learner-friendly approach, Python caters to novices, making programming accessible to nearly everyone. Python 拥有一系列第三方模块、广泛的支持库以及强大的开源和社区开发选项等出色功能,是一种高级、解释性和高度交互的面向对象脚本语言。其定义明确的分层缩进格式有助于轻松阅读,比标点符号更频繁地使用英语语法和关键字,从而简化了学习过程。

Python 融合了速度、生产力、强大的社区支持和开源开发等高级属性,以及丰富的支持库和第三方模块。Python 应用广泛,适合创建商业应用程序、游戏、操作系统、计算和科学应用程序以及图形设计和图像处理应用程序。

Python 的主要特性和优点包括:

  1. Web 框架和应用程序

  2. 科学和计算应用

  3. 基于 GUI 的桌面应用程序

  4. 语言发展

Python 在 AWS 云中得到广泛使用,并在 AWS Lambda 中享有本机支持,这使其成为在 Amazon Web Services 上开发无服务器应用程序的绝佳选择。

.NET

虽然出于多种原因(主要是由于它偏向 Windows 操作系统并且受 Microsoft 管辖)不是我的首选语言,但 ASP.NET 仍然在 Web 编程中占据着重要地位。

ASP.NET 主要用于开发 Web 应用程序和功能丰富的网站,由于其能够提供动态网页和跨各种浏览器兼容的尖端解决方案,因此在云计算领域脱颖而出。

新手开发人员将会欣赏 ASP.NET 框架的用户友好性,它配备了许多内置功能,包括:

  1. 最大限度地减少大型应用程序开发中的代码使用。

  2. 有效创建动态网页。

  3. 语言独立性和易用性。

  4. 逻辑和内容分离以简化应用程序开发。

  5. 利用内置 Windows 身份验证增强应用程序安全性。

PHP

PHP 是一种在程序员中广泛使用的语言,主要用于网站自动化。PHP 以其易于学习和操作而闻名,是创建具有动态元素的应用程序的首选。作为一种面向对象的语言,PHP 能够开发复杂且大规模的 Web 应用程序。

PHP 在 UNIX 和 Windows 服务器上运行,拥有强大的输出缓冲区功能,这有助于其流行。其卓越的速度、成本效益、可靠性和安全性使其成为探索云原生应用程序的绝佳选择。

此外,PHP 与各种流行的数据库管理系统无缝集成,有助于直接连接到 MySQL 来执行数据库备份等任务。其可靠性、安全性、速度和经济性使 PHP 成为满足云计算独特开发需求的可行语言。

Node.js

Node.js 利用 JavaScript V8 引擎,可在包括 Chrome 在内的各种浏览器中无缝运行,并作为独立工具运行。它擅长轻松处理服务器请求,跨编码语言、API 和外部库扩展 JavaScript 的功能。Node.js 在 Web 应用程序开发中发挥着至关重要的作用,体现了“JavaScript 无处不在”的理念。服务器端脚本和客户端编程的范例。

Node.js 以其用户友好的操作和端到端应用程序开发的有效性而闻名,它具有非阻塞、事件化、异步通信模式,允许高效处理大量连接。Node.js 在 Google JS 引擎上运行,以其卓越的速度而脱颖而出,使其成为现代开发人员的最爱。

Node.js 的主要优势包括跨平台兼容性、使用单一编码语言 (JavaScript) 的便利性、JavaScript V8 引擎的强大功能、对快速部署和微服务开发的支持、高可扩展性、令人印象深刻的数据处理能力、活跃的开源社区、通过节点包管理器 (NPM) 提供的附加功能、高级托管功能和快速数据流。

现在,让我们探索一些为满足云原生编程不断变化的需求而出现的新产品。

现在,让我们探索云原生编程领域中出现的一些较新的语言。

Golang

  • 迅速成为云原生操作的首选语言。

  • 在创建 Docker、Kubernetes 和其他云相关技术方面表现突出。

  • 因其简单、速度、效率和可扩展性而广受欢迎。

  • 标准库支持主要的云提供商。

Ballerina

  • 云的开源语言,专为网络服务而设计。

  • 专注于使编码网络结构成为语言固有的。

  • 对分布式交易,断路器模式等的一流支持。

  • 它直接部署到 Docker 和 Kubernetes 上,并与常见 IDE 集成。

Pulumi

  • 基础设施即代码语言于 2018 年推出,支持 Kubernetes。

  • 利用现有的编程语言,例如 TypeScript、JavaScript、Python、Go 和 .NET。

  • 提供可下载的 CLI、运行时、库和托管服务,以实现高效的基础设施管理。

  • 旨在满足云应用程序的构建、部署和管理需求。

选择正确的语言取决于您的项目要求和团队的专业知识。无论您选择成熟的产品还是最新的产品,请确保它们符合您在云原生环境中的微服务开发目标。

总之,云原生开发的编程语言格局提供了多种选择。Java、Python、.NET、PHP 和 Node.js 等既定选择提供了多功能性。Golang 因其简单性和可扩展性而脱颖而出,而 Ballerina 则无缝集成网络结构。Pulumi 通过语言多功能性满足基础设施即代码需求。无论是选择经过验证的语言还是采用更新的语言,请根据项目要求和团队专业知识来调整您的选择,以实现高效且可扩展的云应用程序。


作者:Kapil Rawa

更多技术干货请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

irds.cn,多数据库管理平台(私有云)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【研究背景】基于java的流浪之家动物领养网站的设计与开发

1.选题背景 流浪之家动物领养网站的设计与开发背景主要源于对流浪动物保护和宠物领养问题的关注。随着城市化进程加快,越来越多的流浪动物出现在城市中,它们面临着食物、住所和医疗资源的缺乏。同时,许多爱心人士希望能够给流浪动物一个温暖…

解密负载均衡:如何平衡系统负载(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

spring boot 增量包部署,jar包变小

##pom.xml配置 <plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><layout>ZIP</layout><includes><include><groupId&…

React函数组件使用Effect Hook(副作用钩子)

使用Effect Hook&#xff08;副作用钩子&#xff09; 如果你熟悉 React class 的生命周期函数&#xff0c;你可以把 useEffect Hook 看做 componentDidMount(挂载完成)&#xff0c;componentDidUpdate(更新完成) 和 componentWillUnmount&#xff08;即将销毁前&#xff09; 这…

云原生数据库性能对比(阿里云、百度智能云、腾讯云)

本文作者 LYZ 近些年&#xff0c;云原生数据库成为云厂商的重要发展方向&#xff0c;阿里云、百度智能云、腾讯云均先后发布了自研的云原生数据库。笔者认为云原生数据库具有更高的性价比、更极致的弹性&#xff0c;可以满足业务发展的不同阶段和负载场景的需求&#xff0c;也是…

FPGA高端项目:SDI 视频+音频编解码,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、设计思路和框架设计框图GV8601A均衡EQGTX 时钟要求GTX 调用与控制SMPTE SD/HD/3G-SDISMPTE SD/HD/3G-SDI 接收SMPTE SD/HD/3G-SDI 发送 SDI 视频接收数据处理SDI 音频接收-…

A Prompt Learning Framework for Source Code Summarization

Q: 这篇论文试图解决什么问题&#xff1f; A: 这篇论文试图解决的问题是自动生成代码片段的自然语言摘要&#xff08;也称为注释&#xff09;&#xff0c;这对于帮助开发人员理解和维护源代码至关重要。最近&#xff0c;随着大型语言模型&#xff08;LLMs&#xff09;在许多领…

开源minio-AWS-S3存储的部署及go操作详细

介绍 MinIO是一个开源的分布式对象存储服务&#xff0c;它允许用户在私有云或公有云环境中构建自己的对象存储基础设施。MinIO旨在提供高性能、高可用性的对象存储&#xff0c;并且与Amazon S3兼容&#xff0c;这意味着可以使用S3客户端工具和库直接与MinIO交互&#xff0c;而…

pycharm 工具栏不见了

新版pycharm后&#xff0c; 菜单栏和工具栏不见了 目录 我发现的解决方法&#xff1a; 其他旧版的解决方法&#xff1a; 我发现的解决方法&#xff1a; 其他旧版的解决方法&#xff1a; 另外&#xff0c;一些使用pycharm的新手可能会由于不熟悉软件的功能而误操作&#xff…

SystemVerilog:always_ff,always_comb,always_latch

文章目录 一、简介二、示例 一、简介 Verilog中只有一个通用的always过程块&#xff0c;SystemVerilog中追加了3个具有更明确目的专用always块。 always_ffalways_combalways_latch always_ff, always_comb, always_latch分别是用于寄存器&#xff08;flip-flop&#xff0c;…

【头歌实训】PySpark Streaming 数据源

文章目录 第1关&#xff1a;MySQL 数据源任务描述相关知识PySpark JDBC 概述PySpark JDBCPySpark Streaming JDBC 编程要求测试说明答案代码 第2关&#xff1a;Kafka 数据源任务描述相关知识Kafka 概述Kafka 使用基础PySpark Streaming Kafka 编程要求测试说明答案代码 第1关&a…

scikit-learn文档中的数据生成器

目录 1. make_classification: 2. make_regression: 3. make_blobs: 4. make_moons: 5.make_circles 6. make_sparse_coded_signal: 1. make_classification: 这是一个用于生成复杂二维数据的函数&#xff0c;通常用于可视化分类器的学习过程或者测试机器学习算法的性能…

Kali Linux如何启动SSH并在Windows系统远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

本地网络禁用了在哪里开启?

在当今数字化时代&#xff0c;网络已经成为人们生活中不可或缺的一部分。然而&#xff0c;有时我们可能需要禁用本地网络&#xff0c;无论是出于安全考虑、提高专注力还是其他原因。本文将探讨禁用本地网络的方法以及如何在需要时重新开启网络连接。 第一部分&#xff1a;禁用…

工具系列:TimeGPT_(9)模型交叉验证

交叉验证 文章目录 交叉验证外生变量比较不同的模型 时间序列预测中的主要挑战之一是随着时间的推移固有的不确定性和变异性&#xff0c;因此验证所采用的模型的准确性和可靠性至关重要。交叉验证是一种强大的模型验证技术&#xff0c;特别适用于此任务&#xff0c;因为它提供了…

抗原设计与兔单B细胞技术的结合-卡梅德生物

随着生物医学研究的不断深入&#xff0c;抗体疗法作为治疗疾病的有力工具逐渐成为研究的焦点。而兔单B细胞技术作为抗体研究的创新方法&#xff0c;其与抗原设计的有机结合为获取定制抗体打开了崭新的创新之路。本文将深入探讨抗原设计与兔单B细胞技术相互融合的原理、优势&…

使用 GitHub 进行团队协作的操作指南

目录 前言1 使用github进行团队开发的意义2 邀请成员加入团队3 克隆和提交代码3.1 克隆远程仓库到本地3.2 加入暂存区3.3 提交修改到本地仓库3.4 设置本地仓库和远程仓库的关联3.5 将本地仓库的代码推送到远程仓库 结语 前言 GitHub 是一个广泛使用的基于 Git 的代码托管平台&…

Java - 获取 Jar 包内的 pom.xml 文件

目录 一.引言 二.通过 jar 命令 ◆ 查看 Jar 包内文件 ◆ 导出 Pom.xml ◆ 导出 Jar 包内文件 三.通过 unzip 命令 ◆ 导出 Jar 包内文件 四.总结 一.引言 引用其他同学的 Jar 包时&#xff0c;需要获取其对应 jar 包内的 pom.xml 文件检查版本依赖关系&#xff0c;下…

MYSQL存储过程和存储函数-数据库实验五

Mysql数据库实验及练习题相关 MySQL 数据库和表的管理-数据库实验一 MySQL连接查询、索引、视图-数据库实验二、实验三 MySQL约束、触发器-数据库实验四 MYSQL存储过程和存储函数-数据库实验五 MySQL批量随机生成name、TEL、idNumber MYSQL数据库的安全管理-数据库实验六 MYSQ…

基于JetCache整合实现一级、二级缓存方案(方案实现)

目录 一、整体方案说明 1.1 需求说明 1.2 整体方案实现组件结构图 二、Caffeine缓存实现 2.1 组件说明 2.2 组件结构图 2.3 组件Maven依赖 2.4 组件功能实现源码 2.4.1 CaffeineCacheManager扩展实现 2.4.2 CaffeineConfiguration配置类实现 2.4.3 涉及其他组件的类 …