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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介:

微服务架构设计代表了一种架构设计思想,配合现在的容器技术(如 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]

相关文章
|
供应链 架构师 数据库
架构师带你搞明白微服务进阶场景实战:服务之间的数据依赖问题
数据同步 上面讲解了数据一致性的解决方案,这一篇来讲讲服务之间的数据依赖问题,还是先来说说具体的业务场景。 业务场景:如何解决微服务之间的数据依赖问题 在某个供应链系统中,存在商品、订单、采购这3个服务,它们的主数据部分结构表如下。
架构师带你搞明白微服务进阶场景实战:服务之间的数据依赖问题
|
6月前
|
存储 测试技术 API
如何避免微服务设计中的耦合问题
如何避免微服务设计中的耦合问题
66 4
|
7月前
|
缓存 Devops 微服务
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
|
存储 分布式计算 Kubernetes
微服务想用好,先把分布式和微服务之间的关系搞清楚
微服务想用好,先把分布式和微服务之间的关系搞清楚
微服务想用好,先把分布式和微服务之间的关系搞清楚
|
消息中间件 运维 监控
微服务全生命周期稳定性实践(二)| 学习笔记
快速学习微服务全生命周期稳定性实践。
微服务全生命周期稳定性实践(二)| 学习笔记
|
消息中间件 弹性计算 运维
微服务全生命周期稳定性实践(一)| 学习笔记
快速学习微服务全生命周期稳定性实践。
微服务全生命周期稳定性实践(一)| 学习笔记
|
消息中间件 运维 Kubernetes
我在很多情况下不建议盲目使用微服务架构
依托于容器化的普及,Cloud微服务技术当前比较盛行,在以前应该是Dubbo服务,后来慢慢建立了微服务体系,注册中心,分布式配置等各类组件,后面Nefix组件有些开始不维护,再到AlibabaCloud组件,现在很多开源框架、培训机构等依然以这些做一些宣传点。然后从自己的在多个大中小项目和落地的情况,企业运营管理,跟进行业先进技术发展,后期运维效果等多个角度思考,这无形中也会引起另一方面的方向失误
我在很多情况下不建议盲目使用微服务架构
|
运维 监控 Kubernetes
一份微服务架构手稿图,彻底搞定微服务核心原理!
微服务的概念最早在 2012 年提出,在 Martin Fowler 的大力推广下,微服务在 2014 年后得到了大力发展。今天我们通过一组手绘图来梳理下微服务的核心架构。
865 0
一份微服务架构手稿图,彻底搞定微服务核心原理!
|
消息中间件 存储 架构师
微服务设计 10 大反模式和陷阱!
O’Reilly的电子书《Microservices AntiPatterns and Pitfalls》讲述了在微服务设计实现时十种最常见的反模式和陷阱。本文基于此书,将这十个点列出。
262 0
微服务设计 10 大反模式和陷阱!
|
监控 NoSQL 网络协议
超详细解析微服务架构,写得太好了!
本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。
超详细解析微服务架构,写得太好了!