JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

一篇文章教会你如何搭建高可用高并发系统

wys521 2024-10-27 15:36:20 精选教程 32 ℃ 0 评论

大家好,我是贠学文,点击右上方“关注”,每天为您分享java程序员需要掌握的知识点干货。

作为一个高级java工程师,或者高级以上的java工程师,能独立搭建一套高可用高并发的系统,是必备的技能,那应该如何搭建呢?


一、前端层
1.不用cookie存储任何东西,原因如下:
a.用户自己可以禁用cookie,一旦用户禁用了,就无法使用了。
b.一旦出现跨域的问题,处理起来非常麻烦。
c.安全性不高,csrf攻击,就是利用这一漏洞做的攻击。
2.解决xss攻击的问题。


二、传输层
1.从前端到nginx,采用https传输,保证数据安全,对于一些非常重要的交易,对关键字段做加密,并且做数据签名。
2.通过keepalived保证nginx的高可用,避免因为nginx服务宕机,导致整个服务不可用。
3.通过做验证码的方式,避免用户连续请求。


三、路由层
1.对于高并发的情况,通过nginx做限流,避免把全部请求都发送到后端服务器,给后端服务器带来压力。
2.通过nginx做集群,来保证后端服务器的高可用。


四、后端层
1.通过redis做分布式session的验证,此种验证方式,也可以解决crsf攻击的问题。需要redis做集群,来保证高可用。
2.当系统特别大的时候,单体服务难以支撑的时候,用springcloud做微服务,但是用微服务时,需要考虑如何合理的对项目做拆分,并做好降级和熔断,避免因为单个服务的问题,导致整个系统瘫痪。并且要考虑如何处理分布式事务的问题。
3.对于jdbc的封装,比较喜欢使用mybatisplus框架,既对简单sql做个封装,又支持复杂sql的编写。
4.在代码中编写sql语句时,采用预编译的方式,防止sql注入。
5.在并发量特别高的时候,比如抢购,或者说发送邮件、发送短信时,可以通过MQ做异步处理。为了保证MQ的高可用,需要做集群,并需要考虑到生产者断消息丢失,以及消费端重复消费的问题如何解决。
5.从java代码的角度上分析,比如:如何避免内存泄漏的发生、非线程安全类的合理使用,如何解耦合等等。
6.合理的设置JVM。


五、数据层
1.通过对mysql的读写分离,来保证mysql的高可用。
2.合理使用存储引擎,索引等等。
3.对于一些读取量大于写入量的数据,可以引入redis缓存,来提升读取效率,但是在使用redis缓存时,需要考虑如何保证mysql与redis数据一致性的问题。以及缓存击穿、缓存穿透、缓存雪崩的问题。为了保证redis的可用,需要对redis做集群。
4.对于数据量特别大的表,比如订单表,需采用分库分表,并引入ES+HBASE,来提升查询效率。
5.解决深度分页的问题。

往期精彩:

一篇文章掌握程序员的技术体系

ThreadLocal优化方案

Elasticsearch的核心真的是倒排索引吗?

循环与递归的那些事

作者介绍:

贠学文,具有多有经验的java开发工程师,业余时间利用头条分享技术知识点与自己对技术的感悟,帮助对自己未来感到迷茫的程序员,在技术上得到提升。结识一些志同道合的朋友,相互促进,共同进步。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表