故事的原由是这样的,因为本人地处偏僻工做地点在美丽的冰城哈尔滨虽然地方很美丽,可是这里的软件行业实在是算不上“美丽”,这么多年因为我的缘由或者公司缘由常常换工做,由于这里都是中小型公司,没有什么大公司。今天安静的上班明天老板接不到外包可能就要解散,我见过最狠的老板压了我6个月的工资,我都忘记我当年为何没被饿死过来的,听说年前有一个哈尔滨的某奇葩食品行业公司雇佣了好几十个员工干活,结果项目作完了之后,公司申请破产了,末月就是不给你结算,爱那那告,结果几个月之后又开始恢复营业了。(好吧个人嘴癌又开始犯了)言归正传,因为这种环境因此我对本身的技术也有一个了解,高难度项目很差说,可是一些中小型的解决方案,即便拿不下,也能说个六七分。今年大概三月份开始陆陆续续面试了一些公司(由于工资要的多,因此不少时候要仔细甄选是否是骗子,不能给个电话就去。) 有一天我面试了一家听说很大,给百度旗下作seo优化的公司,全国有五个分部。html
面试的过程很简单一个年纪跟我差很少的兄弟出来大概问了我几个问题,问了问工做年限,我说我是12年毕业的,虽然是12年毕业可是实际我已经工做五年了,他停顿了一会,而后跟我聊了聊雇佣人的缘由:程序员
听说他们公司花了好久的功夫开发了一套系统,这个东西就是处理集团五个分部的业务和会计实务进行报告的总公司,进行递交,而后进行月末统计,可是问题来了由于月末要提交因此五个分部老是在月末的最后一天递交相关资料,结果系统总是崩溃,他们想招收一个能解决问题的大拿,可是说的过程我就看出来可能以为我很年轻,语气非常轻蔑,我当时就有预感确定不会要我,可是我稳住了,但是我内心也非常轻蔑,花了好几年作的一套系统,一直崩溃,大家之前的技术经理是吃s的?可是,为了保持矜持(不要打我),我就岔开了话题问了一点别的,为了避免引发疑心,我旁敲侧击的问了一下集团状况,他说我们总部是150人,我说那外面呢?他说都差很少,这个时候个人脑洞的打开了,假如我们取个中间值,五个分部,每一个分部160人,那么就是800人,一个综合性公司,开发人员不能上传报表吧?销售也是,他也说了,只是管理会计这一块的,咱们取个中间值,上下的并发量400人的网站,(我以为差很少了,其实若是网站规划得好400的并发和800的并发优化没什么区别)一个网站400就崩了,我以为好可怜,(为何他们还那么趾高气昂?),而后我又问我们用的是几台服务器?他说是一台,最后他说您想要多少钱的工资?我说8k-10k,结果他立刻站起来就说:你能够走了! 就凭借这句话我不再想来这个公司面试了。面试
我问的问题可能不全面可是是有条理的,我问他们几台服务器,就是想问问作没作基本的图片服务器和数据库服务器分离,结果是就这样被征服了。数据库
那么问题就来了,缘由多是以下几种:浏览器
1.上传的文件太多(或者图片太多)。服务器
2.网页的页面压力太大写的不够好。架构
3.数据库的压力太大。并发
第一种问题解决方案,上传的文件太多,这个问题最难解决了,同时也是最简单的,由于解决的方案就是一个字钱,君不见优酷土豆此类网站烧钱之甚啊!由于涉及到并发,打个比方,一条高速公路是100M,那么你的并行量级我们就按照100M计算,(这种说法已经最笨了)假设每一个人的上传5M的文件和图片那么这个网站的并发我是否是就能够认为是100/5 = 20呢? 也就是说这个网站只能20我的访问了,多了轻则卡顿丢失文件,总则就是网站崩溃了,这种问题也最难解决,由于文件和图片永远都是网站流量的最大杀手,没什么好办法只能作图片服务器分离.文件服务器分离了,(可是这里又违背了人家只用一台服务器的原则),有的公司看上去很大,可是老板就是对IT部门不重视不投资那么多没什么办法。app
第二种问题解决方案,网页的页面压力太大不够好,这个我可要说说了,我见过不少程序员写的页面一直都是在应付,由于我是作.net开发的,虽然.net的定位一直都是中小型网站,可是我认为不能由于它只是个中小型网站就能够敏捷开发同样快速写成功了没有了bug就能够了,我们具体分析一下缘由:post
IIS 内部运行机制及Asp.Net执行过程详解 中说道:(我们就根据iis5.x的运行机制来分析一下)
当一个HTTP请求从客户端发送过来以后会被WEB服务器进行Queue并进行分解归类,若是某个请求仅包含静态文件的请求,好比CSS,JS,Html文件或者虚拟目录所包含的文件如图片,IIS直接提取对应的文件将其做为Http Response返回给Client,若是事情仅仅是这样,咱们不少人就会失业了,呵呵。可是对于这些须要进一步处理的动态执行的文件,IIS必须将Request进一步传递给对应的处理程序,待处理程序执行完毕得到最终的Http Response经过IIS返回给Client。若是一个请求中包含动静态请求,那么静态内容会等到动态内容生成HTML后组合在一块儿返回给Client。对于IIS来讲,这些处理程序经过ISAPI Extension来体现。ISAPI Extension接收到请求页的扩展名以后会到IIS的Metadata database维护着一个称为ISAPI Extension Mapping的数据表查询,负责将不一样类型的Resource影射到对应的ISAPI Extension。对应.ASPX的Mapping是ASP.NET ISAPI,至此,ASP.NET ISAPI会建立一aspnet_wp.exe的worker process(若该Process不存在的话)。当地一个ASP.NET接收到Application中的任何一个.ASPX请求时,名为ApplicationManager的类会建立一个ApplicationDomain(应用程序域)。ApplicationDomain会为全局变量提供应用程序隔离,并容许单独写真每一个应用程序。在应用程序域中,将为名为 HostingEnvironment 的类建立一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。若是须要,ASP.NET 还可对应用程序中的顶级项进行编译,其中包括 App_Code 文件夹中的应用程序代码。建立了应用程序域并对 HostingEnvironment 对象进行了实例化以后,ASP.NET 将建立并初始化核心对象,如 HttpContext、HttpRequest 和 HttpResponse。 HttpContext 类包含特定于当前应用程序请求的对象,如 HttpRequest 和 HttpResponse 对象。 HttpRequest 对象包含有关当前请求的信息,包括 Cookie 和浏览器信息。 HttpResponse 对象包含发送到客户端的响应,包括全部呈现的输出和 Cookie。
从上面的分析咱们能够总结出iis读取页面的机理和缘由:
第一种:就是对internet请求进行分析和归类,分红静态页面请求和动态页面请求,所谓的静态请求就是html静态页面,动态请求咱们暂时理解为aspx,或者cshtml请求。
第二种:就是对动态页面请求进行分析,等到动态请求分析成为静态请求的时候组合再一块儿返回给浏览器。
因此我得出了两个结论:
第一种,咱们把一些流量高可是页面数据不老是变化页面咱们能够考虑使其静态化。这也是如今一些流行网站的作法。
第二种,咱们能够尽力的减小动态请求分析的时间。
第三种数据库压力大的解决方案,这种问题不少就是程序员本身自身素质的问题了,或者架构没有搭建好。
我猜测缘由多是:
第一种,有的人喜欢把文件或者图片变成二进制保存到数据库里,这样参照第一种崩溃缘由。
第二种,就是有的程序员他很擅长数据库方面的技术,因此他把全部的业务和逻辑都封装成了存储过程保存在数据库里,后台代码只有一个事务回滚甚至没有,这样的业务,在后台响应时间内接收不到回应天然会报错了。
我想说的是,.net语言由于其入门门槛低,容易掌握,形成了不少程序员素质良莠不齐,也有不少程序员学了不少年坐了项目经理连最基本的uml建模都没学过,这样给团队协做开发形成了很是大的影响,也给一些公司形成了不可挽回的损失,有一些老板一直在催快点干完,这个项目三天,三天能不能完成?他们只注重速度和钱,可是不注重质量,像我面试的这个公司同样本身开发的系统,竟然还一直崩溃,一个网站或者公司,虽然开始的定位必定是中小型,可是咱们避免不了要发展要生存,这还只是一个公司内部的系统,若是要是线上的项目,我估计没准连服务器都会崩溃了! 虽然干了五年由于不是专业出身因此底子很差写的也不怎么样,但愿各位朋友能指点指点我,这只是我人生路上面试过程当中的一个小部分,我只想说,不管咱们是作程序员仍是作人,要对得起本身的技术,对得起本身的研究成果!作到心安理得就能够了!