架构抽象化设计

栏目: Java · 发布时间: 7年前

业务研发,到了一定阶段需要对设计进行抽象化进行,抽象化两种方式一种是程序库,通过调用库形式实现代码重用,例如dll、so、jar包,另一种形式是通过服务形式,比如web服务soa以及当下微服务形式对业务模块进行抽象化设计。

架构抽象化设计

对于线上业务抽象化去实现,具体到实现方式上,在 java 语言上存在两种方式,一种jar包形式,一种是服务方式。两种方式各有优劣,两种方式结合着用,用两种方式优势,能够将架构实现更合理获得更多形式上重用。

jar包形式,将逻辑进行抽象实现,能够引入在业务服务中使用,使用jar包时要注意基于Spring jar,如果多线程使用时,要注意类引用方式,再多线程中单独加载,然后在使用。

throwable异常机制,整个异常指责链,异常继承体系要明确。避免异常捕获不到情况,导致程序异常。异常框架以及异常体系结构:

架构抽象化设计

thread local机制,thread local本身是绑定在每个线程上的对象,使用时需要thread local本身是静态的,这样才能保证变量是全局的且唯一。使用样例类似如下:

static ThreadLocal<XgBoostCompute> threadLocal = new ThreadLocal<XgBoostCompute>();

public void run() {

    xgBoostCompute = threadLocal .get();

    if ( xgBoostCompute == null ){

        xgBoostCompute = new XgBoostCompute();

        boolean bool = xgBoostCompute .load(Constants. MODEL_PATH );

        if (bool) {

            threadLocal .set( xgBoostCompute );

}

}

}

架构设计最终落到实现上,需要对使用到语言层面比如线程池、 synchronized 、countdownlatch 理解要深入,对于库层面 Spring 也是, 类似整体加载机制要明确,不然整个实现会遇到各种问题,会因为点的卡壳而花费大量时间。

对于synchronized在作用于块的时候,要锁定唯一对象,对象唯一性很重要不然可能导致锁不住,锁住后的整个流程单线程模式,所以锁住模块要尽量小,尽量小之后才能获得更高性能。

在有就是版本,spring版本是4就要注意spring-conifg.xml中头部head版本,版本不一致可能会导致整个个别功能起作用,部分功能不起作用,最近遇到4.0 spring配置文件3.0然后基于注解方式定时器不起作用。

架构设计本质上还是降低复杂度,实现业务需要,架构本身需要不断演进,不能期望一步到位,并且扩展性也是在一定范围内,而不是无限制可扩展性。架构取决于设计者对于业务理解深度,以及对于各种基础知识掌握以及熟练运用程度。

文章零散说了很多方面,其实说的就是一件事,架构设计到实现又一个巨大鸿沟以及一个漫长实现过程,需要对各个知识点以及库体系有相当了解,才能很好去实现,不然会导致事倍功半。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python Machine Learning

Python Machine Learning

Sebastian Raschka / Packt Publishing - ebooks Account / 2015-9 / USD 44.99

About This Book Leverage Python' s most powerful open-source libraries for deep learning, data wrangling, and data visualization Learn effective strategies and best practices to improve and opti......一起来看看 《Python Machine Learning》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试