微软与开源干货对比篇_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. js防抖和节流

    今天在网上看到的,里面的内容非常多.说下我自己的理解. 所谓的防抖就是利用延时器来使你的最后一次操作执行.而节流是利用时间差的办法,每一段时间执行一次.下面是我的代码: 这段代码是右侧的小滑块跟随页面 ...

  2. CODING 研发管理系统上线全球加速,助力企业跨区域协作

    CODING 研发管理系统现已全面支持全类型代码仓库的 全球加速访问. 随着国内互联网红利的日趋枯竭与全球互联网的加速普及.越来越多的企业开始走出国门,将目光投向全世界,搭建跨国体系.跨出国门的中国企 ...

  3. Android之webview详解

    文章大纲 一.webview基本介绍1.什么是webview2.为什么要使用webview3.webview基本操作 二.webview高级使用1.WebView状态2.资源加载3.WebView加载 ...

  4. windows之如何把iso文件转换为VHD文件

    (1)Convert-WindowsImage.ps1的下载路径: 链接:https://pan.baidu.com/s/18duFQFW8T_yI2JeQ1lhJgQ 提取码:b5ps autoun ...

  5. ios11苹果手机怎么投屏到电脑

    使用过苹果手机的用户都知道,苹果手机触摸屏操作极为流畅,网页浏览也非常轻松,各种网络上的应用可以说是非常完美.iPhone的娱乐功能相当的强大,能让苹果iPhone超越了其他手机很大的距离.但是手机怎 ...

  6. HDP 2.6 requires libtirpc-devel

    HDP 2.6 requires libtirpc-devel 个问题,截止 Mustafa Kemal MAYUK 2017年06月30日 06:30 hadoopPowerSystems Hell ...

  7. Java集合-ArrayList源码解析-JDK1.8

    ◆ ArrayList简介 ◆ ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAcc ...

  8. 清除过期日志的py脚本

    本篇和大家分享的是一个清除过期日志的python脚本,年后第二篇希望对大家有帮助: 该python脚本创建的由来 代码及分析 crontab定时任务 该python脚本创建的由来 此由来,是在过年假期 ...

  9. 面向对象(__str__和__repr__方法)

    #Author : Kelvin #Date : 2019/1/21 16:19 class App: def __init__(self,name): self.name=name # def __ ...

  10. go get golang.org被墙问题解决

    go get golang.org被墙问题解决 今天在下载golang.org/x/image/tiff的时候出错 > go get -v golang.org/x/image/tiff Fet ...