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

2023年 12月 27日 75.3k 0

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

无缝过渡的逻辑步骤

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 的主要优点包括:

  • 面向对象:采用面向对象范例。
  • 无依赖使用:可以在没有依赖关系的情况下使用。
  • 平台无关性:真正平台无关,兼容各种操作系统。
  • 易于学习:以其相对简单的学习曲线而闻名。
  • 通用代码库:用 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 的主要特性和优点包括:

  • Web 框架和应用程序
  • 科学和计算应用
  • 基于 GUI 的桌面应用程序
  • 语言发展
  • Python 在 AWS 云中得到广泛使用,并在 AWS Lambda 中享有本机支持,这使其成为在 Amazon Web Services 上开发无服务器应用程序的绝佳选择。

    .NET

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

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

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

  • 最大限度地减少大型应用程序开发中的代码使用。
  • 有效创建动态网页。
  • 语言独立性和易用性。
  • 逻辑和内容分离以简化应用程序开发。
  • 利用内置 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,多数据库管理平台(私有云)。

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论