[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、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
随机推荐
- mariadb(二)增删改
一.表的结构的增删改 添加数据类型 alter table 表名 add 字段 数据类型: #如果字段存在则会报错 Duplicate column name '字段' #修改数据类型 alter t ...
- 16/7/14-MySQL-关键字
Mysql 关键字-保留字 转载:http://linux.it.net.cn/e/data/mysql/2014/1202/9460.html 时间:2014-12-02 13:09来源:linux ...
- IDF-CTF-牛刀小试 writeup
题目链接:http://ctf.idf.cn/index.php?g=game&m=list&a=index&id=16 被改错的密码 从前有一个熊孩子入侵了一个网站的数据库, ...
- Deepin 下开启SSH远程登陆
关于deepin下安装ssh以后root用户登陆报错的解决 最近刚刚接触到deepin,觉得,wow,除了mac,还有这么好看的非win系统,而且第测出那个Linux,宽容度很高,非常适合我这种比 ...
- 为什么 Kafka 速度那么快?
来源:cnblogs.com/binyue/p/10308754.html Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafk ...
- [Bzoj1030][JSOI2007]文本生成器(AC自动机&dp)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1030 最最最常见的多串匹配问题!题目求至少包含一个子串的方案数,则可以转化成全部方案-不 ...
- 解决Linux下编译.sh文件报错 “[: XXXX: unexpected operator”
本人经常在Linux通过编译 .sh文件来生成工程,之前一直都没问题,代码一直都没变,但是今天编译的时候,却提示错误:
- C# PDF文件转图片
参考:https://blog.csdn.net/lai124793549/article/details/53392281 https://www.cnblogs.com/xiewei123/p/1 ...
- redis命令行命令
配置文件设置密码认证 修改redis.conf去掉#requirepass foobared前面的#,foobared就是密码,可以进行修改 redis命令设置密码认证config set requi ...
- 【JAVA】毕向东Java基础视频教程-笔记
传智播客-毕向东Java基础视频教程 <2013年-33days>版-学习代码记录 链接: GitHub库:JavaBXD33 目录 01-Java基础知识 02-Java对象细节 03- ...