中间件

约 780 字大约 3 分钟

中间件

搭建项目时,按照敏捷规则不到万不得以不要使用中间件,使用中间件会增加代码层面成本(编写、维护)、中间件成本(搭建、维护)。 有些中间件是必不可少的,比如服务器(Jetty、Undertow、Tomcat),下面按照必要、非必要对中间件进行梳理。

必要

使用docker compose部署项目。

nginx

nginx是工作中常用的中间件,实际工作中前端、后端项目都由专业人员进行开发、部署,大概率不会部署到到一块,就会使用nginx反向代理,需要查看相关内容可以参考open in new window。 对于nginx常用功能涉及到三个方向:

  1. 代理(正向,反)
  2. 负载均衡open in new window,Netty也提供了相应策略,举一反三,在需要负载均衡时就有了参考。

提示

更多均衡策略可以参考均衡策略与实现open in new window

  1. 动静分离,在高并发情况下,需要考虑相关内容,可以参考周老师的透明多级分流系统open in new window

服务器

服务器一般都支持 nio阻塞io,服务器启动时使用 nio 模型Netty、Jetty、Undertow、Tomcat都实现了Reactor模型,所以了解Reactor模型就等于学会了服务器容器,大公司内部会自定义轻量级Rpc服务器(基于Netty)。

非必要

Redis

Reactor 中的 acceptor 属于CPU密集型handler包含以下三种:CPU密集型IO 密集型混合型Redis 中的 hanlerCPU 密集型,所以设计成单线程就很合理。 对于服务器来讲,一般情况下 handlerIO 密集型混合型,所以使用 Redis 是将 IO 密集型混合型转换成 CPU 密集型,还有一种使用方式就是缓解 CPU压力而做缓存。

MQ

MQ一般起到三个功能:解耦、异步、削峰填谷。

  1. 应用系统中调用三方系统,为了防止后面每增加一个三方系统都要修改代码,在解耦合方面 MQ 有点像观察者设计模式;
  2. 应用系统中调用三方系统,并不依赖三方系统(耗时长)结果,此时就可以使用 MQ 进行异步;
  3. MQ 还可以做到“削峰填谷”的作用,如果全天只有一小段时间出现流量剧增,出现毛刺,就可以使用 MQ 进行应对。juc 内的 BlockingQueue 也是一个 MQ,只不过这个Queue是基于任务的。

OSS文件系统

项目开发中需要解决不同系统之间问题,兼容FreeBSD、Linux、Windows等问题,使用公有云安全系数比较高,也少了运维成本,但是有些项目是不能访问互联网的,这时需要考虑私有化或存到本地磁盘。