InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

微服务架构成功之路

  • 2015-07-11
  • 本文字数:2356 字

    阅读完需:约 8 分钟

近年来,在软件开发领域关于微服务的讨论呈现出火爆的局面,有人倾向于在系统设计与开发中采用微服务方式实现软件系统的松耦合、跨部门开发;同时,反对之声也很强烈,持反对观点的人表示微服务增加了系统维护、部署的难度,导致一些功能模块或代码无法复用,同时微服务允许使用不同的语言和框架来开发各个系统模块,这又会增加系统集成与测试的难度,而且随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来越复杂。尽管一些公司已经在生产系统中采用了微服务架构,并且取得了良好的效果;但更多公司还是处在观望的态度。

Christian Posta 是 Red Hat 的中间件专家与架构师、开源爱好者,同时也是 Apache ActiveMQ、Apache Camel、Fabric8、HawtIO 等诸多项目的提交者。近日,Posta撰文谈到了微服务架构的一些成功故事,揭示出微服务架构成功的内在表现,同时还谈到了对成功的微服务架构的理解。

我们都很清楚微服务架构所带来的好处,很多人也建议我们为何以及如何要采用微服务;同时,我们也知道诸如Amazon、Netflix 以及Gilt 等公司成功应用微服务架构的故事。不过,就像我之前在文章 You’re not going to do microservices 中所谈及的那样,正确使用微服务,并且让公司或组织成功实施微服务是一件非常困难的事情。决定使用 Dropwizard/SpringBoot/WildflySwarm/Docker 并不意味着你就在使用微服务,可以说二者之间并没有什么直接的关系。事实上,过早地将应用或服务拆分为更加小型的服务是需要采取一种折衷的办法的。在这一点上,我与 Martin Fowler 的观点是一致的。

很多开发团队认为微服务架构风格要比单体架构更加优秀。不过,还有一些团队认为微服务会导致生产力的降低。就像其他任何架构风格一样,微服务也会带来成本和收益。要想做出明智的选择,你需要对其有清晰、透彻的理解,然后将其应用到具体的上下文中。

微服务带来的好处有:

  • 明确的模块边界:微服务强化了模块化结构,这对于大型系统来说尤为重要。
  • 独立部署:简单的服务很容易部署,由于是自治的,因此当某个模块本身出现问题时一般不会导致系统崩溃。
  • 技术多样性:借助于微服务,你可以混合使用多种语言、开发框架和数据存储技术。

微服务的代价有:

  • 分布式:分布式系统难以编写,远程调用会慢一些,并且总是存在着失败的风险。
  • 最终一致性:对于一个分布式系统来说,保持强一致性是非常困难的事情,这意味着每个组件都需要管理最终一致性。
  • 运维复杂性:你需要一个成熟的运维团队来管理大量的服务,而这些服务部署的频率可能会很高。

因此,当我们在一些业界大会上,在开发者博客上谈论微服务的成功故事时,我认为我们并没有抓住要点。是否成功与采用了什么依赖管理器、类加载器结构、Linux 容器或是云服务并没有直接的关系;而是与一些更加基础、与 Docker/Kubernetes/SpringBoot 相比不那么潮的东西有关。

真正的成功?

微服务架构真正的成功之处在于组织该如何拥抱小型、跨职能团队,并且鼓励扁平、自我管理的组织,他们可以以传统组织结构无法匹敌的速度进行创新,并且快速成功。

两披萨团队

我曾经有幸与 Amazon 团队一同工作,从而了解到了他们的组织文化。Amazon 的一个规定是组织团队必须要遵循“两批萨”原则。简单来说就是一个团队的成员有两个披萨就能吃饱了。这背后的想法可以通过 Amazon CEO Jeff Bezos 的话总结为:

管理者:我们需要保持团队间更多的沟通和交流。 Bezos:不,沟通是件非常糟糕的事情。

要想打造并保持自治、创新性的团队,你不需要“更多的沟通”,你需要的是“有效的沟通”。说起来容易做起来难,不过首先我们就需要确保团队的人数要足够少。这样,团队成员之间就能更好地了解彼此,他们会形成良好的人际关系、保持信任和动力。J Richard Hackman 研究了团队与集体动态,发现成员之间的沟通链会随着团队成员的增加而增加。

跨职能

我觉得下面这句话能够很好地说明为何一个团队应该是跨职能的:

当将人们从一系列行为动作中分离开来时,坏行为就出现了。

创建更多的职能部门会产生“鼓励坏行为”的结果。比如说,开发者应该关注于编写并交付高质量代码这件事。他们还应该考虑非功能方面,如安全、性能、可伸缩性、高可用等等。不过,如果开始创建应用数据库团队、QA 团队,或是单独的运维团队,那么开发者就只会关注于“重要的事情”,将其他事情抛给别人。

下面这些话熟悉吗?

  • 我没时间测试,QA 会做的。
  • 我无需了解数据库的工作方式,DBA 会做的。
  • 我只负责写代码,运维会搞定高可用的。

与上面做法相反的是形成跨职能团队:让一个团队的人搞定数据库、运维和测试等工作,或是让一个人担任多个角色。这正是当下很多互联网公司的做法,如 Amazon、Netflix、Facebook 和 Google 等。通过这种方式,你就会负责团队的一切事情,没有机会将事情抛给别人去做。

SOA 与微服务

重申一次,我认为我们所听到的关于微服务的成功故事不一定是技术上的成功,我们实际上冒着抓不住要点的风险,并且可能会重蹈 SOA 的覆辙。SOA 的很多原则都是微服务的基石,不过 SOA 并没有走向终点。很多人使用 SOA 的原因就是为了用而用;厂商、委员会与协会一起过来告诉我们什么是我们“需要”的。最终,SOA 也提出了关于组织结构的相同目标,不过却迷失在了 WS-* 规范中。

开源社区

仔细想想,你会发现这些小型、跨职能的微服务团队看起来像是小型开源项目一样。大家一起工作,不怕与别人分享自己的观点;每个人都热衷于构建高质量软件,由于团队规模足够小并且聚焦,因此可以构建出模块化软件。他们是开发者、测试、运维,一切工作都有着相同的目标,而这正是 DevOps 与微服务的真谛之所在。

亲爱的 InfoQ 读者,你对于近几年来火热的微服务讨论有何看法,你认为在当下所从事的项目中有必要采用微服务架构么?采用微服务架构会对当前的开发、测试与运维带来那些变化,欢迎写下你的观点与大家一同交流。

活动推荐:

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

2015-07-11 14:205691
用户头像

发布了 88 篇内容, 共 254.8 次阅读, 收获喜欢 6 次。

关注

评论 2 条评论

发布
用户头像
吹牛吧,张龙,卷钱跑路的货色
2020-05-15 13:33
回复
没有更多了
发现更多内容

OneBlock | 区块链人才聚集地,面向全球的Substrate 开发者社区

One Block Community

技术社区 #区块链#

真的是最全的一致性hash环讲解了

Java工程师

Java 架构 分布式 算法 hash

如何在 Zadig 上玩转自动化测试,为业务质量保障提供最大价值

Zadig

云原生 软件测试 CI/CD 软件交付

招聘 | 多家区块链项目招募开发者!

One Block Community

区块链 招聘 波卡

CESS:波卡生态去中心化数据存储的未来

One Block Community

区块链 云存储 去中心化存储 CESS

Moonbeam 漏洞赏金计划,最高奖金 100 万美金!

One Block Community

区块链 波卡 Moonbeam

低代码平台常见的安全隐患,J2PaaS低代码平台如何解决?

J2PaaS低代码平台

低代码开发 低代码平台 企业级低代码平台 J2PaaS低代码平台

大数据培训-Hive高频面试题分享

@零度

hive 大数据开发

一文搞懂Netty发送数据全流程 | 你想知道的细节全在这里

bin的技术小屋

网络编程 Netty Java’ 4月月更 Reactor多线程

TiDB 6.0 发版:向企业级云数据库迈进

PingCAP

FinClip 与 uniapp:轻应用平台与前端开发框架

FinClip

为什么都是技术合伙人被踢出局?

方云AI研发绩效

团队管理 研发管理 CTO SaaS

运维人必知必会的Zabbix核心命令

博文视点Broadview

EMQ 映云科技 & 阿里云推出“一站式工业数字化解决方案”,共建产业数据湖生态圈

EMQ映云科技

阿里云 开源 物联网 IoT emq

写作社区 2 周年,全员狂欢燥起来!

InfoQ写作社区官方

热门活动 InfoQ写作社区2周年

恒源云(Gpushare)_新功能上线,你确定不进来看看?

恒源云

GPU服务器 GPU算力

Pulsar—新一代云原生消息平台

中原银行

分布式 pulsar 中原银行 分布式消息

Java培训-怎样通过 Bucket4j 提供速率限制

@零度

JAVA开发 Bucket4j

MacOS 系统如何把PHP版本升级到 7.4或者更高的版本呢,今天教程来啦

CRMEB

能让程序员涨薪5K的Hystrix核心工作原理,你真的不打算学吗?

Java工程师

Java 程序员 互联网 微服务 科技

行云管家荣膺《中国网络安全行业全景图(第九版)》收录

行云管家

网络安全 行云管家 安全牛

解决两大难题,TDengine 助力亿咖通打造自动驾驶技术典范

TDengine

数据库 tdengine 物联网

3分钟了解Vue开发小程序的技术原理

FinClip

领域驱动设计(DDD)理论与方法

Java工程师

Java 程序员 互联网 DDD 架构设计

波卡动态 | Moonbeam 上第一个3D NFT项目宣布合作

One Block Community

区块链 以太坊 polkadot 波卡 Moonbeam

2022年3月国产数据库大事记-墨天轮

墨天轮

数据库 TiDB 国产数据库 KingBase gbase8a

CityClub 北京站马上开始!线下沙龙等你来!

InfoQ写作社区官方

热门活动

Redis Stream 专为队列而生,别再用 List 实现队列了

码哥字节

Redis Stream Redis 数据结构 4月月更

幸运哈希值竞猜游戏系统开发方案

薇電13242772558

区块链 哈希值

基于云服务器ECS搭建网页游戏《浪剑天下》

阿里云弹性计算

玩转ECS 游戏服务器

如何在云端重塑内容生产?来看这场虚拟人主持的发布会

阿里云视频云

阿里云 音视频 视频剪辑 智能生产 视频云

  • 扫码添加小助手
    领取最新资料包
微服务架构成功之路_SOA_张龙_InfoQ精选文章