完美日记是国货网红美妆品牌(“国货之光”完美日记的微服务实践
完美日记背后的技术魔法:微服务实践、优化与挑战
你是否知道,那个让无数少女为之疯狂的彩妆品牌完美日记,其背后也有一群程序员默默付出?今年双11,完美日记销售额再创佳绩,成为首个登上天猫双11彩妆榜榜首的国产品牌。那么,在这背后,他们的技术团队是如何应对挑战,实现优化的呢?让我们揭开这神秘的面纱。
完美日记,一个美女如云的公司,同时也是许多程序员的梦想之地。在这家公司,基础设施技术团队肩负着重大责任。他们如何在短短四个月内搭建并推出电商平台?这其中又有哪些技术挑战与优化思路呢?
起步自建商城设计时,业务部门提出的两大要求是快速上线且保证系统稳定不崩溃。项目初期,团队尚未完善,架构师们便开始搭建分布式商城开发框架,同时编写Demo以帮助新加入的团队成员快速上手。项目推进中遇到的挑战也不容小觑。
第一个挑战便是分布式事务问题。在生成订单时,需要调用商品和服务来扣除库存。分布式交易就是为了解决跨服务调用带来的库存超卖问题。这也带来了性能消耗的问题。为了解决这一问题,团队开始更高效的解决方案。
紧接着是数据库压力的挑战。促销活动期间,实时统计查询给数据库带来巨大压力。由于缓存未得到充分利用,每个请求都直接打到数据库上,导致性能下降。为了应对这一问题,开发测试环境开始使用自建MySQL,生产环境则采用PolarDB。集群架构的计算和存储读写分离,但在实际应用中,需要显式指定只读事务才能确保请求转到只读节点。
除了数据库压力,缓存压力也是一大挑战。有同事使用Redis进行模糊查询,导致Redis的CPU负载严重增加。通过阿里云提供的Redis管理工具,团队找到了查询速度慢的地方并进行了优化。团队还发现了一个低级错误:在使用redisTemplate操作时,缺少了关键的参数设置。
面对这些挑战,团队也有自己的优化思路。从SQL慢查询中找到问题SQL并进行优化;结合代码直接处理缓存查询;活动高峰期禁止执行分析统计的查询;利用阿里云的限流降级产品对接口和SQL进行限流;将TP和AP分开,避免分析类直接查询业务库等。这是一个漫长但不断优化的过程。
完美日记的技术团队在面对挑战时展现出了强大的实力与智慧。他们不断摸索、实践、优化,为公司的业务发展提供了强有力的支持。如果你对技术充满热情,对挑战充满期待,那么完美日记的技术团队欢迎你加入!一起创造更多的技术魔法!问题一:突如其来的数据冲击
在商城上线的当月,一场盛大的促销活动瞬间吸引了大量流量。这场狂欢的背后,小程序的实时数据统计系统却遭遇了前所未有的挑战。原本稳定的系统面对突如其来的数据洪流,前端日志上报的接口连接数激增,服务调用超时设置过长导致CPU使用率瞬间飙升。原本平静的数值统计界面突然之间充斥着大量的零数据。当时的情况十分紧急,每一秒都可能意味着大量用户的流失。针对这种场景,不得不开启一系列的策略调整和优化措施。为此我迅速反应,用redis-cli进行了查询确认,眼前呈现的数据让我惊愕,原本稳定的数据流中全是空值。对此,优化工作刻不容缓。
问题二:优化策略与实际应用
为了应对此次危机,我们提出了一系列的优化策略。我们充分利用Nginx的高并发处理能力,结合Lua脚本的强大处理能力,将原本由Java处理的请求改为由OpenResty接收处理。这样的设计能够在前端和后端之间建立起强大的负载均衡系统,极大地提高了系统的健壮性。每次接收到请求后都会进行一个初步的检查和筛选工作,通过lua-resty-kafka模块将重要信息异步发送给Kafka进行进一步处理。利用Kafka的特性将数据存储到HDFS上后,再利用Spark进行离线计算和处理日志数据。同时后端接口也进行了独立部署和性能优化,缩短了实时数据统计调用接口的超时时间以降低系统的压力。这些举措大大提升了前端日志上报服务的处理能力,从原来的每分钟处理一千次请求提升到了四万次,大大增强了用户体验的流畅性和稳定性。
问题三:即将到来的双11挑战与应对策略
面对即将到来的双11大促活动,时间紧迫且风险重重。为了应对这次挑战,我们决定进行压力测试以评估系统的抗压能力并确定所需的服务器资源。我们选择在云服务上搭建一个与实际环境相同的压力测试环境进行模拟测试。在测试过程中我们将模拟真实的用户行为路径和响应时间构建模型并定义多个场景进行模拟测试。同时利用ECS搭建Jmeter集群进行内网接口施压以模拟大量用户请求对服务器造成的压力并观察服务器的响应情况。根据测试结果我们将调整应用的内存分配并通过PolarDB性能分析找出性能瓶颈进行优化改进。最后我们将使用PTS压测工具进行大规模的压力测试并根据测试结果进行限流控制以确保双11活动的顺利进行。通过这些措施我们希望能够确保系统在高峰期间能够稳定运行并为用户提供流畅的服务体验。2、限流:微商城与AHAS的融合之旅
在微商城项目接入AHAS的过程中,我们面临了一系列的挑战。当前版本基于spring-cloud-alibaba-dependencies-0.9.0.RELEASE,我们使用了阿里云的OSS和S服务。为了进一步提升依赖的阿里巴巴版本,我们必须进行一系列的升级操作。这其中涉及到Nacos配置中心与服务发现的升级,以及包路径的命名变更修改。这些工作对于保证系统的高效运行至关重要。
当我们在gateway网关中引入AHAS的限流功能时,选择了通过SDK接入。AHAS的SDK开发遵循了springboot-starter特性,这使得我们的微商城在接入gateway时只需在项目中加入spring-cloud-gateway-starter-ahas-sentinel即可。但在接入过程中,我们遇到了一个棘手的问题。网关路由限流采集上传的API未能完全兼容Restfull风格API,导致URL上存在参数时,多个url未能合并。针对这一问题,阿里云AHAS支持团队迅速响应,发布了新的SentinelWebInterceptor,有效清洗了Restful风格API。
在应用模块限流方面,我们也采取了SDK接入方式。但在接入SQL限流分析功能时,我们遇到了与Mybatis Plus版本不兼容的问题。尽管当时已是凌晨一点,AHAS团队依然迅速响应,并在第二天早上发布了兼容Mybatis Plus版本的SQL限流分析版本。这使我们能够正常使用SQL分析和限流功能。
AHAS不仅提供了API的限流功能,还有CPU/Load的限流功能。这些功能对服务器性能进行实时监控和保护,确保了在微商城服务器压力过高时,系统能够有效地保护服务器,防止高并发导致的系统崩溃,从而保证了服务的高可用性。在服务器压力大的时候,AHAS还能做到实时QPS日志上传的隔离,避免上传过程抢占服务器资源。
展望未来,我们计划进行以下工作:
1. 对Redis进行按服务拆分,优化数据存储和访问效率;
2. 实施数据库读写分离、分库分表,以及TP/AP分离,进一步提升数据库性能;
3. 建立业务中台,打通商品中心、库存中心、用户中心和交易中心,实现业务的高效协同。
作者:庄工、关工、唐工
为阿里云,任何未经允许的转载都将违反版权法。
关于兰蔻和完美日记哪个是国货的问题,完美日记是国货品牌之一。