关于微服务的一点感悟和过往经验的思考

一、为什么有微服务

解决单体应用的局限性
随着业务发展,业务逻辑复杂、关联方多,导致业务系统的代码臃肿、难于做迭代或者维护,导致很多的问题,如:bug多、难于维护修复、每次需要评估改动服务接口影响的范围,开发周期长等。为了解决这些问题,微服务架构应运而生,它将应用拆分成多个小服务,每个服务都是独立、可单独部署的,从而提高系统的可扩展性、可维护性和可靠性。

应对复杂业务场景
传统的单体应用架构已经无法满足快速变化的市场需求。微服务架构通过将业务拆分成多个小服务,每个服务专注于完成一个业务功能,从而降低了业务之间的耦合度,使得每个服务都可以独立进行开发、测试、部署和扩展。这种灵活性使得微服务架构能够更好地应对复杂业务场景,满足快速变化的市场需求。

技术发展的推动
随分布式系统、容器化技术、CI、CD的产生,让微服务的开发、管理变得方便而高效

二、现有哪些微服务技术

前存在多种微服务技术,以下是一些常见的微服务技术,特别是在企业级开发中常用的:

Spring Cloud
Spring Cloud是Java领域微服务架构的王者。它提供了一套完整的微服务解决方案,包括服务发现、配置管理、智能路由、服务网关、负载均衡、熔断器、分布式跟踪等。Spring Cloud与Spring Boot的结合使用,可以非常快速地搭建起微服务架构。
Dubbo
Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo可以很好地处理服务之间的通信和治理问题。
Kubernetes
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署、规划、更新、维护的一种机制。
Nacos
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它更适合于云原生架构中的服务治理、配置管理和服务注册与发现。
Service Fabric
Service Fabric是微软推出的一个微服务框架,用于构建和运行可伸缩且可靠的无服务器和容器化微服务。它提供了系统级的可靠性和性能,使开发人员能够专注于实现业务逻辑

三、微服务有哪些特点

独立性
每个微服务都是独立的,可以独立开发、测试、部署和扩展。

松耦合
微服务之间通过轻量级的通信机制(如API、消息队列等)进行交互,降低了服务之间的耦合度。

自治性
每个微服务都可以独立选择技术栈、数据库和部署方式。

容错性
由于服务之间的松耦合,某个微服务的故障不会影响其他服务的正常运行
相比原有的

关于松耦合特性,原有的传统服务的服务通信应该用到进程或者共享变量、如果需要很复杂的业务逻辑的情况下,这种就会造成资源的开销大、代码复杂性高的弊端;如果使用微服务的框架,例如RPC(HSF、Thrift)等,可以拆成简单的api调用,并且本身服务和服务之间的体量就会小很多,我们可以很容易的实现业务的交织的调用过程,e.g. 订单中心调用调度算法,调度算法调用地图的计算逻辑,实现订单的派单过程
上面的好处连带的优势就是开发新功能或者扩展已有的业务变得简单,不需要整体的在一个大服务内执行应用发布,只需要变更关联的api接口挂载的应用即可,减少了开发周期和成本,能够做到快速迭代
独立性的好处就是技术可以异构,不依赖于语言,前端的代码也是一个服务,后端的代码也是一个服务,借助现有的RPC框架,可以做到跨语言的调用,例如使用Thrift这个RPC框架

四、微服务的弊端

分布式复杂性:微服务架构是分布式系统,需要更多的测试和监控来确保服务之间的通信正常。一般会通过中间件消息队列实现服务的通信和共享资源的分享,这就带来了分布式领域下的数据同步和一致性的挑战

服务划分难度:如何合理地将系统拆分成多个微服务是一个挑战。如果拆分的不对,会造成后续的很多反复、繁杂的工作挑战

运维复杂度:随着微服务数量的增加,运维的复杂度也会增加,拆分的越多越细,就需要一个人去维护更多的服务

渐进式的数据库一致性 由于微服务的替换传统服务不是一蹴而就的,很多时候偶都是同时存在新老系统的api和数据库,如何维持新老系统的一致性就成了问题,所以在探索微服务的过程中,要做到数据同步链路的保障,需要更多的维护成本

五、过往经验

使用情况

在过往的公司中,微服务架构被广泛应用于大型、复杂的项目中。通过将项目拆分成多个小服务,降低了开发难度和复杂度,提高了开发效率和灵活性。同时,每个服务都可以独立扩展,从而提高了整个系统的可扩展性。

拆分思路:纵向的技术通用面和横向的业务角度,技术通用可以将一些通用api、算法抽离出来,也可以从架构的角度将业务分为业务应用层、服务计算层、服务存储层等;横向的角度可以根据业务系统拆分为运单中心、订单中心、运营中心、算法中心等

技术特点

在过往公司的实践中,微服务架构的技术特点主要体现在以下几个方面

技术栈的多样性:每个微服务都可以独立选择技术栈、数据库和部署方式。这带来了技术的灵活性,但也增加了技术的复杂度。
通信机制的轻量级:微服务之间通过轻量级的通信机制(如API、消息队列等)进行交互,降低了服务之间的耦合度。
独立开发和部署:每个微服务都可以独立开发、测试、部署和扩展,提高了开发效率和灵活性。

总结

微服务架构是一种先进的架构模式,适用于大型、复杂的项目。它带来了很多好处,如降低开发难度和复杂度、提高系统的可扩展性和容错性等。但是,它也带来了一些挑战和复杂度,如服务划分难度、分布式复杂性、运维复杂度等。因此,在使用微服务架构时,需要仔细权衡其优缺点,并结合项目的实际情况进行选择。同时,需要不断学习和探索新的技术和方法,以应对微服务架构带来的挑战和复杂度。

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

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

相关文章

碰撞器触发事件(OnTriggerEnter/OnTriggerStay/OnTriggerExit)

碰撞器触发事件(OnTriggerEnter/OnTriggerStay/OnTriggerExit)简介 在Unity中,触发器事件是当一个游戏对象进入、停留或离开另一个游戏对象的触发器碰撞器时发生的事件。这些事件分别是: OnTriggerEnter: 当其他Collider首次进入触发器时调用…

服务端Web资源缓存

1.前言 虽然客户端缓存效果很好,但它有一个核心问题:要在本地提供资源,必须先将其存储在缓存中。因此,每个客户端都需要其缓存的资源。如果请求的资源需要大量计算,则无法扩展。服务器端缓存背后的理念是计算一次资源…

【CAN】libsocketcan库详解

1、简介 libsocketcan是用户空间通过SocketCAN操作CAN的接口。 源码:https://github.com/linux-can/libsocketcan 2、API详解 2.1 can_do_restart 1)说明:重启CAN接口 2)原型: int can_do_restart(const char *name);3)参数: name:CAN接口名,比如:can0、can1,…

继续分析开发人员容易被骗的原因和防范措施

继续分析开发人员容易被骗的原因和防范措施,可以深入探讨一些具体的技术细节和实际操作建议,以更全面地理解和应对这一问题。 技术细节: 未加密的敏感数据传输: 原因:开发人员可能忽视了数据传输过程中的安全性&#…

第10章 软件架构的演化和维护

软件架构周期:初始设计、实际使用、修改完善(这就是演化)、退化弃用。 演化和维护的目的:为了使软件能够适应环境的变化而进行的纠错性修改和完善性修改等,而且这个过程是一个不断迭代的过程。 架构演化的重要性、演化过程、演化分类、演化…

Vary HTTP 标头

1.前言 服务器端 Web 资源缓存的想法是在客户端和上游之间设置一个组件来缓存先前计算的结果,以避免后者过载。根据您的基础架构和要求,此组件可以是反向代理或 API 网关。HTTP 提供Cache-Control标头来自定义缓存的不同方面,例如&#xff0…

Java——通过方法交换实参值

想写一个方法来交换main函数中的两个变量值,代码如下: public class Test {public static void swap(int x,int y) {int tmp x;x y;y tmp;}public static void main(String[] args) {int a 10;int b 20;System.out.println("交换前&#xff1…

Autodesk Maya 2025软件安装教程(附软件下载地址)

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! Autodesk Maya 2025是一款领先的三维动画设计软件,界面直观且功能丰富。它集成了全球领先的3D设计技术,提供了多种创意功能&a…

深度学习 --- stanford cs231 编程作业(如何在chrome中安装colab)

stanford cs231 编程作业(如何开始你的colab编程) 斯坦福231n的所有作业都要求在colab里面做,colab可以为你提供免费的云计算。实际上在他的官网中也有关于如何安装colab的详细说明视频。 https://youtu.be/DsGd2e9JNH4https://youtu.be/DsGd2e9JNH4 我…

2831.找出最长等值子数组(哈希表+滑动窗口法)

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等,则认为子数组是一个 等值子数组 。注意,空数组是 等值子数组 。 从 nums 中删除最多 k 个元素后,返回可能的最长等值子数组的长度。 子数组 是数组中一个连…

电路笔记 :元器件焊接相关 酒精灯松香浴加热取芯片

记录一下只使用松香和小火源加热(如酒精灯、小蜡烛)从电路板中取芯片。 过程 多放松香 让松香淹没芯片尽量均匀加热,等芯片旁边的松香开始从芯片里冒细小的“泡泡”,就差不多了 注:这种方法也可以用于焊接&#xff0…

Qt QString详细用法

一.基础用法 1.创建QString对象 QString str1 "Hello, World!"; QString str2("This is a QString object."); //一个是等号的重载,一个是拷贝构造,本质上是等价的 2.获取字符串长度 int length str1.length(); // 返回字符串…

大模型落地竞逐,云计算大厂“百舸争流”

作者 | 辰纹 来源 | 洞见新研社 从ChatGPT到Sora,从图文到视频,从通用大模型到垂直大模型……经过了1年多时间的探索,大模型进入到以落地为先的第二阶段。 行业的躁动与资本的狂热相交汇,既造就了信仰派的脚踏实地,也…

7.从0做一个vue键盘组件

文章目录 1. 从0做一个键盘组件1.1. 最终效果1.2. 分析1.3. 实现1.4. 如何引用 1. 从0做一个键盘组件 首先是why的问题:为什么需要做键盘组件? 我们目前可知的场景: 在新增账单的时候,需要用到键盘在比如从账单列表页&#xff…

保护共享资源的方法(互斥锁)

我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

MagicAnimate: Temporally Consistent Human Image Animation using Diffusion Model

show lab NUS&bytedancehttps://github.com/magic-research/magic-animate 问题引入 输入参考图片 I r e f I_{ref} Iref​和动作序列 p 1 : N [ p 1 , ⋯ , p N ] p^{1:N}[p_1,\cdots,p_N] p1:N[p1​,⋯,pN​],其中 N N N表示的是帧数,输出的是 …

探索iOS中的KVC

目录 前言 1.iOS中的KVC(键值编码) 1. 什么是KVC? 2. 使用KVC 1.设置属性值 2.获取属性值 3. KVC的高级用法 1.访问私有属性 2.访问集合属性 4. KVC的安全性 5. KVC原理 1. 查找顺序 2. 设置值 6.参考文章 前言 这篇文章主要是…

UbuntuLinux系统下安装wrk和使用

前言 wrk是一个用c语言写的压力测试工具,非常有用,但是ubuntu的软件仓库没有收录wrk,需要我们自己进行编译和安装,最近在学习一些性能测试、性能优化方面的知识,需要使用到这个强有力的工具,故此记录安装和…

Windows安全应急--在应急响应中需要知道的信息

在网络安全事件发生后,一般是要去客户现场排查问题的, 那么要想解决问题,信息的完整性决定了这次任务的成败。。 1. 你需要知道的: 先让客户梳理一遍事情的起因经过结果 询问客户需要解决的问题 了解客户的网络环境&#xff08…

【ARM 嵌入式 C 入门及渐进 6.2 -- ARMv8 C 内嵌汇编读系统寄存器的函数实现】

请阅读【嵌入式开发学习必备专栏】 文章目录 ARMv8 C 内嵌汇编读系统寄存器 ARMv8 C 内嵌汇编读系统寄存器 要在ARMv8架构中通过C代码和内嵌汇编来读取系统寄存器s3_0_c15_c5_5的值,并将其返回,可以按照以下方式实现system_read_reg函数: #…