范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

阿里二面千万级亿级数据,如何性能优化?教科书级答案来了

  说在前面
  在尼恩指导了几百个小伙伴的面试,在这些过程中, 非常、非常高频的一个面试题:千万级数据,如何做性能优化?
  亿级数据,如何做性能优化?
  最近,有个小伙伴阿里二面,又遇到了这个问题。
  其实,一直想梳理一个教科书式的答案,
  但是由于千万级数据、亿级数据的场景,千差万别,唯恐不能覆盖全面而出现纰漏,所以一直拖着。
  一直拖着....
  最近,在梳理超高并发行业案例的过程中,发现了一个"近乎完美" 的行业案例《vivo 全球商城 亿级订单中心、优惠券中心架构设计与实践》。
  突然,豁然开朗。
  咱们一直心心念念的 "千万级数据,如何做性能优化?" 的教科书式的答案,其实就藏着在这个行业案例里边。什么才是"教科书式" 答案:要求1:数据量贴近实际
  很多小伙伴,一说到3高架构,就习惯于 一顿猛吹,不切实际
  面试官又不是傻子,一听,就知道在吹水。
  vivo 案例里边的数据量, 刚好不多不少, 正好是 "教科书式" 的数据量要求2:方案不够完美,但是生产足以
  很多小伙伴,一遇到3高架构的题目,就异常亢奋
  狠不得竹筒倒豆子,把Java面试宝典里边的三高架构思路,书里的三高架构思路,社群的听到到三高架构思路,一个劲儿全部倒出来,
  一听,就知道在吹水。为什么呢?
  生产方案,其实不不是完美的
  完美的方案,都不怎么生产;都活在书上、活在嘴里
  而行业案例《vivo 全球商城 亿级订单中心、优惠券中心架构设计与实践》,刚好就是一个不怎么完美的方案,但是,却恰恰是一个 真正生产方案。
  总之,从 面试维度,对这个方案,进行二次重构和梳理,现在把其做为参考答案,收入咱们的
  《Java面试宝典 PDF》
  供后面的小伙伴参考,大家一定好好看看这个教科书级别的答案。
  注:本文以 PDF 持续更新,最新Java 架构笔记、面试题 的PDF文件,请后台私信【笔记】即可获取!问题场景介绍
  首先,看看VIVO商城的用户数据
  截止2021,vivo在全球已覆盖4亿多用户,服务60多个国家和地区,
  vivo 在菲律宾、马来、印度等国家的市场份额名列前三,在国内出货量始终保持领先地位,成功跻身2021年第三季度4000+以上高端手机市场份额的Top3。
  抱歉,以上是他们2021的数据,
  但是咱们手上的方案,大概是他们2018年的,那时候,他们的订单只有1000万级别。
  那个时候的vivo商城数据量看上去不多,但是刚好是完美的学习型数据。
  VIVO商城问题场景
  从2017年开始,随着用户量级的快速增长,vivo 官方商城 v1.0 的单体架构逐渐暴露出弊端:模块愈发臃肿开发效率低下性能出现瓶颈系统维护困难。
  订单模块是电商系统的交易核心,不断累积的数据即将达到单表存储瓶颈,系统难以支撑新品发布和大促活动期间的流量,服务化改造势在必行。
  那么,他们如何做优化呢?优化措施的宏观介绍优化1:业务架构解耦
  从2017年开始启动的 v2.0 架构升级和全面的解耦,包括 业务模块解耦、服务化改造业务模块解耦,主要是基于业务模块进行垂直的系统物理拆分,服务化改造,就是在业务模块解耦基础上,进一步的微服务化。拆分出来业务线各司其职,提供服务化的能力,共同支撑主站业务。
  基于业务模块进行垂直的系统物理拆分,分出来业务线各司其职,提供服务化的能力,共同支撑主站业务。优化2:数据量大的优化
  随着历史订单不断累积,2017年MySQL中订单表数据量已达千万级。之后的订单数据,远远大于亿级
  对数据量大的问题,进行了以下优化:数据归档分表优化3:吞吐量大的优化
  商城业务处于高速发展期,下单量屡创新高,业务复杂度也在提升,
  应用程序对MySQL的访问量越来越高,但是, 单机MySQL的处理能力是有限的,
  当压力过大时,所有请求的访问速度都会下降,甚至有可能使数据库宕机。
  并发量高的解决方案有:使用缓存读写分离分库优化4:高速搜索引擎的数据一致性优化
  为了便于订单的聚合搜索,高速搜索,把订单数据冗余存储在Elasticsearch中,
  那么,如何在MySQL的订单数据和ES中订单数据的增量一致性呢?
  他们从以下的两种方案中:
  1)MQ方案
  2)Binlog方案
  他们没有选择 业务代码侵入小、不影响服务本身的性能 的Binlog方案
  而是选择 更加低延迟的 MQ方案。优化5:合理的选择数据库迁移措施
  何将数据从原来的单实例数据库,迁移到新的数据库集群,也是一大技术挑战。
  要考虑的问题有二:要确保数据的正确性,还要保证迁移过程中,只要有问题,能快速地回滚。
  他们考虑了两种方案:停机迁移不停机迁移
  他们比较务实,不追求高大上。
  考虑到不停机方案的改造成本较高,而夜间停机方案的业务损失并不大,最终选用的是停机迁移方案。
  这才是 教科书式的选择。优化6:合理的进行分布式事务方案的选型
  从单体架构,到微服务架构,数据的一致性呢?
  单体架构的 数据库ACID 事务,当然保证不了,需要用到分布式事务。
  分布式事务的方案,那就太多了。
  业界的主流方案中,用于解决强一致性的有两阶段提交(2PC)、三阶段提交(3PC),
  用于解决最终一致性的有TCC、本地消息、事务消息和最大努力通知等。
  他们从高并发的场景出发,选择了本地消息表方案:
  在本地事务中将要执行的异步操作记录在消息表中,如果执行失败,可以通过定时任务来补偿。优化7: 其他的一些细节优化比如 es 召回优化比如消息的有序性优化比如sharding-jdbc 分页查询优化等等
  接下来,来看看这个生产项目,具体是怎么做的。优化1:业务架构解耦
  业务架构解耦,就是基于业务模块,进行垂直的系统物理拆分,
  拆分出来业务线各司其职,提供服务化的能力,共同支撑主站业务。
  所以,之前的订单模块,被从商城拆分出来,独立为订单系统,为商城相关系统提供订单、支付、物流、售后等标准化服务。
  模块解耦配合的,就是数据库解耦,所以,订单模块使用独立的数据库,
  高并发场景下,模块解耦之后,就是服务解耦(微服务化)。
  服务化解耦之后,对应的就是团队解耦。拆分出来业务线,各司其职。
  总结起来,其实就是四大解耦:模块解耦数据库解耦服务解耦团队解耦(业务线解耦)
  四大解耦之后,订单系统架构如下图所示:
  那么四大解耦之后,结果是什么呢:拆分出来业务线各司其职,迭代效率大幅提升能更好的应对超高并发、超大规模数据存储难题。各个业务线可以结合领域特性,实施个性化的解决方案,更加有效、更有针对性的生产难题。优化2:数据量大的优化
  随着历史订单不断累积,2017年MySQL中订单表数据量已达千万级。2017年之后的订单数据,远远大于亿级
  大家知道,InnoDB存储引擎的存储结构是B+树,单表的查找时间复杂度是O(log n),
  B+树的问题是: 树的高度越大, IO次数越多
  而磁盘IO操作,是性能非常低的。
  因此当数据总量n变大时,检索速度必然会变慢,
  不论如何加索引或者优化都无法解决,只能想办法减小单表数据量。
  对数据量大的问题,进行了以下优化:数据归档分表1)数据归档
  根据二八定律,系统绝大部分的性能开销花在20%的业务。数据也不例外,
  从数据的使用频率来看,经常被业务访问的数据称为热点数据;反之,称之为冷数据。
  订单数据具备时间属性,存在热尾效应,
  在了解的数据的冷、热特性后,便可以指导我们做一些有针对性的性能优化。
  这里面有业务层面的优化,也有技术层面的优化。
  业务层面的优化:
  电商网站,一般只能查询3个月内的订单,如果你想看看3个月前的订单,需要访问历史订单页面。
  技术层面的优化:
  大部分情况下检索的都是最近的订单,而订单表里却存储了大量使用频率较低的老数据。
  那么就可以将新老数据分开存储,将历史订单移入另一张表中,
  然后,对代码中的查询模块做一些相应改动,便能有效解决数据量大的问题。2)数据分表
  分表又包含垂直分表和水平分表:水平分表:在同一个数据库内,把一个表的数据按一定规则拆到多个表中;垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段。
  这里主要是减少 IO 的次数,降低B+树的高度,所以,主要考虑的是水平分表
  按照业内的参考标准,单表的数据在500-1000W,B+树的高度在2-3层,一般2-3次IO操作,就可以读取到数据记录。
  但是,分表和措施,通常和分库一起分析和落地。
  所以,这里稍后结合 第三大优化吞吐量大的优化,一起分析。优化3:吞吐量大的优化
  截止2021,vivo在全球已覆盖4亿多用户,服务60多个国家和地区
  从2017年开始,商城业务处于高速发展期,下单量屡创新高,吞吐量猛涨应用程序吞吐量猛涨MySQL的吞吐量猛涨
  但是, 单体MySQL的处理能力是有限的,当压力过大时,首先是 所有请求的RT时间拉长,访问速度下降,最后是拖垮整个数据库,甚至有可能使数据库宕机。
  吞吐量大的优化的解决方案有:使用缓存读写分离分库1)使用缓存
  梳理了《当当的亿级电商支付系统性能优化方案》之后,总结了高并发架构的三板斧: 缓存、池化、异步
  第一板斧,首当其冲
  首先考虑的是分布式缓存 Redis,使用Redis作为MySQL的前置缓存,可以挡住大部分的查询请求,并降低响应时延。
  其次,对于热点数据,可以使用二级缓存,甚至三级缓存
  具体可以参考诸葛老师的 《第26章视频: 百万qps 三级缓存架构落地与实操》
  但是,缓存对存在局部热点、周期性热点数据友好
  比如: 商品系统、 优惠券系统、活动系统,这里存在局部热点、周期性热点数据的系统,使用一级缓存、二级缓存、甚至三级缓存。
  但是,订单系统不属于这个场景。
  订单熊有一个特点,每个用户的订单数据都不一样,
  所以,在订单系统中,缓存的缓存命中率不高。不存在太热的数据,所以一级缓存、三级缓存就不用了。
  但是,redis 二级缓存,能缓存最近的订单,
  最近的订单也是用户最近最可能使用的数据,矮个子里边拔将军,
  所以,redis分布式还是能够为DB分担一下压力。这个还是要用的。2)读写分离
  主库负责执行数据更新请求,然后将数据变更实时同步到所有从库,用多个从库来分担查询请求。
  问题是:但订单数据的更新操作较多,下单高峰时主库的压力依然没有得到解决。且存在主从同步延迟,正常情况下延迟非常小,不超过1ms,但也会导致在某一个时刻的主从数据不一致。
  那就需要对所有受影响的业务场景进行兼容处理,可能会做一些妥协,
  比如下单成功后先跳转到一个下单成功页,用户手动点击查看订单后才能看到这笔订单。
  3)分库
  分库又包含垂直分库和水平分库:水平分库:把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上;垂直分库:按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用。
  分库能够解决整体 高吞吐的问题
  分表能够解决单表 高吞吐的问题
  综合考虑了改造成本、效果和对现有业务的影响,决定直接使用最后一招:分库分表。4)分库分表技术选型
  分库分表的技术选型主要从这几个方向考虑:客户端sdk开源方案中间件proxy开源方案公司中间件团队提供的自研框架自己动手造轮子
  参考之前项目经验,并与公司中间件团队沟通后,采用了开源的 Sharding-JDBC 方案。
  Sharding-JDBC 方案 已更名为Sharding-Sphere。特点:jar包方式提供,属于client端分片,支持xa事务
  1)分库分表策略
  结合业务特性,选取用户标识作为分片键,
  通过计算用户标识的哈希值再取模,来得到用户订单数据的库表编号。
  假设共有n个库,每个库有m张表,
  则库表编号的计算方式为:库序号:Hash(userId) / m % n表序号:Hash(userId) % m
  路由过程如下图所示:
  id的路由,逻辑比较复杂, 《10w qps 推送中台》有详细具体的介绍,这个可以参考。
  行业有非常多的解决案例, 推特 snowflake雪花id, 百度 雪花id,shardingjdbc 雪花id 源码,这些案例各有优势,这些 诸葛老师的第19章《10w qps 推送中台》有源码级、原理级的介绍。2)分库分表的局限性和应对方案
  分库分表解决了数据量和并发问题,但它会极大限制数据库的查询能力,
  有一些之前很简单的关联查询,在分库分表之后可能就没法实现了,
  那就需要单独对这些Sharding-JDBC不支持的SQL进行改写。
  除此之外,还遇到了这些挑战:
  ①全局唯一ID设计
  分库分表后,数据库自增主键不再全局唯一,不能作为订单号来使用,
  但很多内部系统间的交互接口只有订单号,没有用户标识这个分片键,如何用订单号来找到对应的库表呢?
  原来,我们在生成订单号时,就将库表编号隐含在其中了。
  这样就能在没有用户标识的场景下,从订单号中获取库表编号。
  id的设计,逻辑复杂,既要考虑 高并发高性能,还要考虑时钟回拨等问题。
  行业有非常多的解决案例, 推特 snowflake雪花id, 百度 雪花id,shardingjdbc 雪花id 源码,这些案例各有优势,这些 诸葛老师的第19章《10w qps 推送中台》有源码级、原理级的介绍。
  ②历史订单号没有隐含库表信息
  用一张表单独存储历史订单号和用户标识的映射关系,随着时间推移,这些订单逐渐不在系统间交互,就慢慢不再被用到。
  ③管理后台需要根据各种筛选条件,分页查询所有满足条件的订单
  将订单数据冗余存储在搜索引擎Elasticsearch中,仅用于后台查询。优化4:高速搜索引擎的数据一致性优化
  为了便于订单的聚合搜索,高速搜索,把订单数据冗余存储在Elasticsearch中,
  那么,如何在MySQL的订单数据和ES中订单数据的增量一致性呢?
  上面的说法,文绉绉的。
  直白来说,如何在MySQL的订单数据变更后,同步到ES中呢?
  上面说到为了便于管理后台的查询,我们将订单数据冗余存储在Elasticsearch中,
  那么,如何在MySQL的订单数据变更后,同步到ES中呢?
  这里要考虑的是数据同步的时效性和一致性、对业务代码侵入小、不影响服务本身的性能等。1)MQ方案
  ES更新服务作为消费者,接收订单变更MQ消息后对ES进行更新
  2)Binlog方案
  ES更新服务借助canal等开源项目,把自己伪装成MySQL的从节点,接收Binlog并解析得到实时的数据变更信息,然后根据这个变更信息去更新ES。
  其中BinLog方案比较通用,但实现起来也较为复杂,我们最终选用的是MQ方案。
  因为ES数据只在管理后台使用,对数据可靠性和同步实时性的要求不是特别高。
  考虑到宕机和消息丢失等极端情况,在后台增加了按某些条件手动同步ES数据的功能来进行补偿。优化5:合理的选择数据库迁移措施
  如何将数据从原来的单实例数据库,迁移到新的数据库集群,也是一大技术挑战。
  不但要确保数据的正确性,还要保证每执行一个步骤后,一旦出现问题,能快速地回滚到上一个步骤。
  我们考虑了停机迁移和不停机迁移的两种方案:1)不停机迁移方案:把旧库的数据复制到新库中,上线一个同步程序,使用 Binlog等方案实时同步旧库数据到新库;上线双写订单新旧库服务,只读写旧库;开启双写,同时停止同步程序,开启对比补偿程序,确保新库数据和旧库一致;逐步将读请求切到新库上;读写都切换到新库上,对比补偿程序确保旧库数据和新库一致;下线旧库,下线订单双写功能,下线同步程序和对比补偿程序。
  2)停机迁移方案:上线新订单系统,执行迁移程序将两个月之前的订单同步到新库,并对数据进行稽核;将商城V1应用停机,确保旧库数据不再变化;执行迁移程序,将第一步未迁移的订单同步到新库并进行稽核;上线商城V2应用,开始测试验证,如果失败则回退到商城V1应用(新订单系统有双写旧库的开关)。
  考虑到不停机方案的改造成本较高,而夜间停机方案的业务损失并不大,最终选用的是停机迁移方案。优化6:合理的进行分布式事务方案的选型
  电商的交易流程中,分布式事务是一个经典问题,比如:用户支付成功后,需要通知发货系统给用户发货;用户确认收货后,需要通知积分系统给用户发放购物奖励的积分。
  我们是如何保证微服务架构下数据的一致性呢?
  不同业务场景对数据一致性的要求不同,业界的主流方案中,用于解决强一致性的有两阶段提交(2PC)、三阶段提交(3PC),解决最终一致性的有TCC、本地消息、事务消息和最大努力通知等。
  我们正在使用的本地消息表方案:
  在本地事务中将要执行的异步操作记录在消息表中,如果执行失败,可以通过定时任务来补偿。
  下图以订单完成后通知积分系统赠送积分为例。
  优化7: 其他的一些细节、具备优化1)网络隔离
  只有极少数第三方接口可通过外网访问,且都会验证签名,
  内部系统交互使用内网域名和RPC接口,不需要要进行签名,提升性能,也提升安全性。2)并发锁
  分布式场景,可能会出现同一个订单的并发更新
  任何订单更新操作之前,会通过数据库行级锁加以限制,防止出现并发更新。3)幂等性
  分布式场景,可能会出现同一个订单的重复更新
  所有接口均具备幂等性,不用担心对方网络超时重试所造成的影响。4)熔断
  分布式场景,需要防止故障的扩散,发生由一点牵动全身的系统性雪崩
  防止某个系统故障的影响扩大到整个分布式系统中。
  使用Hystrix组件,对外部系统的实时调用添加熔断保护,防止某个系统故障的影响扩大到整个分布式系统中。5)全方位监控和告警
  通过配置日志平台的错误日志报警、调用链的服务分析告警,
  再加上公司各中间件和基础组件的监控告警功能,让我们能够能够第一时间发现系统异常。6)消息的有序性问题
  采用MQ消费的方式同步数据库的订单相关数据到ES中,遇到的写入数据不是订单最新数据问题。
  上图左边是原方案:
  在消费订单数据同步的MQ时,如果线程A在先执行,查出数据,
  这时候订单数据被更新了,线程B开始执行同步操作,查出订单数据后先于线程A一步写入ES中,
  线程A执行写入时就会将线程B写入的数据覆盖,导致ES中的订单数据不是最新的。
  上图右边是解决方案:
  解决方案是在查询订单数据时加行锁,整个业务执行在事务中,执行完成后再执行下一个线程。7)sharding-jdbc 分组后排序分页查询出所有数据问题
  示例:select a  from  temp group by a,b order by a  desc limit 1,10
  执行时Sharding-jdbc里group by 和 order by 字段和顺序不一致时将10置为Integer.MAX_VALUE, 导致分页查询失效。 io.shardingsphere.core.routing.router.sharding.ParsingSQLRouter#processLimit  private void processLimit(final List parameters, final SelectStatement selectStatement, final boolean isSingleRouting) {      boolean isNeedFetchAll = (!selectStatement.getGroupByItems().isEmpty() || !selectStatement.getAggregationSelectItems().isEmpty()) && !selectStatement.isSameGroupByAndOrderByItems();     selectStatement.getLimit().processParameters(parameters, isNeedFetchAll, databaseType, isSingleRouting); }  io.shardingsphere.core.parsing.parser.context.limit.Limit#processParameters  /** * Fill parameters for rewrite limit. * * @param parameters parameters * @param isFetchAll is fetch all data or not * @param databaseType database type * @param isSingleRouting is single routing or not */ public void processParameters(final List parameters, final boolean isFetchAll, final DatabaseType databaseType, final boolean isSingleRouting) {     fill(parameters);     rewrite(parameters, isFetchAll, databaseType, isSingleRouting); }   private void rewrite(final List parameters, final boolean isFetchAll, final DatabaseType databaseType, final boolean isSingleRouting) {     int rewriteOffset = 0;     int rewriteRowCount;     if (isFetchAll) {         rewriteRowCount = Integer.MAX_VALUE;     } else if (isNeedRewriteRowCount(databaseType) && !isSingleRouting) {          rewriteRowCount = null == rowCount ? -1 : getOffsetValue() + rowCount.getValue();     } else {        rewriteRowCount = rowCount.getValue();     }     if (null != offset && offset.getIndex() > -1 && !isSingleRouting) {        parameters.set(offset.getIndex(), rewriteOffset);      }      if (null != rowCount && rowCount.getIndex() > -1) {         parameters.set(rowCount.getIndex(), rewriteRowCount);       } }
  正确的写法应该是select a  from  temp group by a desc ,b limit 1,10;
  两个sql,可以对比一下select a  from  temp group by a desc ,b limit 1,10 ; #优化的sql, 去掉了 oderby  select a  from  temp group by a,b order by a  desc limit 1,10   #原始的sql
  这里 使用的版本是sharing-jdbc的3.1.1。8)ES分页查询的召回问题
  ES分页查询的召回问题: ES分页查询如果排序字段存在重复的值。
  解决方案:最好加一个唯一的字段作为第二排序条件,避免分页查询时漏掉数据、查出重复数据,
  比如用的是订单创建时间作为唯一排序条件,同一时间如果存在很多数据,就会导致查询的订单存在遗漏或重复,
  这里,需要增加一个唯一值作为第二排序条件、或者直接使用唯一值作为排序条件。优化和升级的成果
  最后,总结一下,优化和升级的成果一次性上线成功,稳定运行了一年多;核心服务性能提升十倍以上;系统解耦,迭代效率大幅提升;能够支撑商城至少五年的高速发展。来自VIVO官方的建议
  VIVO官网商城开发团队在系统设计时,并没有一味追求前沿技术和思想,
  面对问题根据业务实际状况来选取最合适的办法。
  VIVO官网商城开发团队认为,一个好的系统,不是在一开始就被大牛设计出来的,
  一个好的系统,一定是随着业务的发展和演进逐渐被迭代出来的,持续预判业务发展方向,提前制定架构演进方案,所以,以上才是"教科书式" 答案:
  结合 VIVO的优化方案,大家回到前面的面试题:千万级数据,如何做性能优化?亿级数据,如何做性能优化?
  很多小伙伴,一遇到3高架构的题目,就异常亢奋,狠不得竹筒倒豆子,一顿狂吹,一通猛吹,一通瞎吹
  通过以上的VIVO的实际优化案例,大家应该有一个切实的感受:生产方案,其实不不是完美的完美的方案,都不怎么生产;都活在书上、活在嘴里
  以上问题的和答案,不算完美,但是,正因为这样,才算是一个面试场景,教科书式的答案
  该答疑,已经收入 《Java面试宝典》第V36版本,需要的朋友请后台私信【笔记】获取。
  后续,尼恩为结合生产实际项目、一线生产项目,
  给大家分析、总结更多的,更加 符合实际的、真正的工业级的 教科书式的答案。
1米高做了20年群众演员,娶了小18岁的老婆,生的孩子像极他张伸,可能有点侏儒症的演员,小编说出这个名字估计你们都不知道,可如果你喜欢看古装剧的话应该看到过他的表演。(此处已添加小程序,请到今日头条客户端查看)他与好多著名演员都合作过。别看刚红就翻车?田曦薇称愿为舞台放弃生命,网友翻出她过往争议言论2022年末,一部黑马之作卿卿日常来袭,点亮了无数剧粉的心。这部剧最初本不被看好,因其算不上大IP女主田曦薇观众缘也一般。更重要的是,刚开播一天,男主白敬亭和宋轶就被曝光了恋情,这2022年最辣眼的网剧演员满脸褶子装少年,为了赚钱一露再露近几年,拍摄网络电影成了一个新的产业链,面对巨大的流量,投资商导演和演员都尝到了甜头,也诞生了很多烂剧。那些颇有名气资源不错的演员,自然看不上这个蛋糕。但那些已经过气逐渐老去的演员艾顿威廉森是为了给主场观众表演,我没情绪今天鹈鹕128117击败太阳。赛后太阳中锋德安德烈艾顿接受了采访。今天比赛最后时刻,蔡恩威廉森上演大风车扣篮,随后双方发生冲突。赛后,太阳后卫卡梅伦佩恩表示,威廉森的行为不绅士。对欧阳娜娜自创品牌,成本50元的浴袍卖988,真把粉丝当韭菜收割?最近,欧阳娜娜自创品牌nabi上线,卖起了浴袍围巾卫衣长裤袜子眼罩和兔子玩偶。这个被称为云朵胶囊新系列的所有产品以白色为主,看海报很简约。别小瞧极简风,价格一公布大家惊呆了。浴袍9经常吃冷饭,不仅可以帮助降低血糖,还能维持肠道健康?真相来了好好的饭,偏要放冷了才吃,真是无法理解。王叔又在唠叨老伴了。李阿姨在去年被查出糖尿病,从那之后就对自己的饮食格外注意。偶然的一次机会下,在网络上看到一篇文章称,日本糖尿病患者出现并提供12款配色,三菱DelicaMini部分配置曝光近日,三菱DelicaMini的部分配置信息从外媒处曝光,新车提供12款车身配色可选,分别为6款双拼色涂装和6款纯色涂装。据悉,新车将会在2023年正式上市。外观方面,据外媒透露,含糖超高的饮料,你家孩子拿哪个呢你家孩子喝饮料吗你家孩子是否无糖不欢呢?是否一有机会总是要喝上一瓶饮料呢?为了孩子的健康,饮料的含糖指数,快收藏起来吧!长期喝饮料的孩子,一年体重增长相比不喝饮料的孩子会增加15斤又有家长让我给她孩子打个电话休产假第四个月,前天早晨一个家长发微信,问我下午有没有时间和她孩子视频一下,孩子六年级,上周作业没完成,母女关系也有点紧张,孩子挺喜欢我,和她妈妈说最近学不进去,可能高老师请假,我警惕含油量惊人的辣条,一定要保护好孩子的嘴近日,湖北恩施一小孩因为贪吃辣条,吃过之后一直舔嘴唇,结果嘴巴肿成了香肠嘴。很多人就好奇,为何看似普通的辣条,会有这么大的威力。其实,你看似简单的辣条,它背后的加工程序可一点也不简感统训练孩子训练的最佳时间是什么时候?该做什么训练?家长们知道感统训练对孩子的重要性,尤其在学龄前。感统训练是适合学龄前儿童的活动,又被称为儿童健身。能够有效的促进儿童大脑和身体的协调运作,促进大脑神经链接。那么,孩子训练的最佳时间
你是不是也掉进了可丽金类人胶原蛋白的陷阱每到换季,很多人都说自己是敏感肌,皮肤出现不同程度的泛红干痒,其实如果你的皮肤不是经常性的出现不适,你并不属于敏感肌,只是换季的时候,不注意皮肤防护,而使皮肤屏障受损,出现偶然性的赌王儿媳奚梦瑶气质太好,穿黑色吊带裙秀出超模身材,的确很撩人很多明星的搭配风格都是比较个性大胆的,尤其是出席活动,都希望可以给自己选择一款个性的服饰,体现个人魅力。奚梦瑶身为赌王儿媳,身材和气质更是十分在线,这一次就给自己搭配了时髦的黑色吊郭晶晶和婆婆同穿旗袍,婆媳差距一目了然,谁丑谁尴尬郭晶晶算得上是一位人生赢家了,早前她是一位很优秀的运动员,而且还被大家称作是跳水皇后,退役之后又成功嫁进了豪门,过起了富太太的生活。这样的生活也是很多女孩子都比较羡慕的,而郭晶晶也国王未加时爆砍153分撕破篮网,今日nba综述1。灰熊102113鹈鹕灰熊客场挑战鹈鹕,本场比赛锡安确阵,不过鹈鹕队员表现出色,南斯很好补了锡安的空缺,麦科勒姆拿下30分9助攻,投篮23中11,三分球13中7,莫兰特艰难拿下3排超全明星票选拉开帷幕!丁霞落选候补名单,天津女排7人入选排超联赛虽说刚结束B组的赛事,可全明星的票选则是拉开帷幕,由参赛俱乐部推举并经组委会审核补充产生了88人的候补名单,排超全明星赛的阵容将从这88人中产生,可88人名单依旧是引起了不真正气质的女人,穿大衣不会配高跟鞋!看袁泉陈数你就知道了作为秋冬的时尚单品,大衣流行了很多年,不管多大年纪穿,都能够轻松穿出高级质感,但大衣在搭配得时候,要格外关注鞋子,避免累赘。比如搭配短靴长靴运动鞋等等,不同鞋子能够穿出不一样的风格你,多久没有勇敢了?你,多久没有勇敢过了?最近山东那位为爱冲锋的勇士刷爆网络。几乎绝大多数人被他对爱情的忠诚所打动,以及那一份勇敢。这份难得可贵的勇敢。在爱情上,多少人缺少了这样的勇敢?年少时候不敢说村干部催收新农合,农民态度反转,不愿意交了,为啥?导语农村医保是大多数村民就医的选择,毕竟国家提倡全民医保,而且要求应保尽保,同时对于交费也是要求应缴尽缴。而村干部作为最为基层的领导,对农村新农合医保的收缴是有任务的,而现在又到了国四排放标准落地在即工程机械厂商密集上新非道路移动机械国家第四阶段排放标准(下称国四),即将在12月1日落地实施。11月以来工程机械企业密集举行国四新品发布会,并推出促销活动。除了满足新排放标准,国四新品在智能化数字化和微信又更新了,这大小是认真的吗?最近微信又更新了,谁能想到一个日常的更新,安装包已经突破到了500M。主要是带来一些细节上的变化,像是声音锁可以重新设置,给好友添加图片备注时可以选择从聊天记录中选择图片,视频号发深秋十堰十条出游线路人间最美是金秋红叶漫山一眼收银杏像被揉碎的太阳,将世界染成金黄。穿上汉服,踏着石阶,站在千年古树下,仿佛穿越到遥远的古代。树树皆秋色,山山唯落晖。秋尽冬将来,秋阳把大自然渲染得美到极致,正是出游好时节。赶快抓