从开始进入软件行业,到走到今天,也见识过很多项目,就简单对于系统架构中服务层的设计做个总结吧
阅读全文…
月度存档: 三月 2013
系统设计 — SOA架构
面向对象之 — 封装
概述
面对对象的设计和编码中,经常碰到的一个问题,怎么算是面向对象,这个很虚,也很难去描述,也是自己早年很困惑的东西,虽然看了很多的书,但是很难有一个整体层面的理论去概述,一直很想将这种概念进行落地。
这次就个人经验来来做个总结吧,大致上分为三个层面来进行面向对象的落地。
阅读全文…
cat命令把玩
工作上对于cat的使用,最多的还是当做查看文件或是日记的命令,例如cat app.log,其实这个并不是cat自身最核心的功能,cat本身的含义就是拼接,不过是被误用为查看比较多,那就先看看它的第一个功能吧。
拼接
生成两个文件
阅读全文…
前端优化原则
内容主要来之雅虎的前端优化原则:http://developer.yahoo.com/performance/rules.html
对于部分内容做了解释,感觉其中的部分原则是相同的,遵循了一种一条,自然就遵循了另一条,例如第一条和第二十条,同时还有一些原则是单纯的优化而优化,大可从整体设计风格和设计原则上考虑,例如第15条。
阅读全文…
系统设计 — 缓存
现在的软件系统设计中,基本上已经很难脱离缓存的去考虑问题,或者已经不能脱离缓存,在不同的层面有不同的缓存,我们现在使用的互联网的一些基础设施也都在使用缓存,那么就先看看缓存的优缺点吧。
优点:
1.提高系统的响应速度,就数据放在离用户最近的地方,让请求直接从缓存中获取数据,而不是每次都需要到服务器进行加载。
2.减少网络带宽压力,在存在大量并发请求的情况下,很多时候网络带宽会成为瓶颈,而从缓存中获取数据能够降低服务端的带宽压力
3.减少服务端的负载压力,一般服务的资源包含CPU,内存,连接数,磁盘等等(网络归属到外部资源中),这些资源是非常有限的,对于一些请求能够通过缓存很好的处理掉,那么就能腾出更多的资源去处理其他更重要的业务
4.在网络失效的情况下,亦能提供一个静态的服务
缓存和无状态约束
WEB的关键架构原则之一就是服务器和服务不应维护应用的状态。这个约束有助于分布式应用的容错和横向扩展。但是缺点也很明显,由于应用的状态不会持久保存在服务商,那么每次请求都需要和服务器交换应用的状态。这个就会增加消息的大小和带宽的消耗(在上章也提到了),缓存也就能很好的解决这个问题,将会话信息保留在离客户端最近的地方。
阅读全文…
系统设计 — 会话状态的处理
对于状态要从两个角度来考虑,一个是对象状态,对象包含了状态(数据)和行为,一个没有状态的对象是不合理的,是种不良设计。
另一种是分布式服务器无状态:指的是在多次请求间不保存对象的状态,但是对象自身是有状态的。服务器端的无状态保证了每次请求不关心是哪个对象来处理,若是需要保存状态,就需要找同一个对象来处理。无状态可以使得我们缓存这些对象,用很少的对象就能处理很多用户。同时在高流量的情况,我们的服务端一般对应的是一个集群,无状态对于集群的横向扩展基本是0代价。无需考虑服务的状态。
阅读全文…
系统设计 — 并发控制
并发应该是软件开发中最难处理的问题之一。因为在多进程或是多线程操作一个数据时候,为了保证数据的一致性就必然碰到并发。这个数据可能存在于内存中,也可能存在一个持久化设备中,更复杂的情况是存在于多个数据源中。例如一个订单请求,库存存在于一个数据源中,在库存安全的情况下,去检测用户的金额是否足够,这个是存在于另一个数据源中,在完成两者的检查都满足条件下,去建立一个订单,但是可能在你检查金额的过程中,另一个用户成功下单,并修改了库存信息,而在你检查完金额后,实际库存已经不满足你的下单条件了,但是你还是下单成功了,如此就是并发导致的问题。术语上称之为离线并发。
阅读全文…