五一假期调休,今天正常上班。
使用SPI设计,框架可以很容易引入扩展点,同时应用要扩展框架逻辑也很容易实现。框架可扩展设计可以基于这个原则进行设计扩展点。
SPI设计的关键是程序定义通用的接口比如JDBC,然后不同服务提供商根据接口做自己的实现如Driver,然后程序在运行时根据加载到的接口实现不同,实现不同具体的功能,如操作不同的数据库。
和Java SPI的扩展机制类似,Spring Boot采用了spring.factories的扩展机制,在很多spring的starter 包中都可以找到,通过在 META-INF/spring.factories文件中指定自动配置类入口,从而让框架加载该类实现jar的动态加载。
可扩展有两个层面的含义:一是功能的可扩展性,主要是针对平台框架,是否设计并预留了足够的扩展点,后续可以很方便的增加各种功能或有第三方实现各种插件。另一种是性能的可扩展性,系统的弹性扩容能力,即随着系统用户量、并发的增加是否可实现弹性扩容,通过增加硬件设备就能提供更强的处理能力,这种一般称为可伸缩性。
在当下的环境,比起功能上如何更好的扩展,性能的扩展更易被别人关注,有两个方向:
纵向扩展:包括给服务器增加更多资源,例如内存 (RAM)、磁盘空间、处理器等。这在某些方案中具备实用价值,但经过特定时间点后就会发现,这种扩展费用高昂,不如借助横向扩展。
横向扩展:在这个过程中会增加更多机器或额外的服务器实例/节点,这也叫做集群(Clustering),因为所有服务器是作为一个集体或集群一起运行的。