分布式系统
风度玉门
人得先清心寡欲,方能高枕无忧。
展开
-
分布式应用缓存
缓存命中率缓存回收策略基于空间基于容量基于时间基于Java对象引用回收算法Java缓存类型堆内存Guava Cache实现Ehcache实现非堆内存磁盘缓存EhCache实现分布式缓存多级缓存示例代码多级缓存封装本地缓存初始化写缓存封装读缓存封装NULL Cache缓存是解决分布式提供高可用的利器之一,它可以大幅度的...原创 2018-07-17 08:59:27 · 940 阅读 · 0 评论 -
分布式系统超时重试
重试的分类Nginx代理层超时客户端超时设置DNS解析超时设置代理超时设置网络连接/读/写超时设置失败重试机制设置upstream存活超时设置ngx_lua超时设置Web容器超时在实际开发当中,很多故障的产生都是因为没有意识到超时设置的重要性而造成的。如果不设置超时机制,就有可能导致连锁反应,最终系统雪崩。有些中间件天然集成了超时重试的机制,但是在设计当中...原创 2018-07-16 09:53:07 · 2326 阅读 · 0 评论 -
使用Hystrix实现降级熔断
之前有说到过,分布式系统降级的方式可以通过配置中心手动降级。今天介绍一下通过Hystrix实现自动降级。降级Demo话不多说,下面先来一个Demo(对于Hystrix的依赖,这里就不再介绍了)。GetStockServiceCommandpublic class GetStockServiceCommand extends HystrixCommand<Strin...原创 2018-07-13 10:19:40 · 2834 阅读 · 0 评论 -
分布式系统降级策略(一)
在开发高并发系统时,有很多方法来保护系统,如:缓存、降级、限流等。下面将介绍一下降级的策略。当系统访问量增多,服务响应时间长或者非核心服务影响了核心服务的性能时。这是如果需要保证核心服务的可用性,就需要对非核心业务执行一些降级处理。系统可以根据关键数据进行自动降级,也可以配置开关进行人工降级。降级策略分类降级按照是否可以自动化分为:自动开关降级和人工开关降级。按照读写功能可以分为:读服...原创 2018-07-13 09:57:39 · 6721 阅读 · 0 评论 -
分布式系统限流策略(二)
前文中介绍了系统限流的原理和基础的使用场景,本篇将介绍应用接入层(Nginx)、分布式应用如何限流。应用接入层限流(Nginx/OpenResty)接入层通常是指流量的入口,主要的目的有:负载均衡、非法请求过滤、请求聚合、缓存、降级、限流、A/B测试、服务质量监控等。对于流量接入层所使用的中间件一般都是:Nginx(OpenResty)。下面将分别介绍一下如何进行限流操作。Ng...原创 2018-07-13 09:40:29 · 2278 阅读 · 0 评论 -
分布式系统限流策略(一)
在开发高并发的系统时,有很多手段来保护系统,如缓存、降级和限流等。缓存可以提升系统的访问速度,降级可以暂时屏蔽掉非核心业务,使得核心业务不受影响。限流的目的通过对并发访问进行限速,一旦达到一定的速率就可以拒绝服务(定向到错误页或告知资源没有了)、排队等待(如秒杀、评论、下单等)、降级(直接返回兜底数据、如商品库存默认有货)。常见的限流方式有:限制总并发数(数据库连接池、线程池)、限制瞬时并发...原创 2018-07-13 09:26:18 · 9146 阅读 · 0 评论 -
分布式多级缓存
基本概念缓存数据的方式是否过期不过期缓存过期缓存细粒度缓存大Value缓存热点缓存基本概念所谓分布式多级缓存,就是指在整个系统的不同层级进行数据的缓存,以提升系统的访问速度。通常情况下,分布式系统的访问流程如下所示:接入层Nginx将请求负载均衡到应用层Nginx,常用的负载均衡算法是轮询/一致性哈希。轮询可以是请求更加的平均,一致性哈希可以...原创 2018-07-17 10:38:42 · 1947 阅读 · 0 评论 -
HTTP缓存
HTTP缓存首次访问F5刷新Ctrl+F5强刷from disk cacheagevaryviaetag我们在使用浏览器加载网页时,往往一个网页浏览器就会发起多次请求。每个请求又会有很多的请求头和请求体,下面看一下一些常见的请求头/请求体。HTTP缓存首次访问当我们第一次请求服务器资源时,服务器会给出 200 的响应码。立即F5刷新后,如果浏...原创 2018-07-17 09:55:33 · 1327 阅读 · 0 评论 -
分布式缓存击穿(布隆过滤器 Bloom Filter)
缓存中无值(未宕机)互斥锁缓存永不过期缓存宕机白名单布隆过滤器代码实现前面的文章介绍了缓存的分类和使用的场景。通常情况下,缓存是加速系统响应的一种途径,通常情况下只有系统的部分数据。当请求了缓存中没有的数据时,这时候就会回源到DB里面。此时如果黑客故意对上面数据发起大量请求,则DB有可能会挂掉,这就是缓存击穿。当然缓存挂掉的话,正常的用户请求也有可能造成缓存...原创 2018-07-17 09:46:09 · 41360 阅读 · 5 评论 -
JetCache的简单使用
JetCache特点软件要求Boot项目配置maven依赖MySpringBootApp.javaapplication.yml方法缓存缓存API高级API异步API分布式锁读取并自动刷新传统项目配置今天我们来介绍一下由Alibaba开源的一款缓存框架JetCache。其号称比Spring Cache用起来更加好用,笔者用了之后发现确实比较好用。...原创 2018-07-17 09:23:03 · 13571 阅读 · 0 评论 -
分布式应用缓存使用模式
Cache-AsideCache-As-SoRRead-ThroughWrite-ThroughWrite-Behind在我们使用缓存时,有一些模式或者策略。其主要分为两大类,Cache-Aside:由业务代码直接维护缓存;Cache-As-SoR:把Cache作为数据源,所有的读写操作都是对Cache而言的,如果要执行持久化等操作,则是由Cache本身去处理。Cac...原创 2018-07-17 09:08:10 · 1161 阅读 · 0 评论 -
分布式系统回滚机制
事务回滚发布回滚发布版本化增量发布灰度发布架构升级并行发布静态资源版本回滚回滚是指当程序或者数据出错时,恢复到最近的一个正确版本的行为。最常见的如事务回滚、代码库回滚、部署版本回滚、数据版本回滚、静态资源版本回滚等。通过回滚机制,可以在发布系统出现故障时,保证系统的可用性。事务回滚提到事务回滚,单库的事务就不再多说了。对于跨库的事务,比较常见的解决方案有:两阶...原创 2018-07-16 10:00:52 · 9134 阅读 · 0 评论