>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19024 个阅读者 刷新本主题
 * 贴子主题:  说说微服务的优缺点 回复文章 点赞(0)  收藏  
作者:javathinker    发表时间:2020-06-16 01:14:20     消息  查看  搜索  好友  复制  引用

      
      点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

IMG_20161026_142532.jpg

     随着业务发展,业务功能的堆叠和复杂化,团队壮大,代码量也增加,各种问题开始凸显:
  • 代码结构开始变得混乱,难以管理,提交冲突,改一处引多处。
  • 沟通成本变高。
  • 代码维护难:“修复越多,缺陷越多”。
  • 引入和集成技术变得困难,依赖版本冲突,新特性无法使用。
最后开发效率也开始下降,代码维护的成本提高。

     上线后稳定性不高,更大几率的影响可靠性和可用性,所有功能都运行在一个进程中,任何一个功能中出现bug,比如内存泄露,逻辑死循环耗尽CPU等,可以导致整个应用挂掉。

其中几个高并发功能,也不得不部署将所有功能增加部署实例,内存和CPU利用不够充分,灵活性也变差。

     其缺点也很明显:
  • 运维工作量增加,应用运维管理复杂。
  • 代码重复率增加,团队自治带来的重复劳动。
  • 分布式系统固有的复杂性和缺点:网络延迟,不可靠,负载均衡,调用,事务等等
微服务架构可以从一定程度上解决或缓解上述问题,但它也不是万能的,但也带来了一系列的非功能性需求,比如说分布式事务、自动化运维,服务发现,服务路由等额外需求,但其带来的好处以及克服其缺点总结如下:
  • 服务发现带来很多自运维特性。
  • 单一职责原则在各种各种场景的解耦合
  • 业务开发:只关注小团队所熟悉和负责的业务,做到专而精,并且容易实现持续交付。
  • 代码管理:无论多git repository还是多maven module都可以做到一般的代码隔离,尤其是积累很多年的代码,拆分后更清晰不混乱,易管理。
  • 技术实现:处理的业务不同,可能会采取不同的技术栈,如果是单体,依赖有冲突的时候不得不花时间fix冲突或者妥协放弃集成。微服务拆分后,相互独立,集成新技术更容易。
  • 测试:尤其是对单元测试和自动化测试更有好处,但对于整个集成测试却带来了挑战,通过可视化运维系统和一个完整的测试环境搭建,以及架构上适当调整,成熟化测试环境后,可以弥补这种不便。
  • 独立部署,快速而出错几率比较低,但运维量比较大,但通过可视化自动运维系统来克服。
  • 运行时的隔离,这个是显而易见的,就跟汽车道路一样,谁跑谁的道,互补干扰。
  • 分布式事务也有很多成熟的参考方案来解决:补偿型,可靠事件型,TCC型等。
  • 服务调用上,可以通过超时、隔离、服务发现负载均衡提高可用性和可靠性。
  • 网络延迟,可以采用轻量级协议和连接池技术等来弥补。
----------------------------
原文链接:https://www.jianshu.com/p/a46870dc1f4e
作者:铁汤

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-06-18 19:52:14 重新编辑]
  Java面向对象编程-->输入与输出(上)
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->数据库事务的概念和声明
  Java网络编程-->对象的序列化与反序列化
  精通Spring-->Vue简介
  Vue3开发-->Vue Router路由管理器
  Redis为什么单线程能够支持高并发
  Spring API中JAVA反射—工具类ReflectionUtils
  SpringMVC下的JUnit4单元测试
  微服务的拆分方式
  Spring MVC中自定义国家化LocaleResolver
  HandlerInterceptor与WebRequestInterceptor的异同
  Spring Data JPA详解
  @SessionAttributes的用法
  什么是Redis?Redis的各项功能解决了哪些问题?
  Spring Cloud构建微服务架构的断路器
  Spring Cloud构建微服务架构的服务注册与发现
  探讨通过Feign配合Hystrix进行调用时异常的处理
  RESTful API的最佳设计原则
  微服务中的Kafka与Micronaut
  MyBatis解析和运行原理
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。