“国货之光” 完美日记的微服务实践和优化思路

  • 时间:
  • 浏览:1
  • 来源:uu快3下载网址_uu快3IOS下载_电脑版

自建商城在设计之初,业务部门就提出了3个多多要求:不崩 & 快速上线。

什么的问题一:分布式事务

为哪此会使用分布式事务?

redisTemplate.opsForValue().set(key, value, offset)

1)先是按过往3个多多月的用户行为日志里,找出用户的路径和每个行为的思考时间,做了3个多多共要的模型;

2)按照双十一活动的运营节奏,定义了两到3个多多场景;

3)使用 ECS 搭建 Jmeter 集群,内网对接口进行施压,目的是减少网络开销,让请求都能打到后端服务器上;

4)观察服务器的压力,调节应用内存分配,再通过 PolarDB 性能分析,找出有性能瓶颈的 SQL 尽不可能 地优化掉;

5)将 Jmeter 脚本导入到 PTS,关联上数据库和 ECS 机器的云监控,设置好思考时间等相关的参数后施压,能不还可不都可以动态秒级调整压力,生成的压测报告怎么能让大伙你可不都可以的结果,时需拿你什儿 结果来进行下一步的限流控制。

阿里云上有个 PTS 的压测工具,能不还可不都可以直接导入 Jmeter 脚本,使用起来很方便,接下来的话大伙的使用步骤:

什么的问题三:缓存压力

除了前面所提到的分布式事务很久,发现还有同事写了使用 Keys 模糊查询 Redis,直接由于 Redis 的 CPU 飙升严重,通过阿里云提供的 Redis 管理工具能不还可不都可以很方便地查看完有哪此慢查询。

完美日记基础架构技术团队欢迎您的加入,移步文末,了解详情。

1、压测

作为3个多多新上线的项目,数据量还比较小,使用云服务来搭建一套1比1的压测环境还是比较容易的,在你什儿 时间节点上,大伙时需模拟真实的场景摸清楚目前的系统能承受多大的压力,时需几个 机器。

什么的问题四:

商城上线当月有3个多多促销活动,不可能 瞬间进来的流量过大,小程序运行前端分发事件上报的接口连接数爆了,商城实时数据统计调用了流量统计服务的接口,然而服务调用超时时间设置的是60 s,由于太多请求积压,CPU 一直飙升得很厉害。

你什儿 未必能不还可不都可以归因于快速上线,不可能 生成订单会调用到商品服务扣减库存,使用了分布式事务避免了不可能 跨服务调用引起库存超卖的什么的问题,带来的什么的问题怎么能让性能上的消耗。

**有意请发送简历至邮箱:

Lynn.Guo@yatsenglobal.com**

今年双11,完美日记仅用28分钟就超过了2018年双11全天的销售额,成为第3个多多登上天猫双11彩妆榜首的国货品牌。在你什儿 遍地有的是漂亮小姐姐、号称老婆(特指程序运行员)天堂的公司里,拥有着一支哪此样的基础架构技术团队,大伙是怎么可不都可以在 4 个月内筹建、上线电商平台的呢?本文将为您分享大伙在实践微服务过程遇到的难点和优化思路。

什么的问题二:数据库压力

在大促活动期间,有个实时统计是直接从业务库上直接查询统计的,运营部门的小姐姐在不断地刷新,由于该接口上的压力山大,怎么能让越来越使用缓存,连 SQL 查询条件的时间有的是动态的,由于 DB 层的缓存也使用不上,每次请求都打到 DB 上。

经过以上改造很久,前端日志上报服务单机避免能力由那我 的 1K 提升 40K,那种如丝般顺滑的体验嘴笨 是太好了。

不可能 你是一位程序运行媛,你一定知道完美日记。

不可能 你是一位程序运行员,你的有你在一定知道完美日记。

为了更好的应对源源不断的挑战,以下岗位持续招聘中:

# 优化思路:

1)充分利用 Nginx 的并发避免能力,Lua 脚本提供了强大的避免能力,将 Java 避免请求改为使用 OpenResty 接收;

2)接收到请求很久做好基本的校验很久,使用 lua-resty-kafka 模块异步发送到 Kafka;

3)Kafka 落盘到 HDFS 后,由 Spark 离线计算日志数据;

4)后端接口独立部署,实时数据统计调用接口设置更短的超时时间;

开发和测试环境是使用自建的 MySQL,生产环境使用的是 PolarDB,从阿里云官网上看完:

在立项很久,团队还越来越全部配备好,一边从你什儿 团队里调取人手,一边大力招聘,与此一齐,大伙的架构师也在搭建一套分布式商城开发框架,编写 Demo,让新加入的同学能快速上手。

大伙主观地认为,我希望大伙使用了集群连接地址就会自动进行读写分离,怎么能让实际上并越来越,很久发现在土办法上显式的指定只读事务有的是请求走到只读节点上了。

@Transactional(readOnly = true)

另外3个多多低级错误,大伙相信应该有的是第3个多多,怎么能让会是最后3个多多,那我 要设置3个多多 Key 的过期时间,结果少写了个 Unit 参数,第3个多多就变更偏移量了。

# 为哪此大伙花了10分钟左右才避免?

1)惯性思维,review 代码没发现出来;

2)在错误日志里发现 Redisson 锁失败时,怀疑是 Redis 写满了;

3)使用阿里云的工具去查大 Key 时发现了 Key 很大,怎么能让直接在网页查看值的很久只看完保存了3个多多字符,什么的问题就出在这里,不可能 RDS 管控台里获取到的值看起来是正确的,共要又过了2分钟左右,嘴笨 不太对劲,怎么能让登录上去用 redis-cli 查看,傻眼了,上边塞满了 0x00。

从当时的请况来看,针对双11的活动做大动作调整代码优化基本上是来不及了,离活动还有不还可不都可以3个多多星期的时间,即便改了,风险也很高。

2、限流

1)在接入 AHAS 过程中,不可能 微商城项目当前版本接入的是spring-cloud-alibaba-dependencies-0.9.0.RELEASE版那我 使用阿里云的 OSS 与 SMS,在接入 AHAS 后,时需对依赖 Alibaba 版本的升级,涉及包括 Nacos 配置中心与服务发现的升级和包路径的命名变更修改;

2)在接入 AHAS 的 gateway 网关路由限流,采用的是 SDK 接入土办法,AHAS 采用了符合 springboot-starter 形状的 SDK 开发,那我 在大伙微商城接入 gateway 时只时需在项目 POM 中加入 spring-cloud-gateway-starter-ahas-sentinel,在接入 gateway 的很久发现,网关路由限流分发上传的 API 出现了越来越兼容 Restfull 风格 API 的什么的问题,由于 URL 上出现参数时多个url越来越合并一齐的请况,阿里云 AHAS 支持团队立即发布 Fix 版本,提供新的 SentinelWebInterceptor 拦截器进行清洗 Restful 风格 API 避免;

3)在接入 AHAS 的应用模块限流,采用的也是 SDK 接入土办法,在按官网文档进行接入的很久,发现大伙微商城采用的是最新版本的 Mybatis Plus 版本,在接入 SQL 限流分析功能时发现出现ahas报错,在将此反馈到ahas钉钉团队支援群后,当时不可能 差太多深夜你什儿 了,ahas团队的及时响应以及第3天早上就发布了兼容 Mybatis Plus 版本的SQL 限流分析版本给到大伙微商城,在大伙接入新版本后,SQL 分析和限流功可不都可以能正常使用了;

4)在使用 AHAS 接入的很久,发现 AHAS 除了接口的 API 限流功能外,还提供了CPU/Load 的限流,对服务器性能请况的监控和保护做了很好的护航,在微商城服务器压力不足时可不都可以很好的保护服务器不被高并发压垮,保证了服务的高可用,一齐在服务器压力大的很久,做到了实时 QPS 日志上传的隔离,避免上传抢占服务器资源,保证了服务器在接入 AHAS 可不都可以能保持良好的性能。

未来计划要做的事情:

1)按服务拆分 Redis;

2)数据库读写分离、分库分表、TP/AP 分离;

3)业务中台化:建立业务中台,打通商品中心、库存中心、用户中心和交易中心;

作者信息:

庄工:逸仙电商架构师&技术委员会负责人,负责完美日记商城基础架构和微服务体系建设。

关工:逸仙电商后端技术专家,现主要参与微商城后端框架集成方案、以及性能调优和微商城技术规范管理。

唐工:逸仙电商技术经理,曾先后就职于中国航信和唯品会,现主要负责前后端技术统筹等打杂工作。

# 优化思路:

1)从 SQL 洞察和慢 SQL 里找调用响应时间最长和频度最高的 SQL;

2)结合代码,能用缓存代替的直接避免掉,太多能缓存的优化查询,结合阿里云提供的优化分析工具,调整索引;

3)活动高峰深冬,禁止分析统计类的查询执行,临时改代码不可能 来不及了,幸亏 AHAS(阿里云的一款限流降级产品) 的接口限流和 SQL 限流功能;

4)TP 和 AP 分离,避免分析类直接查询到业务库(这是3个多多比较漫长的过程)。