学生时代写的博客,被我恢复了出来了这篇文章应该大二写的,也就是2008年
1. JS 不能处理double类型的数据
这是一个相当蛋疼的问题,原因是 Javascript 里所有的数字都是使用浮点数(double)来表示的,我们知道浮点数在计算机系统中使用 “尾数(Mantissa)+指数(Exponent)” 来表示的,例如 1.2345 用浮点数的表示方式为 12345 * 10^(-4),也就是 11000000111001(12345) 11111100(-4),具体可以参见这里:https://en.wikipedia.org/wiki/Floating_point,由于Javascript中的尾数只有53位,自然不能使用全部64位来表示数字了,丢失的部分将全部填零处理,如 793548328091516928 将变为 793548328091516900
2. Netty在
Netty4的Unpooled.copiedBuffer竟然不是线程安全的,在高并发情况下会污染原来的数据,其代码如下:
public static ByteBuf copiedBuffer(ByteBuffer buffer) { int length = buffer.remaining(); if (length == 0) { return EMPTY_BUFFER; } byte[] copy = new byte[length]; int position = buffer.position(); try { buffer.get(copy); } finally { buffer.position(position); } return wrappedBuffer(copy).order(buffer.order()); }显然如果两个线程都在做复制的话,原来buffer中的position很可能就是脏数据。我在Netty上开了一个issue:https://github.com/netty/netty/issues/3896
本次QCon在北京国际会议中心举行,时间为4.23~4.25。中间件这边是我跟千臂一同参加的,他的感想在这里,全部的PPT在这里
本次大会与以前一样还是分会展与主题演讲两部分。人非常多,特别是阿里云相关的专场,很多场人已经挤到了门外,完全是人满为患。
本次第一次看到了穿戴式设备服务商展出,叫“出门问问”,其作用类似于Siri,感觉上还是有些山寨的味道,相信以后有会更多的厂商加入。我觉得如果说两年前在鼓吹移动互联网,那么现在就穿戴式设备与智能硬件了。观察一下就可以发现:LG、MOTO、微软、华为、苹果等都推出了自己的智能硬件产品。为什么?因为传统的硬件思维已经跟不上世界的变化了,我们需要机器来适应我们,需要机器来理解我们,而软件就是为这些机器注入灵魂的源泉。我预计,以后会出现更多的智能设备(智能插座,智能汽车等)。
本次会展还是跟以前以样,有很多通用云计算平台,如“青云”,AWS,京东企业云,不过连“美团”竟然加入了云产品行列着实让我惊奇了一把。通用云计算基本上没有什么新东西,都是对资源的虚拟化,虚拟化网络、CPU、内存等等,各个厂商差异化不明显,很难形成竞争力。相对我,我看到了一些垂直化的云计算平台,如“环信”做即时通讯云的与“CODING云IDE”做开发工具云,它们两个都是利用云计算来解决特点领域的问题,后者是我非常感兴趣也是早就觉得应该有的东西,想想现在的开发者经常为各环境配置而伤透了脑筋,现在的软件对后端的性能要求也很高,不过当前功能实在是太弱(coding.net大家可以云试试),如果能把这些东西都很好的搬上云,那将可以极大节省资源开销与人力维护成本,我觉得我们在内部完全可以自己搞一个,一来利于团队维护环境代码配置,二来可以避免一些商业上的纠分。
本届QCon竟然还有老外在鼓吹敏捷开发,这非常令我失望,相比于阿里云专场的火爆,这个可以算是门可罗雀。以打我开发学习计算机以来,就有人试图以传统工程的思想来规范、统一软件开发,产出了OOSP、RUP、UML、sysML
、及敏捷之类的东西,它们岂图以一种套路来约束软开发,实现诸如流水线一样的效果,按部就班地工作。实质上无论是哪种,最终都没有成功,更别说普及。这其中是有一定道理的,在我看来,现代软件开发对响应与灵活性要求越来越高,很多系统都只一1~2个人在维护(包括很多在型系统),根本不存在传统工程学中的协作问题,而且与传统工程学中的开发者不同的是,软件开发者通常都极具有个性,并且会参与整个开发的大部分环节,并不像传统工程学那样设计建造分工明确。因此希望以一种没有实体的规则来约束开发者是肯定不会成功。我们不是说以小作坊的模式工作就好,我们需要做的是创造出有实际作用软件或具体来提升整体的效率而不是分大力气要求if后必须加个花括号或者开发前必须进行需求评审或者测试用例评审等。一切都应该从实现的需求,没有什么过程是必须遵守的。
全栈是最近开始流行的一种开发模式,指的是开发者能够从上至少处理各个环节的工作,可谓是前端、后端与运维的三合一。其核心思想就是将原来的水平开发转成了垂直的微服务开发。当然全栈不是把开发者当成全能来使用,而是统过整合前后端开发,简化运维发布,来统一整体开发过程,降低成本。其实这个趋势我是比较赞同的,因为现在的人力成本越来越高,对响应速度要求越来越高,而软开发过程中人与人的沟通成本是最大的,所以逐步降低人力成本一个趋势。
毫无疑问,docker是本届大会的热点之一,京东、腾讯、阿里及其它一些公司都分享了自己的实践经验。特别的是京东的Docker在Image分发时遇到了传输瓶颈,他们自己做了套系统对image进行切片传输,但这种模式仍集中推送的模式,其解决的问题正是我们现正在做的燎原应用场景之一,因此我觉得大数据的分发传输将是未来需要面对的一个问题。Docker之所以开始流行,我认为是其抹平了系统配置与部署之间的沟壑,正像Java抹平了硬件与Maven抹平了代码依赖一样,他们都使得开发人员能更专注于创造,减少不必要的重复操作。
安全这块在云时代日益彰显,主要分成漏洞预防与攻击防范两块。漏洞预防就是在攻击发生之前提前找出应用的bug,腾讯在内部建立了自己的类似于乌云的漏洞汇报平台,并且形成了一种奖赏机,鼓励开发人家参与安全,统一开发与安全战线,这点很值得我们借鉴。在攻击防范方面腾讯在所有的接入设备上都植入了监控agent,可以统一引流与控制。阿里云分享了自己的几个安全案例,如460Gbps级别的DDoS(号称全球最大的DDoS攻击),其成功的原因在于及时监控发现了异常流量,然后通过BGP协议引流到清洗中心进行过滤处理,再将过滤过后的结果回吐给应用;另一个亮点就是运营商也参加了进来,由于对应的应用没有国外业务,因此在防御DDoS的时候直接知之其将国外的流量全部丢弃,这点也是非常有意思的,总体来说网络层的防御过程都是监控、引流、分析与处理四个步骤。
这块百度、新浪、赶集等公司都分享了自己的运维系统。都各有自己的特点,比如百度通过原子化、无状态化操作,实现了功能上的随意组合,大大增强了系统灵活性。新浪的JPool加入了对灰度发布与Docker的支持。总体来说我觉得以后的系统运维应该是朝无人工厂的方向发展的。
其它还有一些板块如:“互联网金融”、“创业、团队管理”等我都没怎么仔细听,感兴趣的同学可以去看看PPT)
有幸在周末参加了Arch
Summit 2014 北京。参加的公司主要有“Amazon”、“阿里云”、“当当”、“京东”、“去哪”、“美团”、“知乎”以及一些金融公司,如“上交所”。
会展方面主要是云产品相关的,有“青云”、“Amazon AWS”、“听云”、“UnitedStack”等。“青云”与“UnitedStack”做的都是“计算云”,能实现“网络/计算/IO 资源”的虚拟化、资源化,并提供“跨地域虚拟专网”,均按时计费。在我看来,其产品定位仍然是中小客户,并不具备PaaS水准,另外据NICE的人员反映,“青云”的单机性能上限过低。“听云”是应用性能平台,兼容多平台,接入简单,能快速发“现慢SQL,接口调用,外部网络访问”等问题,但仍然停留在单机采集,还无法对集群实现总控,也没有压测功能。
内容方面我比较关心的是“互联网金融”与“智能硬件”。
先说“互联网金融”,所谓“互联网金融”就是借助互联网的力量打通投资与融资方,实现资源的最新配置。京东介绍了其“京宝贝”、“京东白条”、“京东众筹”与“京小贷”,其中“京东白条”算是最为成功的一个产品,开辟了互联网个人信用消费市场,技术上主要介绍了“利用可靠消息服务实现读写分离”、“细化拆分交易事件以实现松耦合及平滑升级”及“流程、组合、基础三层服务构架”。上海证券交易以前也是以专用系统为主,如使用小型机、专用网络,近年来也在积极向互联网/开源/小型方向发展,在性能上其使用了“消息键值分离”、“消息打包”等技术,在容灾方面相对我们来说还是落后的,仍然停留在“双机房”这个层次上。另外VFinance的分享提及到了利用“现代会计学”理论来提高系统可靠性,我觉得比较有趣,主要借鉴的有“借贷账”(互相监督)、“账务,出纳分离”(模块职责单一)、“凭据对账”(防欺骗)及“多层会计科目”(增加维度减少出错的概率)。总体来说,互联网公司具有“快”的特点,传统互联网公司则具有“稳”的特点。双方都是看好互联网金融的。
再来说“智能硬件”,比较可惜的是本次会议并没有我期待的穿戴式设备相关内容,但有“智能汽车”方面。“智能汽车”听下来最痛心的是,基所用的传感器基本上没有一个能国产得较好的,分享者甚至调侃“准=贵”。现在制造智能汽车的一般方法是“外加装”或者“调用汽车总线接口”,随着汽车厂商的开放,第二变得更加流行起来,传感器方面主要有“64线激光雷达”、“单线激光雷达”、“全景工业摄像机”、“超声波距离探测器”及“高精度GPS”,国内研究内容主要还是在认识、算法这一块上,研究团队主要有企业一汽、比亚迪,高校有北理工、武汉大学、国防科大。无人驾驶还有很长的路要走,目前国内已经可以完成既定条件下的高速公路测试。还有一点有趣的地方,暴风这个以视频播放器起家的公司,现今也搞智能硬件,其产品“全景眼镜”,“智能路由器”,对于这种放开创新的态度,我衷心赞赏,在我看来很多创新的东西并不是一开始就能看出其价值的,甚至有些根本不能市场化,但其带来的创新思维绝对可以潜移默化地影响到很多产品。
其它方面,几个互联网公司都分享了自己在架构方面的演进过程。大多跟淘宝一样,经历了由单系统单结点到多系统多结点再分布式的这么一个过程。在系统层次划分上,大多遵循“业务,通用,基础,底层”这种结构。这里想提一下百度的Matrix(集群管理系统),其已经实现了对硬件的资源化,工程师根本不用关心申请的是什么的机器,其系统还会保证硬件保持均衡的负责,可以说完成已经系统地虚拟与管理起了机器的配置、发布、下线、维护工作,值得我们学习。大数据方面,Intel分享的《大数据的十个技术前沿》内容非常丰富,广泛地介绍了当今大数据计算的前沿技术,从“数据存储”(如NVRAM)、“数据计算”(如Spark)、“数据分析”、“数据安全”及“软硬件架构协同化”(如NativeTalk),虽然有不少广告在里面,但我觉得内容还是相当丰富的。
附:大会所有主题PPT
http://yunpan.alibaba-inc.com/share/link/E4LNAfMPD