一、单体架构 1.什么是单体架构?
单体架构也可叫单体系统或单体应用,是一种把系统所有的功能模块耦合在一个应用的架构方式。
2.单体架构的优缺点有哪些? (1)优点部署简单;
技术单一;
用人成本相对低;
项目管理相对较易;
测试相对简单直观;
应用开发相对简单;
横向扩展容易。
(2)缺点项目过于臃肿,bug难以迅速定位;
资源无法隔离(某个功能模块对应的接口访问量大,直接会影响整体性能);
无法灵活扩展;
交付周期长(需求->设计->开发->测试->现场实施部署,就传统性质的企业而言);
部署消耗时间长;
可靠性差;
受技术栈限制;
可伸缩性差;
复杂度高。
3.单体架构的技术选型有哪些?从Java的角度看,有Spring全家桶一站式解决方案和相关的生态比较丰富(国外有GitHub,国内有Gitee,相应的开源框架非常多)。
从PHP的角度看,PHP是Web开发中最好的语言(至于为什么说它是Web开发中最好的语言,我想原因有三个,第一个是通吃方案(网站开发、App后端、小程序等);第二个许多国内外的网站建设都是基于PHP,早期的淘宝也是如此;第三个容易上手。)
所有的技术选型都离不开一个基本的原则,那就是业务,分布式微服务技术选型也不例外,技术服务于业务,合适的技术框架对业务支撑非常关键。我在2020年的写过这样一篇文章,其中关于对技术的思考提到过,感兴趣的朋友可以阅读这篇文章:2020年的一些思考和总结
(1)那么关于技术选型要注重哪些因素呢?业务相关性;
框架流行度;
学习曲线;
文档;
社区支持;
单元测试;
可扩展性;
许可证。
(2)在(1)的基础上举例进行说明以我曾经在某创业公司对EduSoho二次开发为例:
从业务相关性的角度,当时我们做的是编程教育项目,EduSoho是一个在线教育解决方案,业务性与我们完美契合。
从框架流行度,EduSoho是基于PHP开发,前面我提到过PHP是Web开发最好的语言,而EduSoho使用的PHP框架是Symfony,Symfony的框架流行度,以GitHub下图为例说明:
从中可以看出该框架非常流行,start非常多。
从学习曲线来看,我觉得Symfony还是蛮简单,感兴趣的朋友,可以参考我这篇文章学习:
Symfony之入门学习
只要熟悉Symfony,二次开发EduSoho并不难。
从文档上来看,Symfony框架资料非常多(网上有各种各样的博文),对应的EduSoho官网方面的资料也非常多。
从社区支持上来看,如果Symfony出现任何问题,通过搜索引擎不能解决的话,可以去GitHub给开源维护者提issue,详细说明问题,一般都能得到回答(前提把问题说清楚,英文不会也不怕,可以借助翻译工具)。
从单元测试上来看,Symfony本身就支持单元测试,不仅仅是PHP相关的框架,Java和Go对应的Web开发框架均支持单元测试。
从可扩展性上来看,Symfony发展至今能有这么多关注(前面的Github截图),说明国内外有不少公司在用它,只要很多公司在用可扩展性自然不差(可扩展性指能适应业务的变化)。
从许可证上来看,EduSoho减少当时我们编程教育项目的从0到1开发的时间,只要项目能够盈利,花钱买许可证也是没问题的,结果我们在C城果然拿下了第一笔订单。 4.前面提到的单体架构的缺点(也可叫短板)该如何应对呢?
用组件化就能解决这个单体架构的缺点。
(1)什么是组件化?它的目的是什么?组件化是一种高效的处理复杂应用系统,更好的明确功能模块作用的方式。目的是为了解耦,把复杂系统拆分成多个组件,分离组件边界和责任,便于独立升级和维护。
(2)组件化的实际例子有哪些?这里只列举两个例子(实际的例子非常多):
曾在某创业公司做VsCode二次开发时,当时写的各种VsCode插件,其实也是一种组件化的体现(本质上都是为了解耦,避免大量的代码耦合混杂)。