[Java复习] 微服务
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复习] 微服务的更多相关文章
- 如何使用 Java 构建微服务?
[编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...
- java~springcloud微服务目录索引
回到占占推荐博客索引 最近写了不过关于java,spring,微服务的相关文章,今天把它整理一下,方便大家学习与参考. java~springcloud微服务~目录索引 springcloud~服务注 ...
- 用Jetty 9.1运行Java WebSockets微服务
Jetty 9.1的发布将Java WebSockets (JSR-356) 带入了非Java EE环境,从而开启了微服务时代.我们可以将Jetty的容器包含在java应用程序中(注意,不是Java代 ...
- Apache发布支持Java EE微服务的Meecrowave服务器
Apache OpenWebBeans团队希望通过使服务器适应用户来消除复杂性.所以,该团队发布了Apache Meecrowave项目1.0版. Apache Meecrowave是一款小型服务器, ...
- Java面试——微服务
1.什么是微服务? 就目前而言,对于微服务业界并没有一个统一的,标准的定义. 但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分一组小的服务,每个服务运行在其独立 ...
- Java微服务框架
Java的微服务框架dobbo.spring boot.redkale.spring cloud 消息中间件RabbitMQ.Kafka.RocketMQ
- 十年阿里顶级架构师教你怎么使用Java来搭建微服务
微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊. 快速预 ...
- 2016年会成为Java EE微服务年吗?
原文 http://www.infoq.com/cn/news/2016/02/javaee-microservices 进入2016年时间还不是很长,让我们回顾下去年年底的一个预言.去年12月,来 ...
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
随机推荐
- Milking Grid poj2185
Milking Grid POJ - 2185 时限: 3000MS 内存: 65536KB 64位IO格式: %I64d & %I64u 提交 状态 已开启划词翻译 问题描述 Eve ...
- Seek the Name, Seek the Fame (poj2752
Seek the Name, Seek the Fame Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14561 Ac ...
- [CSP-S模拟测试]:回文(hash+二维前缀和)
题目描述 闲着无聊的$YGH$秒掉上面两道题之后,开始思考有趣的回文串问题了. 他面前就有一个漂浮着的字符串.显然$YGH$是会$manacher$的,于是他随手求出了这个字符串的回文子串个数.但是他 ...
- 使用 localstorage 写入浏览器并获取
写入:以字符串的形式写入 localStorage.setItem('data', JSON.stringify(arr)); 获取: 注意:一定要使JSON.parse转为对象才能取出来,不然是空的 ...
- CSS页面乱码 GB2312、UTF-8格式问题解决方案
如同左图所现,出现了页面乱码问题本来应该是显示gb3212字符的"关闭"文字了.. 解决方案一: 在所调用的CSS页面的第一行添加下边的这一句代码, 注意:一定要是在CSS的头 ...
- 杂项-Unicode:Unicode
ylbtech-杂项-Unicode:Unicode Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局 ...
- php面向对象三大特性
1.封装: 目的:使类更加安全 步骤:1.成员变量变成private(私有的)2.设置方法/调用方法3.在方法中增加限制 <?php class shao { private $aa;//必须是 ...
- 《图解设计模式》读书笔记3-2 Prototype模式
目录 Prototype(原型)模式的由来 类图 代码 角色 我的理解 Prototype(原型)模式的由来 创建一个实例,可以关键字new创建.但有时候,我们需要在不指定类名的前提下生成实例,比如: ...
- CEF3 命令行 CefCommandLine 所有选项 与 开发中使用的测试网址
转自: https://blog.csdn.net/xiezhongyuan07/article/details/86640413 1.cef3 commandLine设置 在cef3开发过程中,在O ...
- Selenium WebDriver 常用API
public class Demo1 { WebDriver driver; @BeforeMethod public void visit(){ //webdriver对象的声明 System.se ...