15
May
2019

我的书出版了!Service Mesh: Istio 入门必备

标签: 思考 软件设计 架构

很长时间没有写博客了,大家可能以为它已经废弃了。其实,从去年到现在我都是在忙着写一本关于 Istio 的书籍,之所以写这本书主要还是因为当时市面上对这方面的文章太少了,书籍则是零。因此我将自己的理解与实践经验分享给大家,希望对大家有帮助。


我个人是非常看好服务网格的,我自己本身专注于软负载,我认为服务网格是在容器时代的软负载最佳的存在形态。就像 PaaS 一样,服务网格也将自己作为一个基础通用服务层下层到了基础技术栈体系,这样不仅有利于通用性,还对业务的无侵入性有很好的支持。在容器时代,一切都是浮动的、弹性的,可变的,负载也不例外,从早些时候的硬件负载,到微服务时代的透明负载,再到服务网格,这一个世代的划分。我觉得每个对分布式有兴趣或者从事其中的工程师都应该或多或少了解下。


有兴趣吗?买我一本书吧,听我慢慢为你道来~


当当:http://product.dangdang.com/27857036.html 


22
Aug
2016

2016 Spring One Platform 美国行

标签: Java 架构

有幸参加了2016在美国拉斯维加斯举行的Spring One Platform会议,接下来说一下我学习到的与了解到的一些东西。

阅读全文>>

14
Mar
2016

一张图看懂Raft

标签: 软件设计 算法
点击题目查看详情啦~

阅读全文>>

03
Nov
2015

2015 云栖大会

标签: 大会

    这次大会很幸运的是能以主办方的身份参加会议,地点在杭州下沙一个叫云栖小镇的地方,说实话这地方确实不好找,第一天早上出发的时候还走错了路。

本次大会与众不同的地方在于规模相当的大,官方公布的数据是3W人)现场不仅有主题演讲,还有会展,而且参会厂商相当广。InfoQ、 CSDN的开源大会什么的相比较起来只能算小巫见大巫。不过遗憾的是现场的导流与管理并,没有相像中的好,很大地点都没有标注清楚,印象最深的就是午饭,很多人都不知道C座在什么地方,只能靠嘴一路问过去。虽说本次大会的主题是《让云计算成为公共资源》,但参会的流程并没有让我感觉是在云端,其实我觉得完全可以利用移动端,将地图、人流分布、活动项目、资寻等都搬到云上,形成一个动态信息汇总区,还方便日后查询,不仅秀了技术还方便了大家。估计还是筹备得忽忙了一些吧,下面分块来分享一下我这次的参会感受。

一、会展

    会展是很赞了,几乎你能想到的厂商都来了,软件硬件都有且还包括很多传统企业与高校科研机构,如中国移动什么的、中科大什么的。众观整个会展,可以用一个词来代表:连接。无论是智能硬件、工业化4.0、O2O平台还是云计算。他们的特点都是把生活中的各个点连接起来了进行计算,这种场景被马总称为DT时代。什么是DT时代?以前由于通信不发达,我们专注的只是自己的那个点,比如我做红烧肉很厉害,那么我可能只靠开一个红烧肉小馆子就能获得很大的成功了,但现在不同了,通信发达了,我们已经超越了地理位置的限制,靠称霸一方当个土皇帝的时代已经显然已经出局了。其实问题的关键是光靠一家两家的力量也不能解决我们面临的问题了,正如大型计算一样,摩尔定律早已失效,人类已经开始走向多核并行计算。DT时代正是将以往的各搞各的单汇成一张网,O2O就是很好的一个具体化。货车帮、航运宝、趣医网、掌上糖衣等等企业都阐述了这个时代的一个共同特点:连接与大数据。



一些会展图片

      结合马总的DT思想就不难想像为什么这届大会的主题是《让云计算成为公共资源》了,我非常喜欢阿里云现任总裁胡晓明举的一个例子:在电力成为公共资源之后,没有知道它的价值,甚至还有人拿交流电触电事故来诋毁,说电力是不安全的;而当电力成为公共资源后,极大地推进了工业的发展,可以说第二次工业革命如果没有公共电力那是完成不可能完成。现在大家都知道我们正向工业4.0(即第四次工业革命)迈进,而这个转变的基础是什么呢?那就“计算与互联”,工业4.0 讲究的是智能化与信息化,这个前提自然所有的设备都能并网通信,试想一下,每个部件、每个传感器、每个机械手臂的数据都汇总起来,这意味着什么?这就是“大数据”而大数据的处理显然是离不开“计算”的,工业4.0处处存在着大数据,可能你的家或者你的办公室就是一个大数据生产车间,处处都需要计算,这显然就需要将计算公共化,将计算延伸到寻常百姓家,就像现在用电一样自在,而不是“高大上”的专用。我不知道各位是如何想的,我自己是非常赞同这一想法的,也许你觉得可笑,但我可以在这里断言,如果传统制造业跟不上这个步伐,等待他们的只能是被淘汰出局。现在的汽车行业就是一个潜在的案例,宝马、奥迪已经将内燃机做到了极致,可谓登峰造极,但现在丝毫有向4.0过渡的迹象,如果再这样持续下去,被Telsa这种新兴汽车干掉是迟早的事。

    总的来说,未来计算无处不在!

二、专题演讲

     说实话,我并没有觉得此次的专题演讲有什么亮点,听来听去都是些泛泛之谈,例如Docker的分享完全就是把国内人当小孩,还在举德国工厂的例子鼓吹为什么要docker化,好像大家都不知道一样,一点儿内部细节都没有。相比之下,我觉得圆桌会议(或称Pannel Discussion)还不错的,至少可以让你有与各大CEO同桌讨论的感觉(虽然你完全不能发言)。上面说的胡晓明举的例子就是出自于一个圆桌会议,这个圆桌会议讨论的是云计算以后是以私有化为主还是公有化为主,所谓私有云就是搭建一套独立的环境,整个计算能力与外界隔绝。优点是安全;缺点显然就是不够弹性。举个例子,如果12306使用私有云,那么最受益的肯定是硬件厂商(这也是为什么浪潮云的CEO一直主张私有云的原因),然后问题是一旦高峰期过了(例如春节),就会有大量的计算资源得不到有效利用(因为是隔离的环境),便会形成巨大的资源浪费;而阿里云这边认为计算是一种公共资源,它的调度应该像自来水一样,需要的时候多给,不需要的时候就少给,拿12306的例子来说,在高峰期过后,多余的计算资源就应该回收。在阿里云的设想里,所有的计算资源都应该像电网一样并网,入网的可以是不同的发电站,不管你是用核能、风能、太阳太还是水利发电,这些都不是用户需要关心,用户只需要拧开水龙头就来水(计算),关掉水龙头就减少,仅此而已。如果各位亲还在位安全担忧的话,那么我建议您还是将钱挖个坑埋起来吧,应该银行也不是安全啊,也有倒闭或者被抢劫什么的可能。所以说,现在大家对云计算的担心完全是没有信任的基础上产生的近忧,这点我觉得是可以理解的,随着云计算的普及,这些担忧肯定会越来越少的。

    其它技术方面我并没有太去了解,前面也说了,没有什么料爆出来,至少我是没看到。不过硬件我倒是看到几个新奇的东西,一个是防水插座,这种插座全 部浸入到水里也不会出现漏电,确实是很安全。中国院带来了一个量子计算加密,还是高校风格,看上去高大上,实质上没什么作用。另一个就是与植物结合的空气净化器,感觉很新鲜,不过好像是大了一点。还且个学会创客组,他们带来的是自行车导航(包含方向指引,队员距离提醒等等功能),学生们是很有激情,但我不看好,因为自行车的原因是轻量化,稍微专业点的爱好者者不会出装各种辅助装置的,要知道,自行车为了省那个几百克,都可以绞尽脑汁,简约才是自行车的发展方向。最后还一个人展区,是游戏展区,说实话真的有些非主流的味道(难道90后的审美都是如此吗?)~ 总的就这些吧~


09
Oct
2015

现代软件开发过程是艺术的创作过程

标签: 开发过程
这个问题我思考了很久,从大学开始我一直对软件开发过程有浓厚的兴趣。那个时候IBM的RUP(Rational Unified Process)非常流行,在很长一段时间内,各类大公司的软件开发过程都被我视为圣经,它们强调开发要分“需求分析”、“用例分析”、“系统设计”、“详细设计”、“编码”或者再来个迭代什么的,也学了非常多工程方法,如"UML"、"SysML"、"ERD"、"BPMN""DFD" 等等等等。然而,回首我在阿里五年的工作——其中有业务部门,也有技术部门——我发现,这些看似高大上的东西,在实际过程中根本没有人在用!

阅读全文>>

19
Sep
2015

基于贝叶斯的拼写检查算法

标签: 回忆

学生时代写的博客,被我恢复了出来了这篇文章应该大二写的,也就是2008年

阅读全文>>

18
Jun
2015

开发问题笔记两则

标签: Netty Javascript

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在

Netty4Unpooled.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
。如今已经被官方采纳


23
Apr
2015

2015北京QCon大会感想

标签: 软件设计 大会

本次QCon在北京国际会议中心举行,时间为4.23~4.25。中间件这边是我跟千臂一同参加的,他的感想在这里,全部的PPT在这里
本次大会与以前一样还是分会展与主题演讲两部分。人非常多,特别是阿里云相关的专场,很多场人已经挤到了门外,完全是人满为患。
pic0

行业动态:

智能硬件服务

本次第一次看到了穿戴式设备服务商展出,叫“出门问问”,其作用类似于Siri,感觉上还是有些山寨的味道,相信以后有会更多的厂商加入。我觉得如果说两年前在鼓吹移动互联网,那么现在就穿戴式设备与智能硬件了。观察一下就可以发现:LG、MOTO、微软、华为、苹果等都推出了自己的智能硬件产品。为什么?因为传统的硬件思维已经跟不上世界的变化了,我们需要机器来适应我们,需要机器来理解我们,而软件就是为这些机器注入灵魂的源泉。我预计,以后会出现更多的智能设备(智能插座,智能汽车等)。
pic1

垂直化云计算

本次会展还是跟以前以样,有很多通用云计算平台,如“青云”,AWS,京东企业云,不过连“美团”竟然加入了云产品行列着实让我惊奇了一把。通用云计算基本上没有什么新东西,都是对资源的虚拟化,虚拟化网络、CPU、内存等等,各个厂商差异化不明显,很难形成竞争力。相对我,我看到了一些垂直化的云计算平台,如“环信”做即时通讯云的与“CODING云IDE”做开发工具云,它们两个都是利用云计算来解决特点领域的问题,后者是我非常感兴趣也是早就觉得应该有的东西,想想现在的开发者经常为各环境配置而伤透了脑筋,现在的软件对后端的性能要求也很高,不过当前功能实在是太弱(coding.net大家可以云试试),如果能把这些东西都很好的搬上云,那将可以极大节省资源开销与人力维护成本,我觉得我们在内部完全可以自己搞一个,一来利于团队维护环境代码配置,二来可以避免一些商业上的纠分。

软件开发模式

本届QCon竟然还有老外在鼓吹敏捷开发,这非常令我失望,相比于阿里云专场的火爆,这个可以算是门可罗雀。以打我开发学习计算机以来,就有人试图以传统工程的思想来规范、统一软件开发,产出了OOSP、RUP、UML、sysML
、及敏捷之类的东西,它们岂图以一种套路来约束软开发,实现诸如流水线一样的效果,按部就班地工作。实质上无论是哪种,最终都没有成功,更别说普及。这其中是有一定道理的,在我看来,现代软件开发对响应与灵活性要求越来越高,很多系统都只一1~2个人在维护(包括很多在型系统),根本不存在传统工程学中的协作问题,而且与传统工程学中的开发者不同的是,软件开发者通常都极具有个性,并且会参与整个开发的大部分环节,并不像传统工程学那样设计建造分工明确。因此希望以一种没有实体的规则来约束开发者是肯定不会成功。我们不是说以小作坊的模式工作就好,我们需要做的是创造出有实际作用软件或具体来提升整体的效率而不是分大力气要求if后必须加个花括号或者开发前必须进行需求评审或者测试用例评审等。一切都应该从实现的需求,没有什么过程是必须遵守的。

全栈开发

全栈是最近开始流行的一种开发模式,指的是开发者能够从上至少处理各个环节的工作,可谓是前端、后端与运维的三合一。其核心思想就是将原来的水平开发转成了垂直的微服务开发。当然全栈不是把开发者当成全能来使用,而是统过整合前后端开发,简化运维发布,来统一整体开发过程,降低成本。其实这个趋势我是比较赞同的,因为现在的人力成本越来越高,对响应速度要求越来越高,而软开发过程中人与人的沟通成本是最大的,所以逐步降低人力成本一个趋势。

技术动态:

Docker

毫无疑问,docker是本届大会的热点之一,京东、腾讯、阿里及其它一些公司都分享了自己的实践经验。特别的是京东的Docker在Image分发时遇到了传输瓶颈,他们自己做了套系统对image进行切片传输,但这种模式仍集中推送的模式,其解决的问题正是我们现正在做的燎原应用场景之一,因此我觉得大数据的分发传输将是未来需要面对的一个问题。Docker之所以开始流行,我认为是其抹平了系统配置与部署之间的沟壑,正像Java抹平了硬件与Maven抹平了代码依赖一样,他们都使得开发人员能更专注于创造,减少不必要的重复操作。

安全

安全这块在云时代日益彰显,主要分成漏洞预防与攻击防范两块。漏洞预防就是在攻击发生之前提前找出应用的bug,腾讯在内部建立了自己的类似于乌云的漏洞汇报平台,并且形成了一种奖赏机,鼓励开发人家参与安全,统一开发与安全战线,这点很值得我们借鉴。在攻击防范方面腾讯在所有的接入设备上都植入了监控agent,可以统一引流与控制。阿里云分享了自己的几个安全案例,如460Gbps级别的DDoS(号称全球最大的DDoS攻击),其成功的原因在于及时监控发现了异常流量,然后通过BGP协议引流到清洗中心进行过滤处理,再将过滤过后的结果回吐给应用;另一个亮点就是运营商也参加了进来,由于对应的应用没有国外业务,因此在防御DDoS的时候直接知之其将国外的流量全部丢弃,这点也是非常有意思的,总体来说网络层的防御过程都是监控、引流、分析与处理四个步骤。

自动化运维

这块百度、新浪、赶集等公司都分享了自己的运维系统。都各有自己的特点,比如百度通过原子化、无状态化操作,实现了功能上的随意组合,大大增强了系统灵活性。新浪的JPool加入了对灰度发布与Docker的支持。总体来说我觉得以后的系统运维应该是朝无人工厂的方向发展的。

其它还有一些板块如:“互联网金融”、“创业、团队管理”等我都没怎么仔细听,感兴趣的同学可以去看看PPT)

05
Jan
2015

2014 北京ArchSummit总结

标签: 软件设计 大会

有幸在周末参加了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


09
Aug
2014

Paper Rush-3:Apache Kafka

标签: 框架

Kafka是Apache Foundation开发出的一个消息中间件产品。消息中间件就是在各种系统间传送消息任务的基础软件产品,例如如果核心系统的一条交易成功了,这个消息需要通知给很多外围系统来做相应的动作,比如说发淘金币,增加会员经验等等。消息中件间的另两主要功能就是处理消息丢失”消息堆积”,在分布式系统中还需要考虑有消息存储”问题,如果设计得不好,就可能导致低效的问题。


阅读全文>>

1 2 3