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、 数据库的优化

  • 数据库读写分离

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

  • 使用分区表

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

  • 分库分表

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

  • 建立合适的索引

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

转载于:https://www.cnblogs.com/lmhwolf/p/4279615.html

高性能web系统的架构和系统优化相关推荐

  1. 从0开始搭建坚不可摧的Web系统主流架构

    从0开始搭建坚不可摧的Web系统主流架构 转自:http://mp.weixin.qq.com/s/HKqgdR0qM3FhdGWcWnlpug 主题简介: 1.网站系统架构当前现状 2.Web系统主 ...

  2. 软件架构设计学习总结(1):标准Web系统的架构分层

    1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层的技术都需要使用.例如:一 ...

  3. 架构系列之标准Web系统的架构分层

    1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层的技术都需要使用.例如:一 ...

  4. 设计高性能大并发WEB系统架构注意点

    设计高性能大并发WEB系统架构注意点 第01:大型架构的演进之路 第02(上):分布式缓存 第02(下):分布式缓存 第03:分布式消息队列 第04:分布式数据存储 第05:分布式服务框架 第06:高 ...

  5. 基于linuxunix高性能web服务器架构思路分析

    随着21世纪互联网的快速发展以及web2.0的诞生,最初web服务器已经不能满足我们的需求.而现在我们要考虑的不再仅仅是web服务器以及数据库服务器这么简单,我们所需要考虑的就是设计出一套高性能web ...

  6. 关于大型asp.net 应用系统的架构 —— 如何做到高性能高可伸缩性[转]

    简介 前面一篇<<关于大型asp.net应用系统的架构-架构的选择>>写完之后,有一些同仁热心回复,有的是提问题,同时希望能举一些例子来说明:有的是提建议,希望下一篇写得更详细 ...

  7. 关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性

    http://www.cnblogs.com/mikelij/archive/2010/11/30/1892261.html 关于大型asp.net应用系统的架构-如何做到高性能高可伸缩性 简介 前面 ...

  8. 浅谈大型web系统架构

    动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...

  9. 详细分析大型web系统各个子系统架构图 纯干货!

    转载:波波说运维 2018-10-06 00:04:02 概述 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网 ...

最新文章

  1. MSSQL数据库统计所有表的记录数
  2. 图神经网络GNN预训练技术进展概述
  3. PowerShell攻防进阶篇:nishang工具用法详解
  4. TX Text Control X10新特性之图像占位符合并
  5. Logstash+Kibana+多ElasticSearch集群部署
  6. mysql做wp网站_mysql做wp网站
  7. 报表开发者必看:别加班了,快用这个工具让领导看到你的工作成果
  8. C# winform项目开发规范
  9. vue 引入液晶数字字体
  10. 钢铁行业超低排放的前生今世
  11. html 显示ai 矢量图,PS图层文件转变为AI矢量图
  12. matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题
  13. matlab output()函数,MATLAB - Data Output
  14. 物联网的主要特征是什么,目前的主要应用哪些?
  15. oracle 的编码,Oracle 编码格式
  16. vue 视频上传组件
  17. 收藏这几个软件,让你轻松从视频里提取音频
  18. 高斯约当法求逆矩阵的算法实现(C++)
  19. 市场调研你所不知道的几个关键点
  20. 《那年那兔那些事》观后感

热门文章

  1. PHP、Smarty与jQuery Ajax 分页插件jquery.pager.js的使用
  2. 计算机类中文核心期刊影响因子(2006年)
  3. 性能测试之JMeter测试结果写入Excel
  4. wxpython菜单的位置_wxpython教程:[5]次级菜单
  5. java接收参数_javaWeb收传参数方式总结
  6. linux创建管道的函数,Linux下的有名管道(03)---使用函数创建和删除有名管道
  7. 好用的shell_Linux系统安全 | Linux中的Shell和Bash
  8. 服务器 自检 修改,检查多台服务器初始密码是否修改的shell脚本
  9. mysql没有实体框架_NET实体框架数据库更新未在MySQL数据库中创...
  10. delphi与java_Delphi XE8中Delphi和JAVA数据类型对应关系!