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

图解一致性哈希算法,看这一篇就够了

  近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。  一、背景
  在具体介绍一致性哈希算法之前,先问一个问题:为什么需要一致性哈希算法?下面我们通过一个案例来回答这个问题。
  假设有这么一种场景:我们有三台缓存服务器分别为:node0、node1、node2,有3000万个缓存数据需要存储在这三台服务器组成的集群中,希望可以将这些数据均匀的缓存到三台机器上,你会想到什么方案呢?
  我们可能首先想到的方案是:取模算法hash(key)%N,即:对缓存数据的key进行hash运算后取模,N是机器的数量;运算后的结果映射对应集群中的节点。具体如下图所示:
  如上图所示,首先对key进行hash计算后的结果对3取模,得到的结果一定是0、1或者2;然后映射对应的服务器node0、node1、node2,最后直接找对应的服务器存取数据即可。
  通过取模算法将每个数据请求都均匀地分散到了三个不同的服务器节点上,看起来很完美!但是,在分布式集群系统的负载均衡实现上,这种模型在集群扩容和收缩时却有一定的局限性:因为在生产环境中根据业务量的大小,调整服务器数量是常有的事,而服务器数量N发生变化后hash(key)%N计算的结果也会随之变化!导致整个集群的缓存数据必须重新计算调整,进而导致大量缓存在同一时间失效,造成缓存的雪崩,最终导致整个缓存系统的不可用,这是不能接受的。为了解决优化上述情况,一致性哈希算法应运而生。  二、一致性哈希简介
  有些朋友一听到算法就头大,其实大可不必,一致性哈希算法听起来高大上,其实非常简单。接下来开始介绍什么是一致性哈希算法,它解决了什么问题。  2.1 什么是一致性哈希?
  一致性哈希(Consistent Hash)算法是1997年提出,是一种特殊的哈希算法,目的是解决分布式系统的数据分区问题:当分布式集群移除或者添加一个服务器时,必须尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。  2.2 一致性哈希主要解决问题
  我们知道,传统的按服务器节点数量取模在集群扩容和收缩时存在一定的局限性。而一致性哈希算法正好解决了简单哈希算法在分布式集群中存在的动态伸缩的问题。降低节点上下线的过程中带来的数据迁移成本,同时节点数量的变化与分片原则对于应用系统来说是无感的,使上层应用更专注于领域内逻辑的编写,使得整个系统架构能够动态伸缩,更加灵活方便。  2.3 一致性哈希的使用场景
  一致性哈希算法是分布式系统中的重要算法,使用场景也非常广泛。主要是是负载均衡、缓存数据分区等场景。
  一致性哈希应该是实现负载均衡的首选算法,它的实现比较灵活,既可以在客户端实现,也可以在中间件上实现,比如日常使用较多的缓存中间件memcached 使用的路由算法用的就是一致性哈希算法。
  此外,其它的应用场景还有很多:  RPC框架Dubbo用来选择服务提供者  分布式关系数据库分库分表:数据与节点的映射关系  LVS负载均衡调度器
  三、一致性哈希的原理2.1 算法原理
  前面介绍的取模算法虽然使用简单,但缺陷也很明显,如果服务器中保存有服务请求对应的数据,那么如果重新计算请求的哈希值,会造成缓存的雪崩的问题。这种情况在分布式系统中是非常糟糕的。一个设计良好的分布式系统应该具有良好的单调性,即服务器的添加与移除不会造成大量的哈希重定位,而一致性哈希恰好可以解决这个问题 。
  其实,一致性哈希算法本质上也是一种取模算法。只不过前面介绍的取模算法是按服务器数量取模,而一致性哈希算法是对固定值2^32取模,这就使得一致性算法具备良好的单调性:不管集群中有多少个节点,只要key值固定,那所请求的服务器节点也同样是固定的。其算法的工作原理如下:  一致性哈希算法将整个哈希值空间映射成一个虚拟的圆环,整个哈希空间的取值范围为0~2^32-1;  计算各服务器节点的哈希值,并映射到哈希环上;  将服务发来的数据请求使用哈希算法算出对应的哈希值;  将计算的哈希值映射到哈希环上,同时沿圆环顺时针方向查找,遇到的第一台服务器就是所对应的处理请求服务器。  当增加或者删除一台服务器时,受影响的数据仅仅是新添加或删除的服务器到其环空间中前一台的服务器(也就是顺着逆时针方向遇到的第一台服务器)之间的数据,其他都不会受到影响。
  综上所述,一致性哈希算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性 。
  2.2 深入剖析
  说了那么多,可能你还是云里雾里的,那么接下来我们详细剖析一致性哈希的实现原理。  2.2.1 哈希环
  首先,一致性哈希算法将整个哈希值空间映射成一个虚拟的圆环。整个哈希空间的取值范围为0~2^32-1,按顺时针方向开始从0~2^32-1排列,最后的节点2^32-1在0开始位置重合,形成一个虚拟的圆环。如下图所示:
  2.2.2 服务器映射到哈希环
  接下来,将服务器节点映射到哈希环上对应的位置。我们可以对服务器IP地址进行哈希计算,哈希计算后的结果对2^32取模,结果一定是一个0到2^32-1之间的整数。最后将这个整数映射在哈希环上,整数的值就代表了一个服务器节点的在哈希环上的位置。即:hash(服务器ip)% 2^32。下面我们依次将node0、node1、node2三个缓存服务器映射到哈希环上,如下图所示:
  2.2.3 对象key映射到服务器
  当服务器接收到数据请求时,首先需要计算请求Key的哈希值;然后将计算的哈希值映射到哈希环上的具体位置;接下来,从这个位置沿着哈希环顺时针查找,遇到的第一个节点就是key对应的节点;最后,将请求发送到具体的服务器节点执行数据操作。
  假设我们有"key-01:张三"、"key-02:李四"、"key-03:王五"三条缓存数据。经过哈希算法计算后,映射到哈希环上的位置如下图所示:
  如上图所示,通过哈希计算后,key-01顺时针寻找将找到node0,key-02顺时针寻找将找到node1,key-03顺时针寻找将找到node2。最后,请求找到的服务器节点执行具体的业务操作。
  以上便是一致性哈希算法的工作原理。  四、服务器扩容&缩容
  前面介绍了一致性哈希算法的工作原理,那么,一致性哈希算法如何避免服务器动态伸缩的问题的呢?  4.1 服务器缩容
  服务器缩容就是减少集群中服务器节点的数量或是集群中某个节点的故障。假设,集群中的某个节点故障,原本映射到该节点的请求,会找到哈希环中的下一个节点,数据也同样被重新分配至下一个节点,其它节点的数据和请求不受任何影响。这样就确保节点发生故障时,集群能保持正常稳定。如下图所示:
  如上图所示:节点node2发生故障时,数据key-01和key-02不会受到影响,只有key-03的请求被重定位到node0。在一致性哈希算法中,如果某个节点宕机不可用了,那么受影响的数据仅仅是会寻址到此节点和前一节点之间的数据。其他哈希环上的数据不会受到影响。  4.2 服务器扩容
  服务器扩容就是集群中需要增加一个新的数据节点,假设,由于需要缓存的数据量太大,必须对集群进行扩容增加一个新的数据节点。此时,只需要计算新节点的哈希值并将新的节点加入到哈希环中,然后将哈希环中从上一个节点到新节点的数据映射到新的数据节点即可。其他节点数据不受影响,具体如下图所示:
  如上图所示,加入新的node3节点后,key-01、key-02不受影响,只有key-03的寻址被重定位到新节点node3,受影响的数据仅仅是会寻址到新节点和前一节点之间的数据。
  通过一致性哈希算法,集群扩容或缩容时,只需要重新定位哈希环空间内的一小部分数据。其他数据保持不变。当节点数越多的时候,使用哈希算法时,需要迁移的数据就越多,使用一致哈希时,需要迁移的数据就越少。所以,一致哈希算法具有较好的容错性和可扩展性。  五、数据倾斜与虚拟节点5.1 什么是数据倾斜?
  前面说了一致性哈希算法的原理以及扩容缩容的问题。但是,由于哈希计算的随机性,导致一致性哈希算法存在一个致命问题:数据倾斜,,也就是说大多数访问请求都会集中少量几个节点的情况。特别是节点太少的情况下,容易因为节点分布不均匀造成数据访问的冷热不均。这就失去了集群和负载均衡的意义。如下图所示:
  如上图所示,key-1、key-2、key-3可能被映射到同一个节点node0上。导致node0负载过大,而node1和node2却很空闲的情况。这有可能导致个别服务器数据和请求压力过大和崩溃,进而引起集群的崩溃。  5.2 如何解决数据倾斜?
  为了解决数据倾斜的问题,一致性哈希算法引入了虚拟节点机制,即对每一个物理服务节点映射多个虚拟节点,将这些虚拟节点计算哈希值并映射到哈希环上,当请求找到某个虚拟节点后,将被重新映射到具体的物理节点。虚拟节点越多,哈希环上的节点就越多,数据分布就越均匀,从而避免了数据倾斜的问题。
  说起来可能比较复杂,一句话概括起来就是:原有的节点、数据定位的哈希算法不变,只是多了一步虚拟节点到实际节点的映射。具体如下图所示:
  如上图所示,我们可以在服务器ip或主机名的后面增加编号来实现,将全部的虚拟节点加入到哈希环中,增加了节点后,数据在哈希环上的分布就相对均匀了。当有访问请求寻址到node0-1这个虚拟节点时,将被重新映射到物理节点node0。  六、一致性Hash算法实现
  前面介绍了一致性哈希算法的原理、动态伸缩以及数据倾斜的问题后,下面我们根据上面的讲述,使用Java实现一个简单的一致性哈希算法。  6.1 数据节点
  首先定义一个节点类,实现数据节点的功能,具体代码如下:  public class Node {     private static final int VIRTUAL_NODE_NO_PER_NODE = 200;     private final String ip;     private final List virtualNodeHashes = new ArrayList<>(VIRTUAL_NODE_NO_PER_NODE);     private final Map cacheMap = new HashMap<>();      public Node(String ip) {         Objects.requireNonNull(ip);         this.ip = ip;         initVirtualNodes();     }       private void initVirtualNodes() {         String virtualNodeKey;         for (int i = 1; i <= VIRTUAL_NODE_NO_PER_NODE; i++) {             virtualNodeKey = ip + "#" + i;             virtualNodeHashes.add(HashUtils.hashcode(virtualNodeKey));         }     }      public void addCacheItem(Object key, Object value) {         cacheMap.put(key, value);     }       public Object getCacheItem(Object key) {         return cacheMap.get(key);     }       public void removeCacheItem(Object key) {         cacheMap.remove(key);     }       public List getVirtualNodeHashes() {         return virtualNodeHashes;     }      public String getIp() {         return ip;     } }
  6.2 实现一致性哈希算法
  接下来实现核心功能:一致性哈希算法,主要使用java的TreeMap类,实现哈希环和哈希查找的功能。具体代码如下所示:  public class ConsistentHash {     private final TreeMap hashRing = new TreeMap<>();      public List nodeList = new ArrayList<>();      /**      * 增加节点      * 每增加一个节点,就会在闭环上增加给定虚拟节点      * 例如虚拟节点数是2,则每调用此方法一次,增加两个虚拟节点,这两个节点指向同一Node      * @param ip      */     public void addNode(String ip) {         Objects.requireNonNull(ip);         Node node = new Node(ip);         nodeList.add(node);         for (Integer virtualNodeHash : node.getVirtualNodeHashes()) {             hashRing.put(virtualNodeHash, node);             System.out.println("虚拟节点[" + node + "] hash:" + virtualNodeHash + ",被添加");         }     }      /**      * 移除节点      * @param node      */     public void removeNode(Node node){         nodeList.remove(node);     }      /**      * 获取缓存数据      * 先找到对应的虚拟节点,然后映射到物理节点      * @param key      * @return      */     public Object get(Object key) {         Node node = findMatchNode(key);         System.out.println("获取到节点:" + node.getIp());         return node.getCacheItem(key);     }      /**      * 添加缓存      * 先找到hash环上的节点,然后在对应的节点上添加数据缓存      * @param key      * @param value      */     public void put(Object key, Object value) {         Node node = findMatchNode(key);          node.addCacheItem(key, value);     }      /**      * 删除缓存数据      */     public void evict(Object key) {         findMatchNode(key).removeCacheItem(key);     }       /**      *  获得一个最近的顺时针节点      * @param key 为给定键取Hash,取得顺时针方向上最近的一个虚拟节点对应的实际节点      *      * @return 节点对象      * @return      */     private Node findMatchNode(Object key) {         Map.Entry entry = hashRing.ceilingEntry(HashUtils.hashcode(key));         if (entry == null) {             entry = hashRing.firstEntry();         }         return entry.getValue();     } }
  如上所示,通过TreeMap的ceilingEntry() 方法,实现顺时针查找下一个的服务器节点的功能。
  6.3 哈希计算方法
  哈希计算方法比较常见,网上也有很多计算hash 值的函数。示例代码如下:  public class HashUtils {      /**      * FNV1_32_HASH      *      * @param obj      *         object      * @return hashcode      */     public static int hashcode(Object obj) {         final int p = 16777619;         int hash = (int) 2166136261L;         String str = obj.toString();         for (int i = 0; i < str.length(); i++)             hash = (hash ^ str.charAt(i)) * p;         hash += hash << 13;         hash ^= hash >> 7;         hash += hash << 3;         hash ^= hash >> 17;         hash += hash << 5;          if (hash < 0)             hash = Math.abs(hash);         //System.out.println("hash computer:" + hash);         return hash;     } }
  6.4 验证测试
  一致性哈希算法实现后,接下来添加一个测试类,验证此算法时候正常。示例代码如下:  public class ConsistentHashTest {     public static final int NODE_SIZE = 10;     public static final int STRING_COUNT = 100 * 100;     private static ConsistentHash consistentHash = new ConsistentHash();     private static List sList = new ArrayList<>();      public static void main(String[] args) {         // 增加节点         for (int i = 0; i < NODE_SIZE; i++) {             String ip = new StringBuilder("10.2.1.").append(i)                     .toString();             consistentHash.addNode(ip);         }          // 生成需要缓存的数据;         for (int i = 0; i < STRING_COUNT; i++) {             sList.add(RandomStringUtils.randomAlphanumeric(10));         }          // 将数据放入到缓存中。         for (String s : sList) {             consistentHash.put(s, s);         }          for(int i = 0 ; i < 10 ; i ++) {             int index = RandomUtils.nextInt(0, STRING_COUNT);             String key = sList.get(index);             String cache = (String) consistentHash.get(key);             System.out.println("Random:"+index+",key:" + key + ",consistentHash get value:" + cache +",value is:" + key.equals(cache));         }          // 输出节点及数据分布情况         for (Node node : consistentHash.nodeList){             System.out.println(node);         }          // 新增一个数据节点         consistentHash.addNode("10.2.1.110");         for(int i = 0 ; i < 10 ; i ++) {             int index = RandomUtils.nextInt(0, STRING_COUNT);             String key = sList.get(index);             String cache = (String) consistentHash.get(key);             System.out.println("Random:"+index+",key:" + key + ",consistentHash get value:" + cache +",value is:" + key.equals(cache));         }          // 输出节点及数据分布情况         for (Node node : consistentHash.nodeList){             System.out.println(node);         }     } }
  运行此测试,输出结果如下所示:
  最后
  以上,我们就把一致性哈希算法的实现原理,应用场景、解决了哪些问题都介绍完了,并用java简单实现了一个一致性哈希算法。相信看完之后,大家对一致性哈希算法应该不会那么陌生害怕了吧。

还在穿五年前的衣服,反映了这些问题你知道吗?还在穿五年前的衣服,反映了什么问题呢x1身材好,衣服质量好大家好,今天要谈谈的话题是还在穿五年前的衣服,反映了什么问题呢。衣服对于我们来说是一种重要的生活必需品,而且在日常生活中,郑智刚上任就想起老东家泰山队,泰山队或可帮郑智一把,实现共赢目前中超联赛还在火热进行,而就在近日,广州队再一次成为了外界关注的焦点,原因是广州队终于完成了换帅工作,刘智宇因为成绩不佳还是下课了,而备受关注的郑智回归了球队,郑智的回归无疑是给你的皮肤需要自己守护爱美之心人皆有之,对于皮肤的护理是很多女生最关注的话题。随着人们对护肤的深入了解,大家早已不再盲目地挑选贵的产品,去贵的美容院,而是更加关注皮肤问题最本质的原因,也更能清晰地知道自芝麻酱的含钙量是牛奶的10倍?专家不建议这样补芝麻酱是我们餐桌上常见的食材网传芝麻酱的含钙量是牛奶的10倍芝麻酱里含钙量到底是多少?想要补钙是不是吃芝麻酱就可以了?快来一起了解芝麻酱里含钙量到底是多少?100克芝麻酱中含有11蕾特恩有话说皮肤泛红是害羞?不一定!也有可能是敏感肌相信不少蕾粉都遇到过,一到夏天或者换季时期,皮肤就会有泛红的情况出现。很多人误以为这可能是因为见到自己喜欢的人害羞导致的。但其实也有可能因为你是敏感肌。接下来跟小蕾一起了解一下吧!我们应该禁止史蒂夫?8月15日,任天堂明星大乱斗比赛超级粉碎大会(SSC)结束。SSC是世界上最大的大型战斗比赛之一。前两年因疫情中断后,今年再次线下举办。因为场地在美国,除了日本选手,几乎所有优秀选BLG不敌LNG后,官博沦陷!粉丝嘲讽赶紧把icon踢了,难怪没人要LPL夏季赛季后赛LNG和BLG的比赛,最终LNG成功以31的战绩击败了BLG。其中在第四局中,BLG前期和LNG打得有来有回,而且BLG的阵容后期也可以打,看上去很有希望,但是最战争雷霆发布停运公告17日,战争雷霆WarThunder发布公告称由于腾讯与战争雷霆游戏开发商的代理协议即将到期,腾讯将于2022年10月17日1200正式停止战争雷霆在中国大陆地区的运营。来源九派财不要放弃我刚刚有个话题,关于试管婴儿的,各种费用加起来46万元,不能保证百分百成功。不到万不得已不做试管婴儿,各种器械和药物要用上,做胚胎的培养皿是塑料制品,还有针剂,一不小心就有可能接触塑婴儿无人照料是阻碍生育首要因素?错!真正的原因在这婴幼儿无人照料是阻碍生育首要因素说婴儿无人照料是阻碍生育首要因素的人应该是有权有钱,吃喝不愁的大户人家。他们不用为生计发愁,也不用整天算计手里那三瓜俩枣还够不够喝西北风的。要不怎么另类婆婆带娃方式走红,这样带出来的娃专注力更强,快来学习婆媳问题一直是大家津津乐道的问题,有的婆媳之间互相成就,而有的婆媳之间的相互诋毁。有人说,距离产生美,这在婆媳之间依然成立。但是,现在社会压力大,年轻人总是不能家庭事业两头兼顾,特杨紫蛋糕风波越闹越大,胡辣汤再上热搜,赵丽颖王一博也被拉下水近日,娱记张小寒将内娱搅得有些不得安宁,在一连串预告将气氛点燃后,她公开杨紫与刘学义同吃一块蛋糕的视频。本来这段视频也没有什么,大家还纷纷吐槽张小寒,让他找个工厂去上班,但没想到事盘点明星亲自撒谎式澄清杨紫吃蛋糕,赵丽颖劈叉,吴亦凡进监狱有时候明星说的话真的不能信,撒谎式是澄清更是屡次上演,我都替他们尴尬。杨紫刘学义最近张晓寒又爆出了一个大瓜,说刘学义和杨紫吃同一个蛋糕,接着杨紫和刘学义分别出来澄清。没想到第二天张扮猪吃虎杨颖保护赵今麦给赵丽颖安全感,杨颖情商有多高从百依百顺的小女友,到提着裙摆头也不回的女王,Angelababy的一路长虹,靠的可不全是黄晓明。2019年的一档潮流综艺上,29岁的某凡多次对17岁的赵今麦献殷勤。彼时他看到赵今央视2022中秋晚会录制完成33个节目,赵丽颖周深王心凌肖战齐聚虽说现在才八月初,离中秋节还有一个月的时间,但央视的中秋晚会已经录制完成。据悉,总导演已经在其个人短视频平台发文,称2022中秋晚会录制结束。今年的中秋晚会采取录播形式,不设观众席央视王冰冰被停职有错吗?职场要的是自律,而不是放纵自我因与游泳运动员徐嘉余官宣恋情引起争议,男方前女友曝出王冰冰其实是第三者。此事一经曝出,让曾为央视力捧的网红记者王冰冰的事业受到严重影响,先是被央视停止,现在疑似已经辞职离开央视。留鹿晗模仿者鹿哈改名上热搜,自己可以独闯一片天,杨迪曾公开指责鹿晗的模仿者鹿哈,以前直播都在骂鹿晗本尊,现在改个名字都能上热搜榜?而且还非常挑衅地说感谢鹿晗的粉丝!!!今天我们就来一起看看,这个瓜保不保熟,是不是生瓜蛋子模仿者鹿哈发文说我知道硬捧关系户?赛制花里胡哨?评判结果失真?这街5被唱衰这就是街舞自第一季以来收获了不少粉丝,一度将国人的街舞热情推向高潮,网络评分也远超其他同类综艺。从国内到国外,从成年到新生代,这街的录制形式越来越多样化。就在前两天,这就是街舞第五吴镇宇与古天乐合作的脱皮爸爸,治好了我的精神内耗周末闲来无事重温了吴镇宇和春夏主演的脱皮爸爸,笑着笑着就哭了。影片秉承港片一贯的喜剧风格,在台词里,动作里,以及演员的表演上,极尽夸张之能事,但是里面时不时冒出的几句台词,又会让你怎么办!脱口秀专场真人秀脱口秀,值得一看的下饭团综打卡挑战局还有一期,笑果团综怎么办!脱口秀专场即将收官。有点可惜的是,经历了第一期的炸裂开场,后面突然就没了声音,有可能真的是第一期就花完了所有预算。这个节目也算命运多舛,录制过程秦霄贤赢在哪里?郭德纲力捧出道即巅峰,除了能力还有这3点原因为什么大家都喜欢秦霄贤?或许你从老秦的本能反应中就能找到答案!节目上秦霄贤与哈妮克孜,找到一位清洁工阿姨做任务,老秦走近阿姨的第一反应,打动了无数网友由于阿姨第一次见这么多陌生人,央视邢质斌35年0失误,一生不接广告代言,钱重要,名誉更重要邢质斌在播音主持上的优秀无人能够想象得到,哪怕工作35年间,也从未有过一次失误,然而就这么一位令无数人喜爱,让后辈们尊敬的邢质斌老师,在晚年退休后,却差点名节尽毁,晚节不保。那么,
小柚游戏推荐牧场甜心不屠杀任何动物的牧场该如何经营?我决定了,要把拉可莫牧场打造成一个不进行任何动物加工的纯净牧场!雷托雷托牧场的继承者,深爱着牛牛的拉可莫,在16岁生日时从父亲那里获得了牧场的部分经营工作。但,不愿意屠宰动物的拉可体验服2。21号更新专精项羽大幅削弱,元歌改动回调,AP梦奇增强2月21号,王者荣耀体验服版本更新,专精项羽元歌和梦奇迎来了强度调整。一专精项羽输出能力下调专精装二技能CD9(0。6Lv)10(0。8Lv)专精装首次强化普攻70(40Lv)(1万代宣布进军纵读漫画业三年投资10亿打造新IP2月21日今天,万代南梦宫宣布原日升子会社正式进军纵读漫画业,除了继续挖掘经典IP外,计划三年投资10亿打造新IP,敬请期待。所谓纵读漫画特制专门适用于手机平台阅读的纵向卷轴漫画,荒唐!医院弄错试管婴儿,与现父母均无血缘,院方劝养父要豁达!科学婚恋指南这是一件荒唐的事情安徽合肥有对夫妻,婚后一直要不上孩子!各种检查都做过,漫漫求子路上吃尽了苦头!最终确诊为不孕不育2011年,已经50岁的陈先生和40岁的妻子抱着试一试7岁男孩抽动症父母未重视,导致症状加重,中医辨证肝火犯肺!年后开始坐诊还不到一个月的时间,接诊抽动症的孩子越来越多了。有过年期间才开始有症状的,有确诊抽动症两三年西医看不好到我这里寻求中医治疗的,还有来看咳嗽结果我发现孩子是抽动症的,等等育儿成本高涨英国父母被迫推迟或放弃继续生育英国最新一项研究显示,由于保育费用高昂,大多数有年幼子女的父母会推迟再生一个孩子。英国卫报报道,随着英国财政大臣杰里米亨特考虑采取措施降低育儿成本,知名育儿机构将向唐宁街递交一封联给父母选择家电可以看看这个首先以我个人的经验来看,如果是买给长辈,首先要选择一款大电视,然后就是要看电视的实际操作的便捷性,尽量选择操作简单的。老人上了年纪之后,再接受一个新鲜事物是很难的。之前的电视系统怎新研究表明,随着生活成本的上升,澳洲父母减少了孩子的零花钱一项新的研究表明,随着澳大利亚家庭感受到生活成本的上涨,孩子们的零花钱正在受到打击。在完成Finder的2023年育儿报告的十分之一以上的父母表示,他们在过去12个月里削减了孩子的操心越多,孩子越是长不大,当父母的请懒惰些撰稿镜子面对儿子学习的散漫情绪,相信着急的不止我一个。其实,关于这个问题,有太多宝妈宝爸在抱怨了,也不知道别人家的孩子都是怎么教育的,怎么学习上那么自律,学习那么认真,关键是还不用把尿布留在托儿所吧!日政府为父母解决尿布负担孩子的脏尿布应该怎么处理?据日本时报19日报道,越来越多的家长表示将孩子的脏尿布带回家处理是一种负担,于是上个月,日本厚生劳动省向各地方政府发出通知,呼吁不要让父母带尿布回家,并鼓孩子在等你的一句真心道歉每天的生活,都是灵魂的精心创造你给了孩子多大的压力?首先我举个例子,我认识一对学员夫妇,这位女士是耶鲁大学的音乐硕士,先生是麻省理工大学的博士。请问,你觉得他们的孩子压力大不大?这