如何设计每秒钟5k个请求,查询手机号所属归属地

  • 设计出每秒并5K的一个系统,根据网上的这个题目做以下梳理,众所周知一个良好的架构需要考虑它的高可用和可伸缩,需要做服务的熔断、降级、隔离等等,如下图是一个基本示例:
    9d50b64a07846317684b9bf2143713cd544.jpg
  • 架构设计原理:
    1、路由网关-流量分发入口,不承载具体业务,简单点可以使用nginx,如果是微服务可以使用zuul等(支持请求的分发、限流、下游依赖的发现,可以结合docker实现服务下游的web服务自动伸缩),如果采用nginx完成不了下游的伸缩发现,但是基本的限流和分发可以解决
    2、web服务-可以水平扩展,通过cache加速,查询手机号码号段对应的地区,对于缓存未命中的号段,直接丢入kafka队列,实时返回client端查询中的状态
    3、消费微服务-完成kafka队列的消费,根据kafka topic的partition个数也可以实现水平扩展,负责把发送号段的查询请求至实时查询微服务,保存至cache
    4、实时查询微服务-因为是无状态服务,根据业务负载也可以实现水平扩展,且仅负责对外部运营商的查询,根据外部供应商的接口能力,也可以通过hystrix把该服务export出的接口做限流和熔断,这样影响面就不会波及外部合作伙伴
    5、缓存预热服务-为提升体验,减少发出查询请求后的刷新等待时间,在服务发布前,可以预先把一批号段通过请求实时查询微服务,并先保存起来
  • 总结
    如上设计:缓存读取不会形成瓶颈,队列生产不会形成瓶颈,唯一形成瓶颈的点有可能发生在外部运营商接口,因此我们会对实时查询服务做限流和熔断,所以不会压垮运营商,但是用户端的体验就糟些了,所以我们需要把缓存预热的功夫做足,改善体验。上面的设计在不同场景下需要进行微调,基本思想不会发生大的变化,把请求异步化,一天吃不成胖子,就分多天吃,就是这个意思,当然还考察了服务的隔离、降级、可伸缩的特性!
     

转载于:https://my.oschina.net/13426421702/blog/3038911

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值