【从零开始学微服务】05.微服务的优势和不足

news2024/11/28 16:48:16

大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家

没有“银弹”

在一些电影中,“银弹”被视作能迅速杀死狼人的武器,是杀死狼人的灵丹妙药。“银弹”常被比喻为解决复杂问题的良方或高招。

由于软件的复杂性本质,而使真正的“银弹”并不存在。同样的,架构设计是一门权衡、取舍的艺术,没有十全十美的架构,微服务架构为我们带来了如:可扩展性、灵活性等诸多优点。我们收获这些好处的同时,也一定会带来一些新的问题与不足。当我们完全了解了微服务的优势和不足,就可以在应用它的时候扬长避短。

微服务的优势

微服务架构有很多重要的优势,我们来主要看以下几个:

复杂问题简单化

首先就是,复杂问题简单化。微服务架构能有效解决系统复杂性的问题,将大型单体应用拆解为一组服务,虽然功能总量不变,但应用已被分解为可实现、可管理的模块或服务。

高内聚低耦合

微服务架构中,每个服务都可以由专注于此服务的团队独立开发。服务间定义了明确的API边界,责任划分清晰,同时内部设计和实现细节都被隔离开,相互之间没有强依赖。

独立自治

各服务可以各自独立的发展自己的系统,选择合适的技术栈和研发模式,包括开发语言、工具以及中间件等技术,这也有助于试验和引入更先进和创新的技术。

从一些边缘服务开始尝试,技术、工具、中间件、研发模式,孵化成熟以后,再逐步大范围推广,实现技术和研发能力的持续更新换代,让研发组织保持长期的优势和活力,充分获得技术发展的红利。

持续交付

服务实例独立部署,也便于利用自动化测试和自动化部署来加速功能的迭代,配合 CI/CD 等基础设施,实现业务功能的持续交付,保障研发能够紧跟业务发展变化的节奏。

灵活扩展

每个服务都可独立扩展。既可以按照服务的实际负载进行局部的扩展伸缩,比如扩容某个服务的实例数;或者按照服务要求的配置、容量等条件进行调整资源使用,比如我们可以在计算优化实例上部署CPU密集型服务,在内存优化实例上部署内存数据型服务。

一句话概括来说,微服务架构支持快速、频繁和可靠地交付大型、复杂的应用程序。它还使组织能够不断演化发展其技术堆栈。

微服务的不足

微服务架构同样也会面临一些问题和不足,我们来主要看以下几个:

服务拆分

微服务强调了服务大小,但实际上这并没有一个统一的标准。业务逻辑应该按照什么规则划分为微服务,这本身就是一个经验工程。

虽然建立小型服务是微服务架构崇尚的,但要记住,微服务是达到目的的手段,而不是目标。微服务的目标是充分分解应用程序,以促应用的持续迭代和演进。

分布式复杂度

开发人员需要基于RPC或者消息实现调用和通信,任何一次远程调用都有可能失败,如何保障服务之间的可靠交互。

数据一致性,非中心化的架构下,由于CAP原理的约束,强一致性的要求可能需要转向最终一致性方面考虑。

分布式场景下的资源竞争、主从选举、状态同步也是非常棘手的问题。

测试运维成本

对微服务进行集成测试,需要有相关服务的配合,部署对应的服务,很有可能是多个,甚至有可能存在级联的关系。

微服务架构体系中服务治理的能力往往需要一系列基础服务(比如注册中心、配置中心、APM系统等等)提供支持,这无疑也是增加了运维的成本。

问题定位排查

微服务之间的拓扑关系十分复杂,一个请求可能跨越好几个服务、中间件,出现业务bug或是线上问题时,排查或定位会很困难,需要有完善的机制和方案。

对于上面的问题,任何一个微服务开发人员都不能绕过去的,因此大部分的微服务产品都针对每一个问题提供了相应的组件来解决它们。

最后,感谢你这么帅,还给我点赞


《从零开始学微服务》

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

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

相关文章

11.27

一.进制转换 这道题的思路就是先把每个数模对应的进制.再除以,就得到对应的, 因为可能会有16进制,所以直接弄一个字符串数组,按照"0123456789ABCDEF"顺序存储,再用模找里面对应的就可以了 但是有可能是负数,所以我们需要在此之前判断一下 如果用字符串临时拼接会产…

2008年武汉高校630操作系统真题B卷

操作系统————核心系统软件 竞争计算机系统资源的基本单位————进程 UNIX————分时操作系统 操作系统中必不可少的调度————进程调度 进程和程序的本质区别————前者是动态后者是静态 磁带————顺序存储文件 某进程在运行过程中需要等待从磁盘上读入数…

tensorflow-serving docker模型部署(以mnist为例)

✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:Tensorflow 文章目录前言一、环境介绍二、tensorflow-serving docker安装三、单模型部署 (以官方demo saved_model_half_plus_two_cpu为例)1、docker模型部署2、python requests模型预测四、多模型部署 (以mni…

算法提升:图的拓扑排序算法

目录 概念 思路 代码 概念 拓扑序列:一些活动,其中某些活动必须在另一些活动完成之后才能开始,一定是无环的有向图,称为AOV网。 拓扑排序,其实就是对一个有向图构造拓扑序列的过程。构造时会有两个结果&#xff1a…

Go中赋值和转换关系

Go中的赋值跟类型转换: 在java中反射是可以获取继承关系,而go语言实际是不支持继承的,所以必须是相同的类型才能使用AssignableTo(),ConvertibleTo() package mainimport ("fmt""reflect" )type User struct {Name string } func demo(){user:User{Name:…

C#语言实例源码系列-实现自定义屏保

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

Class文件结构

文章目录1.概述1.1 字节码文件的跨平台性1.2 Java的前端编译器1.3 透过字节码指令看代码细节2. 虚拟机的基石:Class文件3. Class文件结构3.1 魔数3.2 Class文件版本号3.3 常量池3.4 访问标识3.5 类索引、父类索引、接口索引集合3.6 字段表集合3.7 方法表集合3.8 属性表集合4. 使…

No.178# 混沌工程相关内容梳理

引言随着公司规模业务的快速增长,数以千计甚至万计的微服务,依赖的各类组件越来越多。分布式体系架构体系越来越复杂,没有任何一个人能够掌控所有复杂的耦合性。也就是说复杂性无法避免,不可能再回到单体应用,也无法彻…

西门子精彩触摸屏SMART V3组态配方的具体方法示例

西门子精彩触摸屏SMART V3组态配方的具体方法示例 本次和大家分享在精彩系列触摸屏中进行配方组态的具体方法,以下内容仅供大家参考: 如下图所示,首先,在连接中添加新的连接,这里以S7-200SMART为例,PLC和HMI的IP地址要设置在同一网段内, 如下图所示,在变量中,添加配…

【Java面试】来讲一讲你对String的理解

文章目录字符型常量和字符串常量的区别什么是字符串常量池?String 是最基本的数据类型吗String有哪些特性String为什么是不可变的?String真的是不可变的吗?String不可变的必要性是否可以继承 String 类数组有没有 length()方法?St…

windows线程 互斥锁CreateMutex、ReleaseMutex、CloseHandle

互斥 相关问题 多线程下代码或资源的共享使用。 互斥的使用 1.创建互斥 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,//安全属性(废弃参数,置NULL) BOOL bInitialOwner,//初始的拥有者TRUE/FALSE LPCTSTR lpName //命名 );…

集成电路技术——如何制造芯片(1)

1.概述 电子工业是现在高新技术的核心,它在人类的科技发展中发挥了巨大作用,电子工业已经成为成为当今世界发展最快的高新技术产业,在全世界各国国民经济中起着举足轻重的作用。当今的电子技术离不开集成电路,集成电路是电子工业…

hadoop集群迁移

集群迁移 主要是要找到两个集群中active状态的namenode 集群迁移不同于服务器之间的文件发送,在hdfs中,文件是以块的形式,只可以通过namenode访问文件,所以迁移时需要通过hadoop命令 主要命令是distcp distcp有很多参数&#xf…

Kafka - 06 Kafka 集群环境搭建(三台服务器)

文章目录1. 克隆虚拟机2. Zookeeper 集群搭建3. Kafka 集群搭建4. 测试消息发送和消费1. 主题操作2. 生产者生产消息3. 消费者消费消息1. 克隆虚拟机 kafka集群搭建,需要3台虚拟机环境,但是我目前只安装了一台虚拟机,因此还需要准备两台虚拟…

[附源码]计算机毕业设计springboot-Steam游戏平台系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

纯CSS制作3D动态相册【流星雨3D旋转相册】HTML+CSS+JavaScriptHTML5七夕情人节表白网页制作

这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个TA站在眼前都不敢向前表白…

MySQL数据库管理及用户管理以及数据库用户授权

MySQL数据库管理及用户管理以及数据库用户授权MySQL数据库管理1、库和表2、常用的数据类型查看数据库结构SQL语句1、SQL语句分类:创建及删除数据库和表管理表中的数据记录(表数据的增删改查)向数据表中插入新的数据记录(增&#x…

大二Web课程设计——动漫海贼王(可以很好的应付老师的作业)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

Java基础:入门程序、常量、变量

第一章 HelloWorld入门程序 1.1 程序开发步骤说明 Java程序开发三步骤:编写、编译、运行。 1.2 编写Java源程序 在D:\java\javaCode目录下新建文本文件,完整的文件名修改为HelloWorld.java,其中文件名为 HelloWorld,后 缀名必须…

音视频技术开发周刊 | 273

每周一期,纵览音视频技术领域的干货。新闻投稿:contributelivevideostack.com。「紧急通知」LiveVideoStackCon 2022 音视频技术大会北京站改期各位LVSer们:因疫情影响,北京近期不再允许举办大型线下活动,我们无奈且抱…