07年毕业一直都在软件公司,14年来到一个互联网公司,给个人感觉,区别主要在于:css
软件公司需求相对稳定,可以按照计划循序渐进的去实施,互联网公司需求相对来讲不稳定,上线比较着急,大部分都是小迭代更新,且更新频繁,感受有点乱。因此项目管理在软件公司比较好执行,一开始可能有点混乱,可是只要是走上一两个迭代,就能够稳定的往前走,在互联网公司应用比较困难。美其名曰敏捷开发,就是为了给本身找一个不稳定的借口。html
目前的公司是一家电商公司,在互联网如火如荼的双11也能体验一把,在增长订单量的同时,也给软件带来了更大的挑战,软件架构就像一我的的心脏,汽车的发动机,若是系统的架构出了问题,这笔债早晚是要还的,08年奥运会抢票系统,聚美优品等在高并发的状况下都出现过宕机的状况,后来都对架构进行了改进。前端
说到软件架构,可能每一个人都有不一样的理解,但大体上分为两类:web
软件系统的架构将系统描述为计算组件及组件之间的交互。redis
计算组件是泛指的,能够进一步细分为处理组件,数据组件,链接组件能够是子系统,框架,模块,类等不一样粒度的软件单元数据库
软件架构包含了关于一下问题的重要决策,对关键问题进行决策。后端
软件架构并不只仅注重软件自己的结构和行为,还组中其余特性,使用,功能性,性能,弹性,重用,可理解性,经济和技术的限制的权衡。浏览器
下面我将从如下几个方面来谈一下如何创建高性能的web系统:缓存
1、web系统架构服务器
web系统架构图:
2、web系统优化
一、 网站前端的优化
反向代理服务器工做在HTTP层,相似代理服务器,与普通的代理服务器不一样的是,服务器在代理的后端,而不是客户端在代理的后端,能够考虑使用 eginx作反向代理服务器实现 web 服务器的负载均衡。
由于页面的加载是从上往下的顺序执行的,js文件在加载的时候会阻塞页面的执行,因此放到页面最下面能够先看到页面的内容,再去加载相应的js文件。
由于浏览器的链接数是有限的,若是css 和 js 文件过多会致使浏览器的延迟等待。
能够提升网站的并发能力。
对于像js,css,image, html 等静态内容能够作内容分发,能够把用户定位到最近的服务器上面。
由于页面每个的回传都会把cookie文件提交过去,若是cookie 过大会浪费过多的网络资源。
把静态文件放到一个独立的服务器上,能够考虑用eginx web服务器,eginx 静态文件的处理速度很是快,不是iis 所能比的。
页面内容要进行压缩,较少网络传输的压力,能够考虑用Gzip压缩。
因内容而异,若是是不常常改变的内容,设置缓存的时间要长一些,从而减小服务器的压力。
iframe 会阻碍页面的执行,最好不要使用,何况也不利于搜索引擎的收录。
由于一个标签在结束以前是不会呈现内容的,若是都把页面的内容都到一个表格中,只有到</table> 表格中的内容才会显示出来。
二、 后台的优化
创建多级别的缓存策略,能够考虑先单机缓存,而后再考虑分布式缓存。分布式缓存能够考虑使用 memcached 或者 redis,redis 提供了更多的存储类型,并支持数据写入磁盘的功能。
消息队列能够对系统进行解耦,并可提升系统的处理能力,减小数据库的压力。若是是微软路线能够考虑用MSMQ。
由于单例模式的话,会阻碍多线程和多核系统的处理,下降系统的吞吐量和处理能力。
若是字符串内容多的话,考虑使用Stringbulder 增长字符串的处理能力。
三、 数据库的优化
这种方式是指利用数据库的复制或镜像功能,同时在多台数据库上保存相同的数据,而且将读操做和写操做分开,写操做集中在一台主数据库上,读操做集中在多台 从数据库上,对于读取比写更多的站点适合使用这种方式。
表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。提升数据库的查询性能。
划分不一样的业务模块放到不一样的数据库上,如 订单库、会员库、商品库等。
在常常查询或分组的列上,创建相应的索引来提升查询性能。