天天吹微服务,单体应用有啥不好?

单体应用确实有问题!

最近在研究微服务架构,有一点点心得,打算在公众号上写几篇文章和大家慢慢分享下。

这个话题有点大,我会分几篇文章和大家慢慢说,今天就先来说说传统的单体应用有哪些弊端,正是因为单体应用存在的弊端,使得我们不得不考虑发展微服务。

人类发展的历史就是一个社会分工不断细化的历史,从这个角度来讲,微服务这种将一个复杂的大项目拆分为众多小项目,然后程序员分工合作,共同完成项目,这种协作方式是符合历史潮流的。

这是我们站在今天的角度来说的,曾经的单体应用也是先进生产力的代表。

但是,随着互联网的发展,我们对一个系统的要求越来越高,单体应用已经很难适应当前的开发,因此在回答我们为什么要使用微服务这个问题之前,我们有必要来聊一聊单体应用目前都面临哪些问题。

面临的问题

1.项目过度复杂

你要创建一个简单的用户管理系统,二话不说,直接创建 Maven 项目然后开干就完事了,这没问题,因为这很简单。

但是你要说想搞一个淘宝网站,或者你想搞一个用友 U8 系统,那你恐怕就得先慢慢设计系统架构了。单体应用,由于就是一个项目,所有的功能都是写在一个项目中,不可避免的出现项目过度复杂的情况。而且这种复杂情况会不断恶化。

有的小伙伴可能有这样的经验,刚入职了一家公司,新接手了一个项目,上面催的很急,让你赶快修复几个 bug ,项目复杂,光是实体类的包就有好几个 bean、model、pojo 等,一个项目被很多人经手之后,到你手里,早已经一团乱麻,你小心翼翼尽量不碰触到已有的功能,终于修完了几个 bug,搞了俩礼拜,你觉得这个项目太坑爹了,不想干了,于是接盘侠从你手里接到了一个复杂度又上升了一步的项目。

就这样,一个原本简简单单的单体项目,在变复杂的路上一去不复返。

2.开发速度缓慢

单体应用开发速度缓慢,因为单体应用复杂了之后,项目变得异常臃肿而且庞大,每一次编译构建、运行以及测试,都需要花费大量时间,而且如果测试有问题,又得从头来一遍,注意,这里的每一次从头编译构建等都是整个项目的从头编译构建。

即使你可能只要修改某一个参数,你也得把上面整个流程走一遍,相当于每一次的修改都是牵一发而动全身的操作。

速度没法快。

3.不易扩展

项目中不同模块对计算机的性能要求不一样,例如使用 Redis 来保存了大量的热点数据,那么我们希望服务器的内存非常大,另外有一个模块涉及到了图片处理,我们又希望服务器的 CPU 非常强,如果是单体应用部署的话,那么这些条件服务器都要满足。

4.技术栈不易扩展

单体应用还有一个劣势就是技术栈不易扩展,一旦你选定了某一个技术栈来开发项目,以后很难在技术栈上做切换。有的公司还会自己搞一套系统,这种在当时看起来好像都没有啥问题,可是经过几年之后,回头再看,已经很过时了,很 low 了,当初设计系统的人可能已经离职了,刚入职的新手也不敢动这个老古董,只能在这个老古董上面忍痛开发。

有的时候,有一个服务需要处理高并发,你很想用 Go 语言来做,可是做不到,没法引入其他语言。

这些都是单体应用的劣势,如果有微服务,上面这些问题都将得到解决。

曾经的优势

当然,事物都是有两面性的,单体应用也有它自己的优势,例如:

  • 开发简单,一个 IDE 就可以快速构建出一个单体应用
  • 测试简单
  • 部署简单,Tomcat 安装好之后,应用扔上去就行了
  • 集群化部署也很容易,多个 Tomcat + 一个 Nginx 分分钟就搭建好集群环境了

这么多优势,还是难掩劣势。

不过大家在做项目的时候,还是要结合实际情况来选择,不能因为微服务厉害,所有项目都是微服务,如果你仅仅只想做一个用户的增删改查,那么很明显,创建一个简单的单体应用是最合适的。

好了,本文主要和大家分享了传统单体应用存在的一些问题,正是因为这些问题,我们需要引入微服务,下篇文章,我们就来看看微服务有哪些优势。

参考资料:

[1] Chris Richardson.微服务架构设计模式[M].北京:机械工业出版社,2019.

关注公众号【江南一点雨】,专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货!

原文地址:https://www.cnblogs.com/lenve/p/11261876.html

时间: 2024-10-09 14:11:33

天天吹微服务,单体应用有啥不好?的相关文章

Spring Cloud微服务实战

第1章 课程介绍 课程导学和学习建议 第2章 微服务介绍 什么是微服务, 单体架构优缺点, 常见的几种架构模式. 第3章 服务注册与发现 介绍微服务中的服务注册与发现机制,Spring Cloud Eureka组件的使用以及如何保证高可用 第4章 服务拆分 以商品服务和订单服务为例介绍微服务拆分中的业务功能拆分和数据拆分的注意点以及将项目模块进行多模块改造 第5章 应用通信 比较HTTP REST 和 REST,同步和异步, 介绍Spirng Cloud 采用的两种HTTP方式,重点介绍Feig

架构演进之「微服务架构」

"为什么要搞「微服务架构」"?这也是我们当初讨论的聚焦点.现在天天把"微服务"挂在嘴边的人很多,但是有多少人真正深入思考过"为什么",我认为可能不多. 于是我在梳理材料的时候,就决定从源头入手--即"为什么". 架构是演进的,不是一蹴而就. "架构演进趋势图"中的趋势分析,在业界比较公认.这个图本身的内容.关于各个架构的描述.优缺点等等,网上简单搜索一下有大把大把的,感兴趣的同学可以自行搜索,毕竟这也不是我

JAVA Cloud微服务项目实战 SpringBoot 2.x +SpringCloud

课程目录第1章 课程介绍课程导学和学习建议 1-1 SpringCloud导学1-2 获取源码说明1-3 提问建议1-4 点餐项目演示说明第2章 微服务介绍什么是微服务, 单体架构优缺点, 常见的几种架构模式. 2-1 微服务和其他常见架构2-2 从一个极简的微服务架构开始第3章 服务注册与发现介绍微服务中的服务注册与发现机制,Spring Cloud Eureka组件的使用以及如何保证高可用 3-1 Spring Cloud Eureka3-2 Eureka Server3-3 Eureka

微服务介绍

PART1 什么是微服务?什么时候适合微服务改造?微服务架构到底是什么样的? wiki定义介绍:微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯.同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等. 什么是微服务 单体应用 ? 早些年,各大互联

微服务学习(一):微服务介绍

目录如下 软件架构的进化 微服务的优势和不足 微服务架构所带来的问题及解决方案 1.软件架构的进化 于笔者经历来看 架构大致从 单体架构 >MVC > 微服务 单体架构 单体架构特点在于所有功能业务打包在一个发布包里,部署在一个web容器中,运行在一个进程里.单体架构的优点在于 容易开发 -- 一个人就可以写了,但是你想想这个后期其他人维护.... 容易测试 -- 所有功能都在一个进程里嘛,测试就简单了 容易部署 -- 比如一个war包 丢服务器上就好了 缺点 维护困难 -- 代码量之后越来越

什么是微服务,微服务简介

目录 什么是微服务 单体系统 1.项目过于臃肿 2.资源难以隔离 3.扩展瓶颈模块受限 微服务 1.独立部署.灵活扩展 2.资源隔离 1.架构设计复杂 2. 管理复杂 @ 什么是微服务 今天简单了解一下微服务,在看微服务前,先了解一下传统的单机系统. 单体系统 所有的业务子模块都集中在一个系统中,优点是便于管理,但是规模变大的时候,缺点就很明显了. 缺点: 1.项目过于臃肿 当产品规模越来越大,各种的大大小小模块都塞在一个项目中,必然会使整个项目变的臃肿,让开发者难以维护. 2.资源难以隔离 系

你的业务是怎么演变为微服务的

以前的项目譬如新闻模块和商品模块是放到一个项目(譬如tp)里开发的.对么1.现在 商品每天访问量100万,新闻每天访问只有200 . 那么再用以前的方式部署就不行了.2.所以要把商品模块单独拿出来,分表部署到3台机器上做负载均衡 由于拆分出来了. 所以 新闻模块 如果要在新闻页面里 显示个最热商品列表 咋办?1.传统做,直接require news.php就行了.现在不行了2.难道新闻模块直接 select * from product ? 耦合度也太高.太挫了 所以商品模块 就要专门放出一个

从单体架构迁移到微服务,8个关键的思考、实践和经验

转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”.   随着微服务架构的持续火热,网络上针对微服务和单体架构的讨论也是越来越多.去年的时候,社区更多的关注点是在二者的区别以及优缺点辨析上,而今年,越来越多的人开始关注如何从单体架构迁移到微服务上.毋庸置疑,微服务的理念正在席卷整个开发者社区,像Netflix.Uber这样的公司都是非常成功的应用案例. 但需要注意的

单体应用与微服务优缺点辨析

前久由于需要做一个异构系统集成的架构设计,所以深入研究了下微服务架构,今天由于家里断网(只能用手机热点)所以分享一篇OneNote里面摘录的文章. 微服务架构(MSA)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在架构层次而非在具体代码上应用SOLID原则的设计原则.个人我认为微服务更多的是一种架构风格,也可以看作是一种粒度更细的SOA.在InfoQ上有很多介绍微服务架构的文章,今天要分享的是一篇对比单体应用和微服务的文章,所谓单体应用和微服务可以