• 设为首页
  • 点击收藏
  • 手机APP
    手机扫一扫下载
    华域联盟APP
  • 关注官方公众号
    微信扫一扫关注
    华域联盟公众号
hotWEB访问日志自动化剖析浅谈

1.概略最近经常需求剖析WEB访问日志,从中发现非法央求,然后做相应安全检查,为了便当,所以写了一个日志 详情

Couchbase 介绍 - 更好的 Cache 系统

0
回复
100
查看
[复制链接]
发表于 2018-1-20 17:05:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
在移动互联网时代,我们面对的是更多的客户端,更低的请求延迟,这当然需要对数据做大量的 Cache 以提高读写速度。6 V! P5 O5 \* X& R+ t5 S& B
        术语
& y- I6 i+ c" Q8 e+ f. b1 i4 s8 B) ]0 E
        节点:指集群里的一台服务器。
9 G  b& T1 g) k8 V        现有 Cache 系统的特点- }9 h2 `. C8 z

4 o0 B0 C9 O, m/ W3 q0 _: Q        目前业界使用得最多的 Cache 系统主要是 memcached 和 redis。 这两个 Cache 系统都有都有很大的用户群,可以说是比较成熟的解决方案,也是很多系统当然的选择。 不过,在使用 memcached 和 redis 过程中,还是碰到了不少的问题和局限:5 G+ J# @0 R! R7 V* Y9 q& S6 b
            " F! l1 e: h( o8 a, Q/ z7 \0 k, b
  •         Cluster 支持不够。在扩容、负载均衡、高可用等方面存在明显不足。       
    # B3 e( B" }# U, q! a$ I) V
  •         持久化支持不好,出现问题后恢复的代价大。memcached 完全不支持持久化,redis 的持久化会造成系统间歇性的负载很高。. K7 f5 Q. t+ n8 s; B  w
        我期待的理想 Cache 系统
. S9 R0 k5 e1 E8 z2 V* @4 J2 x! z0 s8 i8 U
        良好的 cluster 支持
( u+ k2 y- w) f7 J- ~& c
           
    3 L: S1 H9 ~* V7 F
  •         Key 可以动态分散(Auto Sharding)在不同的服务器上,可以通过动态添加服务器节点增加系统容量。       
    & ^& C6 U! n4 @
  •         没有单点失效,任何一个单点都不会造成数据不可访问。        ) V. G, Z1 X: R" x8 I) D( g
  •         读写负载可以均匀分布在系统的不同节点上。
    ; k3 Y; |. G$ W) g& @' p
        支持异步持久化支持
; }! N+ D, d" H1 g
            # L! H: G* s4 O$ i" r" o( @9 w
  •         方便快速恢复,甚至可以直接用作 key/value 数据库。 经常在跟业界朋友交流时,会提到用 key 分段的方法来做容量扩展以及负载均衡。但是用静态的 key 分段会有不少问题:        - n; U  S* \: @! C0 q; }( D
  •         Cache 系统本身及使用 cache# M7 H- Y- U  a9 j7 |* [  r
            的客户端都需要预设一个分段逻辑,这个逻辑后期如果需要调整将会非常困难。不能解决单点失效的问题,还需要额外的手段。运维需要更多的人为参与,避免 key 超出现有分区,一旦出现 key 找不到对应服务器,访问直接失败。
    7 P. d. {) N6 x7 ]9 v; d
        最接近需求的系统:Couchbase  s1 o, i$ j# d/ {/ H3 m

  x, N( H8 j: X( H        基于这些想法,我花了几天时间在 google, stack overflow, quora 上看了很多大家关于 cache cluster 的讨论,找到一个比较新系统 Couchbase。
* O/ ]5 b0 y$ j        20160918125915769829.PNG
5 W' ]2 {& L8 s5 T( l        mem vs cb memcached VS couchbase
# q5 z1 _1 C% C$ g        Couchbase 的集群设计对等网
+ ~' x( f( f+ P4 S: _+ p( d2 W$ T2 @4 ]  ^+ t) A
        Couchbase 群集所有点都是对等的,只是在创建群或者加入集群时需要指定一个主节点,一旦结点成功加入集群,所有的结点对等。7 B% C/ f& _0 b' U' ^
        20160918125915769829.PNG ( t! d1 }9 ?+ X2 _: e$ G
        对等网的优点是,集群中的任何节点失效,集群对外提供服务完全不会中断,只是集群的容量受影响。 Smart Client2 R! v* H: g+ l3 J" U7 G. A& l
        由于 couchbase 是对等网集群,所有的节点都可以同时对客户端提供服务,这就需要有方法把集群的节点信息暴露给客户端,couchbase 提供了一套机制,客户端可以获取所有节点的状态以及节点的变动,由客户端根据集群的当前状态计算 key 所在的位置。 vBucket# g% P, k% ^% }0 t* p* f
        vBucket 概念的引入,是 couchbase 实现 auto sharding,在线动态增减节点的重要基础。/ g& Z7 j; M' [0 {0 T
        简单的解释 vBucket 可以从静态分片开始说起,静态分片的做法一般是用 key 算出一个 hash,得到对应的服务器,这个算法很简单,也容易理解。如以下代码所示:
  1. servers = ['server1:11211', 'server2:11211', 'server3:11211']
  2. server_for_key(key) = servers[hash(key) % servers.length]
复制代码
但也有几个问题:+ v7 I7 ]# G5 h! M4 Y% a
           
    6 H8 b5 t8 e5 u. a
  •         如果一台服务器失效,会造成该分片的所有 key 失效。       
    6 s7 r' w2 `' N+ x% d' J4 [
  •         如果服务器容量不同,管理非常麻烦。       
    5 e6 d- L+ S. [% W
  •         前面提到过,运维、配置非常不方便。
    ; U* i$ \$ w$ I2 U$ f' r7 z* H" e
        为了把 key 跟服务器解耦合,couchbase 引入了 vBucket。可以说 vBucket 代表一个 cache 子集,主要特点:
. \; F2 L' J3 D  i
           
    # X" ]" f# F; g8 p+ D
  •         key hash 对应一个 vBucket,不再直接对应服务器。       
    / K* f* E( x# k! V" |
  •         集群维护一个全局的 vBucket 与服务器对应表。       
    , }+ [" k$ c; I& W# A
  •         前面提到的 smart client 重要的功能就是同步 vBucket 表。, f/ X4 p9 W+ |% }) ^( Z
        如以下代码所示:
  1. servers = ['server1:11211', 'server2:11211', 'server3:11211']
  2. vbuckets = [0, 0, 1, 1, 2, 2]
  3. server_for_key(key) = servers[vbuckets[hash(key) % vbuckets.length]]
复制代码
20160918125915769829.PNG
( h# j& j* j2 |6 ^7 V( X        由于 vBucket 把 key 跟服务器的静态对应关系解耦合,基于 vBucket 可以实现一些非常强大有趣的功能,例如:
0 w0 ]1 B8 N& w8 a: d. m$ u
           
    6 c5 b- a, s& P  E( \0 w) z
  •         Replica,以 vBucket 为单位的主从备份。如果某个节点失效,只需要更新 vBucket 映射表,马上启用备份数据。       
    8 i4 ^% O. _: N1 Z2 N& i, a
  •         动态扩容。新增加一个节点后,可以把部分 vBucket 转移到新节点上,并更新 vBucket 映射表。' J' j2 n9 T5 G5 a
        vBucket 非常重要,以后可以单独写一篇文章分享。
1 f: T7 R) f2 }7 H0 i/ ]        总结
+ D$ t2 n- X6 a/ \. H3 |9 P
9 Q, S6 z# ?$ r
            ( O- c) |" a. o1 n+ p8 J2 a
  •         Couchbase 的对等网设计,smart client
    9 }5 M9 X  O3 Y# Z- B6 z; I3 c        直接获取整的集群的信息,在客户端实现负载均衡,整个集群没有单点失效,并且完全支持平行扩展。       
    ' \, z4 i7 B( P
  •         vBucket 的引入,完全实现了 auto sharding,可以方便灵活的把数据的子集在不同节点上移动,以实现集群动态管理。       
    ; }) E" Q( k3 M5 E* E0 `
  •         Couchbase 有一个非常专业的 web 管理界面,并且支持通过 RESTful API 管理,这也是 memcached,* k: q4 }  _) w1 {! r
            redis 不能企及的。        2 f. U. X. B# c
  •         如果只是做 key/value 的 cache,Couchbase 可以完全取代 memcached。       
    5 m6 v( u3 B8 |; e* n
  •         Couchbase 已经被我们在生产环境中大量采用。
    ) m  U. Q4 ~. \! a+ n



上一篇:如何将 JSON, Text, XML, CSV 数据文件导入 MySQL
下一篇:Redis和Memcached的区别

扫描微信二维码

关注华域联盟公众号

随时了解更新最新资讯

在线客服(服务时间 9:00~18:00)

在线QQ客服

电邮:admin@cnhackhy.com

Powered by 华域联盟! © 2015-2019

备案号:蒙ICP备17000689号-2蒙公网安备 15062202000105号中国互联网举报中心 Free counters!