GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

微服务实战经验分享

2014 年 10 月 15 日

在过去的几个月里,我们已经听到很多关于微服务的优缺点了。微服务真的只是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:211781
用户头像

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

关注

评论

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

公安一体化指挥调度平台建设解决方案,应急指挥调度系统开发

WX13823153201

「Adobe国际认证」了解Adobe Photoshop,图像大小和分辨率教程

Adobe国际认证

限流与Guava RateLimiter原理解析

千珏

Java 微服务 限流算法 Guava 令牌桶

hello world

jkl

智慧党建三维云展厅可视化

一只数据鲸鱼

数据可视化 智慧党建 三维可视化

Amazon Route 53 Resolver 落地中国区,轻松玩转私有域名互访不是梦!| 新服务上线

亚马逊云科技 (Amazon Web Services)

STM32电源框图解析(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的区别)

不脱发的程序猿

嵌入式 stm32 单片机 电源框图解析

前端开发:Promise的使用

三掌柜

5月日更

NumPy之:理解广播

程序那些事

Python Numpy 程序那些事

Nginx负载均衡配置误区

运维研习社

nginx 负载均衡 5月日更

iMazing比iTunes好用在哪些地方

懒得勤快

浅入Spring Cloud架构

Damon

微服务 微服务框架 微服务切分 5月日更

源码解析之Seata项目中的分布式ID生成算法

Coder的技术之路

分布式 分布式ID

“云演唱会”也有仪式感!能检票、可转赠,爱奇艺“云票”如何重构线上购票逻辑

爱奇艺技术产品团队

揭秘 Amazon Go 无人商店是如何炼成的!

亚马逊云科技 (Amazon Web Services)

HuskyLens人工智能摄像头

不脱发的程序猿

人工智能 智能硬件 AIOT HuskyLens 人工智能摄像头

嵌入式程序调用函数的内部过程和机制

不脱发的程序猿

单片机 嵌入式程序 嵌入式设计

CampusBulider(模模搭)学习笔记5:创建自定义建筑

森友小锘

前端 可视化 3D 3D可视化 数字孪生

Amazon Glue 版本 2.0 将作业启动时间缩短了 10 倍,现已全面开放!

亚马逊云科技 (Amazon Web Services)

anyRTC 六周年 打造全网最低音视频价格

anyRTC开发者

音视频 WebRTC RTC sdk

数据和分析领导者为在这个不断变化的世界中取得成功而需要采取的三项行动

Geek_bacee5

Gartner 数据和分析领导者 信息技术研究 企业数据化转型 魔力象限

Windows自带的功能这么好用,还装什么第三方软件?

彭宏豪95

windows 5月日更

编程思考路径2条

顿晓

5月日更 思考路径

流量变现业务概论——Linkedmall流量变现业务初步分析及系统设计概要

关贺宇

关于组件,你真的了解么?

架构精进之路

组件化 5月日更

【LeetCode】子数组异或查询Java题解

HQ数字卡

算法 LeetCode 5月日更

华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)

华为云开发者社区

数据仓库 华为云 数据迁移 GaussDB(for Redis) PB级数据库

怎么进大厂?166位Java工程师的大厂面试经验分享

北游学Java

Java 面试 大厂

如何高效地存储与检索大规模的图谱数据?

华为云开发者社区

存储 知识图谱 检索 图结构 表结构

堪称完美!淘宝内部百亿级Java高并发系统架构设计PDF手册分享

Java架构追梦

Java 架构 高并发 淘宝网 亿级架构设计

云图说|不要小看不起眼的日志,“小日志,大作用”

华为云开发者社区

运维 日志 云日志服务 安全监控审计

微服务实战经验分享-InfoQ