上周没写东西,这周写点互联网系统开发中需要了解的技术点,每个点都可以发散出去,连接更多的知识点,打算做个逐步细化的记录。

一个应用的整个生命周期中(生,老,病,死)都需要有一个整体规划.

前期

评估需求,根据需求提炼出其中隐含的非功能性要求,做为容量评估的参考。一般就是大致估算一下,技术发展到现在,如果是聊天或游戏应用,随便一个服务器单机能能维持100W-160W左右的tcp长连接并进行通讯。所以普通的创业起步阶段的应用一般不必太担心设计问题,可以等业务量慢慢上来慢慢调整系统架构。

互联网上许多数不清的小系统上线就是在碰运气,在精益创业的指导下,为了测试业务模式,先弄个原型系统上了再说。有时没用户,用户多了又顶不住,要找一群外援专家来救火,也算是幸福的烦恼。有些移动应用作者自己也不知道为什么突然就火了,然后又快速消失在市场中。

前端系统设计模式

以http请求到达服务器的整个处理过程来说明。从服务器接收到http请求,在整个反应链路上直到打到最终数据库上,每个可能的瓶颈点上都有相应地技术来支撑性能上的优化。

负载均衡

如一个业务系统用户有五百万,需要根据活跃用户在业务的高峰时期估算最大http请求数量,根据请求量设计前端反向代理,负载均衡策略;这块要考虑常见(软/硬负载方式)反向代理设施的差异性(nginx,lvs,f5,haproxy)

Nginx

Nginx:HTTP层负载均衡,反向代理,跑遍全球的选择。由于工作在七层上,所以可以支持对http url级别的转发。随便在网上偶遇个bug可能都是曝出一个enginx bad gateway的错。

LVS

lvs:tcp/udp层负载均衡,由于工作在四层,面对的都是连接,处理的都是dst ip,port;src ip,port的东西。

常用的转发模式有DR(修改目标地址MAC),流量经过lvs,但ip包的返回不经过lvs,性能较好,lvs不会成为瓶颈。

NAT:网络包的进出都要经过lvs,对lvs的负载会比DR模式高。

为了除单点,lvs的高可用需要用keepalived做双机主备。

F5

硬件产品,价格昂贵,价格很容易上百万,有问题找厂家,其实这样有时找线上找问题反而受到制约。

http缓存

均衡器之后就是这里,这层级的缓存是为了减少应用服务器上大量静态小文件(css,js,jpg)的读取压力。可选的有varnish,squid等。

Squid:老牌产品,支持正向/反向代理缓存,作为可持久化缓存,可以支持较大的容量,有自有的内存页/磁盘页管理,有些cdn产品也是基于此产品改造。

Varnish:设计为内存缓存,内存管理由操作系统控制,对于无持久化需求的静态文件性能不错,如图片。

ngnix:扩展功能不错,也有个缓存模块,不过通常都是缓存自身的一些page。

Apache Traffic Server: Apache出品,也可作为一个不错的选择。

应用服务器

反向代理之后的应用服务器数量(tomcat,jetty)要考量应用服务器本身的处理能力,如常规tomcat基准数据是1000qps,这个只是tomcat在开nio情况下平均的水平。

其处理性能还受到应用程序内处理逻辑,如缓存的应用,服务化应用在应用间rpc的消耗的时间。

最后打在数据库上数据库上之前还有大把的活需要做,减少数据库的负担。
又十点多了,下次再继续吧。


文章来自微信平台「麦芽面包」。转载请注明。

web系统架构设计中需要知道的点(前端篇)的更多相关文章

  1. 【大型web架构】一个大型web系统架构设计和技术选型的讨论摘录

    1.数据库压力问题 所有的压力最终都会反映到数据库方面,一定要对数据库有一个整体的规划. 可以按照业务.区域等等特性对数据库进行配置,可以考虑分库.使用rac.分区.分表等等策略,确保数据库能正常的进 ...

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

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

  3. 浅谈大型web系统架构

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

  4. Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!)

    Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔)  Louis Rosenfeld(路易斯·罗森菲尔德) ...

  5. PetShop的系统架构设计

    <解剖PetShop>系列 一.PetShop的系统架构设计 http://www.cnblogs.com/wayfarer/archive/2007/03/23/375382.html ...

  6. petshop4.0 具体解释之中的一个(系统架构设计)

    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...

  7. NET ERP系统架构设计

    解析大型.NET ERP系统架构设计 Framework+ Application 设计模式 我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应 ...

  8. 基于Struts2,Spring4,Hibernate4框架的系统架构设计与示例系统实现

    笔者在大学中迷迷糊糊地度过了四年的光景,心中有那么一点目标,但总感觉找不到发力的方向. 在四年间,尝试写过代码结构糟糕,没有意义的课程设计,尝试捣鼓过Android开发,尝试探索过软件工程在实际开发中 ...

  9. 关于Django Web应用架构设计开发的几个问题

    1.关于分层,做过传统JEE应用的同学肯定知道JEE应用会分很多个设计层.根据传统Web应用架构设计一般从上到下分这么几个层(太懒了,不画图了):Web前端层.Web后端交互层.业务层.基础数据设施层 ...

随机推荐

  1. 前端js 判断输入的必须是数字,判断金钱

    //输入的必须是数字 $(".xzjl").on("keyup", ".num", function () { var v = $(this ...

  2. XAMARIN +VS2015 ANDROID 开发禁止屏幕自动转动 Portrait,Nosensor

    网上有很多java的写法,但是放在C#中都无法使用,其实有时候还是安下心来认真的去看官网文档比在百度或者google来的快的多 this.RequestedOrientation = Android. ...

  3. 使用内存虚拟硬盘 提高ArcGIS server并发性能的一种方法

    1 问题提出 1.1 概述 提高ArcGIS server并发性能的方法很多,本文讨论在用户硬件足够强大的情况下(主要是内存足够大),使用内存模拟硬盘来提高数据的读取效率,以达到提高ArcGIS se ...

  4. 2.Nginx优化

    [教程主题]:Nginx优化 [课程录制]: 创E [主要内容] Nginx 优化 nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine ...

  5. 闲来无事——第一弹 Java基础 基本数据类型

    一个优秀的Java类一定要去优质的名称,类的命名主要有字母和数字,并且必须以字母开头:虽然说没有明确规定类名首字母要大写,但是实际上如果出现首字母小写的类名,那就呵呵了,坐等挨骂吧!类名首字母大写是业 ...

  6. IE事件模型,如何给IE和非IE浏览器添加事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  7. 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录

    第一次接触gtk+.在网上搜罗良一番,装好相应的库后,编写了第一hello程序.在编译时输入以下命令:gcc -o hello hello.c 'pkg-config --cflags --libs ...

  8. rsync+inotify实现远程数据备份

    一.rsync的基本介绍 1.  什么是rsync Rsync是一款开源的.快速的.多功能的.可以实现增量的本地货远程数据镜像同步备份的优秀工具,Rsync使用与unix,linux,windows等 ...

  9. ArcGIS Engine10.2如何安装在 VisualStudio2013 开发环境下

    所谓工欲善其事必先利其器,10.2中的ArcObject SDK for Microsoft .Net Framework只能支持VS2010和VS2012环境. 那么如何在VS2013下安装呢? 准 ...

  10. 如何解决WebService参数传递中文乱码问题

    1,问题由来 我的主要工作是负责统一适配平台这块,主要任务是提供给客户统一的调用接口,客户使用这个接口可以通过我们再调不同厂家的接口.主要流程如下: 现在客户那边传来的请求报文里面包含中文,使用web ...