写点什么

方面和服务,差别大吗?

  • 2017-03-23
  • 本文字数:1958 字

    阅读完需:约 6 分钟

三年前,Arnon Rotem-Gal-Oz探讨了在当时看来还比较新颖的话题微服务以及它们与 SOA 的关系,并提出了有关 Nanoservices 的问题。在近日发表的一篇文章中,Arnon 仍然认为,微服务可能不是某些人所认为的灵丹妙药,它可能是一种营销活动:

在我看来,能说明有关微服务的整个宣传是一种顾问式营销活动的其中一个证据是,一个东西要么是微服务,要么是单体,好像没有东西是介于两者之间。另一方面,现如今,似乎所有通过一个端点交付并运行在自己进程中的一切都被称为微服务。

也许他说的有点道理,但显然,其他人看到的是一系列的方法,而不是这种二元划分。例如,Gartner 等就在谈论“迷你服务(Miniservices)”,其定义如下:

迷你服务是真正的 SOA(不像微服务),可以包含许多微服务。它位于微服务之上,是服务的一种“外延方法(external approach)”,而微服务关注的是“内在尺度(internal scale)”,从根本上改善外部功能。

当然,还有其他类似迷你服务的概念,如所谓的 Microlith 。让我们回到 Arnon 的观点,他担心的是那个推断,即如果你开发的不是一个微服务,那么你的服务就会存在某种程度的缺陷或者是一个单体:

[…] 如果每个独立部署的组件都是一个微服务,并且需要具备微服务的所有特性,那么生活真得就太复杂了。这些特性、隔离 & 自治需要付出艰苦的工作来避免 API 耦合、事务耦合、时空耦合、内部结构耦合,等等。不过,我们现在的情况是,什么都叫微服务,即使它不完全符合微服务的原则。

对于他的文章,其中有一位评论者指出,我们过去也曾多次报道过,REST 存在同样的情况:

术语微服务和 REST 一样失去了原来的意义。(几乎)每个通过 http 使用 json 的 API 现在都被称为 REST,同样地,几乎每个服务都被称为微服务。

Arnon 认为,服务的这种二元方法(要么是好的微服务,要么是不怎么好的服务)是反生产力的:

最好是承认,服务就是这些围绕业务能力构建的东西,是通过端点提供并受外部策略限制的自治性 API(或契约),诸如此类。另一方面,我们又需要将服务分解成更小的半独立组件,它们遵循大部分原则,并且具有独立部署、开发周期这样的优点,但仍然可以共享部分依赖,尤其是数据结构和存储。我将它们称为半独立组件“方面(aspects)”。

他继续写道,区分方面和服务可以确保不同服务的不同方面仍然保持服务边界。将服务拆分成方面有助于保持服务的灵活性和简单性,因为随着服务规模和复杂性的提升,它们可能会背离微服务当前的定义。Arnon 举了一些真实世界的例子,那是他参与研发的一个系统,其中有些服务比较小(Arnon 并没有给出“小”的定义,也许是根据代码行数),只有一个方面。不过,他们也有包含多个方面的更复杂的服务:

一个方面负责将事件数据接收到服务,执行转换和“数据梳理(data munching )”(构建新数据和现有数据的关系图),另一个方面负责处理用户修改数据,而第三个方面提供了一个查询 API(通过 graphQL),用于访问那份数据。每个方面都有自己的生命周期,每个方面都是独立部署的,这些方面使用了多种语言(Scala 和 JavaScript),但是,一方面它们会共享数据,另一方面他们会保持和其它服务设定的界限。

按此情形,这些方面听上去很像微服务,即使它们是一起部署并作为一个相关单元来运营,但不管怎么样,微服务不会孤立存在。也许,整体的架构方法和 Martin Fowler 等人以前探讨的 Strangler 模式类似。Arnon 总结道:

控制耦合水平并保持服务界限很重要。理解什么是方面,什么是服务,有助于控制整体架构,确保它不会成为一个错综复杂的相互依赖网络,并通过使用较小的组件提高灵活性,缩短周转时间。

虽然名称不同,但不管“方面”是不是实际上的“微服务”,至少有另外一个人( Udi Dahan )也得出了类似的结论,虽然他对这些软件组件的叫法有点不同:

我一直使用术语自治组件(AC)来描述包含一个服务的软件程序包,它可能会部署为一个单独的端点,也许会和其它 AC 托管在一起。在构建复合 UI 时,这种共同托管模型最有用。

在 Udi 的定义中,自治是指它们不依赖于其它 AC,关于这一点,他在多年之前讨论SOA 时就做过说明。幸好,几年之后,Udi 又写了更多关于 AC 和微服务的内容,他写道:

微服务差不多可以和自治组件同样看待。为什么是“差不多”?因为自治组件(AC)不一定是一个物理部署单元,经常,我们会看到多个 AC 在同一个物理进程中部署。其中一个最常见的情况是,在 Web 前端作为一个复合 UI 构建。在同一个 Web 服务器进程中,我们会看到来自多个服务的组件。

方面 / 自治组件和微服务之间的差别似乎是单体架构和纯粹的微服务架构之间一个有益的过渡,然而,由于微服务没有一个标准的定义,所以这些组件本身也被说成了微服务。也许其他人已经这样做了,但并没有像我们这样明确地说出来。

查看英文原文: Aspects and Services - an Important Distinction?

2017-03-23 19:0011055
用户头像

发布了 1008 篇内容, 共 433.6 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

“陆海空”立体组网!福建移动助力鹭岛打造5G-A全面示范之城

极客天地

【行业知识】绿色能源产业使用堡垒机的原因看这里!

行云管家

网络安全 等保 等保测评 等保评测

【等保小知识】未联网的独立单位网络是否需要等保备案以及定级?

行云管家

等保 等保测评 等保2.0

详解金仓数据库KFS双轨并行不停机方案

金仓技术

KingbaseES 金仓数据库 KFS KES

OneNote Embedded 文件滥用检测

天翼云开发者社区

Onenote

“AI赋能·共享城市安全”2025杭州安防产品展·浙江安博会

AIOTE智博会

深入研究:Shopee商品列表API接口详解

tbapi

shopee API shopee商品列表接口 shopee商品采集

TiDB 企业管理器:TEM v3.0.0 体验

TiDB 社区干货传送门

五一假期放肆嗨,ROG电竞显示器高刷臻品畅玩游戏!

新消费日报

告别手动填参数!Apipost黑科技让接口调试效率翻倍

数据追梦人

关于我的第一个产品!

Immerse

RapidFS 为昆仑芯 3 万卡集群加速,国产化平台 TiB 级吞吐让数据随叫随到

Baidu AICLOUD

分布式缓存 JuiceFS #存储加速

基于 MCP 的 AI Agent 应用开发实践

字节跳动开源

开源 AI Agent MCP 模型上下文协议 Agent TARS

安徽建工集团上线数智管控平台 驱动高质量发展

用友BIP

什么是财务管理系统?一文看清其功能及作用!

积木链小链

数字化转型 智能制造

如何检测 Sliver C2 框架活动

天翼云开发者社区

sliver

伊克罗德信息亮相亚马逊云科技合作伙伴峰会,以ECRobot 智能云迁移助手在GenAI Tech Game比赛勇夺金牌!

伊克罗德信息科技

云计算 AI 亚马逊云

百度文库、百度网盘联合发布「GenFlow超能搭子」、「AI笔记」,打造“聪明又能干”的超级生产力

极客天地

对比2款国产远控软件,贝锐向日葵更优

科技热闻

我的内存去哪儿了?

TiDB 社区干货传送门

监控 TiKV 底层架构

告别重复繁琐!Apipost参数描述库让API开发效率飙升!

数据追梦人

PingCAP “一号员工”唐刘:回顾我与 TiDB 的十年成长之旅

TiDB 社区干货传送门

最终一致性正在成为主流:现代分布式应用的数据管理新范式

tapdata

数据一致性 数据同步 实时数据 最终一致性 强一致性

用友BIP企业AI全栈云:沉浸式体验六大智慧采购新场景

用友BIP

详解金仓数据库KingbaseES主备流复制集群数据块恢复神器auto_bmr

金仓技术

KingbaseES 金仓数据库

面对开源大模型浪潮,基础模型公司如何持续盈利?

Baihai IDP

开源 AI 商业模式 基础模型 LLM

百度文库、百度网盘联合发布「沧舟OS」内容操作系统,开放MCP Server,华为、三星、牛听听成首批接入客户

极客天地

APP和小程序需要注册域名吗?

国科云

数智化转型进阶之路:从数据底座到业务增长,企业需要怎样的数据库支撑?

TiDB 社区干货传送门

数据库架构选型

倒计时!中关村科学城工业软件创新暨开源峰会28日启幕,会议亮点抢先看

极客天地

百度优选成全球首家支持MCP的电商平台

极客天地

方面和服务,差别大吗?_SOA_Mark Little_InfoQ精选文章