精华内容
下载资源
问答
  • 微服务和模块化

    2017-07-04 09:49:00
    我相信,如果无法正确地构建单体应用(Monolith),那么这时试图强制采用分布式架构进行模块化,这实际上可能会导致损害。 事实上,对此问题InfoQ曾在2014年进行过一次讨论,其中BrownHughson探讨了微服务以及“大...

    在文中,Hughson提出:

    我相信,如果无法正确地构建单体应用(Monolith),那么这时试图强制采用分布式架构进行模块化,这实际上可能会导致损害。

    事实上,对此问题InfoQ曾在2014年进行过一次讨论,其中Brown和Hughson探讨了微服务以及“大杂烩”(Big Ball of Mud)这一比喻。当时Brown给出了这样的说法:

    如果你正在构建的单体应用系统已成了一个大杂烩,或许你应该思考一下,你是否对软件架构给予了足够的关注?你是否真正地理解了什么是软件中的核心结构抽象?软件的接口和职责是否清晰?如果你没有做到这些,那么为什么认为如果能迁移到微服务架构就会有所裨益?当然,对服务做物理分隔会强制性地规避一些捷径。但是在单体应用中,也可以实现同样的组件间分隔。

    Hughson将使用微服务做构建比作为冰山,一眼看上去所显现出来的部分,要远小于位于水下的部分:

    如果一个开发团队不能或是不愿意去遵循设计的指导原则(例如,模块化需求),这时额外地添加复杂性可能并非是所需的解决方案。将应用分布化,会使应用更不易于“意外地”纠缠于各种关注中,但并不会杜绝该问题的发生。

    Gene借助于Brown的另一篇推文对最后一点做了说明:

    20170602113139515.png

    Hughson进而返回到对开发团队不能或是不愿意遵循设计指导原则的评论上,他继续指出:

    我的观点是,增加“意外地”破坏模块化的困难度并不会解决前面提及的两组人员所面对的问题,即不能遵循设计指导原则的开发团队,以及不愿意遵循设计指导原则的开发团队。这颇具讽刺意味,那些并没有理解模块化必要性的人,可能无论各种障碍都会在他们的“解决方案”中颇具创造性。同理,对那些不愿意采用模块化的人同样适用。

    Hughson提出,分布式(微服务天生就是分布式的)作为一种实现模块化的手段,并不适用于目标。他认为,关注不应局限于应用架构上,也应同样地适用于应用数据。

    一个具有纪律的单体应用团队,可以在单体应用数据架构中维护模块化。而试图共享一个单体应用数据架构的多个独立团队,可能会遇到严重的治理开销问题,也可能会完全地破坏模块化。

    Christian Posta在去年就指出了为什么应用中的数据管理会成为迁移到微服务时的最难部分。InfoQ当时就对此进行了报道:

    要对一个相当复杂的企业领域构建微服务,我们需要找到该领域中不同职责间的界限。在每个界限上创建一个针对该职责设计的、并表示了该职责的领域模型。进而,每个界限的数据模型被同一界限的领域模型所驱动。使用DDD就可以发现这些界限,并对每个界限创建一个“受限场景”(bounded context),这样每个场景可转变为一个微服务。

    该文章的一条评论指出,这可能会需要一定形式的治理。对此,Hughson持赞同态度:

    消极措施不足以解决问题,无论是结构性的(“让我们将组件分布化,以免人们破坏模块性”)还是过程性的(例如,“要有纪律”)。治理在应用层(在我看来,即应用架构原则)及以上层是完全有必要的,它有助于实现对竞争利益的协调,并监督设计以免在黑暗的小巷中徘徊。请记住,这可能是由于误解、缺乏经验、不符合规范甚至设计不一致而导致的。需要有人监控所发生的情况,以及同样重要的发生原因。

    总而言之,在Hughson看来,构建需要独立管理、扩展和部署组件的应用时,微服务的确可以发挥自身的作用。理解到这一点是很重要的。但是,也需要很好地理解为什么要选取沿微服务这条路走下去。



    本文转自d1net(转载)

    展开全文
  • 中台化建设一些基本认知:组件化、微服务模块化区别与联系 最近两年,各个互联网公司都在进行中台化拆分建设,这里面有很多基本认识概念 架构视角: 1.大中台,小前台 只要中台服务足够强大,新业务可以调用中台...

    中台化建设一些基本认知:组件化、微服务、模块化区别与联系
    最近两年,各个互联网公司都在进行中台化拆分建设,这里面有很多基本认识和概念
    架构视角:
    1.大中台,小前台
    只要中台服务足够强大,新业务可以调用中台的各个公共的组件采用类似积木的方式进行快速构建。前台系统只需要投入少量的人力成本,就可以快速完成新产品的研发和上线,并根据市场反馈在做调整

    2.组件化与项目微服务化
    内部系统项目可以采用“组件化”思路(即微服务化)来进行子系统拆分,对内部项目的“前中台”拆分,各个子系统独立部署

    3.组件化与前端
    前端发展三个阶段:

    • 1)代码耦合阶段
    • 2)前后分离阶段:前后台工程代码单独部署
    • 3)前端组件化阶段:具体实施:构建一套组件库,支持自定义组件,各自不同系统采用不同的组件服务,前端组件包括基础组件,业务组件,统一部署,版本控制

    4.组件化优点

    • a) 系统解耦
    • b) 可复用度高
    • c) 利于专注具体功能点开发
    • d) 减少每一次改动需要全量回归测试
    • e) 业务积木化,降低运营成本,功能热插拔

    5.组件化实施

    • a) 避免组件间相互应用,通过路由或总线方式处理挂载到组件总线上的业务组件,都可以实现双向通信.而通信协议和HTTP通信协议类似,即基于URL的方式进行.
    • b) 业务模块化是业务的横向拓展,组件化在业务上是纵向分层,可以是某一业务的完整功能集,也可以是一个单独的功能点

    6.组件化的层次

    • a) 基础服务组件
      业务上定位为最小粒度的组件:可以是一个功能点,也可以是一个完整的功能集–查看订单组件、鉴权组件
    • b) 业务模块组件
      某一业务场景完整功能集:由基础服务组件组成、数据集–购物车、下单、会员中心
    • c) 系统级组件
      业务场景解决方案:app购物、pc购物

    工程视角:
    1.工程模块化设计原则

    • a)越底层的模块,应该越稳定,越具有高度复用性
    • b) 不要让稳定模块依赖不稳定模块,减少依赖
    • c) 提升模块的复用度、自完备性
    • d) 业务模块之间尽量不要耦合

    2.组件与模块的区别

    类别		目的					特点					接口			成果				架构定位
    组件		重用、解耦		高重用、松耦合		无统一接口	基础库、基础组件		纵向分层
    模块		隔离/封装	    高内聚、松耦合		统一接口		业务框架、业务模块		横向分块
    

    组件:最初的目的是代码重用,功能相对单一或者独立。在整个系统的代码层次上位于最底层,被其他代码所依赖,所以说组件化是纵向分层。
    模块:最初的目的是将同一类型的代码整合在一起,所以模块的功能相对复杂,但都同属于一个业务。不同模块之间也会存在依赖关系,但大部分都是业务性的互相跳转,从地位上来说它们都是平级的(秒杀、优惠券、特权)

    展开全文
  • 问题:在使用微服务模块化开发的时候导入公共模块的时候,公共模块频繁更新pom坐标导致服务模块更新坐标出现下面异常,并且无论怎么样注释公共模块的坐标也无法把公共模块给剔除出去,也可能是自己误操作的原因...

    问题:在使用微服务分模块化开发的时候导入公共模块的时候,公共模块频繁更新pom坐标导致服务模块更新坐标出现下面异常,并且无论怎么样注释公共模块的坐标也无法把公共模块给剔除出去,也可能是自己误操作的原因导致maven刷新坐标不起作用,但是错误原因很明显,所以根据报错去解决问题

    io.renren:renren-fast:jar:3.0.0 构建有效模型时遇到的一些问题
    POM io.renren:renren-fast:3.0.0 (D:\workspace\java\gulimall\renren-fast\pom.xml) 的 'parent.relativePath' 指向 com.atguigu.gulimall:gulimall 而不是 org.springframework .boot:spring-boot-starter-parent,请验证您的项目结构@第11行,第10列
    io.renren:renren-generator:jar:1.0.0 构建有效模型时遇到的一些问题
    POM io.renren:renren-generator:1.0.0 (D:\workspace\java\gulimall\renren-generator\pom.xml) 的 'parent.relativePath' 指向 com.atguigu.gulimall:gulimall 而不是 org.springframework .boot:spring-boot-starter-parent,请验证您的项目结构@第11行,第10列
    com.atguigu.gulimall:gulimall-common:jar:0.0.1-SNAPSHOT构建有效模型时遇到一些问题
    缺少 org.apache.maven.plugins:maven-compiler-plugin 的“build.plugins.plugin.version”。 @ com.atguigu.gulimall:gulimall-common:[未知版本],D:\workspace\java\gulimall\gulimall-common\pom.xml,第16行,第21列
    强烈建议修复这些问题,因为它们会威胁到您构建的稳定性。
    出于这个原因,未来的 Maven 版本可能不再支持构建这种格式错误的项目。

    问题描述翻译的意思是,本来本服务模块使用的父工程是springboot,但是却指向了导入common公共模块为父工程,解决办法就是在<parent>中添加

    <relativePath/> <!-- lookup parent from repository -->
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.2.4.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>

    下面对 relativePath解释来自https://blog.csdn.net/gzt19881123/article/details/105255138

    1. relativePath 是Maven为了寻找父模块pom.xml所额外增加的一个寻找路径
    2. relativePath 默认值为 …/pom.xml
    3. Maven 寻找父模块pom.xml 的顺序如下:
        (1)  first in the reactor of currently building projects
              这里一个maven概念 反应堆(reactor ),
              意思就是先从工程里面有依赖相关的模块中找你引入的
              parent 的pom.xml,
            
        (2) then in this location on the filesystem
             然后从 你定义的  <relativePath > 路径中找,
             当然你如果只是 /  即空值,则跳过该步骤,  
             默认值 ../pom.xml 则是从上级目录中找啦。
    
        (3)  then the local repository
           这个就不说了,如果 (1) (2) 步骤没有则从 本地仓库找啦。
    
        (4) and lastly in the remote repo
         这个还用说吗,上面都找不到了,最后只能从远程仓库找啦,再找不到就报错给你看 
    

    展开全文
  • 使用产品微服务模块化项目布局转到Todo后端示例。 它适合作为中型到大型项目的起点。 本示例将用于http路由器,将用于数据库访问。 特征: 模块化项目结构。 完整示例,包括测试。 Docker部署。 与兼容。 ...
  • 使用产品微服务模块化项目布局转到Todo后端示例。 它适合作为中型到大型项目的起点。 本示例将用于http路由器,将用于数据库访问。 特征: 模块化项目结构。 完整示例,包括测试。 Docker部署。 与兼容。 ...
  • 微服务和模块划分原则

    万次阅读 2019-06-22 21:46:10
    所以在这里想探讨一下服务边界服务划分的方法。 微服务设计四个原则: AKF拆分原则 AKF扩展立方体(参考《The Art of Scalability》),是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度。理论上按照...

        微服务架构作为目前使用的主流架构,已经被广泛使用,但是对于服务的划分却没有固定的原则,在工作中也经常会出现服务划分过度或者不充分的情况。所以在这里想探讨一下服务边界和服务划分的方法。

       微服务设计四个原则:

    • AKF拆分原则
    • AKF扩展立方体(参考《The Art of Scalability》),是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度。理论上按照这三个扩展模式,可以将一个单体系统,进行无限扩展。

      X 轴 :指的是水平复制,很好理解,就是讲单体系统多运行几个实例,做个集群加负载均衡的模式。

      Z 轴 :是基于类似的数据分区,比如一个互联网打车应用突然或了,用户量激增,集群模式撑不住了,那就按照用户请求的地区进行数据分区,北京、上海、四川等多建几个集群。

      Y 轴 :就是我们所说的微服务的拆分模式,就是基于不同的业务拆分。

      场景说明:比如打车应用,一个集群撑不住时,分了多个集群,后来用户激增还是不够用,经过分析发现是乘客和车主访问量很大,就将打车应用拆成了三个乘客服务、车主服务、支付服务。三个服务的业务特点各不相同,独立维护,各自都可以再次按需扩展。

    • 前后端分离

    前后端分离原则,简单来讲就是前端和后端的代码分离也就是技术上做分离,我们推荐的模式是最好直接采用物理分离的方式部署,进一步促使进行更彻底的分离

    • 无状态服务

    对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之称为无状态服务。

    那么这个无状态服务原则并不是说在微服务架构里就不允许存在状态,表达的真实意思是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。

    场景说明:例如我们以前在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再需要考虑缓存数据如何同步的问题。

    • Restful通信风格

    作为一个原则来讲本来应该是个“无状态通信原则”,在这里我们直接推荐一个实践优选的Restful 通信风格 

    微服务设计目标

    • 架构必须稳定;
    • 服务必须高内聚 - 服务应该实现一小组强相关的功能;
    • 服务必须符合开闭原则 - 将一同变更的内容打包在一起,以确保每个更改仅影响一个服务;
    • 服务必须松耦合 - 每个服务都可以在不影响客户端的情况下更改实现;
    • 服务应该是可测试的;
    • 每项服务都小到足以由“两个披萨”团队开发,即一个6-10人的团队;
    • 负责一个或多个服务的每个团队必须是自治的 - 团队能够在与其他团队尽量少的协作下,来开发和部署他们的服务。

    服务划分方法

    通过领域驱动设计(DDD),设计与 子域 相对应的服务。DDD通过分析问题空间和业务逻辑,将应用程序定义为域。域由多个子域组成。每个子域对应于业务的不同部分。

    子域可分为以下几类:

    • 核心类 - 业务的关键差异化因素和应用程序中最有价值的部分;
    • 支持类 - 与业务有关,但与差异化无关;这些可以在内部实施或外包;
    • 通用类 - 与业务无关,理想情况下可以使用现成的软件实现。

    例如一个会员账号管理系统包含以下几个子域:

        账号管理域:包含账号的模型和提供的基本接口能力

        登录模块域: 涉及登录和免登流程

        注册账号域: 账号注册和账号创建能力

        个人中心域: 涉及个人中心管理

    展开全文
  • 前面写过两篇文章《谈一下我对如何做需求分析的理解思考》、《谈...模块的划分设计都有一些套路可寻,在微服务架构体系中,使用不同的开发语言 子模块有不同的载体。使用Java开发,子模块可以是不同的Jar包或...
  • 如何使用 Gradle 来设计 Git 仓库,来适应微服务体系下多团队多模块工程设计; 如何通过工程结构设计来实现用同一套代码库设计出既支持构建成微服务体系,又支持构建成分布式,还可以构建成单体系统,做到工程间的...
  • 本文讲的是[译] 模块化 vs. 微服务, 原文地址:Modules vs.... 原文作者:Sander Mak ...译文出自:掘金翻译计划 ...使用模块化系统设计原则来避免微服务的复杂性。 从单体式应用向微服务架构迁移已经...
  • 畅谈Java模块化微服务

    千次阅读 2019-09-03 23:08:08
    微服务这2年的发展太热门了,这阵势很容易导致开发者一叶障目,首先微服务是需要一些技术沉淀的,其次业务体量、开发团队的规模有关,这里不展开探讨微服务之殇。业务的复杂度继续堆积犹如潘多拉魔盒,本文将从...
  • 首先来谈两个前端移动端比较常见的词:组件化和模块化(后面我会说到为什么要先介绍组件化和模块化)。首先,可以肯定的是,组件化和模块化的中心思想都是分而治之。目的都是将一个庞大的系统拆分成多个组
  • 从概念理解,分布式服务架构强调的是服务以及服务的分散微服务则更强调服务的专业化和精细分工;从实践的角度来看,微服务架构通常是分布式服务架构,反之则未必成立。所以,选择微服务通常意味着需要解决...
  • 模块化微服务

    千次阅读 2017-07-19 19:51:00
    这方面,模块化和微服务都能做到。但是有不同的挑战,除了那些目前已经解决的。 当你的组织达到了google,netflix那种规模,拥抱微服务变得完全合理。你们有能力搭建自己的平台,工具集,工程师的数量到了不在能...
  • 模块化 部署 模块化微服务的应用场景 https://www.docin.com/p-2165870138.html
  • 方案一:每个微服务提供者 集成日志模块以及相关的库表(如图上方案一),这种集成方式以及使用方式区别不大, 但是意味着存在 1.“代码冗余”,需要引入日志相关代码 2.库表冗余,需要微服务库创建一系列相关库表 ...
  • 以下内容是在学习若依-微服务源码的学习总结,主要内容为 若依-微服务中如何配置 Redis 以及采用的序列化和反序列方式。 在若依-微服务版的ruoyi-common-redis模块中,只完成一个功能,提供 redis 工具类。 首先...
  • 模块化比特币全节点微服务API服务器架构实用工具包,可在没有可信第三方的情况下构建可扩展,安全且功能强大的应用服务。
  • 分布式架构是分布式计算技术的应用工具,目前成熟的技术包括...微服务架构是一项在云中部署应用服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。...
  • Sentiment Server 用于分析语言情绪的简单,模块化微服务
  • 微服务最明显优点的就是模块化 lego处理前端要调用的路径 同时它自己可以有api调用,可以用来处理一些用户token,登录角色,日志等 同时lego调用每个模块的服务(Controller)请求的实体类命名可以为XXXReq,...
  • Domain外部划分 Domain内部划分
  • 网上已经有非常多从单体服务转移到微服务讨论,但...为了模块化微服务“通过微服务,我们终于可以让团队独立工作”,或者“我们的单体服务太复杂,这会降低我们的开发速度”。这些说法是让开发团队走向微服务之路...
  • 为了模块化微服务强封装:隐藏组件内部的实现细节,让不同部件之间的耦合度较低。团队可以在系统的解耦的部分单独工作。明确定义的接口:我们无法隐藏所有内容(否则系统将无法做任何有意义的事情),因此组件之间...
  • ** 父模块创建时type要选择maven pom ** 子模块创建:直接选择创建好的父模块new一个module,创建spring boot项目(maven项目其实同理) ** 父模块pom案例 ** <?xml version="1.0" encoding="UTF-8"?> <...
  • 微服务架构SOA区别

    千次阅读 2017-08-17 16:05:51
    微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?...
  • 微服务和微服务架构

    2019-10-09 22:48:49
    微服务 前言 最近公司某个项目的架构越来越庞大,维护起来非常难受。我主动想领导提出要把这个项目重构在工作中需要把原来的项目重构成微服务架构,因此学习微服务相关知识,在这里记录下来,权当笔记的同时也希望...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,941
精华内容 24,376
关键字:

微服务和模块化的区别