网站首页 > 精选教程 正文
大家好,我是贠学文,点击右上方“关注”,每天为您分享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.解决深度分页的问题。
往期精彩:
作者介绍:
贠学文,具有多有经验的java开发工程师,业余时间利用头条分享技术知识点与自己对技术的感悟,帮助对自己未来感到迷茫的程序员,在技术上得到提升。结识一些志同道合的朋友,相互促进,共同进步。
猜你喜欢
- 2024-10-27 SpringBoot + RabbitMQ 实现高可用可伸缩的简易版分布式系统
- 2024-10-27 kubernetes运维面试:k8s 集群如何做高可用?
- 2024-10-27 高可用架构的6大常规方案 高可用的概念
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)