缓存架构--问题篇

由问题引发思考,由思考进行学习。

(1)如何让redis集群支撑几十万QPS高并发+99.99%高可用+TB级海量数据+企业级数据备份与恢复?

redis企业级集群架构

(2)如何支撑高性能以及高并发到极致?同时给缓存架构最后的安全保护层?

(nginx+lua)+redis+ehcache的三级缓存架构

(3)高并发场景下,如何解决数据库与缓存双写的时候数据不一致的情况?

企业级的完美的数据库+缓存双写一致性解决方案

(4)如何解决大value缓存的全量更新效率低下问题?

缓存维度化拆分解决方案

(5)如何将缓存命中率提升到极致?

双层nginx部署架构,以及lua脚本实现的一致性hash流量分发策略

(6)如何解决高并发场景下,缓存重建时的分布式并发重建的冲突问题?

基于zookeeper分布式锁的缓存并发重建解决方案

(7)如何解决高并发场景下,缓存冷启动MySQL瞬间被打死的问题?

基于storm实时统计热数据的分布式快速缓存预热解决方案

(8)如何解决热点缓存导致单机器负载瞬间超高?

基于storm的实时热点发现,以及毫秒级的实时热点缓存负载均衡降级

(9)如何解决分布式系统中的服务高可用问题?避免多层服务依赖因为少量故障导致系统崩溃?

基于hystrix的高可用缓存服务,资源隔离+限流+降级+熔断+超时控制

(10)如何应用分布式系统中的高可用服务的高阶技术?

基于hystrix的容错+多级降级+手动降级+生产环境参数优化经验+可视化运维与监控

(11)如何解决恐怖的缓存雪崩问题?避免给公司带来巨大的经济损失?

独家的事前+事中+事后三层次完美解决方案

(12)如何解决高并发场景下的缓存穿透问题?避免给MySQL带来过大的压力?

缓存穿透解决方案

(13)如何解决高并发场景下的缓存失效问题?避免给redis集群带来过大的压力?

缓存失效解决方案

 

后面会出系列文章详细说明每一个问题,以及每一个问题的解决方案。
关注作者微信:zgting001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、基于nginx+lua完成商品详情页访问流量实时上报kafka的开发 ==================================== 在nginx这一层,接收到访问请求的时候,就把请求的流量上报发送给kafka 这样的话,storm才能去消费kafka中的实时的访问日志,然后去进行缓存热数据的统计 用得技术方案非常简单,从lua脚本直接创建一个kafka producer,发送数据到kafka ``` wget https://github.com/doujiang24/lua-resty-kafka/archive/master.zip yum install -y unzip unzip lua-resty-kafka-master.zip cp -rf /usr/local/lua-resty-kafka-master/lib/resty /usr/hello/lualib nginx -s reload local cjson = require("cjson") local producer = require("resty.kafka.producer") local broker_list = { { host = "192.168.31.187", port = 9092 }, { host = "192.168.31.19", port = 9092 }, { host = "192.168.31.227", port = 9092 } } local log_json = {} log_json["headers"] = ngx.req.get_headers() log_json["uri_args"] = ngx.req.get_uri_args() log_json["body"] = ngx.req.read_body() log_json["http_version"] = ngx.req.http_version() log_json["method"] =ngx.req.get_method() log_json["raw_reader"] = ngx.req.raw_header() log_json["body_data"] = ngx.req.get_body_data() local message = cjson.encode(log_json); local productId = ngx.req.get_uri_args()["productId"] local async_producer = producer:new(broker_list, { producer_type = "async" }) local ok, err = async_producer:send("access-log", productId, message) if not ok then ngx.log(ngx.ERR, "kafka send err:", err) return end ``` 两台机器上都这样做,才能统一上报流量到kafka ``` bin/kafka-topics.sh --zookeeper 192.168.31.187:2181,192.168.31.19:2181,192.168.31.227:2181 --topic access-log --replication-factor 1 --partitions 1 --create bin/kafka-console-consumer.sh --zookeeper 192.168.31.187:2181,192.168.31.19:2181,192.168.31.227:2181 --topic access-log --from-beginning ``` (1)kafka在187上的节点死掉了,可能是虚拟机的问题,杀掉进程,重新启动一下 nohup bin/kafka-server-start.sh config/server.properties & (2)需要在nginx.conf中,http部分,加入resolver 8.8.8.8; (3)需要在kafka中加入advertised.host.name = 192.168.31.187,重启三个kafka进程 (4)需要启动eshop-cache缓存服务,因为nginx中的本地缓存可能不在了 二、基于storm+kafka完成商品访问次数实时统计拓扑的开发 ==============
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值