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. java文件转码

    完整项目带lib 参考 http://toyota2006.iteye.com/blog/540316 判断编码 package change; import info.monitorenter.cp ...

  2. P1970花匠

    传送 首先,这道题据说是一个dp 其次,贪心就能做 我们先来看好想好写的贪心 按照题目来,所有偶数点要么都是凸的,要么都是凹的,不能有凸有凹.我们把每株花的高度都在平面直角坐标系中点出来,再连线.这样 ...

  3. html基础与表格的理解·

    1.静态网页与动态网页的区别:是否访问数据库 2.超文本:超文本是指超出文本的范围,可以插入声音视频,表格图片等 3.标记语言与网页结构:标记语言就是标签,网页结构包含<html>< ...

  4. jmeter3.0+ant1.10+jenkins实现接口自动化并发送邮件

    有很多关于接口自动化的文章,此篇仅用于记录自己的学习用.使用jmeter3.0+ant1.10+jenkins2.实现接口自动化并发送邮件,本篇是用的编写build文件来实现发送邮件,也可以用jenk ...

  5. xenserver添加静态路由

    xe network-list name-label= xe network-param-set uuid=48a64512-69e8-6534-f276-8d0c4555f946 other-con ...

  6. 通过VLC的ActiveX进行二次开发,实现一个多媒体播放器 2011-04-10 00:57:23

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=25498312&id=218294  通过VLC的ActiveX进行二 ...

  7. 网络设备MIB浏览器ifType、ifDescr、ifMtu、ifInOctets等的含义(Zabbix SNMP)

    1.ifType 接口的类型 取值117表示接口为GigabitEthernet (取值62表示接口为 FastEnthernet) 2.ifDescr 接口类型的描述 有GigabitEtherne ...

  8. Bootstrap 学习笔记7 模态框插件

    网站弹出框使用: 基本使用: <!-- 模态框的声明 --> <div class="modal" id="myModal" tabindex ...

  9. Ural Amount of Degrees(数位dp)

    传送门 Amount of Degrees Time limit: 1.0 secondMemory limit: 64 MB Description Create a code to determi ...

  10. Maven仓库存在jar包但依旧提示无法下载

    介绍最近服务器的迁移,把原来服务器的地址都更改了,所以私服的地址也改动了,原来项目下载到本地仓库的包,但是重新构建过程中竟然发现依然要提示下载,本地仓库里面明明有包,为什么还要下载? 解决去maven ...