第二天的演讲主要是围绕产品和软件架构等方面展开,有一些非常有价值的经验分享。
下面是第二天的几个演讲主题:
微社区概念,人间网是一个内在是论坛,外在表现形式类似微博的社区。
演讲主题的创新主要体现在产品的体验设计上。演讲嘉宾给我们分享了人间网几次UI 的变更以及背后的理念。
人间网采用左右双帧结构,左边是你关心的人的近况,右边以多tab 形式打开的主题。整个网站大量采用了ajax 技术,实时推送数据。
淘宝开放平台(TOP ) http://open.taobao.com/biz/index.php/%E5%B9%B3%E5%8F%B0%E4%BA%A7%E5%93%81
TOP 的主要职能:限流,授权,路由。
在设计平台基础组件架构的时候,要在安全、速度、和易用性上做综合评估。
当开放接口之后,api 的请求会比内部使用的时候大几个数量级,应用开发人员可能在开放的时候就调用接口做测试,所以架构设计的时候一定要考虑到这一点。
作为一个基础服务,TOP 的速度一定要快,为了提升速度可以采用一些优化的手段,比如当处理大数据量输入的请求时,要求客户端把验证信息写在http 头。服务端先验证http 信息,如果异常则直接返回错误。这样就不用处理body 里面的内容;当处理耗时间请求时,服务端可以先返回一个token ,客户端可以过后凭此token 再来请求结果;当返回大数据量的时候,也可以通过token 转发的形式,把传输数据的任务分派到资源服务器。总而言之,TOP 在处理请求的时候尽可能只处理核心的逻辑(限流,授权,路由),而把业务逻辑分给业务后端。
ppt 在此: http://www.blogjava.net/cenwenchu/archive/2010/12/13/340544.html
点评:
TOP 作为一个走在业界前沿的开放平台,在系统架构上积累了不少可贵的经验,对于开发大规模高性能要求的系统有很大的借鉴意义。
LBS: Location-Based Service ,基于地理位置的服务。
移动终端开发时候遇到的一些问题:
1、 终端类型繁多,iphone 、ipad 、android (各厂商)、nokia s60 等等,兼容困难。
2、 国家对于电子地图的牌照的发放。
3、 国家由于安全因素认为对地图造偏移量。
点评:
比起desktop pc ,大众点评是一个更加适合移动终端的应用。移动终端的普及为大众点评网带来了巨大的价值、
创新的经验:
1、 做用户根本需求的满足
2、 创新约等于失败
3、 持续模式
4、 产品创新与用户基础并重
5、 目标定义清晰
6、 尊重创新(反对抄袭)
数据可视化,英文是Data Visualization ,可以这样理解,通过图形化的方式将海量数据的复杂关系以及价值展现出来。
原始数据 → 表格 → 图表 → 数据可视化,每一步都加入了数据提供者对数据背后逻辑的理解和提炼。原始数据是不含任何主观因素的,表格是对原始数据做了归并和排序,但是缺少直观的表现形式,图表则通过对象之间形状的对比,感性的表现出了数据变化的情况。和图表相比,数据可视化的表现形式更加多样,不仅仅是柱状图,饼状图,可以是任意的形状和颜色的搭配,比如树杈,水滴等等。
数据可视化比起图表来说,更加体现了设计者的主观想法,要求设计者对于数据业务的逻辑更加清晰。使用者看到图形就能知道某个业务目前的情况。
ppt 在此: http://www.tbdata.org/archives/1239
演讲实录在此: http://news.csdn.net/a/20101210/283432.html
点评:
数据可视化实际上有是“态度”的,提供了对使用者的建议。而这方面正是我们目前数据展示所欠缺的。
异步编程模型的应用范围:分布式计算、UI 编程、任何需要消耗大量时间的环境。
传统编程模型在处理一个耗时动作的时候,会等待处理完毕才返回,浪费了时间。而异步编程模型则是实时返回,由“耗时动作”执行完之后自己再找回调用者。
但是异步编程由于调用逻辑比较复杂,所以导致不能“顺序”的编写代码,带来了很多不便之处。所以在语言或者框架范围提供一个解决方案会给开发人员提供很大的方便。
ppt 在此: http://www.slideshare.net/jeffz/async-evolutionfull?from=ss_embed
点评:
网页端的javascript 是典型的异步编程模型,演讲嘉宾提供的思路对于优化javascript 编程模型非常有帮助。其实后台查询数据库等、操纵文件操作也是相当耗时的操作,目前已经有针对后台io 的异步编程框架了,能够有效的把串行等待时间充分利用起来。
所谓领域专用语言(domain specific language / DSL ),其基本思想是“求专不求全”,不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言。
因为“不通用”,所以领域语言可以设计的只针对目标领域的行为和场景,非常类似自然语言。比起通用语言(java 、c )来,领域语言由于封装了实现,所以更加适合人类阅读和组织,在编写事也不会产生低级错误。
DSL 的生成方法有:
1、 自己写parser
2、 使用通用语言的扩展,比如scala 、ruby 、javascript 都有扩展机制
3、 使用代码生成工具
点评:
DSL 相当于对业务的提炼,当业务需求非常多变的时候,使用DSL 能够有效的防止疏忽所导致的错误。同时也使得业务逻辑够浮于表面,甚至业务专家也能自己编写。
REST 是一种分布式架构风格。web 是rest 的一个应用。它的主要特征基于以下3 个方面:
1、 uri 标示了一个资源
2、 http 提供了修改资源的方式
3、 html 、xml 、json 等 是资源描述的载体
通过以上3 个前置,我们就可以在分布式的环境下获取或者修改某个资源而不依赖于对方具体实现。
http 的方法:
get (获取):安全的、幂等的
delete (删除)、put (修改): 不安全、幂等的
post (增加):不安全,不幂等
所谓“幂等”,就是这个操作执行多次的结果不变。比如重复删除某个资源的结果和执行一次删除某个资源的结果是一样的。
目前我们对http 的误用,使用post 方法代替delete 和put 执行删除和修改操作。post 和put 的区别打个比方就是,post 是把a 加10 而put 是把a 加到10 。所以我们一般执行的修改操作实际上都应该用put 而不是post 。
点评:
我们在web 开发的过程中,其实对于http 的使用一直是存在误区的。在开发过程中多了解一些规范,多吸取专家的经验能够使我们的思路更加宽广,做的系统更加健壮。