《分布式服务架构》读书笔记(一)——分布式微服务架构设计原理

一、微服务架构与 SOA 服务化的对比

1 、目的不同

  • SOA 服务化涉及的范围更广一些,强调不同的异构服务之间的协作和契约,并强调有效集成、业务流程编排、历史应用集成等,典型代表为 Web Service ESB
  • 微服务使用一系列的微小服务来实现整体的业务流程,目的是有效地拆分应用,实现敏捷开发和部署,在每个微小服务的团队里,减少了跨团队的沟通,让专业的人做专业的事,缩小变更和迭代影响的范围,并达到单一微服务更容易水平扩展的目的。

2 、部署方式不同

  • 微服务将完整的应用拆分成多个细小的服务,通常使用敏捷扩容、缩容的 Docker 技术来实现自动化的容器管理,每个微服务运行在单一的进程内,微服务中的部署互相独立、互不影响。
  • SOA 服务化通常将多个业务服务通过组件化模块方式打包在一个 War 包里,然后统一部署在一个应用服务器上。

3 、服务粒度不同

  • 微服务倡导将服务拆分成更细的粒度,通过多个服务组合来实现业务流程的处理,拆分到职责单一,甚至小到不同再进行拆分。
  • SOA 对粒度没有要求,再实践中服务通常是粗粒度的,强调接口契约的规范化,内部实现可以更粗粒度。

二、服务化管理和治理框架的技术选型

1 RPC

1 JDKRMI

JDL 1.4 开始内置,是 JEE 规范中 EJB 远程调用的基础。

缺点:

  • 采用 JDK 自带的专用序列化协议,不能跨语言
  • 使用了底层的网络协议,不如基于文本的 HTTP 刻度,也比如 HTTP 被广泛认可和应用
  • 开源框架的飞速发展,严重削弱了 JDK 资深技术的流行程度

2 Hessian Burlap

基于 HTTP 传输,其中 Hessian 将对象序列化成语言无关的二进制协议;而 Burlap 将对象序列化成与语言无关的 XML 数据,数据是可读的。两者都是与语言无关的,可以在多种语言的服务中互相调用。

Hessian Burlap 都适合传输较小的对象,对较大、复杂的对象,无论是在序列化方式上还是在传输通道上都没有 RMI 有优势。

由于服务化架构中大量的服务调用都是大规模、高并发的短小请求,因此, Hessian Burlap 协议在服务化架构中得到了广泛应用。

3 Spring HTTP Invoker

重用了 JDK 内置的对象序列化技术传输对象,与 RMI 的原理一致,但通过 HTTP 通道传输数据,在效率上应该略低于 RMI ,并且由于使用了 JDK 内置的序列号机制,不能跨语言

2 )服务化

1 Dubbo

支持多种序列化协议和通信编码协议,默认使用 Dubbo 协议传输 Hessian 序列化的数据,使用 ZooKeeper 作为注册中心来注册和发现服务,并通过客户端负载均衡来路由请求,负载均衡算法包括:随机、轮询、最少活跃调用数、一致性哈希等。基于 Java 语言,不能与其他语言的服务化平台互相调用。

缺点:

没有经过全面优化,在服务量级到达一定程度时,会出现通知系统携带过多的冗余信息,在极端情况下会导致网络广播风暴

Dubbo 服务框架是 SOA 服务化时代的产物,对微服务化提出的各种概念如熔断、限流、服务隔离等没有做精细的设计和实现

Dubbo 的监控和服务治理模块比较简单,难以满足复杂业务的需求

2 HSF

为开源,性能比 Dubbo 高,但是与业务系统耦合重,无法抽取并开源。

3 Thrift

采用中间的接口描述语言定义并创建服务,支持跨语言服务开发和调用,并且包含中间的接口描述语言与代码生成和转换工具,支持包括 C++ Java Python PHP Ruby Erlang Perl Haskell C# Cocoa Smalltack 等在内的流行语言,传输数据采用二进制序列化格式,相对于 JDK 本身的序列化、 XML JSON 等,尺寸更小,在互联网高并发、海量请求和跨语言的环境下更有优势。如果正在建设跨语言的服务化平台,则 Thrift 是首选。

4 AXIS

5 Mule ESB

三、微服务技术选型

1 Spring Boot

2 Netflix

3 Spring Cloud Netflix

服务发现组件 Eureka

容错性组件 Hystrix

智能路由组件 Zuul

客户端负载均衡组件 Ribbon

四、微服务架构的主要特点

  • 将传统单体应用拆分成网络服务,来实现模块化组件
  • 根据微服务架构的服务划分来分组职能团队,减少跨团队的沟通
  • 每个服务对应一个团队,团队成员负责开发、测试、运维和运营,开发后在团队内运维来运营,不需要交付给其他团队
  • 去中心化、去 SOA 服务化的中心服务治理和去企业服务总线
  • 微服务重视服务的合理拆分、分层和构造,可建设自动化持续发布平台,并进行敏捷开发和部署
  • 具备兼容性设计、容错性设计和服务的契约设计
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇