前言
在我们的项目正式上线时,经常会遇到因为用户访问人数太多、并发量太高或者用户恶意访问导致服务器崩溃的问题,今天在这里和大家一起讨论在实际项目中如何在多个层面上对我们的应用进行优化,并防止用户恶意访问。
数据库层优化
1.我们可以对数据库配置文件进行优化,比如修改数据库最大连接数、数据库连接超时时间、是否开启查询缓存等,一般根据项目实际需求来配置。
2.我们还可以对数据库表结构进行优化,比如对不同的表选择不同的存储引擎、在查询频繁的列上建立索引、查询频繁的列和更新频繁的列分开存储等。
3.数据库集群,一般来说,项目中的读操作是远高于写操作的,我们可以对数据库作读写分离,读数据库使用更多的服务器集群,数据量大时,我们也可以做数据分库分表。
服务层优化
1.JVM优化,我们可以调整jvm的堆内存大小,比如最小堆内存、最大堆内存还有新生代和老年代的大小等,还可以针对不同的项目选择合适的垃圾收集算法。
2.服务器优化,我们可以调整服务器最大连接数、连接超时时间、读时间以及可以选择服务器的通信模式为NIO。
3.服务端缓存优化,我们可以根据项目的特点选择合适的缓存,内存缓存guava、可持久化缓存Ehcache以及分布式缓存Redis都是一个好的选择,缓存可以减少我们查询数据库的次数,减轻数据库服务器的压力。
4.服务器集群,我们可以通过负载均衡算法对多个服务器进行集群来分别处理用户的请求。
5.服务分布式,我们通过对应用进行拆分,不同的服务模块部署在不同的服务器上,把服务器资源集中在并发量和重要性高的模块。
6.流量削峰,在用户并发量大于服务器的处理能力时,我们可以将请求放入队列,服务端以可以接受的速率来依次处理队列中的请求,可以通过消息中间件如rabbitmq来实现。
接入层优化
我们可以对接入层服务器NGINX配置文件优化,选择合适的进程数,修改最大连接数、连接超时时间、读取超时时间,选择合适的通信模式和负载均衡算法。我们可以对NGINX作集群处理,在NGINX上层加入硬件级别的负载均衡器如lvs、f5等,或者直接使用dns轮训多台NGINX服务器,我们也可以使用keepalive使多个NGINX服务器持有相同的虚拟IP,使系统接入层高可用。我们通过在接入层限制相同IP单位时间内的请求次数,遏制恶意用户行为。ps:更多优化方案,请在评论区提出,大家共同学习,共同进步!