写点什么

微服务的漫长历史

  • 2016-11-28
  • 本文字数:1165 字

    阅读完需:约 4 分钟

与许多人认为的不同,微服务的概念已有相当长的历史,SOA(面向服务的体系架构)也不是 90 年代才被提出的。在最近举办的伦敦微服务大会上, Greg Young 就微服务核心概念的前世今生进行了演讲。其中他表示,在过去的50 年间,我们一直在使用服务这一概念背后的核心思想。

Young 引用了 Martin Fowler 微服务主要特性的描述,最重要的是其独立替换系统中单个服务的能力、对业务能力的组织以及智能端点(smart endpoint)与哑管道(dumb pipes)的使用,Young 提到的这些特性SOA 也同样具备。

Young 提及,在 1970 年代最初提出的面向对象模型中,可以将一个对象理解为一个小型的计算机,用户通过向它发送信息使其工作。同时期的参与者(Actor)模式也是基于相似的概念,将参与者作为一个小计算机,用户向参与者的邮箱发送信息。它们都是微服务核心概念的前身,虽然使用的工具或消息传递方式不尽相同,但是内在的思想并没有改变。如今我们认为SOA 已经失败了,而微服务将会成功,但Young 表示SOA 的基础概念并没有任何错误,微服务的优点在SOA 架构中也早已存在。

回顾近50 年的经验教训,Young 引用了分布式计算第一定律来概括:如果不是真正需要就不要让系统分布式。将应用分成多个服务,再将它们部署在同一台服务器上,甚至在同一个进程上,这样做并没有不对。Young 表示,大部分系统,尤其是小型业务系统,并不需要分布式来提供可伸缩性,但是可以通过分布式来提升可用性。

我们真正需要的是服务间的隔离。当各个服务在同一服务器的各自进程中运行时,我们可以确保服务间遵循相互的协议。进一步隔离的方式是将各个服务运行在独立的Docker 容器中。这样减少了各服务间内容的共享,从而达到更好的隔离性。再进一步可以将每个服务运行在独立的节点上。

选择一定层级隔离的原因之一是为了处理相关的错误。当在同一个进程中运行所有的微服务时,如果进程重启,所有的服务会被停止。而将服务运行在各自的进程中的话,单个进程重启只会影响一个服务。当然重启服务器会停止所有服务,所以将各个服务部署在独立的服务器上或双服务器双实例,会大大减少重启给服务可用性带来的影响。

当然每一种隔离层级都伴随着相应的成本。使用一台服务器多个进程相对于每个服务一个节点更容易实现。这其中并没有谁对谁错,有的只是各因素间的权衡。在提升系统的隔离级别的同时,你也会相应增加系统的成本和复杂度。Young 同时引用 Simon Brown 的话:

如果你无法在单进程的独立应用上实现构建,那你如何确信在引入网络通信后问题可以得到解决?

Young 认为,使用不同的隔离策略的一个优势是我们不需要提前做出一些决定,我们也不需要保持生产环境和开发环境使用一样的隔离级别。他表示这也是使用微服务架构的一个主要好处。

明年的伦敦微服务大会将与2017 年11 月6 至7 日举办。

查看英文原文: The Long History of Microservices

2016-11-28 18:009152
用户头像

发布了 41 篇内容, 共 12.0 次阅读, 收获喜欢 2 次。

关注

评论

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

《一条select 语句在TiDB Server层都发生了什么》

TiDB 社区干货传送门

管理与运维

一面高频vue面试题

bb_xiaxia1998

Vue

react源码中的协调与调度

flyzz177

React

新思科技推出适用于IntelliJ集成开发环境的Code Sight标准版解决方案

InfoQ_434670063458

软件开发 代码 新思科技

JVM 组成结构分析

andy

问:React的useState和setState到底是同步还是异步呢?

beifeng1996

React

TiDB 生产集群与加密通讯TLS的辛酸苦辣 - 开启篇

TiDB 社区干货传送门

集群管理 管理与运维

【IT运维小知识】如何通俗理解节点、集群以及主从?

行云管家

高可用 高可用HA

如何在填报场景中使用数据绑定获取数据源

葡萄城技术团队

千锋1024程序员节锋企优联开启认证考试大咖直播,为学员开启认证学习秘籍

千锋IT教育

从React源码角度看useCallback,useMemo,useContext

goClient1992

React

JVM 浅析(二)

andy

每日一题之请描述Vue组件渲染流程

bb_xiaxia1998

Vue

什么是分布式数据库?我不信,看完这篇你还不懂!

TiDB 社区干货传送门

数据库架构设计 数据库前沿趋势

等保备案和通信网络单元定级备案的五大区别讲解

行云管家

等保 等级保护 等保备案

腾讯前端经典react面试题汇总

beifeng1996

React

嵌入式 Linux 入门(七、Linux 下的环境变量)

矜辰所致

Linux 环境变量 10月月更

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

react源码中的生命周期和事件系统

flyzz177

React

干货好文 | 初探MySQL迁移到ClickHouse

沃趣科技

MySQL Clickhouse

顶级的计算机科学家是如何养成的?

博文视点Broadview

从React源码来学hooks是不是更香呢

goClient1992

React

【web 开发基础】PHP 循环结构之 for 循环 -PHP 快速入门 (19)

迷彩

for循环 10月月更 web开发基础 PHP基础

MySQL高级:explain分析SQL,索引失效&常见优化场景

程序员小毕

Java MySQL 数据库 后端 索引

Nginx浅析

andy

云原生安全系列 1:零信任安全和软件开发生命周期

HummerCloud

云原生 安全 云原生安全 安全软件开发生命周期 10月月更

负载均衡

andy

问:你是如何进行react状态管理方案选择的?

beifeng1996

React

一次TiDB GC阻塞引发的性能问题分析

TiDB 社区干货传送门

性能调优 管理与运维 故障排查/诊断

「Go工具箱」go语言csrf库的使用方式和实现原理

Go学堂

golang 开源 程序员 CSRF 10月月更

微服务的漫长历史_SOA_Jan Stenberg_InfoQ精选文章