迁移到云原生:如何使用微服务迁移应用程序
企业遇到大规模部署和监督生产中的应用程序的任务。幸运的是,我们可以使用大量技术和工具。然而,从传统的,整体的结构转变为云态一个人提出了自己的障碍。在这里,您会发现将应用程序从整体设置转移到基于微服务的体系结构时要进行的基本初始步骤列表。
无缝过渡的逻辑步骤
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,多数据库管理平台(私有云)。
相关文章:
迁移到云原生:如何使用微服务迁移应用程序
企业遇到大规模部署和监督生产中的应用程序的任务。幸运的是,我们可以使用大量技术和工具。然而,从传统的,整体的结构转变为云态一个人提出了自己的障碍。在这里,您会发现将应用程序从整体设置转移到基于微服务的体系结构时要进行…...
kafka 的零拷贝原理
文章目录 kafka 的零拷贝原理 今天来跟大家聊聊kafka的零拷贝原理是什么? kafka 的零拷贝原理 零拷贝是一种减少数据拷贝的机制,能够有效提升数据的效率; 在实际应用中,如果我们需要把磁盘中的某个文件内容发送到远程服务器上…...
华为云Stack 8.X流量模型分析(五)
六、EIP流量模型分析 弹性公网IP(Elastic IP,简称EIP)提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。如果资源只配置了私网IP,则无法直接访问Internet,为资源配置弹性公网IP后,可…...
学习动态规划解决不同路径、最小路径和、打家劫舍、打家劫舍iii
学习动态规划|不同路径、最小路径和、打家劫舍、打家劫舍iii 62 不同路径 动态规划,dp[i][j]表示从左上角到(i,j)的路径数量dp[i][j] dp[i-1][j] dp[i][j-1] import java.util.Arrays;/*** 路径数量* 动态规划,dp[i][j]表示从左上角到(i,j)的路径数量…...
nodejs微信小程序+python+PHP特困救助供养信息管理系统-计算机毕业设计推荐
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...
Vue(二):计算属性与 watch 监听器
03. Vue 指令拓展 3.1 指令修饰符 可以通过 . 来指明一些指令的后缀,不同的后缀中封装了不同的操作,可以帮助我们简化代码,比如之前使用过的监听 enter 键的弹起,我们需要操作事件对象,来检测用户使用了哪个键&#…...
25、WEB攻防——通用漏洞SQL读写注入MYSQLMSSQLPostgreSQL
文章目录 Mysql-root高权限读写注入PostgreSQL——dba高权限读写注入Mssql-sa高权限读写注入 Access无高权限注入点——只能猜解,而且是暴力猜解; MYSQL,PostgreSQL,MSSQL(SQL server)高权限注入点——可升级读写(文件…...
【第5期】前端Vue使用Proxy+Vuex(store、mutations、actions)跨域调通本地后端接口
本期简介 本期要点 本地开发前后端如何跨域调用全局请求、响应处理拦截器处理封装HTTP请求模块编写API请求映射到后端API数据的状态管理 一、 本地开发前后端如何跨域调用 众所周知,只要前端和后端的域名或端口不一样,就存在跨域访问,例如&…...
在Visual Studio(VS)编译器中,Release和Debug区别
一、 优化级别 1、Debug(调试) 在Debug模式下,编译器不会对代码进行优化,而是专注于生成易于调试的代码。这使得开发者可以在调试过程中更直观地跟踪变量的值和程序的执行流程。 2、Release(发布) 在Relea…...
子网划分问题(实战超详解)_主机分配地址
文章目录: 子网划分的核心思想 第一步,考虑借几位作为子网号 第二步,确定子网的网络地址 第三步,明确网络地址,广播地址,可用IP地址范围 一些可能出现的疑问 实战 题目一 子网划分的核心思想 网络号不变,借用主机号来产生新的网络 划分前的网络:网络号主机号 划分后的网络:原网…...
【QT】单例模式,Q_GLOBAL_STATIC 宏的使用和使用静态成员函数,eg:{简单的日志记录器}
简单的日志记录器为例 。 创建一个Logger类,该类负责记录应用程序的日志消息 使用 Q_GLOBAL_STATIC 宏 解析:Q_GLOBAL_STATIC 是一个 Qt 宏,用于创建全局静态实例。它确保在需要时只创建一次实例,而不管该实例是在哪个线程中创建…...
利用小红书笔记详情API:构建高效的内容创作与运营体系
随着社交媒体的兴起,小红书作为国内知名的内容分享平台,吸引了大量用户和内容创作者。为了更好地获取小红书上的优质内容,许多企业和开发者选择使用小红书笔记详情API。本文将探讨如何利用该API构建高效的内容创作与运营体系。 一、小红书笔记…...
【K8S 二进制部署】部署单Master Kurbernetes集群
目录 一、基本架构和系统初始化 1、集群架构: 2、操作系统初始化配置: 2.1、关闭防火墙和安全机制: 2.2、关闭swap 2.3、根据规划设置主机名 2.4、三台主机全部互相映射 2.5、调整内核参数 3、时间同步(所有节点时间必须同…...
vue中常见的指令
简单介绍一下常见的vue中用到的指令 v-on 指定当前的事件,语法糖为,如例子所示,指定按钮的事件为addCounter,点击会使变量counter 1 <!DOCTYPE html> <html><head><meta charset"utf-8" />…...
单片机原理及应用:开关控制LED多种点亮模式
从这篇文章开始,我们不再只研究单一的外设工作,而是将LED、数码管、开关、按键搭配在一起研究,这篇文章主要介绍LED和开关能擦出怎样的火花,同时也介绍一些函数封装的知识。 由于开关有闭合与打开两种状态,LED有左移流…...
你真的了解UVM sequence的运行机制吗
1. 前言 UVM在sequence里提供了很多的callback方法给用户,从而更灵活地完成各种复杂场景的交互和控制执行顺序。我们可能在很多情况下只使用了body()方法,本文将介绍sequence里常见的callback方法,以及在不同场景下,它们的是否被…...
Bug升级记
2023.12.28 (1) 小程序session_key泄露隐患 核心:session_key这个字段及对应值不应该传到小程序客户端等服务器外的环境 错误操作:直接在小程序调用https://api.weixin.qq.com/sns/jscode2session并将session_key作为参数进行明文传输 正确操…...
爬虫详细教程第1天
爬虫详细教程第一天 1.爬虫概述1.1什么是爬虫?1.2爬虫工具——Python1.3爬虫合法吗?1.4爬虫的矛与盾1.4.1反爬机制1.4.2反爬策略1.4.3robots.txt协议 2.爬虫使用的软件2.1使用的开发工具: 3.第一个爬虫4.web请求4.1讲解一下web请求的全部过程4.2页面渲染…...
[Linux] MySQL数据库的备份与恢复
一、数据库备份的分类和备份策略 1.1 数据库备份的分类 1)物理备份 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。 物理备份方法: 冷备份(脱机备份) :是在关闭数据库的时候进…...
Django、Python版本升级问题大汇总
Django3.0升级到4.1,Python3.8升级到3.11.6问题大汇总 报错1:ERROR: Could not build wheels for cffi, uWSGI, which is required to install pyproject.toml-based projects ERROR: Could not build wheels for cffi, uWSGI, which is required to install pyproject.tom…...
2023-12-30 AIGC-LangChain介绍
摘要: 2023-12-30 AIGC-LangChain介绍 LangChain介绍 1. https://youtu.be/Ix9WIZpArm0?t353 2. https://www.freecodecamp.org/news/langchain-how-to-create-custom-knowledge-chatbots/ 3. https://www.pinecone.io/learn/langchain-conversational-memory/ 4. https://de…...
pytorch01:概念、张量操作、线性回归与逻辑回归
目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量?2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…...
storyBook play学习
场景 在官方给出的案例中, Page.stories.js import { within, userEvent } from storybook/testing-library import MyPage from ./Page.vueexport default {title: Example/Page,component: MyPage,parameters: {// More on how to position stories at: https:/…...
Android Matrix画布Canvas旋转Rotate,Kotlin
Android Matrix画布Canvas旋转Rotate,Kotlin private fun f1() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.…...
私有部署ELK,搭建自己的日志中心(三)-- Logstash的安装与使用
一、部署ELK 上文把采集端filebeat如何使用介绍完,现在随着数据的链路,继续~~ 同样,使用docker-compose部署: version: "3" services:elasticsearch:container_name: elasticsearchimage: elastic/elasticsearch:7.9…...
2023就这样过去了,2024会更好吗?
2023年,不是很好 2023年是疫情后的第一年,疫情过去了,大家都有大多的希望,希望经济可以恢复,希望信心可以恢复,但是整体都是远远低于预期的。年初的一片热潮,年中的一片哀嚎,年底基…...
SpringBoot加载配置的6种方式
从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,简单回顾一下这六种的使用方式: 说明Environment对象Environment是springboot核心的环境配置接口,它提供了简单的方法来访问应用程序属性,包括系统属性、操作系统…...
大语言模型(LLM)训练平台与工具
LLM 是利用深度学习和大数据训练的人工智能系统,专门 设计来理解、生成和回应自然语言。 大模型训练平台和工具提供了强大且灵活的基础设施,使得开发和训练复杂的语言模型变得可行且高效。 平台和工具提供了先进的算法、预训练模型和优化技术,…...
docker配置buildx插件
一、介绍 Docker buildx是docker的一个插件 支持Moby BuildKit的所有特性 可以跨CPU架构编译镜像 可以在多节点编译镜像 二、前提 使用 buildx 作为 docker CLI 插件需要使用 Docker 19.03 或更新版本。 三、配置步骤 1)客户端:在客户端的配置文…...
mysql 空间函数
ST_GeomFromText:将文本表示的几何对象转换为几何对象。 SELECT ST_GeomFromText(POINT(1 1)); ST_AsText:将几何对象转换为文本表示。 SELECT ST_AsText(ST_GeomFromText(POINT(1 1))); ST_Contains:判断一个几何对象是否包含另一个几何对象…...
建设银行网银官方网站/网站关键词怎么优化到首页
Windows server 2008 搭建服务 英文全称是“Virtual Private Network”,就是“虚拟专用网络”。 虚拟专用网络就是一种虚拟出来的企业内部专用线路、这条隧道可以对数据进行几倍加密达到安全使用互联网的目的。此项技术已被广泛使用、虚拟专用网可以帮助远程用户、公…...
为什么用MyEclipse做网站/清远疫情防控措施
记事本原本是电脑上的一个记事小工具,后来成了记事工具的代表。其实,手机上的记事工具是种类非常多,除了记事本外,便签、备忘录也是非常常用的记事工具。这些记事工具虽然名字不同,但是功能大同小异。 虽然应用商城里…...
如何做好网络营销管理/西安seo代运营
E此浏览器不支持画布C我一路 看 过 千山和万水C我的脚 踏 遍 天南和地北F 我都无所谓日晒或是风 吹F 鲜红的纯粹路边那朵蔷 薇C关掉了 手 机 管他谁是谁C不要去 理 会 是是与非非F 从不觉疲惫天亮走到天 黑F F C黄昏中的堡 垒 (多颓废)F G如果迎着风 就飞Em Am俯瞰这世界 有多美…...
360免费建站可靠吗/一站式网络营销
我们在做应用程序的时候有时候想知道页面上的按钮对于某一事件委托链上有多少方法,下面是一个例子。1、先添加3个按钮,分别添加0个,1个,2个click事件的方法,按钮名字分别为button1,button2,butt…...
海安做网站的公司/网推公司
1、汉字编码原理 到底怎么办到随机生成汉字的呢?汉字从哪里来的呢?是不是有个后台数据表,其中存放了所需要的所有汉字,使用程序随机取出几个汉字组合就行了呢?使用后台数据库先将所有汉字存起来使用时随机取出…...
网站建设基本流程包括哪几个步骤/seo网络推广优化
网站开发少不了有网站后台,有了后台自然要对用户有同角色来分配一下,特别是多用户系统的情况下,如我一个系统要有多个管理员,那么我这些管理要分成,编辑,友情连接,管理员等,那我们要…...