相关阅读:

厉害了Word哥!阿里巴巴73款开源产品最全总结全景图

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

原文:http://t.cn/RImg3oF

-END-

欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

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

  1. 十分钟了解“微服务”

    十分钟了解"微服务" 微服务架构这个概念出来也有3-4年的时间了,从最开始在互联网企业的广泛应用,到现在越来越多的企业开始关注和希望尝试使用微服务架构.那么什么是微服务呢?微服务, ...

  2. 微服务的好处与弊端_一文了解微服务的流程和组织

    导语:微服务架构最重要的好处是它可以实现大型的复杂应用程序的持续交付和持续部署.持续交付和持续部署是DevOps的一部分,DevOps是一套快速.频繁.可靠的软件交付实践.高效能的DevOps组织通常 ...

  3. 微服务的好处与弊端_在云原生时代,就一定要用微服务吗?

    微服务架构可谓是当前软件开发领域的技术热点,它在各种博客.知识媒体和业界知名会议演讲上的出镜率非常之高,无论是做基础架构还是做业务系统的工程师,对微服务都相当关注,而这个现象与热度已经持续了近 5 年 ...

  4. 微服务的好处与弊端_《微服务架构设计模式》-学习总结07

    本篇主要总结第七章:在微服务架构中实现查询 在微服务架构中查询数据的挑战 何时以及如何使用API组合模式实现查询 何时以及如何使用CQRS模式实现查询 微服务架构中,查询通常需要检索分散在多个服务所拥 ...

  5. 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)

    这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行,系统与系统之间通过RPC接口通信.这样这些系统之间的耦合度大大降低,你的系统将非常容易扩展 ...

  6. 03 | 微服务反模式与陷阱:代码共享反模式

    译者简介:ASCE1885, <Android 高级进阶>作者. 本文首发于Source Code Chain开发者社区,欢迎使用我的专属邀请链接加入一起交流. 微服务被称为"无 ...

  7. 微服务应该这么搞,万字长文谈微服务经历!

    微服务越来越火.很多互联网公司,甚至一些传统行业的系统都采用了微服务架构.体会到微服务带来好处的同时,很多公司也明显感受到微服务化带来的一系列让人头疼的问题.本文是笔者对自己多年微服务化经历的总结.如 ...

  8. 【中美技术专家分享实录】微服务的挑战

    保证研发团队的敏捷性催生了微服务的兴起,如何从无到有搭建微服务?如何从legacy系统中慢慢改造?是否所有阶段的团队都适合微服务?哪些情况下不适合使用微服务?我们请来了三位经历过改造之痛的嘉宾来分享上 ...

  9. 【技术干货】跨境茶话会9月期丨微服务的挑战

    大师兄说 保证研发团队的敏捷性催生了微服务的兴起,如何从无到有搭建微服务?如何从legacy系统中慢慢改造?是否所有阶段的团队都适合微服务?哪些情况下不适合使用微服务?我们请来了三位经历过改造之痛的嘉 ...

  10. 微服务框架实施_规划和实施微服务的原则

    微服务框架实施 Planning a microservices-based application - where to start from? This architecture is compo ...

最新文章

  1. 艾伦人工智能研究院开源AllenNLP,基于PyTorch轻松构建NLP模型
  2. html点击隐藏点击出现,点击按钮,内容隐藏,再点击一下,然后内容又显示了,这种效果怎么做?然后默认的是隐藏的...
  3. Python多任务(7.多进程的应用:文件的拷贝器例子)
  4. 跳一跳python刷分_【Python跳一跳刷分辅助】iPhone版_Python跳一跳刷分辅助Ios最新版下载_Python跳一跳刷分辅助v1.0.1苹果版免费下载 - 九酷苹果网...
  5. 教你玩转CSS border(边框)
  6. Java文件类boolean canExecute()方法(带示例)
  7. Net C# 扩展方法
  8. 方便微信公众号等手机网页调试插件eruda和vConsole
  9. MS Server中varchar与nvarchar的区别
  10. e2 android,魅蓝E2做工怎么样?魅蓝手机E2拆机全过程图解
  11. 液晶显示器背光测试软件,液晶屏背光灯驱动板故障检测方法_维修技术
  12. Matlab之聚类分析
  13. 360浏览器通过访问插件管理界面启用flash实例演示,360浏览器启用Adobe Flash Player方法
  14. Ubuntu安装Robo3T(Studio3T Free)
  15. jsmind(Jsmind数据格式)
  16. 23000字,讲清信息流广告数据分析。
  17. 百度脑图制作的简单的个人介绍
  18. 内网渗透- *** PTH(传递哈希)***PTT(传递票据)***PTK(传递密钥)
  19. sklearn聚类之—KMeans
  20. 小米手机4c获取Root权限的流程

热门文章

  1. 谈谈出入React框架踩过的坑
  2. Joseph UVA 1452 Jump
  3. ftp文件上传后大小改变问题解决
  4. OSPF的基本配置介绍
  5. Perl默认变量==
  6. 打造自己的VC++ 6.0免安装简版
  7. 如何通过 MacBook Pro 上的触控栏使用辅助功能?
  8. js将一篇文章中多个连续的br标签替换成两个连续的br标签
  9. 深度学习高速路上,PaddlePaddle正在弯道超车
  10. 主机与虚拟机网桥制作与网卡链路聚合