在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

微服务实战经验分享

  • 2014-10-15
  • 本文字数:1330 字

    阅读完需:约 4 分钟

在过去的几个月里,我们已经听到很多关于微服务的优缺点了。微服务真的只是SOA 吗? 微服务确实有助于进行复杂系统架构吗?不论大家怎么说,有一些公司已经转向或正准备转向基于微服务的方法了。他们在实践过程中分享自己获得的正面或负面的经验,是很自然的事。最近, Droplet 公司的 Tom Livesey 分享了他们的经验。为了给讨论增添一些背景信息,Tom 首先介绍了 Droplet 的需求:

就像很多初创公司希望快速推出初始产品一样,刚开始我们用一个单片 Rails 应用来处理从支付到推送通知在内的所有功能。尽管当时还不需要扩展规模,但我们想,如果把一些功能分离出来,也许有好处。于是,我们逐渐分离出了一个个的功能,现在我们有 20 个服务,他们大多采用 Sinatra 或 Go。

Tom 的文章谈到了他们在开发过程中获得的七点经验教训。

别做太多:微服务的“微”字是关键。我觉得,在关于代码规模与行数方面,没有硬性规定;你要认真考虑的是,服务做的是什么,功能是否精简且具有良好的定义。

这一点是值得注意的,因为我们已经听到,有些人认为微服务就一定要规定代码量,它们甚至进一步考虑新建一个术语,叫纳米服务。接着,Tom 提到,他们决定把所有能发布的都发布出来:

为了处理异步事件(比如发送电子邮件和推送通知),有必要采用某种消息队列机制,从而允许其他服务来侦听某些事件,并做出相应的响应。[…] 我们的原则是,不论一个功能对系统中的其他部分来说有多么讨厌或多么微不足道,能发布就发布出来。发布(publishing)相当容易,发布者不用关心有多少订阅者对这个事件感兴趣,只需触发,其他都不用管。这一点非常强大,令微服务能够以极快的速度被构建与部署

关于微服务与数据,Tom 这样描述:

在我们构建新版 Droplet 时,我们花费几周时间增添了大约 10 个新服务。[…] 该服务侦听所有的账户更新事件,并对自己的数据做出相应更新。各个服务应该有自己的数据存储,在服务之间分享数据库不是一个好的做法;不过,缓存来自其他服务的数据是没问题的,只要有机制能保证缓存数据是最新的。

在过去的几年里,有关 SOA 与契约的讨论已经很多了。无论是契约成熟度模型契约版本化 SOA 模式,这些年来,契约一直是 SOA 开发(包括 Web 服务,REST 或其他实现方法)中的重要部分。Tom 也谈到了契约的重要性:

更改服务接口,意味着所有使用它的服务都要修改。受影响的可能是 1 个服务,也可能是 1000 个服务。所以,为了能够满足所有未来的客户方,你需要预先考虑,采用好的 API 实践。当然你也可以对 APIs 进行版本化,或采用版本化的数据表示,但预先做好设计更省事。

Tom 在文章的最后表示,Droplet 认为在微服务上的投入是值得的:

不可否认,采用微服务作为基础设施是需要一定投入的。虽然在 Droplet 我们最近才实现“收支平衡”,但我们确实体会到了好处——构建和部署服务简直太快太简单了。无论是简单地采用现有工具来解决问题,还是尝试新技术,都不会对系统中其余部分有大的影响——这点很棒。

就像在过去几年中,我们不断听到有关其他 SOA 与 REST 方法的经验一样,关于微服务的实战经验肯定会越来越多。这些经验可能会影响人们的选择。在必要时,它们也会促进最佳实践和模式的产生,从而推动微服务的发展。

查看英文原文: Lessons Learnt Using Microservices

2014-10-15 09:212759
用户头像

发布了 63 篇内容, 共 29.7 次阅读, 收获喜欢 11 次。

关注

评论

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

ipfs矿机挖矿原理是什么?ipfs矿机怎么搭建?

ipfs矿机挖矿原理是什么 ipfs矿机怎么搭建

模块7

Geek_ywh40v

Go- 数据格式解析

HelloBug

json xml Go 语言 gob

详解微信异步队列 MQ 2.0 的功能优化及拓展思路

OpenIM

Go- 文件读写-2

HelloBug

文件读写 Go 语言

应急响应篇:windows入侵排查

网络安全学海

黑客 网络安全 信息安全 WEB安全 应急响应

数据中台是什么?

奔向架构师

数据中台 数据仓库 9月日更

华为云GaussDB(for Redis)发布全新版本,两大核心特性正式亮相

华为云数据库小助手

性能调优 GaussDB GaussDB ( for Redis ) 华为云数据库

浪潮云洲×明风机械:让工业“哑设备”发声

云计算

网络攻防学习笔记 Day130

穿过生命散发芬芳

数据安全 9月日更

市值管理机器人特点简析,交易所刷交易量机器人搭建

量化系统19942438797

市值机器人 市值管理

运维工程师主要是做什么的?和网络工程师有啥区别?

行云管家

云计算 运维 网络 IT运维

实时移动通信中基于时空域联合约束的低照度视频增强技术

OpenIM

首发10万字Mysql实战文档,几乎涵盖你需要的所有操作|超清PDF

今晚早点睡

Java MySQL 程序员

王者荣耀商城异地多活架构设计

feitian

模块七作业

Clarke

Android | 音视频方向进阶路线及资源合集

轻口味

android 音视频 9月日更

玩转TypeScript 工具类型(上)

有道技术团队

typescript 大前端 客户端

如何从业务中抽取出通用性模板或框架-通用权限管理框架

张音乐

Java 设计模式 9月日更

博睿数据亮相 2021 服贸会,以智能运维赋能数字化体验

博睿数据

【VueRouter 源码学习】第六篇 - 路由匹配的实现

Brave

源码 vue-router 9月日更

架构1期模块七作业

五只羊

架构实战营

SEO行业的困境:转型还是夹缝中求生存

石头IT视角

CSS架构之tool层

Augus

9月日更

openLooKeng+Ranger+LDAP 认证鉴权能力演示

LooK

大数据 openLooKeng Ranger

弱网下的极限实时视频通信

RTE开发者社区

音视频 编码 极限视频通信

王者荣耀商城异地多活架构设计

木云先森

架构训练营

面试官:为何Redis使用跳表而非红黑树实现SortedSet?

Summer

Java 数据库 redis 学习 程序员

【数据库】数据库访问控制策略包含哪些?都一样吗?

行云管家

数据库 阿里云

为什么行业老大经常和老二合并?

石云升

市场垄断 9月日更

如何拥有自己的openLooKeng?超详细的安装配置指导看这里

LooK

微服务实战经验分享_SOA_Mark Little_InfoQ精选文章