微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异
前言:由于开发人员要靠工具吃饭,可能和开发工具、语言、环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多或少对自己吃饭的工具在感性上带有宗教情结,在理性上又受屁股决定大脑利益左右,这种比较一般都容易遭人争议, 这些比较不带任何偏见和感情色彩,主要是自己工作中记录在有道云笔记的经验日记主要是给I自己学习备查用,写得多了就有参考价值分享出来给需要的人参考,如果有任何争议本人不作辩解。这只代表本人自己的理解印象。
Session篇:
PHP默认使用文件存储session数据, asp.net 默认保存在IIS进程内存中

PHP方式优点:稳定可靠不易丢失,nginx或apache服务器重启不影响session丢失,session稳定可靠。整过机制简易透明,用户可以直接删除session目录下的文件让session失效,可以方便地实现asp.net 很难实现的一些特殊需求,如需要在用户的请求或系统某些事件发生后要让指定的A用户session失效,然后必须强制从数据库读最新记录,假如有这一样矛盾的性能优化场景设计:假如用户表User有余额字段Balance, 要让用户A登录自己的后台看到自己的余额是最新的,而又不想每刷新一次面就请求一次数据库造成不必要的压力,最好的做法是把某用户的记录实体保存在Session当中,每次从Session中读取自己的余额字段显示,就不会给数据库造成压力,只有当余额字段 Balance变化后即时清除掉这用户的Seesion然后强制让他去读最新的数据库字段,但当其它事件发生时如:其它用户给A转账后要清除A的缓存,系统发生的退款、扣款、奖励到余额引起余额变化时要清除A的缓存,由于php的透明机制直接删除对应session文件就可以,但用iis就很麻烦了,由于微软偏向于session放在内存中,封闭成黑盒又没提供对应操作接口就悲剧了,只有通过其他办法曲线救国。
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,这是是商业软件和开源免费软件比较典型的特征,商业软件一般实现一个各方面都要优于免费一点东西,封装个黑盒给你直接用,但特殊的需求不方便搞。
 

微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异的更多相关文章

  1. 喜大本\\ u0026普,微软的开源

    词汇表--喜大本\\ u0026普:爱过.有趣的游戏,庆祝.奔走相告.简而言之<reload=1">微软宣布.NET开发环境开源>是个好消息. 前言及历史回想 就我个人来说 ...

  2. DICOM:DICOM三大开源库对比分析之“数据加载”

    背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,“只要Sante DICOM Editor打不开的数据,基 ...

  3. Farseer.net轻量级开源框架 中级篇:常用的扩展方法

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: BasePage.BaseController.BaseHandler.BaseM ...

  4. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  5. Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...

  6. Android开源项目第一篇——个性化控件(View)篇

    本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Ga ...

  7. Android开发UI之开源项目第一篇——个性化控件(View)篇

    原文:http://blog.csdn.net/java886o/article/details/24355907 本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍A ...

  8. 微软Build2014大会干货总结-2

    继昨天微软在Build2014大会上宣布一系列重磅举措后,第二天的主题是微软云(Microsoft Azure)及开发者战略,CSDN记者继续从旧金山现场给您发来一线报道. 第二天的主角是新上任的微软 ...

  9. 微软爱开源:向Linux社区开放60000多项专利

    10月10日,微软在博客中宣布正式加入开放创新网络(Open Invention Network, 简称“OIN”),向所有开源专利联盟的成员开放其专利组合. 微软的加入意味着,旗下60000多项专利 ...

随机推荐

  1. PMP应考知识点-合同类型以及选择要领

    合同类型的选择貌似是必考知识点,加上对合同类型的了解和选择的要领,对于开展日常工作来讲也是挺有必要的.所以这两天重新回顾并总结了合同的种类和各种类的选择要领,与大家分享. 转走请标明出处  https ...

  2. 【Oracle RAC】Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂)

    [Oracle RAC]Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂) 2 Oracle11gR2 RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件 ...

  3. CYQ.Data 支持分布式数据库(主从备)高可用及负载调试

    前言: 继上一篇,介绍 CYQ.Data 在分布式缓存上支持高可用,详见:CYQ.Data 对于分布式缓存Redis.MemCache高可用的改进及性能测试 本篇介绍 CYQ.Data 在对数据库层面 ...

  4. break、continue以及return的区别

    break.continue以及return的区别如下: 1.break break用于完全结束一个循环,跳出循环体,不再执行下面的代码.对于多层循环嵌套,如果break语句出现在嵌套循环中的内循环时 ...

  5. 3.Flask-SQLAlchemy

    (1)安装 pip install flask_sqlalchemy (2)数据库连接 from flask import Flask # 1.导入 from flask_sqlalchemy imp ...

  6. tcc-transaction 分析

    tcc-transaction是TCC型事务java实现,具体项目地址  点我.本文通过tcc-transaction和Springcloud,分析下tcc-transaction的原理. 要了解一个 ...

  7. word中如何只修改英文的颜色

    替换->更多->使用通配符,查找[a-zA-Z],替换为^&,字体选红色

  8. Docker进阶之三:Docker应用场景

    场景一:节省项目环境部署时间 1.单项目打包 每次部署项目到测试.生产等环境,都要部署一大堆依赖的软件.工具,而且部署期间出现问题几率很大,不经意就花费了很长时间. Docker主要理念就是环境打包部 ...

  9. GitHub 可以免费创建私人仓库啦

    如果你不知道什么是 GitHub,也可以往下看,只不过可能感受不会那么深啦. 昨天,GitHub 博客发表了文章 其中比较重要的已经用蓝色线标注了. GitHub 支持开发者创建免费私人仓库,但是需要 ...

  10. 18-09-20,String 与 StringBuilder (StringBuffer)

    1.其一 在运行速度方面:StringBuilder > StringBuffer > String 上实例 class Program { static void Main(string ...