微服务确实很受欢迎,但是对于微服务的误解也是事实,本文对这些误解一一介绍下:

微服务不够“微”?

虽然微服务的定义很明确,但在开发社区中对它的解释却截然不同。

有些问题是:

1.它是否是单体架构的代表? 
 2.它是否是单体服务的代表? 
 3.它是否是逻辑功能的组合?

为了讨论这个问题,让我们以一个银行应用程序为例,

  • 3层架构解决了技术组件之间紧密耦合的问题,使它们能够独立更改。 例如:Web更改不应影响后端等。

  • 但是三层架构没有考虑到组件的功能或基于功能的分组。

  • 我创造了这个名字“F-Tier”架构,表明架构需要按功能划分。 这对于现代应用程序性能和吞吐量的成功至关重要,我将在本文中进一步解释细节。

微服务是可伸缩性的!

微服务是一种架构风格,它允许你向规模化的宏伟系统衍变,这是怎么做到的呢?传统的三层架构服务能伸缩可被扩展,那微服务有啥特别之处呢?

例如:在线旅行预定,购买请求和预定请求比例是100:1。

  • 这意味着什么呢, 101个请求中,购买请求能达到100个,而预定请求只有1个;

  • 这就敲响了警钟!预定需要的资源远远小于购买所占用的资源,为何不将整个系统按照期望比例缩放成100:1呢?

微服务更有利于系统维护和运行

“滚动式重启”, “热部署”, “轮询式部署, ”是不是听起来很熟悉?用最短的停机时间来维护应用系统,是现代应用系统的一个状态优先级典型表现。让我们举个例子,改变应用将会贯穿整个三层架构,包括数据库应用程序的变化。如果数据的语义被修改了,任何上述技术都是注定要失败的(例如:ORM(对象映射关系)一旦看到了对象的变化,就需要重新启动所有的节点)。

关于微服务:功能型-层架构给高可用性和维护带来了一个新的局面。即使银行报表微服务奔溃了也不会影响银行系统其他的功能。你将会为90%的消费者不使用银行报表功能感到庆幸。

微服务需要进一步发掘

好吧,任何关于自动伸缩的系统都需要被挖掘。

1.在微服务中有10个节点是购物的,两个节点是预定的; 
  2.由于假日季节,流入流量比较高; 
  3.你期望通过人工分拆购物实例得到什么? 
  4.假设分拆出了多个实例,那负载平衡器又是怎么实现负责均衡的呢?

传统的负载均衡器在静态环境中能够运行良好,但是当动态增加节点或执行脚本添加新实例的就很糟糕了。如果微服务能够实现缩放,微服务项目就需要被挖掘、注册、添加实现负载均衡;对,大部分的软件问题,通过引用间接层来解决。每个微服务在关闭或启动时都需要自我注册。这就需要一个注册管理员-负载均衡器,对微服务的加载很敏感。如何检查呢?

Netflix解决了这个问题, Netflix在开源Eureka上实现了负载均衡。

微服务是否支持多元化编程语言?

顾名思义微服务是以协议驱动的服务,这些服务是基于HTTP/REST( XML/ JSON数据传输)的。微服务与轻量级协议之间的清晰的定义边界,有助于建立一个多元化的编程团队,因为他们的焦点是功能而不在于选择语言。

微服务和容器是天作之合?

虚拟机的笨重和现代应用程序的性质,将他们分拆为微服务,使微服务成为容器的理想搭配。这是真正意义上的DevOps,打的包不仅仅是微服务的容器也是整体的一个执行环境。缺点是,应用团队将成为基础设施团队,需要对容器有个很好的理解。

微服务添加额外的复杂性?

1.Jenkins简单通道把两个应用部署到2个Tomcat里,以此类推,将膨胀出无数个微服务; 
2.随着部署的数量增加,部署的时间也跟着显著上升; 
3.需要有一个良好的容器管理,部署和分发工具和技术; 
4.每个微服务将拥有更多的日志文件,如果没有stash、 splunk这种合适的工具,对接调试事务将成为一场噩梦; 
5.如果每个Tomcat有10个连接,你会发现数百个来自不同微服务数据库连接;

总结

所有的事情都是有代价的,微服务也是一样,并不是所有的应用都有同样的架构,也不是所有应用对高可用性、可扩展性、可维修性都有着同样的要求。

长按订阅更多精彩▼

关于微服务的7个疑问和解答!相关推荐

  1. 直面PHP微服务架构挑战

    在4月20日的阿里云栖开发者沙龙PHP技术专场上,云智慧Technical VP高驰涛为大家介绍了微服务的前世今生,分享了微服务架构实践中所面对的诸多挑战以及相应的应对策略. 本次直播视频精彩回顾,戳 ...

  2. 如何应对数千微服务组件带来的挑战?

    专家简介 高驰涛 (Neeke Gao),PHP/PECL开发组成员,掌握近10种开发语言,9年架构师经验,6年研发管理经验.云智慧AIOps社区PMC,同时也是PECL/SeasLog.PECL/J ...

  3. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  4. golang bufio.newscanner如何超时跳出_Golang微服务的熔断与限流

    (给Go开发大全加星标) 来源:Che Dan https://medium.com/@dche423/micro-in-action-7-cn-ce75d5847ef4 [导读]熔断和限流机制对于大 ...

  5. 主流微服务全链路监控系统之战

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料!问题背景随着微服务架构的流行,服务按照不同的维度进行拆分,一次 ...

  6. Java微服务 vs Go微服务,究竟谁更强!?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 Java微服务能像Go微服务一样快吗?这是我最近一直 ...

  7. 微服务海量日志怎么处理,推荐你试试这款工具....

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者: 非洲羚羊 cnblogs.com/dengbangpang ...

  8. 打造一个TB级微服务日志监控平台

    本文主要介绍怎么使用 ELK Stack 帮助我们打造一个支撑起日产 TB 级的日志监控系统.在企业级的微服务环境中,跑着成百上千个服务都算是比较小的规模了.在生产环境上,日志扮演着很重要的角色,排查 ...

  9. TB级微服务海量日志监控平台

    本文主要介绍怎么使用 ELK Stack 帮助我们打造一个支撑起日产 TB 级的日志监控系统.在企业级的微服务环境中,跑着成百上千个服务都算是比较小的规模了.在生产环境上,日志扮演着很重要的角色,排查 ...

最新文章

  1. php include include_once 区别,「PHP」include()、include_once()、require()、require_once()的用法及区别...
  2. 为什么php动态语言,动态语言静态化
  3. python调用oracle的存储过程_python 调用 oracle 存储过程
  4. 四位达林顿_ULN2069B - 80 V - 1.5 A四路达林顿开关 - STMicroelectronics
  5. 收获,不止SQL优化——抓住SQL的本质--第十一章
  6. python机器学习梯度下降求解逻辑回归
  7. MySQL:浅析 Impossible WHERE noticed after reading const tables
  8. 使用TortoiseSVN下载source force的源代码
  9. DLL注入的多种方式
  10. gsp计算机软件管理,药品进销存管理系统(含GSP管理)
  11. Hibernate annotation配置方式的MappedBy使用详解
  12. 数据库设计(一、二、三及BCNF范式)
  13. 批处理QQ音乐生成的文件名
  14. EasyGUI-2:函数基础
  15. Zabbix3.4 通过163邮箱发送邮件监控报警
  16. Unity3d 动态字体
  17. Oracle的dual是什么东西啊
  18. 复选框实现。全选、全不选、多选
  19. Win PE在移动硬盘上“安家”
  20. oracle opaque_transform,使用dblink导致的/*+ OPAQUE_TRANSFORM */

热门文章

  1. 可持久化Trie +枚举 ---- P5795 [THUSC2015]异或运算
  2. szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告
  3. 荣耀3OS怎么升级鸿蒙系统,华为鸿蒙OS正式发布!教你如何升级
  4. 解题报告(二)B、(P3338 [ZJOI2014])力(FFT经典套路)(2)
  5. java 有界类型_Java™ 教程(有界类型参数)
  6. java ee开发技术 上海大学_学院介绍
  7. 安卓取map集合转换为json_android json解析成map格式
  8. python环境问题踩坑
  9. 【Data Algorithms CHP07】数组生成组合排列
  10. JAVA入门到精通-第73讲-学生管理系统5-dao.sqlhelper