(1)java Spring Cloud+Spring boot+mybatis企业快速开发架构之微服务是什么?它的优缺点有哪些?

JIAN2 2021-09-15 10:05:35
java spring Cloud cloud+spring


 “微服务”一词来源于 Martin Fowler 的《Microservices》一文。微服务是一种架构风格,即将单体应用划分为小型的服务单元,微服务之间使用 HTTP 的 API 进行资源访问与操作。

在笔者看来,微服务架构的演变更像是一个公司的发展过程,从最开始的小公司,到后来的大集团。大集团可拆分出多个子公司,每个子公司的都有自己独立的业务、员工,各自发展,互不影响,合起来则是威力无穷。

臃肿的系统、重复的代码、超长的启动时间带给开发人员的只有无限的埋怨,丝毫没有那种很舒服的、很流畅的写代码的感觉。他们把大部分时间都花在解决问题和项目启动上面了。

微服务架构的优势
使用微服务架构能够为我们带来如下好处:

1)服务的独立部署
每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。

2)服务的快速启动
拆分之后服务启动的速度必然要比拆分之前快很多,因为依赖的库少了,代码量也少了。

3)更加适合敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。

4)职责专一,由专门的团队负责专门的服务
业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。

5)服务可以动态按需扩容
当某个服务的访问量较大时,我们只需要将这个服务扩容即可。

6)代码的复用
每个服务都提供 REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。

微服务架构的劣势
微服务其实是一把双刃剑,既然有利必然也会有弊。下面我们来谈谈微服务有哪些弊端,以及能采取什么办法避免。

1)分布式部署,调用的复杂性高
单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问题,比如网络问题、容错问题、调用关系等。

2)独立的数据库,分布式事务的挑战
每个微服务都有自己的数据库,这就是所谓的去中心化的数据管理。这种模式的优点在于不同的服务,可以选择适合自身业务的数据,比如订单服务可以用 MySQL、评论服务可以用 Mongodb、商品搜索服务可以用 Elasticsearch。

缺点就是事务的问题了,目前最理想的解决方案就是柔性事务中的最终一致性,后面的章节会给大家做具体介绍。

3)测试的难度提升
服务和服务之间通过接口来交互,当接口有改变的时候,对所有的调用方都是有影响的,这时自动化测试就显得非常重要了,如果要靠人工一个个接口去测试,那工作量就太大了。这里要强调一点,就是 API 文档的管理尤为重要。

4)运维难度的提升
在采用传统的单体应用时,我们可能只需要关注一个 Tomcat 的集群、一个 MySQL 的集群就可以了,但这在微服务架构下是行不通的。当业务增加时,服务也将越来越多,服务的部署、监控将变得非常复杂,这个时候对于运维的要求就高了。
 


推荐分布式架构源码

版权声明
本文为[JIAN2]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/Liuzhijuan/p/15270738.html

  1. 10天拿到字節跳動Java崗比特offer,Java知識點思維導圖
  2. 10 jours pour obtenir un Byte Jump Java post offer, Java Knowledge point Mind Map
  3. 10 jours pour obtenir l'octet Jump Java post offer, apprendre les étapes du développement Java
  4. Java version of gppc Reality Three: server side stream
  5. Linux Series: Dites - lui qu'il ne connaît pas kill du tout
  6. "Data structure and algorithm" of front end -- binary search
  7. 2020-2021京东Java面试真题解析,如何才能通过一线互联网公司面试
  8. 13 SpringBoot整合RocketMQ实现过滤消息-根据SQL表达式过滤消息
  9. 12 SpringBoot整合RocketMQ实现过滤消息-根据TAG方式过滤消息
  10. 11 SpringBoot整合RocketMQ实现事务消息
  11. 11 springboot Consolidated rocketmq Implementation transaction message
  12. 12 springboot Consolidated rocketmq Implements Filtering messages - Filtering messages according to tag method
  13. 13 springboot Consolidated rocketmq Implementation Filtering messages - Filtering messages according to SQL expressions
  14. linux系列之:告诉他,他根本不懂kill
  15. (1)java Spring Cloud+Spring boot企业快速开发架构之微服务是什么?它的优缺点有哪些?
  16. Oracle 检查 DATE 列 RANGE 分区表已有分区的最大日期时间
  17. ConcurrentHashMap--原理
  18. 2020 - 2021 JD Java interview Real question Analysis, How can interview through First - Line Internet Company
  19. Concurrenthashmap - - Principes
  20. Oracle vérifie l'heure de date maximale d'une partition existante dans la colonne date
  21. Docker Compose 实践及梳理
  22. Qu'est - ce qu'un microservice pour Java Spring Cloud + Spring Boot Enterprise Quick Development architecture?Quels sont ses avantages et ses inconvénients?
  23. Plus sign interview knowledge points in Java
  24. Pratique et organisation de la composition des dockers
  25. Linux Series: Dites - lui qu'il ne connaît pas kill du tout
  26. Convenient CSS and jQuery drop-down menu solution
  27. Linux analog packet loss rate
  28. Redis:我是如何与客户端进行通信的
  29. 15 useful cron work examples commonly used by Senior Linux system administrators
  30. 24个 JavaScript 循环遍历方法,你都知道吗?
  31. Reading notes of JavaScript advanced programming (3rd Edition) 4
  32. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
  33. 24 méthodes de traversée de boucle Javascript, vous savez?
  34. 30 minutes pour apprendre à ouvrir le tableau de bord k8s (kubernets) dans le docker (explication graphique)
  35. Redis: comment je communique avec les clients
  36. Wsl2: Windows native Linux subsystem
  37. 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
  38. Docker Compose 实践及梳理
  39. Python高级用法总结(8)-函数式编程
  40. 261页前端面试题宝典,JavaScript变量声明提升
  41. The performance of JVM and Java applications of the same version differs by 30% on X86 and aarch64 platforms. Why?
  42. Page 261: dictionnaire des questions d'entrevue de première ligne, promotion de la Déclaration des variables JavaScript
  43. Python Advanced use Summary (8) - functional Programming
  44. Pratique et organisation de la composition des dockers
  45. 30 minutes pour apprendre à ouvrir le tableau de bord k8s (kubernets) dans le docker (explication graphique)
  46. [design pattern series] simple factory
  47. 2021Java最新大厂面试真题,阿里技术专家深入讲解
  48. Java equals and==
  49. Spring5(五)——AOP
  50. 海量列式非关系数据库HBase 原理深入
  51. java collections
  52. 海量列式非關系數據庫HBase 原理深入
  53. Base de données non relationnelle à grande échelle
  54. Printemps 5 (v) - AOP
  55. 2021 le dernier vrai problème d'entrevue d'usine de Java, expliqué en profondeur par les experts techniques d'Ali
  56. Java knowledge structure diagram and thinkinjava PDF file
  57. Do redis transactions satisfy atomicity?
  58. Java programmers must master 10 open source tools!
  59. [Cao Gong's essay] talk about the contract between Maven framework and plug-ins
  60. What books are better for learning Java