写点什么

微服务实战经验分享

  • 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:212511
用户头像

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

关注

评论

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

惊呆了!有了这份MySQL笔记手册,胜过看10本书

冉然学Java

MySQL 编程 程序员 分布式 构架

张宏江谈AI创业:人工智能亟需工程化,创业者大有可为

硬科技星球

用小程序打造超级App,助力社交电商扩大“留量池”

Speedoooo

小程序 社交电商 超级app 用户留存

Louvain算法在反作弊上的应用

百度Geek说

大数据 算法

一加是oppo旗下的品牌吗?

Geek_8a195c

Seata-php 半年规划

SOFAStack

php 开源 分布式 框架 seata

面试官问:如何优化高并发相关的业务,你能回答的上来吗?

CRMEB

教你如何轻松实现多队伍排队管理【必看】

天天预约

微信小程序 排队 排队工具 #SaaS应用

数据构造那些事儿

转转技术团队

测试左移 测试数据构造 测试提效

转转风控「违禁物品识别」 背后的那些事儿

转转技术团队

人工智能’

数字人民币如何影响传统支付?支付厂商数字人民币应用案例征集

易观分析

金融 数字人民币 传统支付

React Native框架与小程序混编的方案

Geek_99967b

小程序

浏览器、负载均衡 、进程内部层...那些你需要掌握的多级缓存

华为云开发者联盟

缓存 前端 浏览器

跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

华为云开发者联盟

人工智能 图像处理 图像 三维

SpringBoot进阶(叁):Spring Boot启动过程分析

No Silver Bullet

spring-boot 8月月更

云原生(十九) | Kubernetes篇之Kubernetes(k8s)网络

Lansonli

云原生 k8s 8月月更

ITIL4实用指南 | ITSM的未来属于敏捷

龙智—DevSecOps解决方案

ITSM ITSM解决方案

汉诺塔(递归+ 非递归版)

Five

算法题 8月月更

Android进阶(十七)Android 布局

No Silver Bullet

android android布局 8月月更

今天4点,开发者关心的SysOM 操作系统运维系列直播又来了!| 第 42 期

OpenAnolis小助手

操作系统 系统运维 sig 龙蜥大讲堂 SysOM

买家手册:企业在选择 SBOM 供应商时需要注意什么?

SEAL安全

DevSecOps 开源软件供应链 软件物料清单 SBOM 软件供应链安全

程序员常用的IDE工具,你了解哪些?

Speedoooo

小程序 ide 开发者工具 前端开发工具

秒验丨使用简介与应用创建

MobTech袤博科技

android iOS SDK 秒验

干净代码(Clean Code)实践如何帮助您留住开发人才

龙智—DevSecOps解决方案

代码质量 代码安全

传媒数字化转型思考:小程序是音视频内容的更优载体技术

Speedoooo

小程序 数字化转型 小程序生态 传媒

龟兔赛跑:如何使用TortoiseSVN客户端和P4EXP

龙智—DevSecOps解决方案

git svn Subversion

ARMS助力羽如贸易打造全链路可观测最佳实践

阿里巴巴中间件

阿里云 云原生 可观测 Arms 客户案例

技术分享| 应急指挥调度平台需要这些技术支撑

anyRTC开发者

音视频 快对讲 语音对讲 调度系统 视频对讲

一文读懂Web3 结算协议 Zebec Protocol 的商业模式与发展前景

西柚子

会场及展位变更通知 | GOPS全球运维大会地址更改,龙智展位更换至#106

龙智—DevSecOps解决方案

gops GOPS全球运维大会

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