首页 文章 精选 留言 我的

精选列表

搜索[优化],共10000篇文章
优秀的个人博客,低调大师

ASP.NET性能优化之分布式Session

如果我们正在使用Session,那么构建高性能可扩展的ASP.NET网站,就必须解决分布式Session的架构,因为单服务器的SESSION处理能力会很快出现性能瓶颈,这类问题也被称之为Session同步。微软有自己的分布式Session的解决方案,那就是SessionStateServer,我们可以参考: ASP.NET Session State Partitioninghttp://blog.maartenballiauw.be/post/2008/01/23/ASPNET-Session-State-Partitioning.aspx ASP.NET load balancing and ASP.NET state serverhttp://blog.maartenballiauw.be/post/2007/11/ASPNET-load-balancing-and-ASPNET-state-server-(aspnet_state).aspx 不过本文是要换一个方案,那就是使用Memcached来到达分布式SESSION的架构。Memcached作为分布式的缓存服务器已经被广泛应用在网站建设中。 一:Session的机制 Session是针对用户的,我们也可以理解为是针对浏览器的。在浏览器首次访问ASP.NET网页的时候(网页没有关闭session功能),它会发送如下的HTTP头给客户端: 浏览器在收到上面的HTTP头后,会将这个唯一的SESSIONID保存在自己的COOKIE中(只要没有禁用COOKIE,本文不讨论禁用COOKIE的案例,可参考本博文http://www.cnblogs.com/fish-li/archive/2011/07/31/2123191.html,写的很NICE)。当浏览器再次请求服务器进行访问的时候,它会在请求HTTP头中加入如下的标识,我们可以看到,这个SESSIONID就是上面的SESSIONID: 浏览器和服务器间就是通过这样一种机制来确保用户SESSION的。 如果客户端浏览器禁用了Cookie会怎么样,我们会发现每一次刷新浏览器Set-Cookie都是不同的,而发送请求头中也永远不会出现Cookie标识。这个时候,我们会发现Session失效了(当然,微软为了防止出现这种情况,允许我们在sessionState中设置cookieless="true",用URL来传递sessionid)。 二:Memcached Providers 我使用的Memcached客户端是Memcached Providers,下载完毕后,你会发现Memcached Providers已经提供了对分布式Session的支持功能。如果你还不会使用Memcached Providers,请参考此文Memcached Tip 1:使用Memcached Providers。Memcached Providers提供的示例是直接将SESSION存储在数据库,我们可以通过配置来将SESSION支持存储在分布式SESSION的内存中,即,将下文中的dbType由SQL修改为none。: 使用Memcached Providers提供的分布式Session没有任何特别之处,因为Memcached Providers提供的SessionStateProvider类型实现的是ASP.NET中的SessionStateStoreProviderBase这个抽象类,我们可以看到配置文件中指定了Session的处理类是SessionStateProvider,所以,ASP.NET在接受到客户端的请求后,会自觉滴使用SessionStateProvider来处理所有的SESSION,也正是这个类,完成了将SESSION读取和存储在Memcached中(如果设置了SQL,则会同步存储到SQLSERVER数据库)。 SESSION的设置和读取与传统没有任何区别,读: Session["sname2"] = "sluminjxxi"; Session.Timeout = 2; 取: Response.Write(Session["sname2"]); 三:为什么要配置SQL 传统的SESSION的缺点,在仅使用dbType为none配置的时候都会存在。如Memcached的内存到达上限的时候会怎么办?Memcached使用LRU淘汰算法(最久未使用),在这里我们不需要去细究这个算法在Memcached内部到底是什么样一个机制,我们只需要知道,在内存紧张的时候,即使SESSION时间未到,Memcached也有可能把它干掉。所以,保险的做法是,在Memcached之下,再加上SQLSERVER的持久化保存。如果缓存命中的,直接取缓存,如果缓存没命中的,则再到数据库中确认一次。当然,这样会带来一些性能损耗,但是却是更安全的做法。 Memcached Providers提供的下载文件中,提供了初始化SESSION的一些脚本,正确执行后,它会生成如下一个表tblSessions,及若干存储过程: tblSessions保存的是就是单独的Session,如下: 四:Memcached Providers的一个BUG 在当前的Memcached Providers(1.2版本)中关于SessionStateProvider(29520-TRUNK)是有一个BUG(我已提交到codeplex,相信他们的下一个版本应该能得到修正)的。如果我们测试SESSION失效时间,发现只要经过一次刷新后,就永远是20分钟(即默认)。这源于在ReleaseItemExclusive这个重载方法中(该方法用于释放对会话数据存储区中项的锁定),对于Session的重新存储没有加上过期时间,如下: 注释掉的是Memcached Providers提供的源码,而正确的应该是我修正过的上一条。使用修正过的DLL,一切圆满了。 五:采用数据库存储SESSION的可扩展问题 随着访问量的进一步上升(当然,到了这种程度,说明网站做的很很成功,绝大部分的网站是不需要考虑这一步的),即便我们使用了Memcached作缓存,使用单一的SQLSERVER存储SESSION仍旧带来了性能问题,在这种情况下,我们对于数据库的设计可以采用水平分区的架构,即根据某种算法(可以根据SESSIONID,或者用户名等)将SESSION存储到不同的数据库中。这个时候,如果我们仍旧使用Memcached Providers,那么必须进一步修改源码了,由原先支持单一SQLSERVER服务器,编程支持多个服务器。当然,如果不喜欢SQLSERVER,还可以修改为支持mysql、mongodb、任何自定义的KEY-VALUE框架等等,此为后话,暂且不表。 本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/705004,如需转载请自行联系原作者

优秀的个人博客,低调大师

思科37亿美元收购App性能优化初创公司

日前,思科宣布37亿美元收购专注于改善应用程序性能的初创公司,继续其开拓计算机网络硬件之外领土的步伐。 该初创公司名为AppDynamics,被收购时正处于上市边缘。AppDynamics软件可让公司企业监视应用性能,找出规避问题和获得更平滑运行的方法。 应用已成为企业获利成功的生命之源 ——思科物联网与企业组总经理罗万·特罗鲁普 消费者越来越倾向于在移动设备上通过应用来与企业互动。随着各行各业的公司企业不断扩张自身数字基础设施,IT部门正在被巨量复杂独立的数据淹没,而AppDynamics则专注于将企业数据转化为企业洞见。通过收购AppDynamics,思科可以为客户提供从网络到应用的端到端可见性与情报。 由于其从网络硬件到软件及服务的转型,思科去年宣布将裁员7%。当时,思科高管称,作为企业重构的一部分,裁员计划将减少5500个职位,降低“较低成长领域”开支,转投思科战略重点领域,比如:安全、云计算、数据中心和物联网。2011年至2014年间,位于北卡的思科经历了裁员浪潮,总共减去了17000个职位。 这几年思科面临着其传统产品的放缓,比如电信网络路由器,因而一直在努力将战略方向调整至快速增长行业。与售卖设备相比,该公司还从不断增加的服务或软件订阅上寻求利润增长。 思科从向私营数据中心售卖硬件赚取了充足的资本,但公司企业如今越来越倾向于采用“超级云”,比如提供按需租赁处理能力的AWS和微软的Azure。但交换机和路由器依然占思科业务很大一块。 收购交易预期在9月底完成。 作者:佚名 来源:51CTO

优秀的个人博客,低调大师

OpenStack Swift跨地域存储集群的部署与优化

OpenStack Swift,大家会说它是OpenStack的对象存储服务,或者对象存储项目,但是实际上对象存储这个词它的含义,不同的人有不同的理解。 首先,让我们先看一个例子,就是淘宝在06、07年的时候,开始用他们自己研发的分布式存储系统,或者用现在时髦的话说叫SDS存储系统,来替代NAS设备。就以前淘宝的图片都是放在NAS里面的,但是从06年开始逐步的替换,当然很快,现在早已经不见了,没有一台NAS,负责一台SAN在淘宝的后端里面。中间有一个数据,当然更新的数据在2010年的时候,淘宝后端的图片数量已经突破了280亿,这个数量也是非常巨大的。这也是造成他们为什么要替换NAS一个很重要的原因,就是因为对于海量数据存储,传统的NAS、传统的文件系统可能会遇到问题,这是一方面。另一方面,就是他要支持客户端直接访问。 也就是说,我们现在随着互联网的发展、移动互联网的发展,我们的手机,我们的移动互联网的发展,像网页如果要读取存储或者读取数据的话,我们会希望他能够直接访问存储系统,而不像再像以前,先通过Http服务,访问应用服务器或者访问web前端服务器,然后web再往后给到应用服务器。应用服务器再往后接到存储,然后再把数据吐出来,现在可能会希望能够由客户端直接访问存储,这样的话对整个存储系统的并发,一方面是对整个系统的并发有一个非常好的提升。另一方面,也对存储系统的并发提出了一个挑战,当然这样做以后就会大量节省中间那两层,web服务器和应用服务期的开销,简化整个系统的架构,所以他带来的好处也是很多的,这就是为什么像淘宝,他会在当年用,其实用现在的话就是SDS或者对象存储系统来替代当初的NAS。 那么淘宝只是一个例子,其实在互联网公司中,类似的架构、类似的技术在广泛的得到使用,互联网公司是这样。那对于传统行业,我们现在所谓的传统行业,或者我更习惯说是非互联网行业, 而过去将近一年多,将近两年时间我所从事的主要工作,就是我把所了解的互联网公司里面用到的比较好的技术推荐或者传播或者说帮助传统行业的非互联网产业的企业怎么样应用、怎么样改造他们的IT系统。 以前我们去银行办卡,需要排几十分钟的队才能办到一张卡,或者需要去指定网点才能办,而现在,比如在招行,进去10分钟,就可以办一张卡出来。为什么?因为我们不用再到柜台去排队了,虽然也要去网点,但是也有这样的一个机器,你站在这个机器前边,跟机器那边的人对话几句,然后签署几个电子档的文件就可以了。然后在他的后端,会把你的这段视频,实际上声音是要单独存储的。因为声文识别比视频识别目前来看,还是要更容易和准确一些,所以声音文件是要单独存储的,这是他们的业务,这是他们的应用,那后端的存储用什么?用以前传统存储还行不行,同样会面对像淘宝面对的两个问题,第一个是数据量的激增,以前银行可以说多长时间能存满100T的数据,,存100T会需要很长时间的数据积累,但是上了这套系统以后,因为大量的视频需要存储,所以很快这个存储容量就会发生一个非常大的增长,那以前传统的存储架构可能会有问题。另外这也是一种客户端,这个客户端,我们也会希望它能够直接访问存储系统,还有类似的,像以前我们去银行要复印一些,现在我们去了话,如果办借助卡,可能主要是复印一个身份证,但是实际上银行有很多贷款业务,中间有大量的票据需要复印、需要存档,那现在用什么?全都是扫描件,全都是电子档的数字图片存档。 面对这样的存储需求,背后最好的解决方案是什么? 就是我们今天在这里谈论的对象存储。对象存储,也可以叫类似于S3的存储,S3—like storgae,它主要有两个特征。 第一个是没有一级一级的文件夹、目录数的东西,它是用户在它的存储空间只能看到一级,类似于目录动,叫做桶或者叫做容器。然后它就把对象放到那些桶里面、容器里面,这个就跟我们使用传统文件系统一级一级建目录的方式不一样。大家知道在亚马逊的云上面,最早提出的服务,在它的虚机、云主机推出之先,最早提供的服务也是对象存储。 另外一个特点,提供REST API ,也就是说直接能够HTTP的访问。这个是HTTP的接口,它非常简单,因为它是REStful的,所以他主要通过put、get、Delete、post,四类接口对数据进行操作。 文件存储 跟文件存储非常类似,叫Object Storage。Object Storage是对象,这个在台湾那边给它翻译为物件存储,我觉得更准确一些,他说实际上这个Object 就是东西,东西往框里放,就是这样一个意思。那Object本质上或者从另外一个角度来说,它就是我们今天说的文件,只不过它的系统这种形态方面不太一样。 这个也涉及到一个问题,就是这个东西没有文件夹,没有目录数了,我们怎么管理数据对吧,现在很多人会想到这个事,他又会有疑虑,就是我的应用,以前用的文件夹管理数据,现在没有了,怎么管理数据? 其实仔细想一下,现在在很多场景下文件存储没有用到文件夹。这个听起来很疯狂,文件的存储没有用到文件夹,其实大家仔细想一下,举一个非常直接的例子,你知道你手记拍的照片存在哪个目录下,文件名是什么吗?其实你不知道,但是你用的很好。如果程序员来编程的话,在后端实现一个系统的时候,其实也是类似的,现在很多地方,都不需要用文件夹来管理数据的,不需要用目录来管理数据的。当然并不是说这种东西要否定它,只是说我们在遇到某些问题的时候可以多想一下,像buckets实现,还有像操作系统的实现,它肯定得依赖文件系统。 海量数据存储的场景 大数据存储场景主要包括这两个,一个是超大文件存储,一个是海量小文件存储。另外一个是极高的可靠性与可用性,就是极高的。就是这个基本上可以很容易做到你的数据永远不丢失,然后永远在线的访问,这个对于Swift来说要做到很容易。当然必须得做正确,不正确的做法其实也是很容易出问题的,所以我们强调运维这个事情。特别是对分布式系统来说,正确的做事情,运维在中间基本上,做OpenStack,有一句话叫三分产品、七分运维,这个是很重要的。 由于Swift采用的是全分布式架构,所以它的扩展性非常好,没有集中节点。比如说HDFS,包括像淘宝的TFS,其实还是有NAS接点的,那NAS接点往往就会成为大家关注瓶颈的关键,这个在Swift里面是没有的,所以它的扩展性非常好。而且很多存储系统,随着规模的扩展到一定程度,规模特别大的时候,性能可能会下降,或者说衰减的很厉害,但是Swift不会。Swift几乎在非常大的规模,仍然做到性能随着规模的线性提升。 那么,还有就是目前可以支持纠删码,所以分布式存储三副本或者多副本,不再耗裸存储容量的事情,其实在Swift里面目前已经是得到解决, 现在在Swift基础上,做了哪些企业级用户比较关心事情? 第一个是安全性。 第二个是我们除了支持对象结构以外,我们为了照顾以前习惯NAS的应用,我们也可以支持POSIX兼容的接口。 第三个就是就是支持应用开发。 另外,说到在跨地域的基础之上,我们其实还可以提供双活或者多活的存储解决方案。所以在我们存储解决方案里面,针对目前这种企业级客户比较关注的双活和多活的事情,提供了这种定制化的解决方案。 跨域部署主要是三个方面: 第一个是在硬件上 第二个就是Ring的创建 第三个是最终一致性的问题本文转自d1net(转载)

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册