【本文转自博客园,作者:青春罗宾汉 原文链接:http://www.cnblogs.com/zyczyc/p/9194816.html】
前言:由于开发人员要靠工具吃饭,可能和开发工具、语言、环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多或少对自己吃饭的工具在感性上带有宗教情结,在理性上又受屁股决定大脑利益左右,这种比较一般都容易遭人争议, 这些比较不带任何偏见和感情色彩,主要是自己工作中记录在有道云笔记的经验日记主要是给I自己学习备查用,写得多了就有参考价值分享出来给需要的人参考,如果有任何争议本人不作辩解。这只代表本人自己的理解印象。
Session篇:
PHP默认使用文件存储session数据, asp.net 默认保存在IIS进程内存中
PHP方式缺点:性能欠佳不如保存在内存里快,而且产生大量的小文件,反复创建删除 这些小文件会造成磁盘碎片久而久之会拖慢整个磁盘的性能,产生大量文件句柄占用操作系统文件句柄,进而影响性能,网站访问量上升后是个悲剧,可能在一个目录下产生数百万个小文件,即时运行在linux这样一切皆文件思想的操作系统上也是非常影响文件系统性能,会严重拉低整个操作系统的磁盘性能。所以这个默认机制性能上不如IIS的默认存储在进程存储快。 那些神吹开源技术性能设计比windows先进的人自行打脸,最近深入了解lamp,lnmp后发现有很多过时的设计无法跟上时代,如php无法使用真正的数据库连接池等很多比原本想像来严重得多的问题,当然 般都会有第三方非主流折腾代替的方案,如使用memcache内存方式保存session在内存中也是可以的,但需要手工折腾一下。
PHP分布式session的支持:在高并发多台服务器负载均衡的环境中,两台nginx 或apache要共享session 一般是把session保存在数据库中,然后不同的负载主机共连一个数据库来实现,数据库的性能和读写文件实际没有本质区别,稳定性依然强,但性能依然是弱点
ASP.NET方式优点:速度快,不用读写磁盘显然这是很自然的是
ASP.NET方式缺点:很不稳定,不要说重启IIS网站这样的极端操作会丢失Session,就算是改动了配置文件 web.config或者变动了bin目录下的dll导致网站重新编译的操作都会重置内存导致Session丢失,这就是为什么在asp.net 开始调试期间常常遇到测试人员登录系统没几秒就可能session丢失的奇怪幻像,一般都是有程序员在频繁更新程序,只要更新一次就全面丢失一次session; 微软的解决方案也足够简单好用,使用一个独立的ASP.NET State Service状态服务进程来保存session信息,注意使用ASP.NET State Service后数据还是保存在内存中,只不过是一个独立的服务进程,默认通过监听tcpip=127.0.0.1:42424端口跨进程通信保存信息,
这样就算IIS重启也不会导致用户登录session丢失,稳定性解决了,同时数据还是保存在内在中速度性能远高于php的文件存储方案。而且状态服务每台电脑都默认安装,只需要启动就行。方便性和性能已经甩下php不在一个级别了。
ASP.NET分布式session的实现:在高并发多台服务器负载均衡的环境中,两台IIS要共享session非常简,只需要共同连接一台状态服务器就可以共享session,通过简单设置就可以让状态服务打开远程访问功能。当然asp.net也是支持把session保存到数据库的,但很少有人这样用没有太大的理由采用这种方案。
SESSION管理总结:可以看到php和asp.net的session管理机制上走的两个不同的哲学方向,php稳定易于实现、偏爱对硬盘存储,微软asp.net偏爱内存里存储,实现难度要高于php,这是是商业软件和开源免费软件比较典型的特征,商业软件一般实现一个各方面都要优于免费一点东西,封装个黑盒给你直接用,但特殊的需求不方便搞。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31137683/viewspace-2156470/
,如需转载,请注明出处,否则将追究法律责任。