高并发
快乐的码农一枚
这个作者很懒,什么都没留下…
展开
-
nginx限流
location /login/ { limit_req zone=mylimit burst=20 nodelay; proxy_pass http://my_upstream;}该burst参数定义了客户端可以发出多少请求超过区域指定的速率(对于我们的示例mylimit区域,速率限制为每秒 10 个请求,或每 100 毫秒 1 个请求)。一个在前一个请求后 100 毫秒内到达的请求被放入队列,这里我们将队列大小设置为 20。这意味着如果 21 个请求同时从给定 IP 地址.转载 2022-04-16 21:07:15 · 252 阅读 · 0 评论 -
redis eval 实现限流
大致流程: 每次请求就写入有序集合里面,集合的sorce值是当前毫秒时间戳(防止秒出现重复),可以认为每一次请求就一个时间戳在里面。 从集合里面去掉10分钟以前所有的集合数据。然后计算出当前的集合里面数量 根据这个数量来与我们阈值做大小判断,如果超过就锁住,否则继续走下去 //将我们时间戳写入我们redis的有序集合里面 Redis::zadd('user:1:request:nums',1561456435,'1561456435.122');//设置key的过期时间为原创 2020-06-03 16:06:57 · 426 阅读 · 0 评论 -
nginx限流
http { limit_req_zone$binary_remote_addr zone=mylimit:10m rate=10r/s; server { location /test/ { limit_reqzone=mylimit burst=20; proxy_passhttp://backend; } } }接口的频率超过了 10/s 后,就会出现 响应等待。后续就...原创 2020-09-18 14:15:50 · 137 阅读 · 0 评论 -
服务实现限流的策略
时间窗口 redis zset来实现 漏桶算法 因为漏桶的漏出速率是固定的参数,所以,即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使流突发(burst)到端口速率.因此,漏桶算法对于存在突发特性的流量来说缺乏效率. 1) Redis-Cell2) 令牌 RateLimiter // 每秒产生 10 个令牌(每 100 ms 产生一个) RateLimiter rt = RateLimit...原创 2020-06-03 18:23:30 · 601 阅读 · 0 评论 -
互联网的四高
高可用 高并发 高拓展 高安全原创 2022-05-11 08:42:13 · 84 阅读 · 0 评论 -
每阶段的技术提升
1、开始使用redis增加缓存的概念,增加系统的性能2、使用消息中间件,解耦系统,异步处理;增加性能3、使用数据库的读写分离,增加读的性能提升;对写少读多的场景进行性能提升;进一步提升了数据库写的性能4、使用sharding-jdbc cobar 进行分库分表的处理;增加数据库支撑的数据量的提升5、缓存价格的变价计划,提升缓存生效的及时性6、使用删除缓存、和缓存失效时间的概念 支撑缓存和数据的一致性问题7、使用tcc的分布式事务模式,支撑下单的数据一致性处理8、使用消息模式 支撑原创 2022-04-08 20:34:31 · 697 阅读 · 0 评论 -
高性能以及高可用
高性能的实践方案: 集群部署,通过负载均衡减轻单机压力。 多级缓存,包括静态数据使用 CDN、本地缓存、分布式缓存等,以及对缓存场景中的热点 Key、缓存穿透、缓存并发、数据一致性等问题的处理。 分库分表和索引优化,以及借助搜索引擎解决复杂查询问题。 考虑 NoSQL 数据库的使用,比如 HBase、TiDB 等,但是团队必须熟悉这些组件,且有较强的运维能力。 异步化,将次要流程通过多线程、MQ、甚至延时任务进行异步处理。 限流,需要先考虑业务是否允许原创 2020-09-02 13:35:16 · 283 阅读 · 0 评论 -
高性能的实践方案
集群部署,通过负载均衡进行水平扩展 多级缓存,包含CDN缓存、redis缓存、进程内缓存、 关注缓存一致性问题(缓存穿透、缓存击穿、缓存雪崩) 分库分表,使用搜索es来解决复杂的查询 使用消息中间件来达到 异步、消峰、解耦的功效 使用nosql 存储或者缓存 尽量并行处理,fork-join模型 缓存预热、预计算等方案 尽量使用线程池、连接池等池化 jvm调优 锁的选择(io型 计算型分开考虑锁的类型) 降级、限流、熔断的方案...原创 2020-07-06 22:06:59 · 111 阅读 · 0 评论 -
-XX:+AlwaysPreTouch
作用 服务启动的时候真实的分配物理内存给jvm如果没有此参数,则jvm启动的时候,分配的只是虚拟内存,当真正使用的时候才会分配物理内存如果没有此参数,则代码运行的时候,实时分配物理内存,导致代码运行速度变慢如果有此参数,则jvm启动的时候速度会下降很多...原创 2020-06-11 14:05:40 · 3590 阅读 · 0 评论 -
高并发系统的设计
动静分离, 前后台分离;前台采用缓存CDN等技术方案,后台采用缓存方案(存放一下一段时间内固定不变的属性) 服务可以水平扩充,服务无状态化 数据缓存化,且进行热点数据预热 读写分离 数据库进行分库分表 缓存采用集群redis-cluster 不需要强一致性的采用异步操作。可以采用一些消息中间件 rabbitmq kafaka ...原创 2020-06-05 17:35:15 · 65 阅读 · 0 评论