宜人贷从2011年初创,到跻身互联网金融上市第一股,网贷业务经历了高速发展,在新的战略形势下,用户量、访问量遭遇了井喷式增长。用户产品快速迭代、多种金融产品齐头并进,种类繁多的运营活动扑面而来,诸多流量尖峰接踵而至,业务的高速发展需要支持,架构需要随之演变,团队工程能力也需要提升。 我们将以后台系统架构升级改造为例,和大家分享我们的历程:其中有方法,有原则,有收益,当然也有坑。我们将会展示我们是如何解决这些问题,从而实现业务和技术相互促进协同发展的。

注脚

展开查看详情

1.第三部分 流量应对策略

2.流量≈并发 更强的machine 更多machine(cap) 限流降级 Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once. -------Joe Armstrong

3.关键点 业务纵向拆分,化整为零 分而治之,缩小竞争面 资源拆分,横向扩展 cache,index,partition 加速资源交换,更快响应 parallel non-blocking CAP 共享资源串行操作 sync、lock,cas 数据一致性(脏读,丢失更新等) 额度、库存、积分、优惠券…

4. 数据库锁(全局标识拦截): update product 数据竞争! set stock=stock-X where stock-X>=0 [sql方案示例] 限流: max_connections(db) max_request+max_threads(middleware) 乐观锁,带来重试代价 悲观锁,开销大,吞吐量差

5. Redis+java方案(瑕疵版): ! stock=(incrby stock –X)! 数据竞争! if (stock<0){incrby stock X;}! else { //submit}! [NoSql方案示例] 限流、熔断: maxclients(redis) max_request+max_threads(middleware) 内存操作 hystrix..(service) 单线程原子操作 高可用保障 兜底策略

6. Redis+(lua/module)方案: local stock = redis.call("GET","STOCK") if tonumber(stock)<tonumber(X) then 数据竞争! return '-1' else stock=redis.call("INCRBY", "STOCK",-X) return stock [NoSql方案示例2] end 限流、熔断: maxclients(redis) max_request+max_threads(middleware) 存储+运算,一致性保证 hystrix..(service) 高可用措施保障 兜底策略

7.热点削峰 流量 不限流 系统容量水位线 限流 时间

8.削峰策略[知容量,明底线] 底线 熔断 过载保护 丢车保帅 降级 拒绝服务 异步延迟 容量水位线 限流 多节点参与 开关控制

9.多节点有序参与 终端 本地缓存,防刷,流控 域名 智能DNS,DNS负载均衡 机房 多IDC,区域容灾,多ISP LB / NG.. 限流(limit,lua),openresty,4层/7层LB 网关 弹性扩容,限流(token),熔断,防刷 Cache 集群,高可用,分片 服务 降级,熔断,弹性扩容

10.抓大不能放小[细节决定成败] TCP连接 GC 线程阻塞>300 中间件内存管理、线程状态,连接状况 db的io,慢sql,索引,join等 代码review,数据结构,日志

11.第四部分 关于监控

12.如果没有监控… 盲 人 骑 瞎 马 , 夜 半 临 深 池

13.监控体系 期望更轻量、无侵入性的业务监控 趋于个性 应用/框架/业务逻辑/系统间调用 cat,elk,zipkin等 } 中间件/缓存/数据库/代理/MQ... zabbix,datagod, prometheus… apm工具,商业产品 OS/网络/存储/防火墙... 具有共性

14.自研日志监控[轻量无侵入] Kafka Kafka Spout 经典流式计算架构,流水线策略,线性扩展 Cache RBAC 预处理bolts User 策略 Data Filter 系统配置 Role 策略发生器 规范化 监控统计 高性能监控核心,灵活的监控策略 监控 数据流 系统统计 关键词模式、上下文模式、时间窗口模式等 校验 轻量、高效、稳定,0侵入 监控核心流水线bolts 异 系统异常 业务节点 业务数据 步 线 基础策略 程 分 发 业务数据统计 分布式队列(报警系统) 合并降级 报警队列 活动监控 活动队列 报警策略

15.日志监控平台 微信 微信/邮件/短信 高可靠,高响应 高性能 灵活配置

16.谈点感想

17.感想 01 微服务≠spring cloud≠容器化≠RPC 工具/框架是手段而不是目的 02 优秀的系统=! 适应性架构设计(指导)+超强工程能力(落地) 03 安于现状=走下坡路 提升团队整体工程能力,前瞻性改造 04 技术要紧贴业务,接地气 技术是手段而不是目的,生产力适应生产关系,技术业务相互促进共同发展

18.Thanks !