曾在某教育公司做前后端开发的时候,前端当时使用的是React框架,那个时候我也是第一次使用React,React的组件化,让我可重用大量的代码(这种可重用很少出问题,除非组件本身写的就有问题),最后不到一天就写某个大功能模块,使我能更好的专注于后端接口的编写和调试。
(3)有的朋友可能会问:”新的项目我可以最开始通过组件化来避免单体架构的短板,但是老项目该怎么办呢?”我的回答是只能慢慢来,一点点慢慢抽取出来(一定要在读懂代码的前提下进行),封装为组件,组件可按照功能区分(公共组件、通信组件、日志组件、权限组件、具体业务组件等)。
另外还有一点,二次开发和老项目的组件化是相通的,如下:
项目先运行起来(不管是二次开发还是新到一家公司,这个流程是绕不开的);
整体了解项目架构并熟悉对应的业务知识;
整体了解项目结构(每个包下面的代码功能职责是什么);
整体了解数据库表(可以间接和前面的业务知识对应起来);
跑起来后,通过调用接口,逐步的去了解对应的代码是做什么的;
为了保持原本的代码分支完整性,通过版本控制工具新建分支做实验;
虚心请教,学会提问(如果是开源项目请教对应的开源维护者,如果是老项目,请教对应的老员工,在此之前一定要有自己的思考,而不是眼睛一看不到10秒,就说看不懂,这种提问是万万不行的)。
二、分布式微服务架构 1.什么是分布式微服务架构? (1)分布式是什么?为什么要用分布式?分布式要考虑哪些问题?分布式是指数据和程序可以不位于一个服务器上,而是分散到多个服务器,以网络上分散分布的地理信息数据及受其影响的数据库操作为研究对象的一种理论计算模型。
之所以要用分布式,最关键的是服务器性能问题,单台服务器性能比较有限,综合利用多台服务器,能够提高整体的性能。
分布式要考虑的问题有如下:
如何合理的拆分出子系统。
子系统之间如何通信。
通信过程的安全如何保障。
子系统扩展要如何设计。
子系统的可靠性要如何保证。
多个子系统之间相互通信交互数据,如何保证数据的一致性。
简而言之可以概括为两大问题,一个是数据的一致性,另一个是服务的稳定性。
(2)集群是什么?为什么要集群?集群需要考虑哪些问题?集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。通俗一点来说,就是让若干台计算机联合起来工作(服务),可以是并行的,也可以是做备份。
之所以要集群,是因为如下三个方面:
并发处理能力有限;
容错率低,一旦服务器故障,整个服务无法访问;
单台服务器计算能力低,无法完成复杂的海量数据计算。
集群需要考虑哪些问题(最关键的是:是否有必要集群)?
Session共享(用户鉴权一次,而不是每次轮询后都要再鉴权);
Job(定时任务只执行一次而不是每台都执行);
DB数据同步;
Cache同步;
集群下的各个服务器性能(CPU、磁盘、内存等);
应用服务故障切换的时间;
软硬件的集群管理和监控;
成本。
(3)分布式和集群的区别是什么?分布式是指将不同的业务分布在不同的地方;
集群指的是将多台服务器集中在一起,实现同一业务;
分布式的每一个节点,都可以做集群,而集群并不一定就是分布式的。
(4)微服务架构是什么?微服务架构指的是将大型复杂系统按功能或者业务需求垂直切分成更小的子系统,这些子系统以独立部署的子进程存在,它们之间通过轻量级的、跨语言的同步(比如REST,gRPC)或者异步(消息)网络调用进行通信。
2.微服务架构的优缺点 (1)优点复杂度可控;
独立按需扩展;
技术选型灵活;
容错可用性高。
(2)缺点多服务增加运维难度;
系统部署依赖;
服务间的通信成本;
数据一致性;
系统集成测试;
性能监控。
3.分布式微服务的技术选型有哪些?对于Java而言技术选型组合如下:
SpringBoot+SpringCloud;
SpringBoot+SpringCloud Alibaba;
SpringBoot+Dubbo。