如何做网站线上监控金融棋牌网站建设

news/2025/9/23 18:58:06/文章来源:
如何做网站线上监控,金融棋牌网站建设,网站建设找超速云,wordpress外链产品缓存系统MemCached的Java客户端优化历程#xff08;转载自http://code.google.com/p/memcache-client-forjava/。#xff09;Memcached是一种集中式Cache#xff0c;支持分布式横向扩展。这里需要解释说明一下#xff0c;很多开发者觉得Memcached是一种分布式缓存系统…缓存系统MemCached的Java客户端优化历程转载自http://code.google.com/p/memcache-client-forjava/。Memcached是一种集中式Cache支持分布式横向扩展。这里需要解释说明一下很多开发者觉得Memcached是一种分布式缓存系统但是其实Memcached服务端本身是单实例的只是在客户端实现过程中可以根据存储的主键做分区存储而这个区就是Memcached服务端的一个或者多个实例如果将客户端也囊括到Memcached中那么可以部分概念上说是集中式的。其实回顾一下集中式的构架无非两种情况一是节点均衡的网状JBoss Tree Cache利用JGroup的多播通信机制来同步数据二是Master-Slaves模式分布式文件系统由Master来管理Slave比如如何选择Slave如何迁移数据等都是由Master来完成但是Master本身也存在单点问题。下面再总结几个它的特点来理解一下其优点和限制。内存存储不言而喻速度快但对于内存的要求高。这种情况对CPU要求很低所以常常采用将Memcached服务端和一些CPU高消耗内存、低消耗应用部署在一起。我们的某个产品正好有这样的环境我们的接口服务器有多台它们对CPU要求很高——原因在于WS-Security的使用但是对于内存要求很低因此可以用作Memcached的服务端部署机器。集中式缓存Cache避开了分布式缓存的传播问题但是需要非单点来保证其可靠性这个就是后面集成中所作的集群Cluster工作可以将多个Memcached作为一个虚拟的集群同时对于集群的读写和普通的Memcached的读写性能没有差别。分布式扩展Memcached很突出的一个优点就是采用了可分布式扩展的模式。可以将部署在一台机器上的多个Memcached服务端或者部署在多个机器上的Memcached服务端组成一个虚拟的服务端对于调用者来说则是完全屏蔽和透明的。这样做既提高了单机的内存利用率也提供了向上扩容Scale Out的方式。Socket通信这儿需要注意传输内容的大小和序列化的问题虽然Memcached通常会被放置到内网作为缓存Socket传输速率应该比较高当前支持TCP和UDP两种模式同时根据客户端的不同可以选择使用NIO的同步或者异步调用方式但是序列化成本和带宽成本还是需要注意。这里也提一下序列化对于对象序列化的性能往往让大家头痛但是如果对于同一类的Class对象序列化传输第一次序列化时间比较长后续就会优化也就是说序列化最大的消耗不是对象序列化而是类的序列化。如果穿过去的只是字符串这种情况是最理想的省去了序列化的操作因此在Memcached中保存的往往是较小的内容。特殊的内存分配机制首先要说明的是Memcached支持最大的存储对象为1M。它的内存分配比较特殊但是这样的分配方式其实也是基于性能考虑的简单的分配机制可以更容易回收再分配节省对CPU的使用。这里用一个酒窖做比来说明这种内存分配机制首先在Memcached启动的时候可以通过参数来设置使用的所有内存——酒窖然后在有酒进入的时候首先申请通常是1M的空间用来建酒架而酒架根据这个酒瓶的大小将自己分割为多个小格子来安放酒瓶并将同样大小范围内的酒瓶都放置在一类酒架上面。例如20厘米半径的酒瓶放置在可以容纳20-25厘米的酒架A上30厘米半径的酒瓶就放置在容纳25-30厘米的酒架B上。回收机制也很简单首先新酒入库看看酒架是否有可以回收的地方如果有就直接使用如果没有则申请新的地方如果申请不到就采用配置的过期策略。从这个特点来看如果要放的内容大小十分离散同时大小比例相差梯度很明显的话那么可能对于空间使用来说效果不好因为很可能在酒架A上就放了一瓶酒但却占用掉了一个酒架的位置。缓存机制简单有时候很多开源项目做的面面俱到但到最后因为过于注重一些非必要的功能而拖累了性能这里提到的就是Memcached的简单性。首先它没有什么同步消息分发两阶段提交等等它就是一个很简单的缓存把东西放进去然后可以取出来如果发现所提供的Key没有命中那么就很直白地告诉你你这个Key没有任何对应的东西在缓存里去数据库或者其他地方取当你在外部数据源取到的时候可以直接将内容置入到缓存中这样下次就可以命中了。这里介绍一下同步这些数据的两种方式一种是在你修改了以后立刻更新缓存内容这样就会即时生效另一种是说容许有失效时间到了失效时间自然就会将内容删除此时再去取的时候就不会命中然后再次将内容置入缓存用来更新内容。后者用在一些实时性要求不高写入不频繁的情况。客户端的重要性Memcached是用C写的一个服务端客户端没有规定反正是Socket传输只要语言支持Socket通信通过Command的简单协议就可以通信。但是客户端设计的合理十分重要同时也给使用者提供了很大的空间去扩展和设计客户端来满足各种场景的需要包括容错、权重、效率、特殊的功能性需求和嵌入框架等等。几个应用点小对象的缓存用户的Token、权限信息、资源信息小的静态资源缓存SQL结果的缓存这部分如果用的好性能提高会相当大同时由于Memcached自身提供向上扩容那么对于数据库向上扩容的老大难问题无疑是一剂好药ESB消息缓存。优化MemCached系统Java客户端的原因MemCached在大型网站被应用得越来越广泛不同语言的客户端也都在官方网站上有提供但是Java开发者的选择并不多。由于现在的MemCached服务端是用C写的因此我这个C不太熟悉的人也就没有办法去优化它。当然对于它的内存分配机制等细节还是有所了解因此在使用的时候也会十分注意这些文章在网络上有很多。这里我重点介绍一下对于MemCache系统的Java客户端优化的两个阶段。第一阶段封装Whalin第一阶段主要是在官方推荐的Java客户端之一whalin开源实现基础上做再次封装。缓存服务接口化定义了IMemCache接口在应用部分仅仅只是使用接口为将来替换缓存服务实现提供基础。 使用配置代替代码初始化客户端通过配置客户端和SocketIO Pool属性直接交由CacheManager来维护Cache Client Pool的生命周期便于单元测试。 KeySet的实现对于MemCached来说本身是不提供KeySet的方法的在接口封装初期同事向我提出这个需求的时候我个人觉得也是没有必要提供因为缓存轮询是比较低效的同时这类场景往往可以去数据源获取KeySet而不是从MemCached去获取。但是SIP的一个场景的出现让我不得不去实现了KeySet。SIP在作服务访问频率控制的时候需要记录在控制间隔期内的访问次数和流量此时由于是集群因此数据必须放在集中式的存储或者缓存中数据库肯定撑不住这样大数据量的更新频率因此考虑使用Memcached的很出彩的操作——全局计数器storeCounter,getCounter,inc,dec但是在检查计数器的时候如何去获取当前所有的计数器我曾考虑使用DB或者文件但是效率有问题同时如果放在一个字段中的话还会存在并发问题。因此不得不实现了KeySet在使用KeySet的时候有一个参数类型是Boolean这个字段的存在是因为在Memcached中数据的删除并不是直接删除而是标注一下这样会导致实现keySet的时候取出可能已经删除的数据。如果对于数据严谨性要求低速度要求高那么不需要再去验证Key是否真的有效而如果要求Key必须正确存在就需要再多一次的轮询查找。 集群的实现Memcached作为集中式缓存存在着集中式的致命问题单点问题。虽然Memcached支持多Instance分布在多台机器上但仅仅只是解决了数据全部丢失的问题当其中一台机器出错以后还是会导致部分数据的丢失一个篮子掉在地上还是会把部分的鸡蛋打破。因此就需要实现一个备份机制能够保证Memcached在部分失效以后数据还能够依然使用当然大家很多时候都用缓存不命中就去数据源获取的策略。然而在SIP的场景中如果部分信息找不到就去数据库查找很容易将SIP弄垮因此SIP对于Memcached中的数据认为是可信的做集群也是必要的。 LocalCache结合Memcached使用提高数据获取效率在第一次压力测试过程中发现和原先预料的一样Memcached并不是完全无损失的Memcached是通过Socket数据交互来进行通信的因此机器的带宽网络IOSocket连接数都是制约Memcached发挥其作用的障碍。Memcache的一个突出优点就是Timeout的设置也就是可以对放进去的数据设置有效期从而在一定的容忍时间内对那些不敏感的数据就可以不去更新以提高效率。根据这个思想其实在集群中的每一个Memcached客户端也可以使用本地的缓存来存储获取过的数据设置一定的失效时间来减少对于Memcached的访问次数提高整体性能。因此在每一个客户端中都内置了一个有超时机制的本地缓存采用Lazy Timeout机制在获取数据的时候首先在本地查询数据是否存在如果不存在则再向Memcache发起请求获得数据以后将其缓存在本地并设置有效时间。方法定义如下/*** 降低memcache的交互频繁造成的性能损失因此采用本地cache结合memcache的方式* param key* param 本地缓存失效时间单位秒* return**/public Object get(String key,int localTTL);第二阶段优化第一阶段的封装基本上已经可以满足现有的需求也被自己的项目和其他产品线所使用但是不经意的一句话让我开始了第二阶段的优化。有同事告诉我说Memcached客户端的SocketIO代码里面有太多的Synchronized同步多多少少会影响性能。虽然过去看过这部分代码但是当时只是关注里面的Hash算法。根据同事所说的回去一看果然有不少的同步可能是作者当时写客户端的时候JDK版本较老的缘故造成的现在Concurrent包被广泛应用因此优化并不是一件很难的事情。但是由于原有Whalin没有提供扩展的接口因此不得不将Whalin除了SockIO其余全部纳入到封装过的客户端的设想然后改造SockIO部分。结果也就有了这个放在Google上的开源客户端http://code.google.com/p/memcache-client-forjava/。优化Synchronized在原有代码中SockIO的资源池被分成三个池普通Map实现——Free闲、Busy忙和Dead死锁然后根据SockIO使用情况来维护这三个资源池。优化方式为首先简化资源池只有一个资源池设置一个状态池在变更资源状态的过程时仅仅变更资源池中的内容。然后用ConcurrentMap来替代Map同时使用putIfAbsent方法来简化Synchronized具体的代码可参见Google上该软件的源文件。 原以为这次优化后效率应该会有很大的提高但是在初次压力测试后发现并没有明显的提高看来有其他地方的耗时远远大于连接池资源维护因此用JProfiler作了性能分析发现了最大的一个瓶颈Read数据部分。原有设计中读取数据是按照单字节读取然后逐步分析为的仅仅就是遇到协议中的分割符可以识别。但是循环Read单字节和批量分页Read性能相差很大因此我内置了读入缓存页可设置大小然后再按照协议的需求去读取和分析数据结果显示效率得到了很大的提高。具体的数据参见最后部分的压力测试结果。上面两部分的工作不论是否提升了性能但是对于客户端本身来说都是有意义的当然提升性能给应用带来的吸引力更大。这部分细节内容可以参看代码实现部分对于调用者来说完全没有任何功能影响仅仅只是性能。压力测试比较在这个压力测试之前其实已经做过很多次压力测试了测试中的数据本身并没有衡量Memcached的意义因为测试是使用我自己的机器其中性能、带宽、内存和网络IO都不是服务器级别的这里仅仅是将使用原有的第三方客户端和改造后的客户端作一个比较。场景就是模拟多用户多线程在同一时间发起缓存操作然后记录下操作的结果。Client版本在测试中有两个2.0和2.2。2.0是封装调用Whalin Memcached Client 2.0.1版本的客户端实现。2.2是使用了新SockIO的无第三方依赖的客户端实现。checkAlive指的是在使用连接资源以前是否需要验证连接资源有效发送一次请求并接受响应因此启用该设置对于性能来说会有不少的影响不过建议还是使用这个检查。单个缓存服务端实例的各种配置和操作下比较缓存配置 用户 操作 客户端 版本 总耗时(ms) 单线程耗时(ms) 提高处理能力百分比 checkAlive 100 1000 put simple obj1000 get simple obj 2.02.2 132425657772767 13242577727 41.3% No checkAlive 100 1000 put simple obj1000 put simple obj 2.02.2 72002854667239 7200246672 35.2% checkAlive 100 1000 put simple obj2000 get simple obj 2.02.2 2038545711494383 203854114943 43.6% No checkAlive 100 1000 put simple obj2000 get simple obj 2.02.2 112591857256594 11259172565 35.6% checkAlive 100 1000 put complex obj1000 get complex obj 2.02.2 150049069501571 15004995015 36.7% No checkAlive 100 1000 put complex obj1000 put complex obj 2.02.2 90225786775981 9022567759 24.9% 从上面的压力测试可以看出这么几点首先优化SockIO提升了不少性能其次SockIO优化的是get的性能对于put没有太大的作用。原以为获取数据越大性能效果提升越明显但结果并不是这样。单个缓存实例和双缓存实例的测试比较缓存配置 用户 操作 客户端 版本 总耗时(ms) 单线程耗时(ms) 提高处理能力百分比 One Cache instancecheckAlive 100 1000 put simple obj1000 get simple obj 2.02.2 132425657772767 13242577727 41.3% Two Cache instancecheckAlive 100 1000 put simple obj1000 put simple obj 2.02.2 135968417696684 13596876966 43.4% 结果显示单个客户端对应多个服务端实例性能提升略高于单客户端对应单服务端实例。缓存集群的测试比较缓存配置 用户 操作 客户端 版本 总耗时(ms) 单线程耗时(ms) 提高处理能力百分比 No ClustercheckAlive 100 1000 put simple obj1000 get simple obj 2.02.2 132425657772767 13242577727 41.3% ClustercheckAlive 100 1000 put simple obj1000 put simple obj 2.02.2 250442688404606 25044284046 66.5% 这部分和SocketIO优化无关。2.0采用的是向集群中所有客户端更新成功以后才返回的策略2.2采用了异步更新并且是分布式客户端节点获取的方式来分散压力因此提升效率很多。开源代码下载其实封装后的客户端一直在内部使用现在作了二次优化以后觉得应该开源出来一是可以完善自己的客户端代码二是也可以和更多的开发者交流使用心得。目前我已经在Google Code上传了应用的代码、范例和说明等有兴趣的朋友可以下载下来测试一下与现在用的Java Memcached客户端在易用性和性能方面是否有所提高也期待更多对于这部分开源内容的反馈能够将它做的更好。链接地址http://code.google.com/p/memcache-client-forjava/。 Memcached 原理和使用详解百度文库http://wenku.baidu.com/view/682da300a6c30c2259019e34.html#download 引用地址http://hi.baidu.com/jiangyangw3r/item/34cd8a9c3826f0dc1e427169 转载于:https://www.cnblogs.com/sishierfei/archive/2012/07/13/2590523.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机网站分页明年开春有望摘口罩

C/C__VA_ARGS__学习--自动打印函数的参数和返回值 一.参考二.输出三.代码 通过__VA_ARGS__,自动打印函数的参数和返回值 一.参考 c/c:提取可变参数宏__VA_ARGS__中偶数位置参数 二.输出 input:A StructA StructA[1,2,3,4,10,11,12,13,] input:B StructB* StructB[26,27,28,…

阳谷聊城网站优化php网站开发课程

一、需求 点击链接跳转,只点击标红区域才跳转,右侧空白区域不要跳转 二、实现 宽度太宽,导致右侧空白区域也加了跳转效果,修改为 将元素的最大宽度设置为其内容所需的宽度。 方法一:建议方式 使用 display: inline…

网站文风网站建设技术员工资

传送门 首先那个\(O(n^2)\)的dp都会吧,不会自己找博客或者问别人,或是去做模板题(误) 对以下内容不理解的,强势推荐flash的博客 我们除了原来记录最长上升子序列的\(f_{i,j}\),再记\(g_{i,j}\)表示到\(i,j\)时的最长上升子序列个数,同时设两个字符串为\(A,B\) 若\(A_iB_j\) ,则…

龙岗网站多少钱手机小游戏网站大全

生成式 AI 是一项惊人的技术,但它并非万能。在这个视频中,我们将仔细看看大型语言模型(LLM)能做什么,不能做什么。我们将从我发现的一个有用的心理模型开始,了解它能做什么,然后一起看看 LLM 的…

哪些行业做网站的多ps怎么做网站视频特效

1. 工厂模式介绍 工厂模式(Factory Pattern)的意义就跟它的名字一样,在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂模式根据不同的参数来实现不同的分配方案和创建对象。 在工厂模式中,我们在创建…

百度网站的优缺点设计说明书模板

上一小节介绍了怎么使用 Python 读取多维表的数据,看似可以成功获取到了所有的数据,但是在实际生产使用过程中,我们会发现,上一小节的代码并不能获取到所有的多维表数据,它只能获取一页,默认是第一页。因为…

hao123网站浙江省建设厅网站资质迁移

背景介绍 至尊宝和紫霞仙子是电影《大话西游》中的人物。该电影讲述了至尊宝放弃戴上金箍成为盖世英雄,选择当一个凡人,与‌紫霞仙子长相厮守的故事。这部电影通过奇幻、冒险、喜剧和悲剧的元素,展现了一段跨越时空的爱情故事,充…

婚介网站建设的策划中国前十强企业

macOS 12 Monterey是苹果公司的一次重大突破,它打破了设备间的壁垒,将不同设备无缝地连接在一起,极大地提升了用户的工作效率和娱乐体验。Monterey带来了通用控制、AirPlay、捷径等新功能,以及一些实用的新小功能。 安装&#xf…

动漫php网站模板seo公司

这里写目录标题 一、前言二、下载三、简要总结 一、前言 原文以及该系列后续文章请参考:安装Electron 随着前端的不断强盛,现在的前端已经不再满足于网页开发了,而是在尝试能否使用前端的开发逻辑来开发PC端的桌面软件。 即用html、js、css…

大丰区住房和城乡建设局网站虾米播播支持wordpress吗

期待已久的时刻已经到来,现在我们很高兴地宣布, CUBA平台终于加入了自由软件社区! 从现在开始,平台的所有运行时部分都是开源的,并根据Apache 2.0许可进行分发。 这意味着您将完全可以免费创建和分发应用程序&#xff…

Hetao P10588 十载峥嵘桀骜 题解 [ 紫 ] [ 树的直径 ] [ 矩阵加速 DP ] [ 状态设计优化 ]

十载峥嵘桀骜:感觉挺简单的,就是代码处理比较繁琐。 一个最简单的部分分是暴力模拟建图之后跑矩阵快速幂转移,时间复杂度 \(O(n^3\log t)\),随便拼点其他特殊性质就能 68pts 了。 考虑正解,结合树的直径的 DFS 求…

GO学习记录九——数据库触发器的运用+redis缓存策略

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

顺德网站建设哪家好深圳龙岗网络

问题 今天在使用lombok简化model类时。使用Builder建造者模式。报以下异常 解决办法。 去掉NoArgsConstructor添加AllArgsConstructor源码分析 下图是编译后的源码 只使用Builder会自动创建全参构造器。而添加上NoArgsConstructor后就不会自动产生全参构造器

用 Julia 提取轮廓和字符特征进行验证码识别

验证码图像中的字符常常被干扰线穿插、扭曲变形,导致传统的二值化 + OCR 方法失效。为了解决这类问题,我们可以借助轮廓提取技术,分析字符的几何结构,通过区域形状进行字符识别。本篇博客介绍如何使用 Julia 实现轮…

深入解析:269-基于Python的58同城租房信息数据可视化系统

深入解析:269-基于Python的58同城租房信息数据可视化系统2025-09-23 18:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

企业网站建设的实践意义哪里有做网站系统的

FastAPI 概述 参考文档: 中文文档轻松上手Python的Web神器:FastAPI教程 介绍 FastAPI 是一个基于 Python 的现代 Web 框架,它具有快速构建高性能 API 的特点。 FastAPI 关键特性: 快速:可与 NodeJS 和 Go 并肩的极高性能&am…

吉林集安市建设局网站哈尔滨网站优化对策

jax可微分编程的笔记(8) 第八章 循环神经网络 神经网络是可微分编程中最为重要的模型构造形式,也是当代 深度学习的基本组成部分,深度学习中的“深度”一词,便是对 神经网络的层数的形容。 8.1 神经网络的生物学基础 通过层层近似&#x…

建设执业资格注册管理中心网站wordpress 两栏

欢迎来到设计模式系列的第三篇文章!在前两篇文章中,我们已经学习了设计模式的基本概念以及单例模式的应用。 今天,我们将深入探讨第二个模式——工厂方法模式。 工厂方法模式简介 工厂方法模式是一种创建型设计模式,它提供了一…

你有网站 我做房东 只收佣金的网站电商平台建设费用

概念 ToF 是 Time of Flight 的缩写, ToF 测量法又被称作飞光时间测量法,是通过给目标连续发射激光脉冲,然后用传感器接收在被测平面上反射回来的光脉冲,通过计算光脉冲的飞行往返时间来计算得到确切的目标物距离。因为返回时间很…

网站如何做双语言刷关键词排名seo软件

1、背景 项目上有这样一个需求&#xff0c;前端传文件过来&#xff0c;后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的) //接口类似于下面这个样子 PosMapping("/uploadFile") public R uploadFile(List<MultipartFile> fil…