以Redis实现极致横向扩展
随着互联网业务不断壮大,对数据存储和处理的要求也越来越高。在传统的单机存储模式下,难以满足高并发、大数据量等特殊需求。因此,分布式存储系统已经成为了目前业务场景中的主流选择。作为其中的明星产品,Redis以其高性能、高可用、简单易用等优点广受业界欢迎。下面我们就以Redis为例,探索如何实现极致横向扩展。
Redis架构
Redis采用主从复制的架构,一台主 IDC.com/xtywjcwz/19227.html" target="_blank">服务器 可以有多台从服务器,主服务器对数据进行写操作,从服务器进行读取操作。主服务器实时将自己的修改操作同步给从服务器,从服务器通过登录到主服务器获取最新的数据库更新来完成主从复制。
在这种架构下,主从服务器形成一个树形结构,下层服务器完全复制上层服务器的内容,上层服务器可以根据自己的实际负载情况来决定读操作的路由,从而实现负载均衡和横向扩展。
Redis Cluster架构
Redis Cluster采用无中心化的分布式存储架构,每个节点彼此平等,没有主从之分。它可以自动分裂和合并槽,可以自动恢复节点、重定向请求,并提供一致性哈希环来定位键值对。
在Redis Cluster中,每个节点都会保存一些槽口,每个槽口对应一个哈希槽。当一个键被哈希到一个槽口时,其对应的节点就成为负责该槽口的节点,同时也需要负责槽口中所有的键。
Redis Cluster在后续版本中还引入了哈希槽自动迁移、故障转移和自动恢复等功能,使系统更加稳定和可靠。
集群配置
在Redis Cluster中,每个节点都需要使用自身的IP地址和端口号进行配置,同时还需要进行集群槽口配置。
通常情况下,通过Redis提供的redis-trib工具进行集群配置最为方便。先通过redis-trib.rb创建集群并将槽口等分,然后再将节点加入到集群中。具体操作如下:
1.下载redis-trib.rb文件。
`curl -O`
2.使用redis-trib.rb创建集群。
`ruby redis-trib.rb create –replicas 1 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 192.168.1.4:6379 192.168.1.5:6379 192.168.1.6:6379`
3.将节点添加到集群中。
`ruby redis-trib.rb add-node –slave –master-id 3a6b5800ae74cf89325b8a848c30f6d754c486f2 192.168.1.7:6379 192.168.1.3:6379`
性能测试
在Redis Cluster中,我们可以通过redis-benchmark工具进行测试。以下是在单主节点、三主三从节点和六主节点下的性能测试结果。
单主节点测试结果:
`127.0.0.1:6379> cluster info`
cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfl:0cluster_slots_fl:0cluster_known_nodes:1cluster_size:1cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_sent:29cluster_stats_messages_received:142
测试结果:
# Redis version=5.0.5# Integers127.0.0.1:6379> CONFIG SET maxmemory 256mbOK127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lruOK127.0.0.1:6379> SET string:1 valueOK127.0.0.1:6379> SADD set:1 value1 value2 value3(integer) 3127.0.0.1:6379> LPUSH list:1 value(integer) 1127.0.0.1:6379> HSET hash:1 field value(integer) 1127.0.0.1:6379> ZADD zset:1 1 value(integer) 1127.0.0.1:6379> INCR counter(integer) 1# Strings127.0.0.1:6379> benchmark set 1000000(integer) 1000000(58.18s)# Lists127.0.0.1:6379> benchmark lpush 1000000(integer) 1000000(63.73s)# Sets127.0.0.1:6379> benchmark sadd 1000000(integer) 1000000(59.53s)# Hashes127.0.0.1:6379> benchmark hset 1000000(integer) 1000000(76.46s)# Sorted sets127.0.0.1:6379> benchmark zadd 1000000(integer) 1000000(68.74s)# Increment127.0.0.1:6379> benchmark incr 1000000(integer) 1000000(38.43s)
三主三从节点测试结果:
`127.0.0.1:6379> cluster info`

cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfl:0cluster_slots_fl:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_sent:28cluster_stats_messages_received:141
测试结果:
# Redis version=5.0.5# Integers127.0.0.1:6379> CONFIG SET maxmemory 256mbOK127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lruOK127.0.0.1:6379> SET string:1 valueOK127.0.0.1:6379> SADD set:1 value1 value2 value3(integer) 3127.0.0.1:6379> LPUSH list:1 value(integer) 1127.0.0.1:6379> HSET hash:1 field value(integer) 1127.0.0.1:6379> ZADD zset:1 1 value(integer) 1127.0.0.1:6379> INCR counter(integer) 1# Strings127.0.0.1:6379> benchmark set 1000000(integer) 1000000(211.70s)# Lists127.0.0.1:6379> benchmark lpush 1000000(integer) 1000000(410.20s)# Sets127.0.0.1:6379> benchmark sadd 1000000(integer) 1000000(189.67s)# Hashes127.0.0.1:6379> benchmark hset 1000000(integer) 1000000(218.07s)# Sorted sets127.0.0.1:6379> benchmark zadd 1000000(integer) 1000000(225.36s)# Increment127.0.0.1:6379> benchmark incr 1000000(integer) 1000000(165.99s)
六主节点测试结果:
`127.0.0.1:6379> cluster info`
cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfl:0cluster_slots_fl:0cluster_known_nodes:6cluster_size:6cluster_current_epoch:7cluster_my_epoch:1cluster_stats_messages_sent:24cluster_stats_messages_received:117
测试结果:
# Redis version=5.0.5# Integers127.
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
什么是redis呢,求通俗解释
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 从2010年3月15日起,Redis的开发工作由VMware主持。 redis是一个key-value存储系统。 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。 在此基础上,redis支持各种不同方式的排序。 与memcached一样,为了保证效率,数据都是缓存在内存中。 区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。 它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。 [1]Redis支持主从同步。 数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。 这使得Redis可执行单层树复制。 从盘可以有意无意的对数据进行写操作。 由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。 同步对读取操作的可扩展性和数据冗余很有帮助。
书的年轮是怎样分辨方向。急!!
是树的年轮吧,“年轮系指茎的横切面上所见一年内木材和树皮的生长层而言。 ”这是1957年国际木材解剖学家协会所发表的《木材解剖学名词术语》中,有关“年轮“这个名词的定义。 至于年轮是怎样形成的,这首先要从维管形成层的结构及其活动规律谈起。 维管形成层(或称形成层)是由原形成层发展而来的一种具有无限分生能力的次生分生组织。 在植物的一生中,它不断向外产生次生韧皮部,向内产生次生木质部。 形成层由纺锤状原始细胞和射线原始细胞所组成。 轴向伸长的纺锤状原始细胞,两端呈楔形,在横切面上多成长方形,切向宽大于径向宽,细胞的长度比宽度大数倍。 由纺锤状原始细胞衍生出次生木质部和次生韧皮部的轴向系统。 射线原始细胞的体积较小,几乎成等径或稍长。 这类原始细胞衍生次生木质部与韧皮部的径向系统。 上述两类原始细胞虽然在外部形态上差别较大,但其超微结构基本相同。 在形成层的活动期间,原始细胞中间具1—2个大液泡,周围的细胞质中富含核糖体与高尔基体,以及发育良好的内质网等。 休眠期的形成层原始细胞中,液泡变小,数目增多,高尔基体小泡及内质网也相应减少,细胞中还出现了较多的蛋白质体和油滴,这些储藏物质往往在翌年生长季开始时被利用。 木本植物根或茎的径向增粗,主要是通过纺锤状原始细胞平周分裂的结果,这种有丝分裂的进程较慢,如在松柏类植物中,每分裂一次需4一6天(茎的顶端分生组织细胞只需8—18小时)。 当一个纺锤状原始细胞平周分裂成两个子细胞时,其中一个衍生为木质部母细胞(或称木质部原始细胞),或者衍生成韧皮部母细胞(或称韧皮部原始细胞)。 另一个仍保持纺锤状原始细胞分生状态。 在形成层活跃期间,有的细胞已经分裂或正在分裂,有的尚处于分生组织状态,这样形成层就成了一个相当宽而尚未分化的细胞区。 在这个区域中,有一层真正的形成层原始细胞,同时还包括未分化的衍生细胞。 由于从细胞形态上难以区分上述各类细胞,为方便起见,人们将这些细胞统称为形成层区(或形成层带)。 从形成层区的切向切面看,形成层原始细胞排列方式大体分为两种:一是在椴属(Tilia)和刺槐属(Robinia)等植物的形成层中,纺锤状原始细胞几乎排列在同一水平层,称为叠生形成层。 一是纺锤状原始细胞的侵入生长,使纵向伸长的细胞末端相互交错,而不排列在同一水平层上,故称为非叠生形成层,如栗属(Castanea)和胡桃属(Juglans)等植物。 纺锤状原始细胞为适应茎或根的径向增粗,本身也进行细胞分裂,以增加原始细胞的数目,这种分裂特称为增殖分裂。 在不同的植物中,增殖分裂的方式也不一样,如在具叠生形成层的植物中,多以径向垂周分裂为主,而在非叠生形成层的松柏类和某些双子叶植物中,常见为假横向分裂,或称斜向垂周分裂。 从纺锤状原始细胞经分裂形成射线原始细胞,这是一种普遍现象。 射线原始细胞本身也进行横向或垂周分裂,最后形成单列或多列射线。 在温带地区生长的木本植物,随着季节性的气候变化,也明显地反映在形成层的周期活动上。 冬季形成层原始细胞停止分化,翌年春季又开始恢复活动,到了夏秋逐渐减弱,而后停止活动。 如此周而复始,年复一年。 当形成层原始细胞恢复活动时,可分为两个阶段:(1)形成层原始细胞径向伸展,径向壁变得很薄,这时易受霜冻的伤害。 (2)原始细胞开始分裂,这一阶段往往比前阶段晚1至数星期。 生长在北京地区的树种,形成层开始活动的时间,大体在每年四月的上、中旬。 在大多数树种中,当形成层开始分化时,韧皮部分子的分化往往先于木质部达一个月或更长,或两者几乎同时分化。 形成层分化停止的时间,在不同生境和树种中均有很大变化,生长在北温带地区的树木,多集中在九月份。 春季,形成层恢复活动时,纺锤状原始细胞迅速向内分裂的分化成大量的木质部分子,此时分化的管胞或导管分子的直径较大,数目多,壁较薄,木纤维数量较少,因此材质显得比较疏松,这部分木材称为早材(或叫春材)。 到了同年夏秋季节,形成层的活动逐渐减弱,原始细胞平周分裂的速度也相应的减慢,分化的细胞直径较小,数量少,而木纤维的数量相应增多,这部分的材质比较致密,称晚材(或称夏材)。 在双子叶植物的环孔材(如栎树和白蜡树)中,早材部分的导管分子直径明显增大,而晚材的导管分子相当小。 散孔材与裸子植物木材中,由早材至晚材的变化,一般是逐渐进行的,即没有显著界线。 不过在上一个生长季的晚材与下一个生长季的早材之间却存在着明显的界线。 从根与茎的木材横断面上看,这些界线成了一圈圈同心圆的环纹,每一个包括早材和晚材两部分的圆环,称为生长轮(或称生长层)。 生长在温带地区的木本植物,通常一年内只形成一个生长轮,特称年轮。 它代表着一年内所形成的次生木质部的数量。 在一株树中,年轮的数目由树干基部往上逐渐减少。 有时在一个生长季中可能出现两个或多个生长轮,即双轮或复轮。 如柑桔属(Citrus)茎中的形成层每年有三次活动高峰,因此一年能产生三个年轮。 有些植物由于受到气候的骤变,如变冷或转热,或长期干旱或虫害,以及强台风的侵袭等特殊自然灾害的影响,也会出现多年轮的现象。 有人将一年内形成几个生长轮中最后一轮,称为真正年轮,其余各轮统称假年轮或伪年轮。 在有的生长季中若遇着霜冻,特别是晚期霜害,易使形成层原始细胞受到损伤,结果产生含有不规则的薄壁组织带,即称创伤年轮或霜轮。 也有的树木,因反常的气候影响,使形成层不分化,直到生长环境适合时才又开始活动,形成年轮,这样在木材横切面上就会相应的出现缺失生长轮的现象。 如在半干旱森林边缘的树木,或者在某些老树树干基部的木材常有缺失生长轮的情况。 生长在热带或亚热带地区的木本植物,如桉树等,由于一年内无明显的四季之分,形成层的活动几乎整年不停,这样在木材中就难以看出生长轮或年轮的分界线。 不过也有些树种的木材,可借助于显微化学的方法来辨认生长轮的界线。 在同一生长季中,形成层的原始细胞除向内产生大量次生木质部分子以外,同时还向外分裂分化为次生韧皮部分子,这些分子也按一定的排列图式进行。 尤其在形成层区附近的次生韧皮部中,根据韧皮薄壁组织或厚壁组织的的次生韧皮部中,由于某些细胞体积的扩展,或有的细胞被挤压变形,以及周皮的形成等原因,致使这部分的生长轮界线模糊不清。 关于次生韧皮部,或形成层以外树皮部分中生长轮或年轮的情况。 在木材年轮的形成过程中,许多内因和外因对其影响很大。 例如在双子叶植物的散孔材树种中,当芽萌动以前,整个植株的形成层原始细胞内均无内源激素存在,只有在芽萌发后才产生生长素,这时形成层就开始活动于萌发芽的下侧。 随着生长素向下移动,形成层的活动也逐渐向茎基部扩展。 一般在叶片长到成熟时的一半大小时,茎基部的形成层刚刚苏醒,但在一年生枝里,新的木质部分子却早已分化出来,有的甚至细胞壁也已木质化了。 由树干顶端到基部,形成层活动的间隔有时可达8—10星期之久。 相反,在环孔材中,形成层在整株各部位几乎同时开始活动,由此可以推测,生长素的前体可能早就遍布形成层原始细胞内,一旦芽膨大后,生长素的前体即转变为促使形成层原始细胞分裂的生长素。 在大多数树种中,新木质部分子的分化时间,均在叶子展开后的第3天至18天。 此外植物体内的赤霉素和细胞分裂素等内源激素,对于形成层原始细胞的分裂、分化,木质部分子细胞壁的加厚,以及早材至晚材的过渡等都有密切关系。 除内源激素外,光合作用的产物碳水化合物也是影响年轮形成的因素之一。 例如晚材中细胞壁显著加厚,则与碳水化合物的供应增多有着密切的关系。 在影响年轮形成的外因中,有光照、气温、降雨量及矿质营养的供应等因素。 如生长在长日照(光周期为18小时)的洋槐,不论气温高低,均产生大量早材分子。 若在短日照(光周期为8小时)的条件下,则只产生少量直径较小的导管或无导管。 在松柏类植物中,木材管胞直径的变化往往也与日照长短有关。 同时还和气温的高低有直接关系。 在生长季中,如果遇到降雨量甚少或干热的外界因子,不仅影响树木的生长,而且还限制了形成层的活动,造成了狭窄的木材生长轮。 有人比较了两棵生长在不同生境的北美云杉(Picea sitchensis),其中一棵长在干旱贫瘠的岩石缝中,其树龄为86年,而主干直径只有1.8厘米,年轮的平均宽度为0.1毫米。 而另一棵生长在自然条件较好的地方,其若干年轮的平均宽度可达12毫米左右,两者竟相差一百多倍。 众所周知,生长在温带地区的木本植物中,茎干基部年轮的数目,往往能作为测定一棵树的年龄依据。 年轮的宽窄不仅反映了树木的生长速度、材积的年生长量及材性的优劣等,而且也是衡量外界环境因子变化的重要指标。 如在雨量充沛与温暖的气候条件下,树木生长迅速,年轮的距离也较宽;相反地在寒冷与干旱条件下,树木生长缓慢,年轮就显得较窄。 树木年轮的宽窄真实地记载了各年的气候状况,故通过年轮的分析,可获得数百年乃至上千年的气候演变规律,这对预测未来气候的变迁,制定超长期气象预报等也是一种比较可靠的方法。 如人们对西藏高原树木年轮的分析,初步了解到仅本世纪就有两次大的降温,目前该地区的气温正在明显回升;在本世纪20年代前后,降雨量也达到高峰,以后显著下降,目前又稍有增加。 通过对年轮的分析还可以得出气候变化的一般规律,大约二百年为一周期,其次还有110年、92年、72年以及33年的小周期变化。 树木年轮的宽窄看来还受到太阳黑子周期活动的影响,这是由于当太阳黑子增多时,太阳的活动剧烈增强,发射出的光与热也更多,从而大大促进了树木的生长加快,相应年轮的距离也增宽。 通过年轮的分析也可发现,太阳黑子活动的平均周期为11年左右。 在分析年轮时,往往采用交叉定年法,即取几棵树上的年轮序列加以对比,并把一些特宽或特窄的年轮作为标记点,分析几组年轮序列的同步性,这样就可排除假年轮,或补进缺失的年轮,最后获得每个年轮的正确生成年代。 树木的年轮还是大气污染的资料储存库。 例如由开采金属矿藏,或金属冶炼加工中飞扬出来的重金属尘埃,逐渐沉降到附近的土壤中,树木在生长过程中,不断从土壤中吸进大量重金属,结果通过光谱分析,便可测出年轮中“记录”下来的各年吸收重金属的含量。 当氟化氢气体的污染侵害松树只有几星期,从年轮上即可表现出生长不良的痕迹来。 因此,近年来,利用树木年轮来了解大气污染的情况也开始受到人们的关注。 从树桩横断面上的年轮往往可以帮助辨明方向。 因为在树木生长过程中。 树干朝南一面受阳光照射较多,形成层原始细胞分裂也较迅速,径向生长加快,结果茎干南面的年轮也较宽。 而在茎干背阴朝北的一面,年轮则明显狭窄。
草书葛字怎么写
“葛”字草书写法:1、第一种:书家——赵构。 赵构精于书法,善真、行、草书,笔法洒脱婉丽,自然流畅,颇得晋人神韵。 赵构的传世墨迹有《草书洛神赋》《正草千字文》《赐岳飞手敕卷》《赐岳飞批札卷》及《光明塔碑》等。 2、第二种:书家——王羲之,作品——成都帖。 王羲之的《兰亭集序》为历代书法家所敬仰,被誉作“天下第一行书”。 王兼善隶、草、楷、行各体。 其书法平和自然,笔势委婉含蓄,遒美健秀。 王羲之书风最明显特征是用笔细腻,结构多变。 3、第三种:书家——李怀琳,作品——嵇康与山巨源绝交书。 李怀琳是唐代洛阳人,生卒年不详,太宗时待诏文林馆。 草书《嵇康与山巨源绝交书》相传为李怀琳仿作,共159行,1209字,现藏日本。 草书分章草和今草,而今草又分大草(也称狂草)和小草,在狂乱中觉得优美。 草书是按一定规律将字的点划连字,结构简省,偏旁假借,并不是随心所欲的乱写。 主要特征之一是笔画带钩连,包括上下钩连和左右钩连。 扩展资料“葛”字行书写法:1、第一种:书家——朱熹,作品——与彦修书。 朱熹善书法,名重一时。 自幼跟随父亲朱松及武夷三先生刘子翚、刘勉之、胡审习字,尝学曹孟德书,后攻钟繇楷书及颜真卿行草,一生临池不辍,书法造诣精湛,笔墨雄赡,超逸绝伦。 朱熹善行、草,尤善大字,传世作品以行书简牍为主,大字墨迹很少。 2、第二种:书家——米芾,作品——德忱帖。 米芾的用笔特点,主要是善于在正侧、偃仰、向背、转折、顿挫中形成飘逸超迈的气势、沉着痛快的风格。 字的起笔往往颇重,到中间稍轻,遇到转折时提笔侧锋直转而下。 捺笔的变化也很多,下笔的着重点有时在起笔,有时在落笔,有时却在一笔的中间,对于较长的横画还有一波三折。 3、第三种:书家——欧阳询,作品——九成宫。 欧阳询与虞世南俱以书法驰名初唐,并称“欧虞”,后人以其书于平正中见险绝,最便于初学者,号为“欧体”。 欧阳询所撰《传授诀》、《用笔论》、《八诀》、《三十六法》等都是他自己学书的经验总结,比较具体地总结了书法用笔、结体、章法等书法形式技巧和美学要求,是中国书法理论的珍贵遗产。 行书是介于楷、草间的一种书体。 写得比较放纵流动,近于草书的称行草;写得比较端正平稳,近于楷书的称行楷。 在书写过程中,笔毫的使转,在点画的各种形态上都表现得较为明显,这种笔毫的运动往往在点画之间,字与字之间留下了相互牵连,细若游丝的痕迹,这就是丝连。 参考资料来源:网络百科--草书参考资料来源:网络百科--行书
发表评论