07年毕业一直都在软件公司,14年来到一个互联网公司,给我的感受,区别主要在于:

     软件公司需求相对稳定,能够按照计划按部就班的去实施,互联网公司需求相对来说不稳定,上线比较着急,大部分都是小迭代更新,且更新频繁,感觉有点乱。所以项目管理在软件公司比较好执行,一开始可能有点混乱,但是只要是走上一两个迭代,就可以稳定的往前走,在互联网公司应用比较困难。美其名曰敏捷开发,就是为了给自己找一个不稳定的借口。

     目前的公司是一家电商公司,在互联网如火如荼的双11也能体验一把,在增加订单量的同时,也给软件带来了更大的挑战,软件架构就像一个人的心脏,汽车的发动机,如果系统的架构出了问题,这笔债迟早是要还的,08年奥运会抢票系统,聚美优品等在高并发的情况下都出现过宕机的情况,后来都对架构进行了改进。

说到软件架构,可能每个人都有不同的理解,但大致上分为两类:

  • 组成派

软件系统的架构将系统描述为计算组件及组件之间的交互。

计算组件是泛指的,可以进一步细分为处理组件,数据组件,连接组件可以是子系统,框架,模块,类等不同粒度的软件单元

  • 协作派

软件架构包含了关于一下问题的重要决策,对关键问题进行决策。

软件架构并不仅仅注重软件本身的结构和行为,还组中其他特性,使用,功能性,性能,弹性,重用,可理解性,经济和技术的限制的权衡。

下面我将从以下几个方面来谈一下如何建立高性能的web系统:

一、web系统架构

web系统架构图:

二、web系统优化

1、 网站前端的优化

  • 建立web 集群

      反向代理服务器工作在HTTP层,类似代理服务器,与普通的代理服务器不同的是,服务器在代理的后端,而不是客户端在代理的后端,可以考虑使用 nginx做反向代理服务器实现 web 服务器的负载均衡。

 

  • Css放到head 之间,js放到页面的最下面。

      因为页面的加载是从上往下的顺序执行的,js文件在加载的时候会阻塞页面的执行,所以放到页面最下面可以先看到页面的内容,再去加载相应的js文件。

  • Css和js文件要合并和压缩。

     因为浏览器的连接数是有限的,如果css 和 js 文件过多会导致浏览器的延迟等待。

  • 使用独立的图片服务器和网站域名。

     可以提高网站的并发能力。

  • 网站的频道用独立的二级域名。
  • 多个小图标可以考虑放到一个大图片上,然后用css 定位取到相应的内容
  • CDN 内容分发

     对于像js,css,image, html  等静态内容可以做内容分发,可以把用户定位到最近的服务器上面。

  • 减小cookie 的大小

     因为页面每一个的回传都会把cookie文件提交过去,如果cookie 过大会浪费过多的网络资源。

  • 网站动静文件分离

     把静态文件放到一个独立的服务器上,可以考虑用nginx web服务器,nginx 静态文件的处理速度非常快,不是iis 所能比的。

  • 页面内容进行压缩

     页面内容要进行压缩,较少网络传输的压力,可以考虑用Gzip压缩。

  • 对页面进行缓存

     因内容而异,如果是不经常改变的内容,设置缓存的时间要长一些,从而减少服务器的压力。

  • 不要使用iframe 控件

     iframe 会阻碍页面的执行,最好不要使用,况且也不利于搜索引擎的收录。

  • 页面的html标签不要放到一个大标签里面

     因为一个标签在结束之前是不会呈现内容的,如果都把页面的内容都到一个表格中,只有到</table> 表格中的内容才会显示出来。

2、 后台的优化

  • 使用缓存

     建立多级别的缓存策略,可以考虑先单机缓存,然后再考虑分布式缓存。分布式缓存可以考虑使用 memcached 或者 redis,redis 提供了更多的存储类型,并支持数据写入磁盘的功能。

  • 网站考虑使用消息队列

     消息队列可以对系统进行解耦,并可提高系统的处理能力,减少数据库的压力。如果是微软路线可以考虑用MSMQ。

  • 业务处理层不要使用单例模式

     因为单例模式的话,会阻碍多线程和多核系统的处理,降低系统的吞吐量和处理能力。

  • Stringbulder 代替 string

     如果字符串内容多的话,考虑使用Stringbulder 增加字符串的处理能力。

3、 数据库的优化

  • 数据库读写分离

      这种方式是指利用数据库的复制或镜像功能,同时在多台数据库上保存相同的数据,并且将读操作和写操作分开,写操作集中在一台主数据库上,读操作集中在多台 从数据库上,对于读取比写更多的站点适合使用这种方式。

  • 使用分区表

     表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。提高数据库的查询性能。

  • 分库分表

     划分不同的业务模块放到不同的数据库上,如 订单库、会员库、商品库等。

  • 建立合适的索引

     在经常查询或分组的列上,建立相应的索引来提高查询性能。

 

posted @ 2015-02-08 19:53 ◢雨枫╬情人 阅读(2183) 评论(4) 推荐(0) 编辑
摘要: 今天在用vs 2013 调试程序的时候,vs 总是莫名其妙的关闭,停止运行,泪蹦了..... 是什么原因呢?以前的时候可是好好的啊,经过认真的思索,最近装过和vs 2013 相关的程序也只有 reflector 了,那就开始行动吧,找到reflector,卸载程序,然后重启vs 2013 ,在工具栏... 阅读全文
posted @ 2015-01-17 22:59 ◢雨枫╬情人 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 昨天参加了公司年会,本来是一件很好的事情,却有一种莫名的失落感,回来之后一直在思考一个问题,我们开年会的目的是什么,年会想达到的什么样的效果,如果不开会有什么影响? 个人感觉开年会的目的在于兄弟们能在一起聚一聚,奖标兵树榜样,吃好喝好玩好。因为具有临时性,独特性和渐进明细等特点,因此它也是一个项目,可以用项目管理的方法和工具去达到要实现的目标。其中干系人包括: 参会员工、剧务组和领导。项目成功的标志就是干系人满意,各干系人的利益不同,所以就需要在各干系人达到一定的平衡,从而实现共赢。 在项目交付的时候主要出现了以下几个问题: 1、宣贯和宣传片中战略定制项目组只字未提 ... 阅读全文
posted @ 2014-01-21 21:16 ◢雨枫╬情人 阅读(901) 评论(5) 推荐(1) 编辑
摘要: 在很多人眼里,北京是一个物欲横流的社会,生活节奏之快,让你一丝都不能停下来,走在路上伴随着人群急速往前涌,或许有些人都不知道要去哪、也不知道自己想要的是什么?在一个浮躁的社会里,多了一些浮躁的人,到处的寻找捷径,脚踏实地已经跑得无影无踪。 公司里项目一个接一个的上线,上线后一个接一个的出现问题,或许是我们该反思的时候了,在时间、质量、成本三者需要平衡的时候,我们总是会在时间和成本上做考虑,上线之前的演示只是一个纸老虎,其实离使用的程度差的很远,我们总会一开始把客户的欲望调得很高,但是种种的问题终究会在上线之后暴露出来,让客户产生一种落差,要想再逆转这种结局需要付出百倍的努力,每个人都是消防.. 阅读全文
posted @ 2013-07-21 15:43 ◢雨枫╬情人 阅读(1379) 评论(8) 推荐(1) 编辑
摘要: Ngnix 是一个高性能的 Web 服务器 和 反向代理服务器,也可以作为负载均衡服务器;功能如此强大,性能非常优秀,天生就是天之骄子,一经出世就走上神坛,开始了一段叱咤风云的不归路。 一直在微软的阵营里面混,时间久了难免有种被束缚的感觉,就像一个人被长期封闭在市区,时间长了免不了想到郊区透透气;以前都在用IIS 作为 Intenet服务器,正所谓近水楼台先得月,正如比较流行的 LAMP ,我们的组合拳就是 WIMA(Windows + IIS +MS SQL+ ASP.NET),当然IIS 比较强大,很多附属的功能都被添加进去,以至于性能大打折扣,而 Ngnix 呢? 比较轻量级,船小好调. 阅读全文
posted @ 2012-11-11 00:09 ◢雨枫╬情人 阅读(2126) 评论(4) 推荐(0) 编辑
摘要: 住房建设部的项目从今年2月份已经正式上线了,苦过累过但总算有了结果,就像自己的孩子即将走向社会,有担心但更多的却是喜悦,随着用户的不断增多,数据的安全性不断提升,基于此方面的原因,制定了数据库和应用程序自动备份方案,数据库采用的是维护计划,这里不做详细介绍,主要说一下应用程序的自动备份方案: 1. 下面是bat 文件的内容,下面的脚本将会自动创建一个文件夹(按照日期格式)@echo off::1.根据前一天的日期建立文件夹echo wscript.echo dateadd("d",-1,date) >%tmp%\tmp.vbs for /f "tokens= 阅读全文
posted @ 2012-06-12 21:48 ◢雨枫╬情人 阅读(795) 评论(1) 推荐(0) 编辑
摘要: 从开始接触敏捷开发到现在已经有一年的时间了,以下是我对敏捷开发的个人总结,主要内容包括瀑布模式开发和敏捷开发的区别,以及敏捷开发的整个过程。 一:瀑布模式和敏捷开发区别 1). 传统开发 2). 敏捷开发 敏捷宣言: 个体与交互胜过过程与工具 可以工作的软件胜过面面俱到的文档 客户协作胜过合同谈判 响应变化胜过遵循计划 以上可以看出,传统软件因为开发周期长,可能做出来的东西不是客户想要的东西。 而敏捷开发,可以在每一个迭代中做出修正,这样的话就会向目标逐步靠拢。 敏捷重价值交互,轻文档; 瀑布开发中文档。 敏捷拥抱变化,相应变化;瀑布规避变化。 当然敏捷开发也不是银弹,不可能解决所有的问题。. 阅读全文
posted @ 2012-04-04 19:56 ◢雨枫╬情人 阅读(1370) 评论(3) 推荐(2) 编辑
摘要: 夜深人静唯能听见心跳的声音朦胧中您走了过来一句话也没有看着您无助的眼神我的心好痛好想和您说句话可您总是不回答心里面好多的蚂蚁不禁眼睛一睁不能定格的画面再也找不到熟悉的身影没有挥手再见可是一生再也不见人生就像一本写好的剧本有的人闪亮登场有的人匆忙谢幕好多事情我们自己都做不了主一开始我不信我真的不信但是命运的咽喉从我的身边溜走犹如一颗流星特定的岁月里曾经陪伴过我们却再也不能相见的那些人我真的好想念你们 阅读全文
posted @ 2012-03-22 22:50 ◢雨枫╬情人 阅读(680) 评论(0) 推荐(2) 编辑
点击右上角即可分享
微信分享提示