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

首先,微服务是什么?

其实回头看看我之前写的《微服务指南走北》系列的第一篇《微服务指南走北(一):微服务是什么》中描述的:微服务是基于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定义边界,这样极大易于开发、理解和维护。

  2. 微服务架构是的每个服务可以由专门的开发团队或者个人开发者进行开发,开发者可以自由选择技术,不必受制于规定的技术和框架,只要API服务协议好交互方式即可(如restful)。这样即使重新技术过时的微服务模块儿或者重写以前的代码,也不是很困难。

  3. 微服务架构模式使得每个微服务独立部署,且每个服务独立扩展,开发者不再需要协调其它服务部署对本服务的影响。微服务架构模式使得持续化部署成为可能。

这里我再补充几个优点:

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

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

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

  1. 所有的服务都尽量保证无状态或者有状态的可以做状态转移(如session等数据,可以转移到redis集群中)

  2. 业务的相对分离

  3. 使用API网关(尽量不要将微服务的各个服务暴露出去,以免造成安全问题)

  4. 服务间采用统一的通信模式(restful、Thrift等)

  5. 能够脱离开发语言,即不受制于特定的开发语言

  6. 微服务中的各个服务尽量不要有强依赖(即不会因为某个服务的停止,而导致整个服务或者其他服务不可用)

  7. 具有易于实现HA的特质,即不存在单点故障,同时运行多个实例提供服务并实现了负载均衡

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

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

相关文章链接:

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

  • 微服务指南走北(二):微服务架构的进程间通信(IPC)

  • 微服务指南走北(三):Restful API 设计简述

  • 微服务指南走北(四):你不愿意做微服务架构的十个理由


by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(==防止爬虫==):http://blog.liuyingguang.cn
OpenBI问答社区:http://www.openbi.tk

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

  1. 微服务指南走北(四):你不愿意做微服务架构的十个理由

    近段时间离职,跟同事们讲解我之前所做的微服务相关产品,对于同事们提出的问题,做了如下整理出来,加上自己的理解,分享出来跟大家一起探讨下: 问题预览 我为什么要换微服务?能给我带来什么好处? 从交互上来 ...

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

    引言 What is the Health Check Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况.项目之间的连接情况等),还包括了应 ...

  3. springboot 搭建分布式_爱了!阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战...

    爱了爱了,Alibaba出品"Springboot+微服务架构指南",理论与实战结合,双管齐下! 有幸从一位朋友那里得到Alibaba内部出品强推的"SpringBoot ...

  4. 《深入理解 Spring Cloud 与微服务构建》第五章 Kubernetes

    <深入理解 Spring Cloud 与微服务构建>第五章 Kubernetes 文章目录 <深入理解 Spring Cloud 与微服务构建>第五章 Kubernetes 一 ...

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

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!  开 ...

  6. 微服务指南和实施要素

    一.什么是微服务化和组件化?为什么要做微服务? 1. 什么是微服务 顾名思义,微服务得从两个方面去理解,什么是"微".什么是"服务",所谓服务,就是IT系统提供 ...

  7. (五):C++分布式实时应用框架——微服务架构的演进

    C++分布式实时应用框架--微服务架构的演进 技术交流合作QQ群:436466587 欢迎讨论交流 上一篇:(四):C++分布式实时应用框架--状态中心模块 版权声明:本文版权及所用技术归属smart ...

  8. 五年Java架构师深入剖析微服务架构设计理念与技术体系(值得一看!)

    内容提要: 本书内容主要包含实施微服务架构的些方法论和工程实践,首先,通过对微服务架构的基本概念.服务建模.服务拆分和集成的介绍,帮助读者全面理解微服务架构中的设计理念,然后从微服务架构的基础组件.关 ...

  9. 【SpringCloud微服务】第3章 服务治理SpringCloudEureka(五)——Eureka源码分析

    2.8 Eureka 源码分析   首先,对于服务注册中心.服务提供者.服务消费者这三个主要元素来说,后两者(也就是Eureka客户端)在整个运行机制中是大部分通信行为的主动发起者,而注册中心主要是处 ...

最新文章

  1. 自已编写C# DLL 绑定到unity进程进行单步调试
  2. CGCTF-Web-签到题
  3. 新手应该如何Javascript,JDom,JQuery,DWZ。。
  4. C#使用七牛云存储上传下载文件、自定义回调
  5. Spring系统学习:20180612--aop配置中表达式的写法
  6. 正向有功正向无功_电表_正向有功、反向无功
  7. Illustrator 教程,如何在 Illustrator 中创建及应用图案?
  8. 未转变者3.16进不去服务器,未转变者3.16.0.1
  9. “你还有什么事想问”——作为程序员如何回答面试官的问题
  10. 设计模式——工厂方法模式
  11. Ubuntu16.04 安装Redis哨兵模式
  12. js中的shift()函数
  13. IT的道德和伦理-个人隐私
  14. 数字集成电路设计-6-计算机体系结构
  15. css中的BFC、IFC、GFC、FFC
  16. 精研技术十数年,我却失业了
  17. Linux发行版本介绍
  18. CAP2SWK.exe
  19. 搜索(2) --丁香园
  20. Python常用模块 之 datetime sxtwl模块——实现阴阳历生日换算

热门文章

  1. python怎么设置代码执行时间_Python 2.x如何设置命令执行的超时时间实例
  2. matlab激光散斑散射半径测量,激光散斑测量2011412225741
  3. toncat 如何部署 java_tomcat中部署java项目
  4. zuulfilter添加例外_SpringCloud之Zuul 自定义filter
  5. stm32for循环几个机械周期_波浪理论之五:循环周期理论
  6. win7计算机管理禁用,Win7任务管理器已被系统管理员禁用怎么办
  7. HTML5如何制作轮播透明效果,js前端开发实现banner轮播透明切换
  8. oracle01507报错,oracle报错ORA-01507
  9. Jquery ajax json 不执行success的原因
  10. 2021年11月编程语言排行榜出炉