0、写在前面的话

在过去的几天,我一直在咀嚼着关于微服务的相关概念,唯恐给自己落下一丝的不明白,也算是给自己采取的扫盲行动。毕竟也是在微服务圈子里混的人了,不把概念吃透,还怎么出去跟人家撕x呢?

讲真,身边结识的大牛也没几个,也没有什么高逼格的朋友圈,都是自己一路摸爬滚打过来的,想想几年前的自己,真替自己感到心酸。

近来常有文章提到“微服务”还没有一个相对官方的定义。

在我看来,就好像是「未婚先孕」。

在还没有准备好的时候,突然就横空出世了,而且还相当轰轰烈烈。

因此,我就寻思:我是不是该看看一些相对官方一点的文献材料呢?到底有没有定义?微服务到底是以一种什么形态存在着?

不用怀疑,《Microservices》当属最原汁原味的官方文献材料了。

《Microservices》应该算是我读过最短的论文了,整个过程(不含扩展阅读内容),大约花了我1.5个小时,算是理解了其中心思想了。

如果中间不开小差的话,1个小时读完差不多了。

1、确实没有明确定义

这是我解开的第一个困惑:关于微服务,确实没有官方正式的定义。

不仅如此,关于微服务的架构指导思想,或者说是最佳实践,也并没有出炉。

The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services.
While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.

……

We've seen many projects use this style in the last few years, and results so far have been positive, so much so that for many of our colleagues this is becoming the default style for building enterprise applications.
Sadly, however, there's not much information that outlines what the microservice style is and how to do it.

请原谅我以上不负责任的总结。

Ah...

知道这个意思就好!

不过,作者还是非常精炼地向我们描述了一下什么是微服务:

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.

These services are built around business capabilities and independently deployable by fully automated deployment machinery.

There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

归纳起来,有以下几点:

  • 整个应用系统由若干个独立运行的服务组成
  • 服务之间有轻量级的通讯机制,通常是REST API
  • 每个服务都有自己的业务逻辑,并且可以单独部署
  • 去中心化的服务管理机制
  • 每个服务可以用不同的编程语言实现,使用不同的数据存储技术

我们姑且认为这就是微服务的定义吧!

毕竟「微服务」的首创是《Microservices》这篇论文的作者,并且也得到了业界广泛的认可。

2、monolith v.s microservice

这篇论文除了「microservice」,另外还有一个高频词汇:「monolith」。

「monolith」可以理解成是传统开发模式下的“单体应用”,在《我所了解的微服务》一文中有提及到,并且将其与微服务的模式做过简单的对比。

在《Microservices》这篇论文中也不例外地将单体应用和微服务两种开发模式做了比较详细的对比。

结果呢?

当然不能让monolith输的这么难堪呀!毕竟还是有很多公司采用这种开发模式的。

通篇读下来,发现作者多次在强调单体应用的一个“软肋”:

A small change requires the entire monolith to be rebuilt and deployed.

一次小变更,就意味着整个应用要重新打包,部署。对于其他没有变更的业务模块,将会受到不小的影响。

而微服务的优越性在于独立打包,独立部署,将服务之间的影响降到最低。

此外,文中就两种开发模式的团队管理进行了讨论。

单体应用随着应用规模的不断扩大,团队规模也随之扩张,将团队划分成不同的业务线就是一个技术活,团队成员之间的沟通协作也是一个巨大的挑战,更不用说在这个团队里必须遵守统一的规约了。

微服务的高度自治的特性使得上述问题变得不那么棘手了。各个服务之间的联系是松散的,可以用不同的编程语言实现,仅靠特定的协议相互调用。关于单个服务的规模大小,一篇扩展阅读有提到过:《How big is a microservice?》

结论是:一个人,最多十几个人,最后还是不确定,大概就是要我们视情况而定吧!

不过,正是因为微服务的通信方式(lightweight mechanisms, often an HTTP resource API),导致了一部分的不确定性,也是应用出错的场景之一。因为服务之间的调用并不像单体应用那样的本地方法调用,所以可能有各种因素导致各个服务之间沟通不畅。

3、一个重要的理念

文中提及了到了微服务的一个特性:

Products not Projects
—— 做产品,而不是做项目

这其实是一种开发理念的转变。

大多数应用的开发都以软件交付为目的,开发完成后就交给运维部门管理了,项目团队也随之解散了。

而作者在文中强调,微服务的开发模式可不能这样。

整个团队应该跟随着应用的全生命周期,开发者与微服务之间建立一种微妙的连接。

亚马逊有一个著名的理念:

You build, you run it.

而后文的 Infrastructure Automation 一小节则提到了可持续集成与可持续交付,开发者通过自动化测试,自动化部署完成之后的工作。附上一张经典的pipeline示意图:

basic-pipeline 来自《Microservices》

再后来的 Design for failure 一小节,提出了服务容错,快速响应,自恢复,日志记录,实时监控等特性的重要性,帮助开发者快速定位并解决问题。

Microservice teams would expect to see sophisticated monitoring and logging setups for each individual service such as dashboards showing up/down status and a variety of operational and business relevant metrics.

这样看来,不得不让我联想到DevOps!不过,谈及微服务,DevOps、容器化都是不可回避的话题。

4、微服务的未来

对于微服务的未来展望,作者还是说得很谦虚含蓄的。

作者也并没有强调今后的设计理念应该要使用微服务,而是应该根据实际的业务需求,模块划分边界以及团队自身的技术水平等因素来制定。

还是这句话:

但无论如何,微服务的架构风格值得每个公司认真去思考。

毕竟相对于单体应用,微服务的架构还是利大于弊的。

据我目前的实践经验来看,实施这套理念还是需要有一支精干的技术团队,每一个人都具备一定的开发经验,不然的话,是很难开展工作的。

如果一旦决定采用微服务架构风格了,必然要以“小步快跑,迭代试错”的节奏进入实施。

敏捷开发?我想是吧!

希望对你有所帮助。

THANKS!

每日干货分享,传递互联网世界有价值的讯息,尽在「技术汇」

转载于:https://juejin.im/post/5a3ccbecf265da431e16f4da

读《Microservices》有感相关推荐

  1. 读《豆瓣的基础架构》有感

    豆瓣整个基础架构可以粗略的分为在线和离线两大块.在线的部分和大部分网站类似:前面用LVS做HA,用Nginx做反向代理,形成负载均衡的一 层:应用层主要是做运算,将运算结果返回给前面的用户,DAE平台 ...

  2. 15读《算法基础》有感——决策树

    15读<算法基础>有感--决策树 学完本学期的<算法设计与分析基础>,想对"决策树"做进一步的了解,于是读了Rod Stephens<算法基础> ...

  3. simplify逆向_Simplify-SDK-一种以代码形式管理基础架构的框架。

    simplify逆向 When working with AWS services, you've got several choices to build and deploy your lambd ...

  4. View 5.1 重装上阵(4—基础架构篇)

    从底层架构方面来看,VIEW 5.1最大的改进在于引入了Content-Based Read Cache(CBRC) 技术,大大降低了部署桌面虚拟化所带来的IOPS风暴,同时大大降低了对于存储的压力和 ...

  5. 聊聊 Kafka: Kafka 的基础架构

    一.我与快递小哥的故事 一个很正常的一个工作日,老周正在忙着啪啪啪的敲代码,办公司好像安静的只剩敲代码的声音.突然,我的电话铃声响起了,顿时打破了这种安静. 我:喂,哪位? 快递小哥:我是顺丰快递的, ...

  6. 机器学习的中流砥柱:用于模型构建的基础架构工具有哪些?

    本文转载自公众号"读芯术"(ID:AI_Discovery) 人工智能(AI)和机器学习(ML)已然"渗透"到了各行各业,企业们期待通过机器学习基础架构平台,以 ...

  7. 数据中心基础架构 22 年演进

    01 前言 当今世界正处在信息技术(IT)创新的黄金时代.由机器学习.物联网和大规模可扩展应用支持的云计算.移动应用.大数据分析的巨大力量正在重塑商业和社会的方方面面.而这场IT复兴的中心,则是超大规 ...

  8. k86跟mysql_MySQL【基础架构】

    一.前言 平时我们使用数据库,看到的通常都是一个整体. select * from T where ID=10: 对于上述语句,我们看到的只是输入一条语句,返回一个结果,却没有关注这条语句在 MySQ ...

  9. 译 | .NET Core 基础架构进化之路(一)

    原文:Matt Mitchell 翻译:Edi Wang 随着 .NET Core 3.0 Preview 6 的推出,我们认为简要了解一下我们基础设施系统的历史以及过去一年左右所做的重大改进会很有用 ...

  10. 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的

    文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 ​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...

最新文章

  1. IQueryable 和 IEnumerable
  2. 关于.net standard 与 .net core, net framework
  3. 2016 GDCPC 省赛总结
  4. 常用的sql server 函数、存储过程、临时表总结
  5. [知识图谱实战篇] 五.HTML+D3添加鼠标响应事件显示相关节点及边
  6. 移动互联网开始降温:“人才热”退烧
  7. ROS学习(六)—— 理解ROS节点
  8. 【知识图谱】Louvain、LPA等5类经典社区发现算法 Python 实战
  9. CNN结构:色彩特征提取-色彩属性HSV空间(色彩冷暖初始)
  10. VLAN详解系列:(6)VLAN间路由详解
  11. 悟空,削他!善了个哉的……
  12. 2020年小学几年级有计算机课,2019-2020年最新小学信息技术三年级上册第1课初识计算机备课教学参考.doc...
  13. atm机存款场景图_atm存钱(自动存款机存钱演示图)
  14. GPU、CPU、显卡区别
  15. Eclipse版本号及各个版本区别
  16. Linux系统Shell if语句用法小结
  17. 求助大佬,python类的问题
  18. bat批处理删除文件
  19. 翻译:通往WinDbg的捷径(一)
  20. 初中计算机会考不及格,初中会考不及格能毕业吗

热门文章

  1. k8s 出现各种问题解决方案
  2. hackthebox-01startpoint-TIER2-Oopsie
  3. ANN人工神经网络(Artificial Neuron Network )
  4. allegro差分信号走线_原创|PCB设计软件allegro16.6演示差分规则的设置
  5. 计算机应用bsp什么意思,bsp是什么
  6. metasploit学习之路(四)记一次实战--永恒之蓝(MS017-010)
  7. 计算机视觉教程1-2:单应性矩阵估计
  8. SVM 支持向量机简介和sklearn中参数设置详解
  9. python 分析大数据
  10. Block背后的数据结构及变量截取