架构设计原理
1.雪崩,是因为一个系统服务流量大,不能及时处理导致其他系统不可用或大量重试,导致一层层的系统都不能用的情况,(一是重试,一是链接要等待超时才能释放相关内存等系统资源)
2.雪崩处理方式,扩容(需求增大),服务降级(缓存,限流,关闭部分功能释放CPU和相关资源,MQ(队列)延时处理(先保存请求,后面再查询请求结果),写缓存降级为写缓存),限流(超出系统处理能力的快速度返回,不要等待过长时间或超时),熔断(跟限流一样,大过一定值就拒绝服务,),
3.关键系统要做限流(保证资源快速响应)
4.long型ID(19位) ,时间戳(13位)+4位(机器号)+2位毫秒自增(每秒10万个),机器号通过IP+端号+功能描述通过在数据库中进行维护
5.tomcat启动gzip进行内容压缩可以减小网络传输时间,
6.Nginx启动gzip进行内容压缩可以减小网络传输时间,
7.接口权限值可以缓存起来,没有再通过切面进行获取(要加锁,防止并发),
8.用户权限可以用MAP进行存储,加快查询速度,可以30分钟进行一次更新,增加可以通过接口进行设置用户权限是否需要重新获取(缓存),增加可以通过接口进行设置角色是否需要重新获取权限(缓存),
9.权限值与权限名(缓存),角包与角包名(缓存),如果数据太大可以只保存权限的ID(而不是权限值),做多级缓存,redis+ehcache(或guava cache),管理人员不进行权限的较验,权限按系统进行划分,这样每个系统的权限就不会太多,放缓存也不会太占内存,更改角色或用户的角色时,由后台更新用户的权限列表到缓存,用户再重新从缓存获取放到本地缓存中,登陆时刷新一次权限,也可以更改了权限,要求用户重新登陆一次,极端情况可以用一位位代表权限,用户量实在太大可以在入口时就进行分流到不同的组进行处理,可以10分钟到缓存拿回放到本地缓存,
10.菜单登陆时拿一次放到前端进行保存,菜单可以以角色进行缓存,
11.如果要做一些例如针对用户的访问限制(限制多少分钟内不能访问)(或角色访问限制),强迫用户重新获取最新权限等,如果这些信息每次到redis里获取,会很占资源和时间(变化频率并不高),可以使用定时(如20s)到redis里获取要不要更新本地缓存的标志(或信息),如果要再从redis里获取最新的更新到本地缓存中,也可以使用MQ进行消息的方式进行缓存的更新(要求时间严格),一般定时15s查询一次标志进行已经可以了。
12.CAS如果要设置用户重新进行登陆,可以设置session无效,并重定向到CAS服务端的退出请求进行全局退出
13.用户更新标志信息是以用户为基础的(容量(以500字节长度计算),2百万1G容量),一个用户非常少会同时进行两次操作。
14.以强制退出为例,管理服务,更新用户重新登陆标志为1,应用服务检测到要退出就重定向到CAS退出实现全局退出,应用其中一个重新登陆就更新用户重新登陆标志为0。
15.对于集群应用都要更新的内容:一个标志位不能实现,因为不知道那个应用更新了,那个应用没有更新,那不能一个更新了就更改状态,所以要加个时间戳,大于这个时间的不用更新,少于这个时间的要进行更新。
16.角色更改,角色缓存清空,角色权限更改,删除角色权限列表缓存(最好设置进去),(查询相关用户列表)更改用户更新信息标志(有时间戳),不能有多个标志(除非有确保没有并发,否则有些标志会无效),应用服务检测到就更新角色列表,权限列表,菜单列表等(或要求重新登陆重新获取相关的信息),也可以设置权限,角色,用户信息更新标志,有更新所有用户都进行一次刷新的方式。
17.用户量太大时,应该按地区或IP进行分组,进行业务应用的分区或分IP进行服务,防止每个应用服务都要缓存所有用户的基本信息
18.信息量太多时,可以按功能数据分开不同的redis进行缓存,提高并发量。
19.缓存回库进行查询时可以通过信号量的方式减少并发时过多请求压到数据库查询上。
20.guava cache 不能对每个元素进行设置超时时间,只有一个全局的超时间,ehcache可以直接存入对象,获取时也是一个对象(不用对象序列化)
21.nginx可以实现访问速率的功能,功能要求不高可以用
https://blog.csdn.net/echizao1839/article/details/80875358
22.接口请求频率限制,redis(INCRBY 命令)如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。可以用于进行接口或用户一定时间内的请求数据限制,原理为设置超时时间,每次INCRBY 超过一定值就表示达到限制,要expired(limitCacheKey,2);时要在前几次(3-5次)都设置一下超时间防止写不入,达到次数据更新数据库,达到超过限制强迫退出系统,一定时间内不允许登陆
23.服务调用次数统计可以用redis的自增,到一定数据刷到数据库的方式
24.用户PK可以用int(20亿),方便分表分库,权限,角色可以用int(8位数(百万))代替用UUID,减速少空间存储,如用要用到时间进行查询的用long,否则用datetime,
25.如果不想用redis进行session共享,可以用cookie进行用户信息的传递(MD5,信息加密,),退出时cookie清空就可以了,安全放面MD5可以加入用户密码的盐。
分享到:
相关推荐
Apache架构设计原理剖析 Apache HTTP服务器是世界上最广泛使用的开源Web服务器之一,它的设计原则和实现方式对于理解Web架构和优化网站性能至关重要。本篇将深入探讨Apache架构的基础、设计原理,以及与RESTful架构...
1. Spring架构设计原理 Spring架构设计的核心思想是松耦合和高内聚,通过将应用程序分解为多个模块,来提高系统的灵活性和可维护性。Spring架构设计主要包括以下几个方面: * IoC容器(Inversion of Control):...
在Spring架构设计原理方面,Spring采用模块化的结构,每个模块提供特定的功能,并且可以独立存在和替换。这种设计使得Spring能够适应不同的环境和需求,也能方便地与其他框架或技术集成。 Spring框架的标签“Spring...
三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架三层构架...
《spring技术内幕:深入解析spring架构与计原理(第2版)》是国内唯一一本系统分析spring源代码的著作,也是spring领域的问鼎之作,由业界拥有10余年开发经验的资深java专家亲自执笔,java开发者社区和spring开发者...
Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...
《分布式服务框架:原理与实践》依托工作实践,从分布式服务框架的架构设计原理到实践经验总结,涵盖了服务化架构演进、订阅发布、路由策略、集群容错和服务治理等多个专题,全方位剖析服务框架的设计原则和原理,...
* 架构设计原理和实现细节 * 问题解决能力和实践经验 * 架构设计的灵活性和可扩展性 结论: 本资源是一个关于Java后端架构设计精讲的面试宝典,旨在帮助读者掌握大厂的三面架构问题和架构设计面试知识点。该资源...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》这本书主要聚焦于Spring框架的核心架构和技术细节,帮助读者全面理解Spring的工作机制、设计理念以及实现方式。下面将根据书名及其描述来展开相关知识点。 ...
- Android架构设计原理与最佳实践 - 接口设计在系统可维护性中的作用 - 利用.NET框架处理企业级复杂性 - 设计模式在软件开发中的应用 - 创建可扩展和灵活的系统架构的策略 - 理解和应用迭代器模式 - 抽象工厂设计...
SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析...
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
本书从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的优秀架构和设计思想,还能从Spring优雅的实现源码中一窥Java语言的精髓。本书在开篇...
仅是重复的网址,并没有涉及《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》一书的具体知识,我将基于书名和对Spring框架的理解,详细阐述Spring的核心概念和架构设计原理。 Spring是一个开源的Java/...
Spring技术内幕 深入解析Spring架构与设计原理3(完整清晰版),你懂的。下载后请您回复支持一下。
七、系统架构设计原理 系统架构设计需要遵循一定的原理和方法,如MVC 模式、分层架构、面向对象设计等。这些原理和方法能够帮助开发团队设计和实现一个可靠、可维护的系统架构。 八、系统架构设计案例分析 系统...
在系统架构设计中,理解并应用架构设计原理至关重要。这包括对分层架构、微服务架构、事件驱动架构等多种架构模式的理解,以及如何根据具体项目需求选择最适合的架构风格。此外,架构师还需要掌握架构模式的演变过程...