当前位置: 首页 > 科技观察

一次采访引发的思考(关于中小型网站优化的思考)

时间:2023-03-14 17:29:19 科技观察

序言故事的原因是这样的,因为我位于美丽的冰城哈尔滨的一个偏远的工作地点。虽然地方很美,但是这里的软件产业真的不行。在“美丽”上,这些年我经常因为个人或公司原因跳槽,因为这里都是中小型公司,没有大公司。我今天安静上班,明天老板不接外包就解散了。我见过的最无情的老板压了我6个月的工资。我什至忘记了为什么我没有饿死。据说几年前有个哈尔滨。一家奇怪的食品行业公司,雇佣了几十名员工,但项目完成后,公司申请破产,月底拒绝给你发工资。喜欢那个报告,几个月后终于恢复营业了。(好吧,我的口腔癌又开始了。)言归正传,因为这个环境,我对自己的技术有了很好的了解。难的项目不好说,但是一些中小型的解决方案,即使拿不下来,也还是可以说的。六七分。今年3月左右,开始陆续面试一些公司(因为工资高,所以很多时候都要仔细甄别是不是骗子,不能只打个电话)。面试了一家据说很大的公司,是给百度的。一家做seo优化的公司在全国有5家分公司。一般的面试过程很简单。一个跟我年纪相仿的弟兄出来问了我几个问题。他询问了工作年限。我说我12年毕业。虽然我12年毕业,但实际工作了五年,他停顿了一下,然后跟我说起用人的原因:据说他们公司花了很长时间开发了一个系统,就是总经理汇报五个部门的业务和会计实务组的。公司提交然后进行月末统计,但是问题就来了,因为要在月底提交,所以五家分公司总是在月初提交相关信息。结果系统老是死机,他们要招人解决问题。达娜,不过在说话的过程中,我看得出来我可能觉得自己很年轻,语气很是轻蔑。我当时有预感,我肯定不会被人要,但我稳定了下来,但心里也很不屑。我在2010年做了一个系统,它一直崩溃。你以前的技术经理吃过屎吗?但是,为了保持矜持(不要打我),我转移了话题,问了些别的。为了不引起怀疑,我说的比较间接。我询问了小组的情况。他说我们总部有150人。我说外面呢?他说差不多。支部有160人,所以是800人。在综合性公司,开发人员总不能上传报表吧?销售也是一样,他还说,只是管理和会计。让我们取一个中间值。网站,(我觉得差不多,其实如果网站规划的好,400并发和800??并发优化没有区别),一个网站400就崩溃了,我觉得好可怜,(为什么还是这样傲慢?),然后我又问我们用了多少台服务器?他说是一个。***他说你要多少工资?我说8k-10k,他立马站起来说:你走吧!有了这句话,我再也不想来这家公司面试了。分析我问的问题可能不全面,但是很有条理。我问了他们几个服务器,就是想问他们有没有做到图片服务器和数据库服务器的基本分离,结果被征服了。那么问题来了,原因可能有以下几种:1、上传的文件(或图片)过多。2、网页页面压力过大,文笔不够好。3、数据库压力太大。解决问题的第一个方法是上传的文件太多。这个问题是最难解决的,也是最容易解决的,因为解决的就是一个字的钱。你没看到像优酷土豆这样的网站花了多少钱吗!因为涉及到并发,比如一条高速公路是100M,那么我们就按照100M来计算你的并行度。并发,我能认为是100/5=20吗?也就是说,这个网站只能被20个人访问。如果太多,文件会丢失或网站崩溃。这种问题也是最难解决的。因为文件和图片永远是网站流量的最大杀手,没有什么好办法,只能把图片服务器分开。文件服务器是分开的(但这违背了只用一台服务器的原则),有的公司看着很大,但老板就是不太重视IT部门,没那么投入。第二种解决方法是网页页面压力过大,不够好。我想谈谈这个。看到很多程序员写的页面一直在和它打交道,因为我是做.net开发的,虽然.net的定位一直是中小型网站,但我觉得它开发不快,因为它只是中小型网站,能写成功没有bug。下面详细分析原因:IIS和Asp的内部运行机制。Net执行过程详解说:(我们按照iis5的运行机制来分析,对于文件请求,比如CSS、JS、Html文件或者图片等虚拟目录下包含的文件,IIS直接提取对应的文件,将它们作为HttpResponse返回给Client,如果这样的话,我们很多人就丢饭碗了。呵呵。但是对于这些动态执行的文件,需要进一步处理,IIS还必须进一步将Request传递给相应的处理程序,而处理程序执行后最终的HttpResponse通过IIS返回给Client,如果一个请求中包含动态和静态请求,那么动态内容生成HTML后,静态内容会合并返回给客户端,对于IIS来说,这些handlers由ISAPI扩展表示。ISAPIExtension收到请求页面的扩展后,会在IIS的Metadata数据库中维护一个名为ISAPIExtensionMapping的数据表查询,负责将不同类型的Resource映射到对应的ISAPIExtension。.ASPX对应的Mapping是ASP.NETISAPI,至此,ASP.NETISAPI会创建一个aspnet_wp.exe的工作进程(如果该进程不存在)。当本地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读取页面的机制和原因:第一种:对互联网请求进行分析和分类,分为静态页面请求和动态页面请求,所谓静态请求就是html静态页面,我们暂时把动态请求理解为aspx或者cshtml请求。第二种方法是分析动态页面请求,当动态请求分析变成静态请求时,组合起来一起返回给浏览器。所以我得出了两个结论:第一,如果访问量很大但是页面数据并不总是变化的,我们可以考虑把一些页面做成静态的。这也是现在一些热门网站的做法。其次,我们可以尽量减少动态请求分析的时间。第三种解决方案是数据库压力大。这些问题很多都是因为程序员本身的素质,或者结构没有建立好。我猜测原因可能是:第一,有些人喜欢将文件或图片转成二进制保存在数据库中,所以参考第一个导致崩溃的原因。第二种是有些程序员非常擅长数据库技术,所以他们把所有的业务和逻辑都封装成存储过程存储在数据库中。后台代码只有一个事务回滚甚至没有这个业务。如果在后台响应时间内没有收到响应,自然会报错。最后,我想说的是.net语言入门门槛低,容易掌握,导致很多程序员素质参差不齐。也有很多学了多年的程序员,连最基本的uml建模都没有,就坐上了项目经理的位置。我了解到,这对团队协作和发展产生了很大的影响,也给一些企业造成了无法弥补的损失。有的老板一直在催,赶快做完。这个项目能在三天内完成吗?他们只注重速度和金钱,而不注重质量。像我面试的公司,自研系统一直死机。一个网站或者一个公司,虽然一开始一定是中小型的,但是发展和生存都不能回避。这只是公司的内部系统。如果是线上项目,估计连服务器都要崩溃了!虽然工作了五年,因为我不是专业的,我也不擅长写作。希望大家多多指点。告诉我,这只是我人生面试过程中的一小部分。我只想说,不管我们是程序员还是人,都要对得起自己的技术,对得起自己的研究成果!只要问心无愧就可以了!