随着互联网的普及,浏览器已经成为当之无愧的信息展示方式,主要是基于不需要安装客户端软件,对于用户的接入门槛很低,同时丰富的UI展现方式和标准化的解析方式构成了它现在这种局面的原因。
浏览器通过URI调用WEB服务器,WEB服务器解释请求方的URI并调用服务端程序来处理这些请求。对于如何解析请求,看往过去我们发现有这么几种方式。
最早期开用的是一些服务端的小程序,例如java中的servlet或是CGI脚本,这个可以统称为服务端脚本方式。这些脚本能够很好的解析请求中的参数,并选择合适的子程序,组后通过流的方式将结果输出到浏览器。但是它的缺点很明显,将页面展示的渲染也放在脚本中(servlet)中,这个对于程序员来说是非常痛苦的,同时像java这种解释执行的语言,若是简单修改可一个页面,都需要重新编译,发布。
阅读全文…
月度存档: 二月 2013
系统设计 — 表现层
系统设计 — 数据源层构建
抽取出数据源层的作用是能够将领域层需要的不同的基础设施通信的细节进行屏蔽。
现在最成功的持久化方式就是关系数据库,它成功的原因在于SQL,一个标准化的数据通信语言,尽管不同的厂商有细节上的改进,但是总体还是相同的。
阅读全文…
系统设计 — 领域层的组织
目前的领域逻辑的组织可以分为三种:
一 事务脚本:
这个是我们最为常见的构建方式,简单的说:从表示层接受到参数,进行校验,计算,在将数据存储到合适的数据源层。然后再给表示层一个合适的返回,基本上是一个过程对应一个用户的可能的一个动作,在多个行为之间可以抽取出子例程在不同事物脚本之间共享!
优点:
阅读全文…
系统设计 — 分层
大概可以认为现在所有的软件架构设计都遵循了分层的思想,在互联网的基础建设中也是按照这个思路,HTTP(应用层)是构建于TCP之上,TCP(传输层)是构建于IP之上,IP(网络层)层是架构在以太网(链路层)之上。
上层使用了下层提供的服务,下层对于上层一无所知。每一层都对自己的上层隐藏细节。
阅读全文…
系统设计 — 性能的考量点
一般我们考量一个系统的性能如何,主要有以下这么几点:
1.响应时间:系统完成一次外部请求所需的时间
2.响应性:系统响应请求的速度有多快,这点有点偏用户体验方面,若是请求处理期间,系统一直处在等待状态,那么系统的响应性和响应时间是相等,但若是系统在接受到请求后,给用户一个提示表明自己已经接受到请求了,或是给出一个响应的进度条,那么响应性相比较之前要好些。
3.等待时间:获得系统任何响应的最小时间,例如返回一个201已经建立链接等,这个也是在做系统间服务调用时,尽量的减少远程调用
4.吞吐量:给定时间内能处理多大的请求量,一般吞吐量上升,那么响应时间都会随之下降,具体在设计时候寻找的是一个平衡。从用户角度而言,响应性比响应时间更重要,所以为了提供响应性,牺牲一些响应时间或者吞吐量是值得的。
5.负载:系统当前负荷的表述,也就是当前有多少个用户和系统相连,一般伴随着其他性能同时出现,例如在10个用户的情况下响应时间是1秒,在20用户的情况下响应时间是2秒。
6.负载敏感度:也理解为系统的衰竭指数,两个系统A,B,在10个用户情况下,A是1秒,B是2秒,但是20个用户情况下,A是10秒,B是5秒,那么A系统的敏感度比较高,也就是系统衰竭的比较快。
7.效率:性能除以资源,在一个双CPU系统的性能是20tps,一个四核系统的性能是30tps,那么就代表前者效率更高
8.容量:最大负载或是吞吐量的指标,可以是一个绝对大的值,或是性能衰竭至低于一个可接受的阀值之前的临界点。
9.可伸缩性:向系统增加资源对系统性能的影响,一般添加资源后,系统性能是有所提升的。伸缩分为两方面,垂直可伸缩性,通常指提高单个服务器的性能,加内存、CPU等操作。还有水平可伸缩性,就是添加服务器数目,我们更多讨论的是水平可伸缩性。
阅读全文…
程序员进阶书单
今天一个刚毕业的同事要求推荐书单,就列了列自己看过的和目前还在看的书,前面的数字代表看的优先顺序或是进阶顺序:
阅读全文…
关于字符集、编码字符、字符编码方式的一些概念
1.基本概念
字符集:
字符的集合,带有特殊语义的符号,是人类的沟通方式的书面化,例如以前的甲骨文,后来的汉字。
阅读全文…
共享一些自己常去看的博客
并行编程 :http://www.parallellabs.com/
阅读全文…
shell命令行中的几个快捷键
[Ctrl + w] 向后删除一个字,若是英文的话就是一个单词,以空格为界限,用来对付刚刚输入的错误字很有用
阅读全文…
java字节码的简单介绍
SunJDK对执行频率高的代码进行编译,而对执行频率不高的代码仍然进行解释执行 。clint complier(-clint)和server complier(-server)。
阅读全文…