9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

微服务的漫长历史

  • 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

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

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

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

关注

评论

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

关于MVCC,我之前写错了,这次我改好了!

艾小仙

Java MySQL 数据库 面试 MVCC

设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?

秦怀杂货店

设计模式 工厂模式 23种设计模式 工厂方法模式

效率工具分享-Quicker

十天、

效率 效率工具 工具 工具软件

用例画成流程图 - 第四章,第三讲总结

mas

现在与以前的你相遇在此刻,让二种不同的风格,创造未来你自己的手艺吧。

叶小鍵

得不到的永远在骚动——蔡格尼克效应

Justin

心理学 习惯养成 28天写作 游戏设计

华云·云场景应用详解|安超DCM给数据中心“做主”

华云数据

2021MWC上海召开丨5G与千行百业“和合共生”

浪潮云

云计算

几个小实践带你快速上手MindSpore

华为云开发者联盟

华为 AI mindspore 智慧终端 端边云

Python入门-位运算

123568

Python 入门 位运算

将上周写的用例画成流程图-第四章,第三讲

mas

索引失效的场景

new life

MySQL 索引性能

电商平台:收货地址

worry

电商平台

以AI之名 | 给千万级合同管理安上“AI”,华为商务经理工作量大解放!

华为云开发者联盟

人工智能 华为 合同 商务 合同管理

程序员成长第十五篇:编码的注意事项

石云升

程序员 28天写作 2月春节不断更

Elasticsearch入门,这一篇就够了

知南茶温暖

CPU高速缓存与极性代码设计

华为云开发者联盟

缓存 数据 cpu 存储

日记 2021年2月24日(周三)

Changing Lin

2月春节不断更

容器 & 服务:Docker应用的Jenkins构建

程序员架构进阶

Docker 容器 七日更 28天写作 2月春节不断更

工作中当你感觉焦虑的时候,该怎么办?

一笑

28天写作

(28DW-S8-Day4) 区块链里面2个核心问题

mtfelix

28天写作

设计模式之代理模式

Geek_7cf491

Java 设计模式 代理模式

浅谈Python中遇到extend和append,该怎么区别使用

莫陌默

Python 列表 函数

Spark Shuffle 内部机制(三)

hanke

大数据 spark 开源 数据

jupyter在加载pkl文件时报错ModuleNotFoundError: No module named 'pandas.core.internals.managers'; '的解决方法

无极限

Python Jupyter Notebook jupyter

Kafka.06 - 数据持久化介绍

insight

kafka 2月春节不断更

修改OpenCV一行代码,提升14%图像匹配效果

Smile

机器学习 OpenCV Python Turtle 图像处理

windows10+python3.8.0(anaconda)+MeCab安装总结

lauqasim

Python Mecab 日文分词

cobra-强大的CLI应用程序库

happlyfox

GitHub cli 28天写作 2月春节不断更 Go 语言

kafka consumer group

Eric

带你快速了解Flutter的发展和应用

anyRTC开发者

flutter 音视频 WebRTC 跨平台 sdk

  • 扫码添加小助手
    领取最新资料包
微服务的漫长历史_SOA_Jan Stenberg_InfoQ精选文章