草庐IT

微服务的探讨

IAyue 2023-03-28 原文


微服务从几年突然火了起来,经常在各种地方见到,刚好有空,整理了一下我的看法。我在18年开始参加工作,刚出来工作时认为微服务是一种“先进”的设计风格用上了就是好的,然而最近回头看,微服务只是为了解决某一些问题的方案,并不适用于所有系统。选择架构,在我看来更像是买东西:找到需要的东西,并且挑出代价最小的质量最好的。没有过时的架构,只有合适的架构。

微服务架构

微服务是一种通过多个小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言,不同的数据存储技术,运行在不同的进程之中。服务采取轻量级的通信机制和自动化的部署机制实现通信与运维。当系统规模大,或程序需要修改的时候,其部署的成本、技术升级的迁移成本都会变得更为昂贵,有一个很常用的解决问题思路,就是分治法:把一个大问题分成N个小问题去解决。微服务的火热,一方面是微服务所需要的基础设施:注册发现、跟踪治理、负载均衡、传输通信、持续集成部署已经有了很多成熟的解决方案;另一方面是越来越多的业务场景信息化,导致我们的系统越来越庞大。

优点

  • 服务自治。每一个服务都是一个独立的小应用,可以根据需要去选择该服务使用的编程语言、数据库等,只需要对外接口采取一致通信协议跟格式。《人月神话》里面有一个很出名的理论,一个人10天能完成的活,加到10个人也不会1天完成。服务的拆分也有助于拆分团队,控制单个团队规模,增加开发效率。
  • 容错性,可靠系统完全可能由会出错的服务组成。在微服务的设计中,有自动的机制对其依赖的服务能够进行快速故障检测,在持续出错的时候进行隔离,在服务恢复的时候重新联通。

缺点

  • 数据一致性。单体服务时,数据一般都存在同一个数据库中,数据库能很好的保证事务。但服务拆分以后,不同服务有自己的数据库,一个用户请求可能需要多个数据库,做跨库事务是一件很头疼的事情。
  • 如何拆分才是合理的?采用服务来构建程序,获得的收益是软件系统“整体”与“部分”在物理层面的真正隔离,这对构筑可靠的大型软件系统来说无比珍贵,但另一面,其付出的代价也同样无可忽视,微服务架构在复杂性与执行性能方面做出了极大的让步。一套由多个微服务相互调用才能正常运作的分布式系统中,每个节点都互相扮演着服务的生产者与消费者的多重角色,形成了一套复杂的网状调用关系。对原有系统采用哪种划分方式才能让服务间调用更少更简单?这是一个需要考虑的问题

结论

微服务更适合于业务复杂、规模庞大的系统。正如单线程能很好完成任务,没必要用多线程。

有关微服务的探讨的更多相关文章

  1. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  2. 【微服务笔记23】使用Spring Cloud微服务组件从0到1搭建一个微服务工程 - 2

    这篇文章,主要介绍如何使用SpringCloud微服务组件从0到1搭建一个微服务工程。目录一、从0到1搭建微服务工程1.1、基础环境说明(1)使用组件(2)微服务依赖1.2、搭建注册中心(1)引入依赖(2)配置文件(3)启动类1.3、搭建配置中心(1)引入依赖(2)配置文件(3)启动类1.4、搭建API网关(1)引入依赖(2)配置文件(3)启动类1.5、搭建服务提供者(1)引入依赖(2)配置文件(3)启动类1.6、搭建服务消费者(1)引入依赖(2)配置文件(3)启动类1.7、运行测试一、从0到1搭建微服务工程1.1、基础环境说明(1)使用组件这里主要是使用的SpringCloudNetflix

  3. 若依框架解读(微服务版)——2.模块间的调用逻辑(ruoyi-api模块)(OpenFeign)(@innerAuth) - 2

    模块之间的关系我们可以了解到一共有这么多服务,我们先启动这三个服务其中rouyi–api模块是远程调用也就是提取出来的openfeign的接口ruoyi–commom是通用工具模块其他几个都是独立的服务ruoyi-api模块api模块当中有几个提取出来的OpenFeign的接口分别为文件,日志,用户服务我们以RemoteUserService接口为例子:其中contextId="remoteUserService"为bean的名称,value=ServiceNameConstants.SYSTEM_SERVICE为接口的描述,fallbackFactory=RemoteUserFallback

  4. 【微服务】ES使用实战·黑马旅游(五) - 2

    🚗Es学习·第五站~🚩Es学习起始站:【微服务】Elasticsearch概述&环境搭建(一)🚩本文已收录至专栏:微服务探索之旅👍希望您能有所收获一.引入综合前几站所学,我们已经对Elasticsearch的使用有了一定的了解,接下来让我们一起通过一个综合实战案例来复习前几站所学内容,体会在实际生产中的作用。我们一起实现如下功能:酒店搜索和分页酒店结果过滤我周边的酒店酒店竞价排名数据聚合筛选选项搜索框自动补全酒店数据的同步二.环境搭建按照第一站的学习部署Elasticsearch并启动运行。按照第二站的学习中的如下步骤,初始化测试项目并在Es导入数据。使用Elasticsearch,肯定离不开

  5. 题目3180:蓝桥杯2023年第十四届省赛真题-互质数的个数======及探讨互质专题 - 2

    原题链接https://www.dotcpp.com/oj/problem3162.html想直接看题解的,跳转到第三次尝试即可。已AC。解析:(1)首先大家要知道什么叫互质:以及它们的性质:欧拉函数在数论中,对正整数n,欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)或是欧拉总计函数(totientfunction,由西尔维斯特所命名)。例如φ(8)=4,因为1,3,5,7均和8互质。也可以从简化剩余系的角度来解释,简化剩余系(reducedresiduesystem)也称既约剩余系或缩系,是m的完全剩余系中与m互素的数

  6. 什么是微服务? - 2

    一、什么是微服务?​微服务是一种分布式架构,分布式架构就是把服务做拆分,在我们的传统单体架构中,我们把所有的服务都写在一起,随着业务的扩大我们的代码耦合度会变得越来越高,后期维护起来也很不方便。微服务就是把模块拆分,把我们整个项目拆解分成许多独立的子项目,每个子项目之间独立开发和部署,子项目也有自己独立的功能,这些独立的子项目就形成了微服务,不同的子项目就进而形成一个服务集群。​举例说明:一个商城系统很多模块组成,例如订单模块、用户功能、商品服务、支付模块等,这些模块如果采用单体架构,代码之间的耦合度会非常高,也不便于后期的维护,当一个模块出现问题时整个项目也会受到影响。如果采用微服务,每个模

  7. 【微服务36】分布式事务Seata源码解析四:图解Seata Client 如何与Seata Server建立连接、通信【云原生】 - 2

    文章目录一、前言二、概述三、TM事务管理器初始化1、TM初始化流程图2、TM初始化流程1)获取TmNettyRemotingClient实例1>TmNettyRemotingClient实例化2>AbstractNettyRemotingClient实例化2)初始化TmNettyRemotingClient1>注册一些请求处理组件2>初始化AbstractNettyRemotingClient(1)AbstractNettyRemoting初始化(2)启动netty客户端组件Abs

  8. 【ArchSummit】阿里云原生微服务架构治理最佳实践 - 2

     前言📫作者简介:小明java问道之路,专注于研究Java/Liunx内核/C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。📫热衷分享,喜欢原创~关注我会给你带来一些不一样的认知和成长。🏆InfoQ签约作者、CSDN专家博主/后端领域优质创作者/内容合伙人、阿里云专家/签约博主、51CTO专家🏆🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~本文目录前言本文导读一、云原生微服务的挑战和趋势1、微服务在云原生下的挑战1.1挑战1.2微服务化深入服务治理是难点2、云原生微服务的发展趋

  9. 行业观察:ChatGPT进入工业自动化前景探讨 - 2

    ChatGPT是美国人工智能实验室OpenAI推出的一款训练相对成熟的自然语言处理工具,该工具使用Transformer神经网络架构来训练,该架构拥有语言理解和文本生成能力,通过与语料库连来学习和优化模型,进而让其能更准确地实现互动,有趣的是,基于大量现有数据库,该工具甚至能完成类似于邮件、脚本、文案、代码等内容的编写工作。最新动态该软件于2022年11月底在OpenAI的官网被推出,一经推出即在社交媒体走红,并收获众多注册用户,2023年一月末,ChatGPT的月活用户已突破1亿,而这进一步帮助该工具训练模型。在此之后,ChatGPT表现出优秀的问答回应能力吸引了众多巨头的关注和跟进,据报告

  10. 软件工程师能力模型探讨 - 2

    软件工程师能力模型探讨高级JAVA工程师通用技能ExpertJavaknowledge  JAVA知识专家级Object-OrientedDesignPatterns  面向对象与设计模式High-leveldesignskills  高层模块设计Designingforspecificrequirements(e.g.security,scalability,optimization) 安全,伸缩,优化设计DevOps 开发测试运维Distributed/parallelprogramming  分布式/并行编程Maintainingandupgradingapplications  维护升

随机推荐