1. 怎么样定义一个微服务,或划分服务比较合理?业务导向的共性?

对应服务拆分,先设计高内聚低耦合的领域模型(DD),再实现相应的分布式系统是一种比较合理的方式。

微服务是手段,不是目的。目的是为了让系统更容易扩展,富有弹性,支持高并发,高可用,易于运维等等。

使用DDD(领域驱动建模)进行业务建模,从业务中获取抽象的模型(例如用户,订单),根据模型的关系进行划分界限上下文

界限上下文可理解为逻辑上得微服务,或单体应用中一个组件。

界限上下文评审原则:

原则1:上下文之间相互依赖越少越好,依赖上游不应该知道下游信息。(订单依赖商品,商品不应该知道订单信息)

原则2:使用潜在业务进行适配,如果能在一定程度响应业务变化,则证明该微服务可以在相当长一段时间内支撑应用开发。

从DDD的界限上下文往微服务转化,并得到系统架构、API列表、集成方式等。

设计微服务依赖关系

被依赖的服务不需要知道调用方的信息,否则就不是一个合理的依赖。

例如,用户服务对于访问他的来源不应该知晓,应该对订单、商品、物流等调用方提供无差别的服务。

设计微服务的集成方式

  • 采用PRC远程调用方式集成(Dubbo, gRPC, Thrift等,耦合高)
  • 采用消息的方式集成(异步传输,订阅-发布)
  • 采用RESTful方式集成(HTTP协议,耦合低)

(拆分微服务是一个过程,内部高内聚,外部的解耦。要半年到一年才根据对业务的深入理解进行合理的划分设计微服务。)

2. 为什么会有Dubbo和Spring Cloud两个微服务框架的存在,各自的优势?最重要的区别?

Dubbo:远程服务调用的分布式框架,专注RPC领域。

特点:1. 远程通讯:长连接,NIO通讯,支持多种序列化(Hessian 2/ProtoBuf),请求-响应模式交换信息。

2. 集群容错:提供基于接口的RPC,负载均衡,失败容错(failover/failback),地址路由,动态配置等。

3. 自动发现:基于注册中心目录服务,服务消费者能动态查找服务提供者,地址透明,服务提供者可以平滑扩容缩容。

Spring  Cloud:微服务全面解决方案,全家桶,服务注册与发现,网关路由,负载均衡,服务间调用,服务保护断路器,分布式配置管理,分布式链路追踪,分布式消息传递等。

区别1:

Spring Cloud和Dubbo的最大区别: Dubbo是RPC通信,Spring Cloud是基于HTTP的REST方式。

各有优劣。

因为 Dubbo 采用单一长连接和 NIO 异步通讯(保持连接/轮询处理),使用自定义报文的 TCP 协议,并且序列化使用定制 Hessian2 框架,二进制传输,占用带宽少。适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况,但不适用于传输大数据的服务调用。而 Spring Cloud 直接使用 HTTP 协议(但也不是强绑定,也可以使用 RPC 库,或者采用 HTTP 2.0 + 长链接方式(Feign可以灵活设置),JSON报文,消耗大。

Dubbo的RPC痛点:

  • 服务提供方和调用方接口依赖太强。
  • 服务平台敏感,难以简单复用。

区别2:

Dubbo强依赖阿里,社区更新不及时,现在又开始更新,未来会不会停,不好说。

Spring Cloud: Spring社区,开源社区活跃。基于Spring boot,快速开发部署,方便测试。

[Java复习] 微服务的更多相关文章

  1. 如何使用 Java 构建微服务?

    [编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...

  2. java~springcloud微服务目录索引

    回到占占推荐博客索引 最近写了不过关于java,spring,微服务的相关文章,今天把它整理一下,方便大家学习与参考. java~springcloud微服务~目录索引 springcloud~服务注 ...

  3. 用Jetty 9.1运行Java WebSockets微服务

    Jetty 9.1的发布将Java WebSockets (JSR-356) 带入了非Java EE环境,从而开启了微服务时代.我们可以将Jetty的容器包含在java应用程序中(注意,不是Java代 ...

  4. Apache发布支持Java EE微服务的Meecrowave服务器

    Apache OpenWebBeans团队希望通过使服务器适应用户来消除复杂性.所以,该团队发布了Apache Meecrowave项目1.0版. Apache Meecrowave是一款小型服务器, ...

  5. Java面试——微服务

    1.什么是微服务?    就目前而言,对于微服务业界并没有一个统一的,标准的定义. 但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分一组小的服务,每个服务运行在其独立 ...

  6. Java微服务框架

    Java的微服务框架dobbo.spring boot.redkale.spring cloud 消息中间件RabbitMQ.Kafka.RocketMQ

  7. 十年阿里顶级架构师教你怎么使用Java来搭建微服务

    微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊. 快速预 ...

  8. 2016年会成为Java EE微服务年吗?

    原文  http://www.infoq.com/cn/news/2016/02/javaee-microservices 进入2016年时间还不是很长,让我们回顾下去年年底的一个预言.去年12月,来 ...

  9. 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

    微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...

随机推荐

  1. 用三目运算,与if判断 函数调用 达到相同判定作用

    三目运算符:     操作数1 ? 操作数2 : 操作数3   (操作数1位bool类型,操作数2和操作数3为两个相同的任何类型) 返回结果:如果操作数1判定结果为真,则将操作数2作为返回结果如果操作 ...

  2. 笨办法学Python(learn python the hard way)--练习程序31-35

    下面是练习31-练习35,基于python3 #ex31.py 1 print("You enter a dark room witn two doors. Do you go throug ...

  3. Python 装饰器之 functools.wraps

    在看 Bottle 代码中看见 functools.wraps 这种用法. def make_default_app_wrapper(name): """ Return ...

  4. BaseFragment 基类

    package com.test.mvp.mvpdemo.mvp.v6.basemvp; import android.os.Bundle;import android.support.annotat ...

  5. php面试专题---16、MySQL创建高性能索引考点

    php面试专题---16.MySQL创建高性能索引考点 一.总结 一句话总结: 注意:只写精品 1.索引的基础? 类似书籍的目录:索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录 ...

  6. leaflet-加载天地图-解决纬度偏移特别大

    这几天学习 leaflet 在加载天地图时将以前的接口拿来用结果偏差了特别大(差不多是 90 度),中国纬度到了 100 多,试了改变投影和 y 轴翻转的配置都不好使,最后上网搜索到了Leaflet. ...

  7. C#通过UserAgent判断智能设备(Android,IOS,PC,Mac)

    尝试通过 Agent 来获取相应的智能手机设备标识,根据标识的不同来输出对应设备所需的显示样式及其他.经过努力,终于搜集了比较全的 智能设备 的 Agent,相应的判断过程及代码如下,不明白的留言. ...

  8. 结合process进程,实现进程之间的通讯Queue,稍微复杂的运用

    #在父进程中创建两个子进程,一个往Queue写数据,一个从Queue里读数据 from multiprocessing import Queue,Process import time,random ...

  9. tbox协程使用之切换与等待

    tbox的协程实现,是stackfull模式的,需要指定独立堆栈和协程函数,目前暂时还不能像golang那样实现堆栈的动态增长,之后会对其进行支持. 目前提供下面一些功能特性: 1. 提供yield切 ...

  10. 记boost协程切换bug发现和分析

    在分析了各大开源协程库实现后,最终选择参考boost.context的汇编实现,来写tbox的切换内核. 在这过程中,我对boost各个架构平台下的context切换,都进行了分析和测试. 在maco ...