建站服务器
1、memecached介绍
是一个开源的,高性能的内存缓存软件,通过在事先规划好的内存空间中临时缓存数据库中的各类数据,以达到减少业务对数据库的直接高并发访问,从而达到提升数据库的访问性能,加速动态服务的能力。
memcache是基于libevent的事件处理,利用这个库进行异步事件处理。
2、memecached在企业中的应用
1)作为数据库的前端缓存应用,完整缓存,热点缓存
2)作为集群的session会话共享存储
3、memecached服务在企业业务中的工作流程
1)当web程序访问后端数据库时会优先访问memcached内存缓存,如果缓存命中数据就直接获取数据返回给前端用户,如果没有命中数据,再由程序请求后端数据库服务器,获取对应数据后,返回给前端用户并将数据存放到memcached内存中进行缓存,等待下次请求访问。
2)当程序更新,修改或删除数据库中已有的数据时,会同时发送请求通知memcached已经缓存过的同一个id内存失效,从而保证memcache中的数据和数据库中的数据一致。
3)数据库插件可以在写入更新数据库后,自动将更新数据推送给memcached缓存起来。
4、memcached服务分布式集群的实现
memcached集群中,每个memcache服务器互不通信,都是个体的,每个服务器只管理自己服务器的数据,所有memcached服务器的缓存的数据总和才是数据库中的整个数据。
1)程序端实现:程序加载所有memcached的ip列表,通过对key做hash(一致性哈希)
2)负载均衡器:(lvs keplaved)
一致性哈希:保证每个对象只请求一个对应的服务器,而且当节点宕机后保证数据更新的最小化。
5、memcached服务特点及工作原理
1)完全基于内存的
2)节点之间相互独立
3)基于异步i/o模型,使用libevent作为事件通知机制
4)缓存数据以key/value对形式存在的
5)c/s模式架构,c语言编写,总代码为2000多行
6)全部数据存储在内存中,无持久性存储设计,重启服务数据会丢失。
7)可以对存储数据设置过期时间,服务本身不会监控过期,而是访问的时候查看key的时间戳判断是否过期。
8)memcached内存分配机制是对特定的内存进行分块,再把多个分块进行分组
6、memcached内存管理机制
malloc的全称是memory allocaion,中文叫动态内存分配,当无法知道内存具体位置时,想要绑定内存空间,就需要用到动态的分配内存。
早期的memcached内存管理方式是通过malloc分配的内存,使用完后回收内存会产生碎片,会降低操作系统对内存的管理,加重操作系统内存管理器的负担,会导致操作系统比memcached进程本地还慢,为了解决上述问题,slab allocator内存分配机制就诞生了。
slab allocation机制原理是按照预先规定的大小,将分配给memcached的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,这些内存块不会释放,可以重复利用。
memcached服务器中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据存储在其中,当有数据存入时,memcached会根据数据的大小,选择最合适的数据大小的slab分配一个能存储下这个数据的最小内存块(chunk).例如:有100字节的数据就会分配存入112字节的一个内存块中,这样就会浪费掉12字节的内存空间,这是slab allocation机制的一个缺点。
1)slab allocation的主要术语:
page:分配给slab的内存空间,默认是1mb,分配给slab之后根据slab的大小切分成chunk
chunk:用于缓存数据的内存空间或内存块
slab class:特定大小的多个chunk的集合或组
2)memcached slab allocation内存管理机制优化:
在启动时指定-f参数,能控制内存组之间的大小差异,在应用中使用memcached时,通常不重新设置这个参数,默认值为1.25进行部署,如果想优化memcached对内存的使用,可以考虑重新计算数据的预期平均长度,调整这个参数来获取合适的设置值。
-f <factor> chunk size growth factor(default:1.25)
例如:
使用2时,chunk的大小会以2的倍数增加:
memcached-m512m-d-uroot-c8192-f2-vv[root@zxqtmp]#slabclass1:chunksize96perslab10922slabclass2:chunksize192perslab5461slabclass3:chunksize384perslab2730slabclass4:chunksize768perslab1365slabclass5:chunksize1536perslab682slabclass6:chunksize3072perslab341slabclass7:chunksize6144perslab170slabclass8:chunksize12288perslab85slabclass9:chunksize24576perslab42slabclass10:chunksize49152perslab21slabclass11:chunksize98304perslab10slabclass12:chunksize196608perslab5slabclass13:chunksize393216perslab2slabclass14:chunksize1048576perslab1<26serverlistening(auto-negotiate)<27serverlistening(auto-negotiate)<28sendbufferwas124928,now268435456<29sendbufferwas124928,now268435456<28serverlistening(udp)<29serverlistening(udp)<28serverlistening(udp)<29serverlistening(udp)<28serverlistening(udp)<29serverlistening(udp)<28serverlistening(udp)<29serverlistening(udp)使用1.25时,chunk间隔会很小,存储小文件时内存浪费会减少很多:
[root@zxqtmp]#memcached-m512m-d-uroot-c8192-f1.25-vv[root@zxqtmp]#slabclass1:chunksize96perslab10922slabclass2:chunksize120perslab8738slabclass3:chunksize152perslab6898slabclass4:chunksize192perslab5461slabclass5:chunksize240perslab4369slabclass6:chunksize304perslab3449slabclass7:chunksize384perslab2730slabclass8:chunksize480perslab2184slabclass9:chunksize600perslab1747slabclass10:chunksize752perslab1394slabclass11:chunksize944perslab1110slabclass12:chunksize1184perslab885slabclass13:chunksize1480perslab708slabclass14:chunksize1856perslab564slabclass15:chunksize2320perslab451slabclass16:chunksize2904perslab361slabclass17:chunksize3632perslab288slabclass18:chunksize4544perslab230slabclass19:chunksize5680perslab184slabclass20:chunksize7104perslab147slabclass21:chunksize8880perslab118slabclass22:chunksize11104perslab94slabclass23:chunksize13880perslab75slabclass24:chunksize17352perslab60slabclass25:chunksize21696perslab48slabclass26:chunksize27120perslab38slabclass27:chunksize33904perslab30slabclass28:chunksize42384perslab24slabclass29:chunksize52984perslab19slabclass30:chunksi
“NFT”相关域名近期频频交易如何摸透搜索引擎爬行规律外贸b2c网站建设服务如何做优化?嘉兴网站建设公司告诉您要注意的五个知识点怎么看域名的ip?域名如何过户?续费域名 域名到期怎么续费买了云服务器怎么用什么ltd域名注册是多少钱 ltd域名要不要备案