入门级模式之细粒度SOA

细粒度SOA可以说是微服务的“大爆炸”时代。许多人认为,细粒度SOA架构风格起源于Netflix。在一开始,Netflix宣称他们构建的架构就是细粒度的SOA。对于SOA架构的实践者来说,细粒度SOA的特征从字面上就能知晓。细粒度SOA减少了SOA架构遇到的问题,并且它应用和SOA相同的原则,但将业务拆分为细粒度的服务,服务之间通过轻量级机制进行通信。实际上,目前大多数人仍然认为细粒度服务是微服务架构唯一的设计模式。

然而,在实施这种架构风格的过程中,Netflix和其他实践细粒度SOA模式的公司遇到了许多基本问题。当服务拆分地较小,并试图进行水平扩展时,就会出现一些困难:

1.之前只需要调用一次API,现在必须几十甚至上百次调用API。这种频繁的交互往往是非常低效的。(注:在灵长科技CEAMS系统中,服务之间的相互调用采用从Node.js全新的多线程机制中引入的高速异步消息通道,相比传统的进程间的API调用效率得到了极大的提升,因此这类开销在CEAMS系统中被降低到了最低程度)

2.过去您只需要管理少量的服务。但现在您需要管理成百上千的服务。之前的服务管理工具可能不再适用。

3.当数十、数百或数千的服务都可以查询或修改某个中心应用程序的状态时,通过任何一个微服务访问这个中心存储得到的状态都几乎不可能信赖其一致性。

实际上,实施微服务架构的过程中容易忽视以下几点挑战:低效的进程间通信,全方位的监控、管理和服务治理,以及系统状态的一致性。

在大多数情况下,细粒度SOA模式被应用为SOA服务集成的一种扩展,其中的每个服务都是为了与外部系统互联互通。从而形成对外部系统的强依赖性,使得变更速度变缓,并容易使得集成后的系统反映出应用程序的内部状态。

当你开始实施细粒度SOA模式时,请注意接下来将要发生的问题。上面所讲的困难会伴随着你的成功一起出现,你应该做好准备面对它们。当困难变得足够严重时,你将不可避免地需要寻找其他的模式。

问题:

粗粒度的服务很难灵活更改以适应需求的变化,并且传统单体架构的特性容易“阻碍团队前进”。

解决方案:

将服务拆分为更细粒度的微服务,减少特定的更改范围,从而使更改更容易发生。

应用:

通常拆分出来的每个细粒度微服务都有一个单独的用途。

影响

1.服务请求交互次数增加

2.管理的服务数量越来越多

3.传统的监控解决方案不足

4.集成、测试和部署的自动化变得至关重要

5.微服务的编排成为必要

6.快速变更的能力得到提高

目标:

1.快速的敏捷变更

2.可伸缩性:理论上,你可以通过实施细粒度SOA模式提高可伸缩性,但实际上,除非支持自动化基础设施到位,否则可伸缩性往往会下降。

主要特点:

1.细粒度SOA模式在小范围内使用效果很好,但在大范围内会出现痛点。

2.重点是服务颗粒度要细,但通常没有考虑性能(例如可扩展性、可靠性等)。

3.以服务集成为导向,每个微服务依赖于外部系统。

4.为了实现快速的变更,存在着低效的进程间通信。(注:这也是基于docker容器技术的微服务架构的重大缺陷)

5.数据一致性和状态管理能力较差。

6.由于与现有SOA模式的相似性,SOA架构中存在的问题往往同样会发生。

如何与现有系统、SOA或API共存?

细粒度SOA模式非常类似于SOA和API主导的方法,并且能够利用现有系统的更多价值。与现有系统的共存模型也很简单。但也正因如此,细粒度SOA模式与现有系统共存时可能会产生较大的摩擦,因为现有IT资产的停滞变化可能会对服务拆分粒度造成阻力。


微服务架构设计模式 pdf_六种常用的微服务架构设计模式之一: 入门级模式...相关推荐

  1. 分布式服务框架学习笔记2 常用的分布式服务框架 与 通信框架选择

    传统垂直架构改造的核心就是要对应用进行服务化,服务化改造使用到的核心技术就是分布式服务框架. 分布式服务框架演进 应用从集中式走向分布式 大规模系统架构的设计一般原则就是尽可能地拆分,以达到更好的独立 ...

  2. php常用设计模式和算法,常用算法、问答、设计模式

    1.Cookie 禁用了,Session 还能用吗? 对应的服务器 Session,Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 Session ID,就得不 ...

  3. 启动go服务_内网穿透工具 FRP公网服务端、内网客户端快速配置文件说明

    内网穿透工具 FRP 公网服务端.内网客户端 frps.ini .frpc.ini 配置文件常用设置展示及说明 公网服务端 frps.ini 配置文件常用设置 公网服务端配置文件:frps.ini [ ...

  4. 微服务架构中10个常用的设计模式

    从软件开发早期(1960 年代)开始,应对大型软件系统中的复杂性一直是一项令人生畏的任务.多年来为了应对软件系统的复杂性,软件工程师和架构师们做了许多尝试:David Parnas 的模块化和封装 ( ...

  5. MVC设计模式、单体架构、前后端分离、微服务

    萌新程序员在学习web开发时一定对单体架构.前后端分离架构.MVC.微服务这几个名词不陌生,想要搞清它们之间的关系,但互联网的信息分散杂乱,有些文章之间甚至还互相冲突. 我也迷迷糊糊,但本着刨根问底的 ...

  6. 微服务的好处与弊端_《微服务架构设计模式》-学习总结07

    本篇主要总结第七章:在微服务架构中实现查询 在微服务架构中查询数据的挑战 何时以及如何使用API组合模式实现查询 何时以及如何使用CQRS模式实现查询 微服务架构中,查询通常需要检索分散在多个服务所拥 ...

  7. 四种常用的微服务架构拆分方式

    微服务架构并无标准架构,不然什么架构师大会也不会各个系统架构百花齐放了.虽然没有固定的套路,却有一些经验,今天就来做一个总结. 基于角色拆分 这种拆分方式常见于基础设施以及其PaaS层的架构,比如服务 ...

  8. 微服务架构技术调研<3>--微服务架构实践

    引言: 由于公司商业上有实打实的需求和场景,倒逼产品开始思考架构升级,以适应这种商业环境的快速变化.架构师在进行技术选型或者架构升级前,需要做大量技术调研.竞品分析,<微服务架构综述>则是 ...

  9. 华为架构师8年经验谈:从单体架构到微服务的服务化演进之路

    本次分享的技术大纲如下: 传统应用开发面临的挑战 服务化实践 服务化不是银弹 服务化架构的演进方向 一 .传统应用开发面临的挑战 挑战1-- 研发成本高 主要体现在如下几个方面: 代码重复率高 在实际 ...

最新文章

  1. POJ 2594 Treasure Exploration (可相交最小路径覆盖)
  2. 第三次学JAVA再学不好就吃翔(part95)--Collections工具类
  3. gRPC-rs:从 C 到 Rust 1
  4. c语言条件语句示例_PHP中的条件语句和示例
  5. 第四章 第四节 per_cpu
  6. stm32 r8025
  7. android style theme
  8. 项目日报模板_知名房企的精细化施工管理,从项目日常到施工图,全方位涵盖...
  9. 怎样避免使用手机群控系统被封号的情况
  10. RT-Thread (3) 为RTT增加SP485驱动||RTT UART设备
  11. 【原创】PHP 邮件自动发送(QQ邮箱)
  12. Linux双独立显卡SLI,完美的解决方案:双显卡不需要使用双水冷Tt提供SLi冷却解决方案...
  13. rebuild node-sass npm install
  14. FastBond智能可穿戴之智能手表原型设计(MAX32660+SHT40+ADXL345+OLED+RTC)
  15. python科学计算最佳实践_Python科学计算最佳实践:SciPy指南
  16. DBA系列-推荐书籍(中文版本)
  17. Gate用户手册(二)怎样运行Gate以及可视化
  18. 【记录十九】JCR2.0 节点类型
  19. 大二期末作孽(SpringBoot+Vue前后端分离博客社区(重构White Hole))
  20. 中文路径刻录Linux总是损坏,linux下刻录光盘所发生的问题及解决办法

热门文章

  1. 科大星云诗社动态20210514
  2. python 飞机大战小游戏
  3. 最简单的方式实现一棵二叉树
  4. java中的this什么作用
  5. git clone -b master https://github.com/hyperledger/fabric-samples.git
  6. 关于Layout Weight一些使用技巧
  7. ArrayList笔记
  8. 适配器模式(为被封装对象提供不同的接口)
  9. DM8168_ETV_V1.1开发板mount主机常见问题
  10. 2018百度之星程序设计大赛 - 资格赛 hdu6345(找区间最小值)