《领域驱动设计》(Eric Evans):告诉我们用代码呈现真实世界的重要性,并且告诉我们如何更好地建模。

持续交付理论:如何更有效及更高效地发布软件品,并指出保持每次提交均可发布的重要性。

六边形架构理论(Alistair Cockburn):把我们从分层架构中拯救出来,从而能更好地体现业务逻辑。(http://alistair.cockburn.us/Hexagonal+architecture)

随着领域驱动设计、持续交付、按需要虚拟化、基础设施自动化、小型自治团队、大型集群系统这些实践的流行,微服务也就应运而生。

什么是微服务?

微服务就是一些协同工作的小而自治的服务。

1.小,专注

      单一职责原则:把因相同原因而变化的东西聚合在一起,把因不同原因而变化的东西分享开来。(Single Resonsibility Principle,http://programmer.97things.oreilly.com/wiki/index.php/The_Single_Responsibility_Principle)

微服务将内聚性应用在独立的服务上,根据业务的边界来确定服务的边界,可避免代码库过大衍生的问题。

      讨论:多小才算小?

使用代码行来衡量是有问题的。大家都认为自己的系统过于庞大,却不知道什么才算是小。ok,那么就一直拆分,直到你不再感觉它过于庞大,那么它有可能就足够小了。另外,如果你的小团队无法正常维护,那么它就太大了。

      小的优点与缺点:独立性带来的好处越多,但管理也越复杂。

2.自治性

一个微服务是一个独立的实体,它可以独立部署,独立修改,服务之间通过暴露API来进行通信,API的实现技术应避免与具体技术相关,以保证技术的选择不受限制。

自治性其实就是要求你的服务与其他的服务之间很好的解藕,判断是否解藕的黄金法则:你是否能够修改一个服务并对其进行部署,而不影响其他任何服务?

     

微服务的好处

1.技术异构性

对于微服务而言,我们可以根据需要采用最适合这个服务所需要的技术。

对于微服务系统而言,总会存在一些地方让我们可以尝试新技术,这种可以快速采用新技术的能力对很多组织而言是非常有价值的。

2.弹性

如果系统中的一个组件不可用,但并没有传染到其他的组件,没有导致级联故障,系统的其他部分还可以正常工作。

3.扩展

庞大的单块服务只能作为一个整体进行扩展,即使系统中只有一小部分存在性能问题,也需要对整个服务进行扩展。如果使用较小的多个服务,则可以对只需要进行扩展的服务进行扩展,这样就可以把那些不需要扩展的服务运行在更小的、性能稍差的硬件上。

4.简化部署

在有几百万行代码的单块应用中,即使只修改了一行代码,也需要重新部署整个应用程序才能发布该变更。这种部署影响很大、风险很高,于是部署的频率就会降低,两次部署的差异越大,出错的可能性就更大!

在微服务架构中,各个服务的部署都是独立的,这样就可以更快地对特定部分的代码进行部署,如果真出了问题,也只会影响一个服务,并且容易快速回滚,这样就意味着客户可以快速使用我们的新功能。

5.与组织结构相匹配

可以避免出现庞大的代码库,从而获得理想的团队大小及生产力。

6.可组合性

分布式系统和面向服务架构的主要好处是易于重用已有功能。不同于以往的单纯的Web、PC端程序,人们有更多的选择使用同一个功能。微服务中会开放很多接口供外部调用,当情况发生改变时,可以使用不同的方式构建应用。

7.可替代

在单块系统中,删除一百行代码会让人心惶惶,而在微服务系统中,可以轻易地重写服务,或删除不再使用的服务。

面向服务的架构(SOA)

SOA是一种设计方法,它通过提供服务向外提供一系列功能,服务之间通过网络调用,而非采用进程内调用的方式进行通信。

SOA可以用来应用庞大的单块应用程序,从而提高软件的复用性,比如多个终端共享一个服务。但大多数人对SOA的理解未达成共识,而微服务就是实现SOA的一种新方法,就像XP或Scrum是敏捷软件开发的一种特定方法一样。

其他分解技术

1.共享库

有些共享库不属于任何一个业务领域,并且可以在整个组织中进行重用。但还是需要小心,如果使用共享库来做服务之间的通信的话,那么它会成为一个藕合点。

2.模块

有些语言提供自己的模块分解技术,它允许对模块进行生命周期管理,这就可以把模块部署到运行的进程中并且可以不在停止整个进程的前提下对某个模块进行修改,但很少有人这么做,因为尽管在单块进程中创建隔离性很好的模块是可能的,但是它们这些模块会迅速和其他代码藕合在一起。

同时,在单进程中采用模块化技术,也会大大限制我们采用新技术和独立服务进行扩展的能力。

参考

《微服务设计》(Sam Newman 著 / 崔力强 张骏 译)

原文地址:http://www.cnblogs.com/gudi/p/6531370.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

微服务的概念——《微服务设计》读书笔记相关推荐

  1. 3D游戏设计读书笔记二

    3D游戏设计读书笔记二 一.简答题 • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系.   GameObjects是一个具体的实例,Assets是包括诸多游戏素材的资 ...

  2. 3d游戏设计读书笔记六

    3d游戏设计读书笔记六 一.改进飞碟(Hit UFO)游戏: 游戏内容要求: 按 adapter模式 设计图修改飞碟游戏 使它同时支持物理运动与运动学(变换)运动 更改原 UFO_action 类 为 ...

  3. 3D游戏设计读书笔记一

    3D游戏设计读书笔记一 二.游戏分类与热点探索 1.使用思维导图描述游戏的分类.(游戏分类方法特别多) 2. 结合手机游戏市场的下载量与排名等数据,结合游戏分类图,描述游戏市场的热点. (1)2016 ...

  4. 3D游戏设计读书笔记七

    3D游戏设计读书笔记七 智能巡逻兵 提交要求: 游戏设计要求: 创建一个地图和若干巡逻兵(使用动画): 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址.即每次确定下一个目标位置,用自己当前位 ...

  5. 3D游戏设计读书笔记九

    3D游戏设计读书笔记九 本次作业五选一,我选择制作血条预制设计,要求如下: 分别使用 IMGUI 和 UGUI 实现 使用 UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机 分析两种实现 ...

  6. 3d游戏设计读书笔记四

    3d游戏设计读书笔记四 一.基本操作演练[建议做] 下载 Fantasy Skybox FREE, 构建自己的游戏场景 a. 在AssetStore中搜索Fantasy Skybox FREE并下载. ...

  7. 微服务架构师的职责——《微服务设计读书笔记》

    如何定义架构师 架构师从英文单词Architect翻译而来,在英文中,Architect原来的意思是"建筑师".作者吐槽英文中架构师与传统的建筑师单词相同,但实际的工作性质并不相同 ...

  8. 微服务设计 读书笔记 一

    1.1 什么是微服务 微服务就是一些协同工作的小而自治的服务. 1.1.1 专注于做好一件事 随着新功能的增加,代码库会越变越大.时间久了代码库会非常庞大,以至于想要知道该在什么地方做修改都很困难.在 ...

  9. 中山大学3D游戏设计读书笔记 unity3D Note6

    本文利用订阅与发布模式实现智能巡逻兵游戏 游戏演示视频地址:http://www.iqiyi.com/w_19rxsmp5kx.html 游戏具体代码地址:https://github.com/dic ...

  10. 分布式系统:概念与设计读书笔记

    分布式系统的特征 分布式系统的例子:多人在线游戏,金融交易系统 分布式系统的挑战是处理其组件的异构性.开放性.安全性.可伸缩性.故障处理.组件的并发.服务的高可用性 分布式系统组件之间通过消息进行传递 ...

最新文章

  1. 如何组建开发团队-建立畅通的沟通渠道
  2. vivo android8公测,vivo 开启安卓P公测不限人数!这四款机型用户别错过了
  3. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。...
  4. spring java code配置_Spring-09-使用Java的方式配置Spring
  5. Hexo 博客添加 README.md 以及部署到 GitHub 丢失/显示不正常解决方法
  6. 阿里数据人标配的高端鼠标垫,我的粉丝每人包邮送一块
  7. 在crontab中利用scp命令自动备份文件
  8. Spring @Autowired批注
  9. keil uvision4完整破解版下载
  10. vyos v1.2安装flask
  11. java根据出生年月计算年龄
  12. android扁平化按钮图标,35个扁平化设计(Flat UI)图标UI Kit素材下载
  13. 查看远程计算机ip地址吗,我的电脑跟别人远程过可不可以查对方IP地址
  14. icem密度盒怎么设置_使用ICEM绘制非结构网格时,如何提高网格质量?
  15. 践行社会责任 | 华云数据荣登2021新型实体企业百强榜 用创新技术服务实体经济
  16. 数码相框_在LCD上显示英文字母、汉字的点阵显示(2)
  17. 渗透之——使用Metasploit编写绕过DEP渗透模块
  18. token验证的方法
  19. 在线JS运行 JavaScript IDE
  20. EC-PCA: 利润中心记账流程

热门文章

  1. 能源项目xml文件 -- app-context.xml
  2. crontab定时任务中文乱码问题
  3. 你周围需要这6种人(文摘)
  4. 【转】我们到底为了什么钻研技术?
  5. 推荐Mongodb GUI 可视化管理工具-NoSQLBooster
  6. github开源推荐:SuperSocket, 可扩展的 Socket 服务器框架
  7. .NET 6 预览版 7 发布--(最后一个预览版)
  8. ASP.NET Core 中的规约模式(Specification Pattern )——增强泛型仓储模式
  9. NET问答: JS 中有 LINQ SelectMany 方法的等价实现吗?
  10. 轻量NuGet服务—BaGet