聊聊我对微服务的看法

千人千面的微服务

为什么说千人千面的微服务呢,这个大家和身边的人聊聊就知道了,一说大家都知道,再仔细一聊才知道大家说的不是一个微服务。我也看过很多文章,本文也可以说是这些文章的读后感o( ̄︶ ̄)o,我比较推崇老马的这个描述。下面就来说说我理解的微服务。

微服务第一条原则就是不要使用微服务

就想老马说的分布式的第一条准则(不要使用分布试)一样,能不使用微服务就不要使用,老马也说过 you must be too tall to use microservices,微服务会带来很多复杂度,如果治理能力更不上很可能适得其反,最后成了一大堆各自为战的微服务,得不偿失呀。 ThoughtWorks 肖然的银行组织的敏捷落地一文中有详细的介绍。

如果你没听过康威定律和 DDD 就不要提微服务

康威定律

微服务既是一种技术架构风格,也是一种组织架构风格,康威曾经说过:

任何设计(广义上的)系统的组织,都会产生这样一个设计,即该设计的结构与该组织的沟通结构相一致。

DDD

下面来简单说下 DDD 也就是领域驱动设计,领域驱动设计是一整套方法、工具、实践的集合,强调从业务出发,设计出一个可以不断演进的架构。

小结

我用这篇文章的一句话作为本段的结尾,我再稍微改下:

企业决定实践微服务前,请先检查组织内部是否已经做好准备,相关人员是否对此有正确的理解,全靠开发者本能的狂奔,肯定不会走太远。

微服务架构的九大特性

特性一:“组件化”与“多服务”

最开始的时候都是单体应用,到了现在变化越来越快,单体应用响应变化的能力太弱了,所以需要拆分成多个服务,一个良好的应用服务是通过内聚的服务边界和服务协议方面的演进机制,来提高单个应用响应变化的能力。
还有就是我觉得微服务的“微”是相对单体应用来说的,不是说这个服务的大小。

特性二:围绕“业务功能”组织团队

这里还要在提一下康威定律,如果不改变组织架构而只是从技术角度去实施微服务,那么组织架构迟早会成为实施微服务的阻碍。

特性三:“做产品”而不是“做项目”

产品和项目的生命周期在 PMI 中有明确的定义,大多人对这两个生命周期的定义也基本这样。产品的生命周期是从产品最初的概念一直到最后产品下线为止,项目的生命周期从某种角度来讲是产品的子生命周期(这个准确的说是项目生命周期中的开发生命周期,这里就不详细说了),项目的生命周期一般以产品上线为止,但是产品的生命周期还包括产品上线后的运营和下线等等。
强调做产品而不是做项目,是要强调在产品的运营阶段很重要。

特性四:“智能端点”与“傻瓜管道”

智能和傻瓜都是相对企业服务总线(ESB)来说的。微服务最常用的两种协议是:带有资源 API 的 HTTP “请求-响应”协议,和轻量级的消息发送协议。

智能端点

一般来讲是带有资源 API 的 HTTP“请求-响应”协议。关于 REST 的介绍我觉得实现领域驱动设计中讲的比较好:

从我的经验来看,符合 REST 原则的系统将具有更好的松耦合性。通常来讲添加新资源并在已有的资源中创建到新资源的链接是非常简单的。要添加的新的格式同样如此。另外基于 REST 的系统要是非常容易理解的,因为此时系统被分为很多较小的资源块,每一个资源块都可以独立的测试和调试,并且每一个资源块都表示了一个可重用的入口点。HTTP 的设计本身以及 URI 成熟的重写与缓存机制使得 RESTful HTTP 成为一种不错的架构选择,该架构具有很好的松耦合性和可伸缩性。

傻瓜管道

傻瓜管道的意思是通过一个轻量级的消息总线来进行消息发送。此时所选择的基础设施,通常是“傻瓜”(dumb)型的(仅仅像消息路由器所做的事情那样傻瓜)像 RabbitMQ 或 ZeroMQ 那样的简单实现,即除了提供可靠的异步机制 (fabric) 以外不做其他任何事情,智能功能存在于那些生产和消费诸多消息的各个端点中,即存在于各个服务中。

小结

在一个单块系统中,各个组件在同一个进程中运行。它们相互之间的通信,要么通过方法调用,要么通过函数调用来进行。将一个单块系统改造为若干微服务的最大问题,在于对通信模式的改变。仅仅将内存中的方法调用转换为 RPC 调用这样天真的做法,会导致微服务之间产生繁琐的通通信,使得系统表现变糟。取而代之的是,需要用更粗粒度的协议来替代细粒度的服务间通信。

特性五:“去中心化”的治理技术

就是说各个全功能团队能自主的选择技术栈而不是上面定标准下面执行,上面定的标准很容易成为具体实施人的障碍。

特性六:“去中心化”地管理数据

相对于单体应用通过事务来保障的强一致性,微服务架构更强调在各个服务之间进行“无事务”的协调。这源自微服务社区明确地认识到下述两点,即数据一致性可能只要求数据在最终达到一致,并且一致性问题能够通过补偿操作来进行处理。

特性七:“基础设施”自动化

在微服务语境下,开发、测试、运维等不同角色可以随需动态获得完整的环境(如 dev,test,staging 等等),从而统一环境、标准化研发实践、规范化研发能力,并且给研发提供体验更好的开发环境。要达到这样的目的就需要基础设施自动化的相关技术。

特性八:“容错”设计

因为各个服务可以在任何时候发生故障,所以下面两件事就变得很重要,即能够快速地检测出故障,而且在可能的情况下能够自动恢复服务。

特性九:“演进式”设计

有人觉得微服务或许很难成熟起来,这当然是有原因的。在组件化上所做的任何工作的成功度,取决于软件与组件的匹配程度。准确地搞清楚某个组件的边界位置应该出现在哪里,是一件困难的工作。演进式设计承认难以对边界进行正确定位,所以它将工作的重点放到了易于对边界进行重构之上。

总结

上面内容很多都是从别的地方 copy 过来的,也有不少我自己的观点,总的来说微服务不是银弹,要实施微服务也需要诸多考量。本文也是想给出一些看法,希望能引起大家的一些思考。大部分时候结论并不重要,重要的是思考过程,是自己在实践中不停的独立思考这些想法对不对,适不适合自己的过程。

原文地址:https://www.cnblogs.com/WisWang/p/12182169.html

时间: 2024-08-06 10:29:11

聊聊我对微服务的看法的相关文章

简单聊聊SOA和微服务

转自:https://juejin.im/post/592f87feb123db0064e5ef7c  (2017-06) 简单聊聊SOA和微服务 架构设计中的朴素主义 前两天和一个朋友聊天,他向我咨询如何从零开始构建一个健壮.强大的软件系统,聊着聊着他忽然问我,「听大家都在说微服务(下文中有的地方会使用MSA),还有人会提到SOA,那么他们的区别到底在哪里?」.我想了想,一时也列不出来一个详细的列表,只能跟他讲说其实他们在概念上是相似的. 关于软件系统的架构设计,是一个太多人喜欢讨论的问题,尤

从 Spring Cloud 开始,聊聊微服务架构实践之路

[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数据和接收用户输入的数 据,为用户提供一种交互式操作的界面,平台所使用

落地微服务之前,先想想你的团队结构是否合理!

2016-10-18 王昕 译 聊聊架构 有关微服务的技术Docker火热起来之后也进一步升温.一般来说,IT业界,尤其是工程师们更加关心国外专家的技术文章.但事实上,对于软件项目成功与否来说,往往是企业中人的因素决定结果,企业文化因素决定结果,对于微服务架构,则更是如此:因为微服务的分割是从企业业务开始,而不是从软件技术开始.本文由轻元科技首席架构师王昕翻译,如有疑问,欢迎留言讨论. 似乎每过五到十年,在软件行业,特别是企业集成或者是企业应用领域,就会出现一些新的方法论或架构方式,声称能够让你

Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转

原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过:如果单体架构都搞不好,就别搞微服务架构.乍一看,这句很有道理,后来发现这句话是不太对的,因为微服务架构的目的就是为了降低系统的复杂性,所以 微服务架构应该比单体架构更简单.更好实践才对. 这篇文章,我们就分享一下如何搭建一个 简单模式 的微服务架构. 什么是微服务架构的简单模式? 相对于大型互联网

从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为.net+sqlserver: 表示层 位于最外层(最上层),最接近用户.用于显示数据和接收用户输入的数 据,为用户提供一种交互式操作的界面,平台所使用的是基于.

企业数字化转型必备利器之微服务扩展

导读:本系列文章将通过介绍一个真实大型企业数字化转型过程中遇到的层层困难,以及微服务架构如何落地,涉及到的各种真实的解决方案.不空谈,不泛谈,讲事实是本系列文章的原则. 企业数字化转型是近些年来非常火热的话题,而企业做数字化转型的必经之路就是微服务架构升级.微服务架构升级普遍都会提及DevOps.容器化.API网关.微服务治理.AKF扩展立方体等技术概念.在大型集团企业微服务架构升级的过程中,往往会遇到如何扩展已有微服务应用,来适应不同组织之间业务的多样性和集团的整体管控性的问题.针对这个问题,

微服务,为什么从前后端分离开始?

关注「IT老兵哥」,赋能程序人生!既要低头赶路,又要抬头望天,科技是为人服务的,任何技术背后都有更深层次的考量,在本系列的第一篇文章中我们聊了微服务的本质,它是一种可以加速分工.促进合作的新协作机制.知其然,知其所以然,在第二篇文章中我们剖析了微服务为什么可以加速分工.促进合作,今天我们再接着来聊聊怎样开启微服务架构之旅. 微服务到底改变了什么,你知道吗? 微服务,为什么可以加速分工.促进合作? 1. 从前后端分离开启微服务改造 现在我们对微服务有了更深入的了解,也准备在构建新系统时采用这套新架

聊聊微服务架构与应用

>>微服务架构 随着敏捷开发.持续交付以及基于Docker的应用部署的发展,微服务结构开始慢慢流行起来. >>应用架构演进 (1)垂直应用架构 传统的LAMP架构和Spring+Struts+iBatis/Hibernate的架构都是典型的垂直应用架构,垂直应用架构学习成本低,开发产出快,测试.部署和运维比较简单,在过去的十几年中一直比较流行.但是随着业务的发展,垂直应用架构逐渐暴露出一些缺陷,以Spring MVC架构为例,可能的表现:1.复杂应用的开发维护成本越来越高,测试变得

聊聊微服务架构实践之路的4大挑战,3月31日见真章!

当容器化的兴起,为应用开发部署带来变革,也为应用设计架构和运维部署带来变化: 当持续交付.DevOps.微服务,成为企业在软件成果对抗当中胜出的有力武器,微服务架构已经随处可见: 但随之而至的是微服务框架.微服务监控.微服务配置.微服务治理等一系列挑战, 从架构到发布,挑战重重,该如何应对容器化微服务架构的各种技术难题? 2018年3月31日,数人云联合ServiceComb社区,开启Building Microservice 系列活动 第2期 北京站 带你了解最新的微服务开源框架, 解析微服务