微服务经验总结

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

一、为什么有微服务

解决单体应用的局限性

随着业务发展,业务逻辑复杂、关联方多,导致业务系统的代码臃肿、难于做迭代或者维护,导致很多的问题,如: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和数据库,如何维持新老系统的一致性就成了问题,所以在探索微服务的过程中,要做到数据同步链路的保障,需要更多的维护成本

总结

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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
前端开发 测试技术
你发现一个bug,如何定位这个是前端还是后端缺陷?建议收藏
你发现一个bug,如何定位这个是前端还是后端缺陷?建议收藏
1027 0
|
人工智能 自然语言处理 安全
【AI 现况分析】AI 如何帮助开发者完成自动化测试
【1月更文挑战第27天】【AI 现况分析】AI 如何帮助开发者完成自动化测试
|
编解码
Google Earth Engine ——Terra MODIS植被覆盖度(VCF)产品是全球地表植被估计的亚像素级250m分辨率产品
Google Earth Engine ——Terra MODIS植被覆盖度(VCF)产品是全球地表植被估计的亚像素级250m分辨率产品
1076 0
Google Earth Engine ——Terra MODIS植被覆盖度(VCF)产品是全球地表植被估计的亚像素级250m分辨率产品
|
负载均衡 算法 Java
微服务面试篇
微服务面试篇
656 2
|
存储 安全 数据安全/隐私保护
Django 后端架构开发:富文本编辑器权限管理与 UEditor 、Wiki接入,实现 Markdown 文本编辑器
Django 后端架构开发:富文本编辑器权限管理与 UEditor 、Wiki接入,实现 Markdown 文本编辑器
659 0
|
存储 人工智能 安全
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
瓴羊Dataphin连续俩年获得DAMA年度优秀数据治理产品奖,本次与DAMA联合发布“DAMA x 瓴羊 数据管理技能认证”,助力提升全民数据素养。
611 0
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
|
SQL 前端开发 Linux
如何定位前后端的BUG
如何定位前后端的BUG
645 2
|
Java
如何捕获和处理 EOFException 异常
EOFException 异常通常在尝试从输入流中读取数据但已到达文件末尾时抛出。要捕获和处理该异常,可以使用 try-catch 语句块,在 catch 块中进行相应的错误处理或提示。例如: ```java try { // 读取数据的代码 } catch (EOFException e) { System.out.println("已到达文件末尾"); } ```
591 4
|
前端开发 程序员 API
教你实现微信8.0『炸裂』的礼花表情特效
作为一个前端程序员,这就勾起了我的好奇心,虽然我从来没有实现过这样的动画,但是我还是忍不住想要去实现,最终我花了2天时间去看一些库的源码到我自己实现一个类似的效果,在这里我总结一下,并且手把手地教大家怎么学习实现。而🎉有一个自己的名字,叫做五彩纸屑,英文名字叫 confetti。
1181 0
教你实现微信8.0『炸裂』的礼花表情特效
|
JSON 开发框架 JavaScript
Node.js之Express、路由、中间件、接口跨域解决方案详解(附实例)
本文主要介绍了Node.js中Express、路由、中间件、接口跨域解决方案
2046 105
Node.js之Express、路由、中间件、接口跨域解决方案详解(附实例)

热门文章

最新文章