微服务概述之微服务特性

2024-01-15 07:12
文章标签 服务 特性 概述 之微

本文主要是介绍微服务概述之微服务特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

既然系统采用了微服务架构,就需要了解一些微服务的特性,这样在进行微服务开发时,脑海中才会有一些指导方向。微服务具有以下特性。

1. 服务组件化

组件是独立、可替换、可升级的软件的单元。将整体应用拆分成独立的服务组件后,当对单个组件的修改完成后,只需要重新部署该组件即可。这也不是绝对的,有一些改动会影响服务间的接口,调用方(消费者)也需要进行相应的修改与部署。所以好的微服务架构的目标是通过高内聚、低耦合来尽量减少不同服务之间的依赖。

2.围绕业务能力组织团队

康威定律指出:设计系统的架构,受制于产生这些设计的组织的沟通结构。不同公司的产品结构,基本上反映了组织的沟通结构,如图1-3所示。
在这里插入图片描述

在一个单体应用中,一个项目会有很多研发团队的人参与,如前端工程师组、后端工程师组、数据库管理员组,不同组的人参与同一个项目,彼此沟通成本很高。单体项目的分工图如图1-4所示。
在这里插入图片描述

在微服务项目中,团队是围绕业务来进行组织的。例如,某个服务组里有前端工程、后端工程师、数据库管理员,这算是一个工作单元,能极大降低沟通成本。

3. 产品不是项目

在大部分软件开发时,采用的都是项目的形式,开发团队开发完软件后将软件交给运维团队去维护,原来的项目团队解散。微服务支持者倾向于避免这种模式,他们认为团队应该在产品的整个生命周期内对它负责。这就是 Amazon(亚马逊)提出的“you build,you run it”。这么做的好处是可以让开发人员经常接触到他们的产品,从而了解产品在生产中的行为,并增加与用户的联系,同时在业务升级时也很方便,毕竟开发和升级都是由同一个团队负责。

4. 去中心化的数据管理

在单体应用中,数据都在一个数据库(这里指的是逻辑库,可能物理上部署多个数据库服务器)中,管理难度大。在微服务中,不同的业务数据是放到不同的服务所对应的数据库中的。
如订单存放到订单库、商品存放到商品库等,从而大大降低了数据的管理难度。去中心化数据库示例如图1-5所示。在这里插入图片描述

5. 分散治理

由于將大服务分成了小服务,所以每个服务都可以根据自己的需求,采用合适的技术实现方案,如采用不同的语言(有的业务适合用Go,有的业务适合用Java)、采用不同的存储(有的业务适合用Redis,有的业务适合用MySQL)等。这样更利于提高开发效率,节省资源。

总结

了解了微服务的特性,作为一名有着架构师梦想的程序员,应该清楚地认识到微服务可以给实际工作带来的好处。

  • 从公司团队管理角度。将服务拆分成微服务后,可以让独立的团队完成独立的服务,实现不同的业务,使得团队更聚焦,減少了跨部门沟通的障碍,大大提高了开发效率。
  • 从公司产品研发角度。由于服务彼此独立,可以针对不同的产品需求,针对不同的服务快速地进行产品升级。从而在快节奏的软件开发环境中,缩短对市场的响应时间,加快产品的迭代。

这篇关于微服务概述之微服务特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608070

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾