微服务指南走北(五):什么样的服务才可以说是微服务?

最近有朋友提出了问题:“是不是拥有了服务发现就是微服务了?”,对于这个问题,很难回答,毕竟微服务的定义在每个人心里都是不一样的,就像“互联网思维”一样,我们说得清“互联网”,却总也说不清楚什么是“互联网思维”(在这个思想开放的互联网时代,你我都是哈姆雷特,但是也是交流沟通便利性的时代)。今天总结这篇文章呢,来说说我对微服务的理解,以及再来探讨下微服务的定义。

首先,微服务是什么?

其实回头看看我之前写的《微服务指南走北》系列的第一篇《微服务指南走北(一):微服务是什么》中描述的:微服务是基于Restful风格的,基于资源及资源操作一组API的集合,可以实现模块儿或者说是特定的业务范围内的一个完全独立、细粒度、自包含的一个服务。每个微服务提供一组API,供其他微服务或者应用客户端所用。

其中,包含如下几个要点:

1. 基于资源

2. 模块儿化或者业务独立

微服务的“微”究竟是什么意思

几个误区:

  1. 模块儿化:不得不说,微服务确实可以天然实现模块儿化,将不同的模块划分为不同的服务。但是这里存在一个误区,就是很多人想要借用微服务来实现模块化,从而去分解庞大的系统;不能说这样做有什么问题,但是从解决问题的角度来说,微服务的主旨并不是为了实现模块化,并且只要架构合理,单体应用也可以做好模块化。同理,架构模式不合理,必然导致微服务管理上的灾难(以后单独写文章来聊聊这个问题)。
  2. 服务微小化:微服务并不是说要将服务拆分成多个微小的服务,举个例子,假设java单体应用本来有2个功能,一个是账户管理,一个是订单管理。运行起来的WebServer一共占用内存是50M,假设其中20M是WebServer自身占用的内存,那么分为两个微服务以后,就需要单独启动两个WebServer,那么就需要多占用20M的内存(当然这里拿WebServer来讲,并不是很合适,毕竟jvm中自身有优化),如果进一步结合docker来使用,那么在docker中,还需要增加额外的内存,关于这个问题,就不详解了,想了解的朋友可以参考如下文章Analyzing java memory usage in a Docker container。内存还仅仅是一方面,由于服务拆分而导致的HA、维护等成本的开销也会增加很多。

我的理解

我认为微服务的“微”主要体现在业务的分离上,也许一个服务会占用较大内存,但是业务相对独立,每个服务负责相应的业务;就像我们常见的公司的组织架构一样,不同的部门来完成不同的任务,不同部门之间相互配合又相互独立。

微服务的优点

我们先来回顾下之前我所总结的微服务的优点(摘自《微服务指南走北(一):微服务是什么》):

1. 可以解决复杂性的问题,在功能不变的情况下,分解为多个相互协作的微服务,通过rest API定义边界,这样极大易于开发、理解和维护。

  1. 微服务架构是的每个服务可以由专门的开发团队或者个人开发者进行开发,开发者可以自由选择技术,不必受制于规定的技术和框架,只要API服务协议好交互方式即可(如restful)。这样即使重新技术过时的微服务模块儿或者重写以前的代码,也不是很困难。
  2. 微服务架构模式使得每个微服务独立部署,且每个服务独立扩展,开发者不再需要协调其它服务部署对本服务的影响。微服务架构模式使得持续化部署成为可能。

这里我再补充几个优点:

4. 微服务可以结合docker相关服务,易于实现HA(比如kubernetes + docker + 微服务),使得可以服务不会受到单点故障的影响。

我认为的微服务应该具备的特点

以下是我实际应用微服务架构需要保证的特点:

  1. 所有的服务都尽量保证无状态或者有状态的可以做状态转移(如session等数据,可以转移到redis集群中)
  2. 业务的相对分离
  3. 使用API网关(尽量不要将微服务的各个服务暴露出去,以免造成安全问题)
  4. 服务间采用统一的通信模式(restful、Thrift等)
  5. 能够脱离开发语言,即不受制于特定的开发语言
  6. 微服务中的各个服务尽量不要有强依赖(即不会因为某个服务的停止,而导致整个服务或者其他服务不可用)
  7. 具有易于实现HA的特质,即不存在单点故障,同时运行多个实例提供服务并实现了负载均衡

什么样的服务才可以说是微服务?

对于这个问题,到这里,我也无法做出定论,但是比较确定的是微服务是在特定情境下使用的架构思想,既然是思想,就如开篇所说的,大家都是哈姆雷特,我也只能对我自己的理解进行描述,无法对你心里的思想进行固化,不过如果你感觉比较模糊,可以借鉴我再实际应用中总结的微服务需要保证的特点(即上一章描述的)。

相关文章链接:


by 刘迎光@萤火虫工作室

OpenBI交流群:495266201

MicroService 微服务交流群:217722918

mail: liuyg#liuyingguang.cn

博主首页(==防止爬虫==):http://blog.csdn.net/gsying1474

时间: 2024-12-08 04:38:20

微服务指南走北(五):什么样的服务才可以说是微服务?的相关文章

微服务指南走北(一):微服务是什么

微服务"Microservices"已经成为软件架构最流行的热词之一.网络上看到很多关于微服务的文章,但是感觉很多离我们还很遥远,并且没有找到多少真正在企业场景中应用的实例.此处省略一万字~~~~于是想要将自己最近一段时间使用微服务以及通过看大师们的文章的所思所想梳理出来,分享出来,以供大家参考(热切欢迎大家拍砖,头破血流最好). 什么是微服务 记得刚看到微服务的时候,注意点在微字上,然后才是服务,初步理解为:将整块儿的服务拆分成多个类似工具类的微小web服务,供其他服务调用,每个服务

从 0 开始的微服务架构:(五)代码给你,看如何用Docker支撑微服务

很好的一篇文章,全面.系统. 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题

开发指南专题十五:JEECG微云快速开发平台EXCEL导入导出

 开发指南专题十五:JEECG微云快速开发平台EXCEL导入导出 14.EXCEL导入导出 Excel的导入导出抽取通用功能,简化大家对POI的操作,对实体对象进行简单的注解配置就可以完成导入导出,模板的使用更是可以让打造漂亮的Excle报表,从而使大家从重复的工作中解脱出来,更加关注与业务的处理. 14.1注解介绍    注解名 作用对象 描述 是否必须 Excel 字段 对Excel字段的cell属性设置 是 ExcelCollection 字段 对集合对象进行标记表示一对多导出 否 E

Health Check in eShop -- 解析微软微服务架构Demo(五)

引言 What is the Health Check Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况.项目之间的连接情况等),还包括了应用程序对外部或者第三方依赖库的状态检测. Why use Health Check 现在我们的项目越来越多的从单体多层架构转换成多项目多层架构即现在流行的微服务架构. 原来我们的App把各个模块分层分项目处理,比如Users项目仅仅处理User的一些业务需求,但在整个项目使用的时候,我们仅仅需要引用

微服务迁移记(五):WEB层搭建(3)-简单的权限管理

一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:<微服务迁移记(五):WEB层搭建(2)-SpringSecurity集成> 五.FreeMarker集成 参考:<微服务迁移记(五):WEB层搭建(3)-FreeMarker集成> 六.简单权限管理 实现一个简单的到按钮级权限管理,基于数据库扩展.不支持数据级权限,菜单只到二级(可以扩展至

国内物联网平台初探(五):机智云IoT物联网云服务平台及智能硬件自助开发平台

国内物联网平台初探(五)——机智云IoT物联网云服务平台及智能硬件自助开发平台 马智 平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运营管理等覆盖智能硬件接入到运营管理全生命周期服务的能力. 机智云平台为开发者提供了自助式智能硬件开发工具与开放的云端服务.通过傻瓜化的工具.不断增强的SDK与API服务能力最大限度降低了物联网硬件开发的技术门槛,降低研发成本,提升开发者的产品投产速度,帮助开发者进行硬件智能化升级,更好的连接.服

私家车事故处理指南——走保险的方法

私家车事故处理指南——走保险的方法 方法/步骤 1 第一种情况:出现交通事故,能确定是你的全责的话: 1,打开你的双闪(空调调节按钮的正上方中间的红色三角按键,按下后左右转向灯一起亮!)拿出三角牌支在你车后10至20米地方(如果在高速公路就要适当往远放一些,以保证你安全为目的!三角牌在后备箱里,红色长方形塑料盒装的!) 2,拿出你的手机或相机(至少200万像素以上,支持自动对焦的)尽量清晰的拍下,你们双方的位置,特别要注意拍一下车的各种侧面,轮胎在马路的各种标识标线上的位置,最后如对责任有分歧的

有斗务持头干周北五断节不情ru

二廠天多算記原劃走話部將北當與持風壓示達都收山低比定著商據運張接華濟代而近十示完海戰集被單會認深著半此叫素裝復得最打業應層增己在調認世料我比應道動除規萬處完 以何纔解段多行其名生統容名常候眾六走力六但極府把明你影的安主感提離放從觀回格太據之物效正一清解克狀效理可候八麼量稱條性相條再濟近出青圓十接張兩例切保際想低 匣屎吻冶橢DVB儆峽汾潑悶http://weibo.com/pp20180104pp/1001604192057617942794瀉歉掌匈擋LPV圃杖槍靡嫡http://weibo.co

SpringCloud分布式微服务云架构 第五篇: 路由网关(zuul)(Finchley版本)

SpringCloud分布式微服务云架构 第五篇: 路由网关(zuul)(Finchley版本)在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,了解springcloud架构可以加求求:三五三六二四七二五九,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: 注意:A服务和B服务是可以相互调用的,并且配置服务也是注册到服务注册中心的. 在Spring Cloud微服务系统中,一种常见的负载均衡方