一分钟了解微服务的好处和陷阱

微服务架构设计代表了一种架构设计思想,配合现在的容器技术(如 Docker),可在软件开发流程、部署、服务维护等各方面产生效率提升。

但不一定所有的业务场景都适合微服务,有时候非常简单的业务场景下,微服务反而会降低效率。什么是微服务,其特性,好处及陷阱,是本文要讨论的内容。

 

一、什么是微服务

微服务是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块为基础,利用模组化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关的 API(例如 REST)集相互通讯,且每个服务可以被单独部署,它具备以下三个核心特点:

  1. 微服务为大型系统而生。随着业务的快速增长,会带来系统流量压力和复杂度的上升,系统的可维护性和可扩展性成为架构设计的主要考虑因素,微服务架构设计理念通过小而美的业务拆分,通过分而自治来实现复杂系统的优雅设计实现。
  2. 微服务架构是面向结果的。 微服务架构设计风格的产生并非是出于学术或为标准而标准的设计,而是在软件架构设计领域不断演进过程中,面对实际工业界所遇到问题,而出现的面向解决实际问题的架构设计风格。
  3. 专注于服务的可替代性来设计。 微服务架构设计风格核心要解决的问题之一便是如何便利地在大型系统中进行系统组件的维护和替换,且不影响整体系统稳定性。

 

二、微服务的特征

  1. 每个微服务仅对单个业务负责,且为该业务的容量负责;
  2. 每个微服务可以进行独立部署,即不需要依赖其它微服务及其相关资源,如数据库、内存缓存系统等;
  3. 轻量级的通信协议,例如REST、STOMP、AMQP等;
  4. 服务的可替代性,代表着每个微服务原则上都可以使用不同的语言、框架进行技术实现,且更换实现后的微服务对于整个业务系统不会造成影响;
  5. 每个微服务拥有单独的数据存储;
  6. 每个微服务由小团队维护,服务以业务来进行拆分后,每个微服务的维护工作将有人数不多的小团队进行维护;

 

三、微服务带来的好处

  1. 独立的可扩展性,每个微服务都可以独立进行横向或纵向扩展,根据业务实际增长情况来进行快速扩展;
  2. 独立的可升级性,每个微服务都可以独立进行服务升级、更新,不用依赖于其它服务,结合持续集成工具可以进行持续发布,开发人员就可以独立快速完成服务升级发布流程;
  3. 易维护性,每个微服务的代码均只专注于完成该单个业务范畴的事情,因此微服务项目代码数量将减少至IDE可以快速加载的大小,这样可以提高了代码的可读性,进而可以提高研发人员的生产效率;
  4. 语言无关性,研发人员可以选用自己最为熟悉的语言和框架来完成他们的微服务项目(当然,一般根据每个公司的实际技术栈需要来了),这样在面对新技术或新框架的选用时,微服务能够更好地进行快速响应;
  5. 故障和资源的隔离性,在系统中出现不好的资源操作行为时,例如内存泄露、数据库连接未关闭等情况,将仅仅只会影响单个微服务;
  6. 优化跨团队沟通,如果要完全实践微服务架构设计风格,研发团队势必会按照新的原则来进行划分,由之前的按照技能、职能划分的方式变为按照业务(单个微服务)来进行划分,如此这般团队里将有各个方向技能的研发人员,沟通效率上来说要优于之前按照技能进行划分的组织架构;
  7. 原生基于“云”的系统架构设计,基于微服务架构设计风格,我们能构建出来原生对于“云”具备超高友好度的系统,与常用容器工具如Docker能够很方便地结合,构建持续发布系统与IaaS、PaaS平台对接,使其能够方便的部署于各类“云”上,如公用云、私有云以及混合云。

 

四、避免微服务的陷阱

  1. 不要以微服务作为开始,在项目刚开始时,一般都还很小,不需要进行非常完整的业务拆分,如果采用“微服务”作为开始会有点杀鸡用牛刀的感觉,当然,你的项目非常之庞大的话,以“微服务”为始是个不错的选择;
  2. 不要自己进行基础设施的管理,微服务意味着一堆的数据库、消息系统、数据缓存系统等,会带来相应的运维管理成本(这里的前提是,没有良好的自动化运维平台和工具),建议多使用IaaS、PaaS平台,部署发布与其对接;
  3. 无DevOps、不微服务,如果研发团队不具备DevOps的理念并贯彻执行,仅想单独来实施微服务的话,在实施过程中会发现比之前的架构维护要困难些,主要原因是微服务需要持续集成、持续部署及监控等工具或系统的配合才能降低其带来的维护成本;
  4. 不要创建过多的微服务,微服务的业务颗粒度一定要根据实际业务系统的现状及日后规划来制定,切记不要制定过细的拆分颗粒度;
  5. 可能带来的延迟问题,由于服务拆分开来,部署到不同的平台或网络,可能会引起微服务间的调用延迟问题,服务间的调用延迟可能带来整体系统的响应缓慢问题;
  6. 微服务不是银弹。

 

五、如何学习微服务实践

微服务这么潮,对于没有相关经验的同学,就要问了,如何学习微服务实践呢?可参考阿里开元产品Dubbo

原文链接:[http://wely.iteye.com/blog/2351289]

时间: 2024-10-03 22:11:23

一分钟了解微服务的好处和陷阱的相关文章

利用微服务构建现代应用(二)

本文讲的是利用微服务构建现代应用(二),[编者的话]本文是如何用微服构建现代应用的第二部分,介绍了如何用MongoDB中实现微服务,在迁移到微服务之前需要考虑的问题以及使用MongoDB构建微服务架构的客户案例. 在上一篇博文中,我介绍了微服务的背景知识及其优势.本文将介绍如何使用MongoDB构建微服务以及在实施微服务的项目中应该要注意的问题. MongoDB如何实现微服务 企业要享受到微服务的好处需要一些基本的技术原则,其中最主要的是灵活的数据模型.冗余.自动化和可扩展性. 灵活的数据模型:

利用微服务构建现代应用(一)

本文讲的是利用微服务构建现代应用(一),[编者的话]本文介绍了微服务如何消除传统的整体化软件架构存在的问题,微服务跟SOA的关系,微服务所利用的新技术如容器.编排框架等,以及使用微服务带来的好处. 本文是关于微服务的两篇博文中的第一篇.这篇博文介绍了微服务的背景知识,微服务所使用的新技术以及使用微服务带来的好处. 简介 随着互联网公司在高度竞争性的市场中需要快速灵活的复制其开发环境,应用程序的开发正变得越来越复杂.庞大并且整体的应用程序在过去是企业的竞争力,但是在新的情境中却使得快速部署新的服务

Komad首席工程师Sean Kelly谈微服务谬见

Sean Kelly是Komad的首席工程师,在去年举行的波士顿Golang开发者见面会上,他做了一次关于微服务使用体验的闪电式演讲,之后他写了一篇文章.他以人们应该有所期待的内容作为开场: 我即将讲到一些有关微服务的谬论和误解,有些人坚定地认为对一个遗留的单体应用进行拆分就能挽救局面.我不希望这篇博文的观点变成"微服务==拙劣",如果阅读这篇博文的人有想不明白迁移到微服务是否真正适合他们的话,那么最好请他们离开. 当然,有关微服务的讨论都是从试图定义清楚微服务是什么或不是什么开始的.

微服务简介

最近,微服务这个概念越来越流行,很多企业开始选择微服务作为自己新的架构. 那么,什么是微服务呢? 我们先来看一下架构大神martin fowler对微服务的解释. The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing software applications as suites of independent

5分钟学习基于Go,go-microservice-template,Minke的微服务

本文讲的是5分钟学习基于Go,go-microservice-template,Minke的微服务,[编者的话]本篇文章介绍了Go语言下构建微服务的例子,作者利用一个helloword讲解了如何使用他的微服务框架,该框架不仅包含了构建服务,还包括路由.请求验证.日志记录.测试.动态配置变更,最后将提供了将服务整合到Docker容器并持续集成.本文干货满满,虽然需要一些对Go语言的基础,但是这构建微服务的思路是通用的. 介绍 几周前我去参加一个零售环境下的技术会议,直到午饭时间都没人提及'Dock

三分钟读懂TT猫分布式、微服务和集群之路

针对新手入门的普及,有过大型网站技术架构牛人路过,别耽误浪费了时间,阅读之前,请确保有一定的网络基础,熟练使用Linux,浏览大概需要3-5分钟的时间,结尾有彩蛋. 分布式 小马正在经营一个在线购物网站,名叫TT猫,有商品管理.订单管理.用户管理.支付管理.购物车等等模块,每个模块部署到独立的云服务主机. 现在,程序员小明同学浏览TT猫,想买一款牛逼的cherry机械键盘来提升自己的工作效率.小明打开TT猫首页.搜索商品.浏览详情以及评论.添加购物车.下单.支付等等一系列操作.小明同学一气呵成,

微服务的隐性红利:你不知道的8个好处

本文讲的是微服务的隐性红利:你不知道的8个好处[编者的话]微服务未必适用于所有公司,实施过程也并非易事.之前大家讨论是否采用微服务时的重点主要在于它的自主性.敏捷性.弹性和开发者的生产能力.但这并不是微服务的所有优点,本文中提到的这些额外的好处也是值得利用的. 微服务未必适用于所有公司,实施也并非易事. 作为构建分布式系统的一种方式,微服务可以做到只用hardened API提供服务.围绕特定.有界的上下文或责任范围,这些服务具有高内聚低耦合的特点.这些服务通常很简单,但却可以构成非常丰富和复杂

《SpringBoot揭秘:快速构建微服务体系》—第1章1.3节微服务会带来哪些好处

1.3 微服务会带来哪些好处显然,随着系统复杂度的提升,以及对系统扩展性的要求越来越高,微服务化是一个很好的方向,但除此之外,微服务还会给我们带来哪些好处?1.3.1 独立,独立,还是独立我们说微服务打响的是各自的独立战争,所以,每一个微服务都是一个小王国,这些微服务跳出了"大一统"(Monolith)王国的统治,开始从各个层面打造自己的独立能力,从而保障自己的小王国可以持续稳固的运转.首先,在开发层面,每个微服务基本上都是各自独立的项目(project),而对应各自独立项目的研发团队

微服务(Microservices)—Martin Flower【翻译】【转载】

本文转载自:http://www.cnblogs.com/liuning8023/p/4493156.html ---------------------------------------------------------------------------- 原文是 Martin Flower 于 2014 年 3 月 25 日写的<Microservices>. 本文内容 微服务 微服务风格的特性 组件化(Componentization )与服务(Services) 围绕业务功能的组