06 架构核心技术之微服务

本课时我们来学习微服务。

本课时主要包括如下内容。

  • 单体系统的困难:编译部署困难、数据库连接耗尽、服务复用困难、新增业务困难。

  • 微服务框架:Dubbo 和 Spring Cloud,微服务的架构策略。

  • 微服务模式:事件溯源、查询与命令职责分离 CQRS、断路器、超时。

  • 微服务最佳实践。

单体系统的困难

在微服务出现之前,互联网应用系统主要是单体系统,也就是说一个网站的整个系统由一个应用构成。如果是 Java,就打包成一个 war 包,一个 war 包包含整个应用系统,系统更新的时候,即使只是更新其中极小的一部分,也要重新打包整个 war 包,发布整个系统。

这样的单体系统面临的挑战主要是什么呢?

编译、部署困难

随着网站的业务不断发展,系统会变得越来越庞大,最后变成一个巨无霸的系统。

在我曾经工作过的公司,单个应用可能有几个 G 大,这对于网站开发工程师来说,开发编译和部署都是非常困难的。在开发的过程中,即使只改了庞大系统中的一行代码,也必须把完整的网站系统重新打包,才能做测试。这会经历漫长的编译过程:出去抽一支烟回来一看,在编译;又去喝了一杯水回来,还在编译;再去趟厕所,回来还在编译。好不容易编译结束了,如果某个配置项错误导致编译失败,又得重来一次,浪费大半天的时间。这样的单体系统对于开发部署和测试都是非常困难的。

代码分支管理困难

因为单体应用非常庞大,所以代码模块也是由多个团队共同维护的。但最后还是要编译成一个单体应用,统一发布。这就要求把各个团队的代码 merge 在一起,这个过程很容易发生代码冲突。而 merge 的时候又是网站要进行发布的时候,发布过程本来就复杂,再加上代码 merge 带来的问题,各种情况纠缠在一起,极易出错。所以,在单体应用时代每一次网站发布都需要搞到深更半夜。

数据库连接耗尽

对于一个巨型的应用而言。因为有大量的用户进行访问,所以必须把应用部署到大规模的服务器集群上。然后每个应用都需要与数据库建立连接,大量的应用服务器连接到数据库,会对数据库的连接产生巨大的压力,某些情况下甚至会耗尽数据库的连接。

新增业务困难

巨无霸单体应用的另一个挑战是新增业务困难。因为所有的业务都耦合在一个单一的大系统里,通常随着时间的发展,这个系统会变得非常的复杂,里面的各种结构也非常乱,想要维护这样一个系统是非常困难和复杂的。很多工程师入职公司半年,都还不能熟悉业务,因为业务太过庞大和复杂,经常会出各种错误。所以就会出现这种现象:熟悉系统的老员们工忙得要死,加班加点干活,不熟悉系统的新员工们一帮忙就出乱,跟着加班加点干活。整个公司热火朝天地干活,但最后还是常常出故障,新的功能迟迟不能上线。

发布困难

因为一个 war 包包含了所有的代码,进行新版本发布的时候,发布代码跟自己的开发的代码一点关系没有,但是因为 war 包包含了自己的代码,为了以防万一,也不得不跟着发布值班。结果真正更新代码功能的只有几个人,而整个部门都要跟着加班。常常出现,到了深夜,有代码更新的同事汗流浃背进行代码冲突处理和修复发布 bug,没有代码更新的同事陪着聊天、打瞌睡、打游戏,这种情况。

微服务架构

解决上述问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周壮

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值