还是先看个图
加上网关这个中间层后,一方面可以隐藏真实服务的访问地址,另一方面对调用方来说统一了调用入口,同时可以在网关层统一对所有后端服务添加全局的处理逻辑,如鉴权、限流、日志记录等等。
最后再举个项目中的场景之前项目中遇到的一个场景是,需要通过一个很复杂的统计SQL最终输出一个客户想要的结果,数据量较大时查询非常慢,在数据实时性要求不高,又不想引入多余技术组件的情况下,怎么处理这种问题 ?
解决办法就是加个中间结果表,定时执行统计SQL将结果输入到结果表,查询功能直接查询结果表,就很方便的解决了。处理过程如下图
以上仅仅列举了部分内容,没提到的就只能留给读者自行发觉领悟喽。
总结结合上面的实例拆解,总结下,中间加一层的设计来说大概可以解决以下场景的问题。
这里特别强调下加一层是个设计思想,不光可以解决技术问题,工作中日常生活中也可以用到,所以关键的关键是需要吸收这种设计思想。
再回到技术场景下来说不同场景的处理方式会不一样,不一定是非要引入一个技术组件这样,比如某些特定场景下,加个字段,加个类都可以实现。一定要活学活用。
解耦解耦的目的是为了后续可扩展,可维护,提升软件的可修改性,保证各自的独立进化。
聚合为了简化上层调用和方便获取结果,添加一个聚合中间层,这里还是带一点解耦和隐藏细节的作用,虽说不是聚合的重点,但确有此功效。
统一处理典型场景如上面提到的网关的应用场景和作用,如鉴权中心,日志记录等都可以在网关层统一去做。
隐藏细节系统有没有自己的一些小秘密不想让外界知道,有怎么办 ?加上一个对外的调用层,隐藏真实服务地址,改变方法名,改变参数你想做的通通可以做到。
屏蔽差异上面没提到的对应的场景,其实拿设计模式中的适配器来说这个比较合适,一个典型的场景是一个两插的插头如何接入到一个三口的插座上。中间加个转换头就可以做到。通过转接头间接屏蔽了接口间的差异。
对应到系统中也是如此,一个接口输出的是xml,而另一个接收方需要的是json,两方都不能改动情况下,怎么做,那就是加个中间转换层。屏蔽数据报文的差异。
最后好的设计其实一定程度上可以避免一些技术问题,简化问题场景,而这需要我们不断摸索、不断尝试、不断学习、不断总结。
觉得还行,动动手指留个赞。
以上就是今天的内容,我们下期见。