AndyZhang&池建强
作者很懒,什么都没留下

1

文章/篇

9408

阅读/次

拜访信息

为了给您提供更快更好的服务,在获取作者联系方式前,想对您有个简单了解. 邀请您填写如下信息

提交成功

非常感谢您的配合,我们的作者会尽快通过您的微信,
请耐心等待~

微信号

15701235851

从电子邮件系统看微服务的建设

AndyZhang&池建强
2018-02-20 · 20:28
[ 亿欧导读 ] 2017年很多企业服务公司都提到自身的业务将调整向微服务,这个概念引起好奇,微服务究竟是去繁化简还是深化系统?本文从电子邮件系统看微服务,或许可以给开发者以及产品经理一些思考。
创新,软件,开发,邮件系统

文章来源于:AndyZhang&池建强,图片来自“123rf.com.cn”

以前总有人问我微服务相关的问题,但微服务绝不是一篇文章能说清楚的事,所以我和Gary小王子商量了一下,在极客时间上开发了一个全新的白板课程,第一个产品就是微服务,以短视频讲系统内容。结果还是有人问,比如微服务到底有多「微」,什么类型什么规模的系统适合微服务…等等。

今天我就用电子邮件这个人民群众喜闻乐见的工具系统做一个类比。

随着微服务的实践和火热,关于「微」的概念出现了很多不同层面的理解。一个开发者普遍认可的定义是:一个微服务应该小到只做一件事。但是深入追究,你会觉得这并不是一个有意义的解释——「一件事」这个概念本身就有可大可小,规模类型各不相同,它并不能起到有效约束微服务大小的作用。事实上,我同样反对那些认为每个独立的服务应该能且仅能实现单一功能的观点。比如,有个函数是根据三个输入参数来计算输出——你真的认为我们有必要将这个方法单独抽离成一个微服务并独立部署么?

你要真这么做了,估计二爷都不能答应。

类比是跨越鸿沟最好的桥梁,来,我们举一个例子:比如电子邮件系统。为了尽量简单化这个模型,我们假设它是纯粹的电子邮件系统,只有基本功能(如登录、退出、用户设置、写邮件、发送邮件、删除邮件、查看收件箱、创建/修改文件夹、记录通讯录、搜索邮件等)。从单一模式的设计角度出发,我们可以用一个应用来实现所有功能。我们也可以用模块化设计的方式将它的功能拆分成模块,比如用DDD(领域驱动设计)的方式来拆分。当然,我们需要一些其他的依赖来实现某些功能——UI、数据存储、外部搜索系统等。最后,我们可能得到一个六边形或多层结构的单体应用。

所有与这个邮件系统相关的团队都必须紧密联系在一起,一旦应用有任何改变,(几乎)所有人的代码都会受到影响。事实上这个邮件系统就是一个大的Package,把系统功能、代码和工程师都装进去了,这种应用被我们成为All-or-Nothing,要么生存,要么死亡,我们只能选择运行/不运行整个系统,没法灵活的开启/关闭某些功能。对于某些规模的团队和系统,这样的结构也可能很好,事实上很多创业公司都是这么过来的,机会很少有创业公司在一穷二白的时候设计微服务架构。

随着团队和系统规模的增长,产品的演进,很多团队开始不满足于这种架构,大家希望将整个应用切分成相对独立的、有着自己生命周期的子应用/服务/库,那么就要进行系统的切分。

如何切分?首先,登录/登出(或者叫授权系统)和用户资料这两块可以拆分成单独的服务。并且,基于安全性的考量,它们应该被单独设计和实现。邮件和文件夹两者联系很紧密,所以我们可以将它们划分到一个服务(你也可以尝试拆分它们,尽管我个人并不建议)。接下来,如果我们有不同的通讯协议,如web interface、POP3、IMAP、SMAP,可以将每个协议的实现部分拆成对应的服务。同样,信息存储,可以被抽离成独立的服务。通讯录加上它的UI与它的API可以被抽离成一个独立的服务。

最后,我们可能将整个邮件系统拆离成15~20个独立服务。对于任意的请求/操作,我们都可以将它映射到若干微服务之上——比如,用户在表格里输入数据之后,点击了一个按钮,数据应该被保存在这个表格对应的数据库里。我们会用三到五个服务组合来处理整个逻辑。

总结一下,将「服务拆分到尽可能小」并不是我们的目的。如果你这样做了,只能说明你将拆分服务当作了你的首要业务,而忽视了业务的交互性和为什么要拆分。按照业务逻辑与迭代频率区分,选择更适合自己的模块方式,才是微服务的最佳实践。

(本文部分内容选自我邦「聊聊架构」,作者Andy Zhang,池建强修改润色并增删部分内容)。

本文经授权发布,版权归原作者所有;内容为作者独立观点,不代表亿欧立场。如需转载请联系原作者。

各工作岗位将被AI取代的概率

选择岗位,查看结果

制图员和摄影师

87.9%

参与评论

最新文章

1、 若贵平台是网站或者APP,在进行单篇原创文章转载时,需在文章标题或者导语下方,注明文章来源以及作者名称;若寻求5篇及以上的长期内容合作,需与亿欧公司内容运营部门取得联系,并签订转载合作协议。

【若贵司平台转载亿欧公司原创文章已经超过5篇,请及时与我们联系补签转载合作协议,计算时间以2019年2月10日之后为准】

2、 若贵平台是微信公众号,在进行单篇原创文章转载时,请联系亿欧公司内容运营人员进行单篇文章的白名单开通,同样需要注明文章来源及作者名称;若寻求2篇及以上的长期内容合作,需与亿欧公司内容运营部门取得联系,并签订转载合作协议。可将公司全称(简称)、公司网址、微信公众号、微信或者电话等信息发送至hezuo@iyiou.com,会有工作人员与您取得联系。

关闭

快来扫描二维码,参与话题讨论吧!

快捷登录 密码登录
获取验证码

新用户登录后自动创建账号

登录表示你已阅读并同意《亿欧用户协议》

快捷登录 密码登录

账号为用户名/邮箱的用户 选择人工找回

关联已有账户

新用户或忘记密码请选择,快捷绑定

账号为用户名/邮箱的用户 选择人工找回

快速注册

获取验证码

创建关联新账户

发送验证码

找回密码

获取验证码
账号为用户名 / 邮箱的用户 选择人工找回

未完成注册的用户需设置密码

如果你遇到下面的问题

我在注册/找回密码的过程中无法收到手机短信消

我先前用E-mail注册过亿欧网但是现在没有办法通过它登录,我想找回账号

其他问题导致我无法成功的登录/注册

请发送邮箱到service@iyiou.com,说明自己在登录过程中遇到的问题,工作人员将会第一时间为您提供帮助

账号密码登录

乐乐呵呵@微信昵称

该亿欧账号尚未关联亿欧网账户

关联已有账户

曾经使用手机注册过亿欧网账户的用户

创建并关联新账户

曾用微信登录亿欧网但没有用手机注册过亿欧的用户

没有注册过亿欧网的新用户

先前使用邮箱注册亿欧网的老用户,请点击这里进入特别通道
意见反馈
意见反馈
亿欧公众号 亿欧公众号
小程序-亿欧plus 小程序-亿欧plus
返回顶部