InfoQ - 促进软件开发领域知识与创新的传播 https://www.infoq.cn InfoQ 是一个实践驱动的社区资讯站点,致力于促进软件开发领域知识与创新的传播。 Sat, 24 Aug 2019 08:03:33 GMT Copyright © 2019, Geekbang Technology Ltd. All rights reserved. 极客邦控股(北京)有限公司 FaceBook都认真发币了,银行区块链到底用的怎么样? https://www.infoq.cn/article/CYUvDW6UM7FFpPHbbqPN?utm_source=rss&utm_medium=article <p>2019年6月18日,Facebook 发布消息称计划发行一种名为“Libra”的稳定币,通过Libra为全球超过十亿人提供普惠金融服务,Libra让已经略感平静的区块链湖面顿时活跃。从比特币到Libra,区块链技术走过了一个十年的轮回,从金融出发再回到金融。</p> <p>虽然目前Libra前途尚无定论,但是,它已经让全世界广泛、一致地深度思考了区块链技术对金融行业的改变能力。Libra是对区块链技术经典目标的回归,而且非常强势。</p> <p>《环球时报》英文版针对Libra发表的评论文章指出“全球数字货币竞争时代,中国不能缺席”,“随着全球数字经济竞争时代的到来,中国产业和监管机构都有必要就数字货币进行更多对话,理解甚至是鼓励数字货币。否则,中国有可能会在新的金融格局中落后”。</p> <p>人民银行2019年8月2日召开的工作会议中,也明确提出要加快我国法定数字货币的研究步伐。2019年9月,国务院发布的《关于支持深圳建设中国特色社会主义先行示范区的意见》中也指出,“支持深圳开展数字货币研究与移动支付等创新应用”。</p> <p>那么在区块链走过的这十年中,银行到底用的怎么样呢?我们一起来看些国内外银行的实际用例吧。</p><div align='right'><a href='https://www.infoq.cn/article/CYUvDW6UM7FFpPHbbqPN?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 付晓岩 https://www.infoq.cn/article/CYUvDW6UM7FFpPHbbqPN?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 23:19:20 GMT 软件交付的演进历程 https://www.infoq.cn/article/P290jducMT3xzx9exYel?utm_source=rss&utm_medium=article <p>经常有人会问我什么是敏捷流程。我都会给出那个让人不尽满意的答案“没有一个单独的流程。它取决于每个团队的实际情况”。为了更好的回答这个问题,我撰写该文介绍了软件交付的演进历史。我打算归纳成一个线性的发展,即使我知道它并不像我要表达的那样有序和线性。但我觉得参考它,能得到比前面那个“取决于”的答案更多的信息。希望它对你同样有用。</p> <h2>开始阶段</h2> <p>软件开发刚开始的时候,并没有很好的经验或思想来指导一个开发项目的运行。最开始,人们标识出软件开发的一些关键假设,映射到那时已有的可理解的流程上。</p> <p>最初的假设如下:</p> <ol> <li>软件开发需要很长的时间</li> <li>软件发布不会频繁</li> <li>软件构建后很难进行更改,所以确保第一次把事情做对</li> <li>软件开发需要很多不同的、成本高昂的技能集</li> </ol> <p>建筑行业也有着类似的假设。建筑需要很长的时间,竣工后不能简单的添加一层或把面积扩大。建筑也涉及到很多不同的专业,从设计师到开发商,到质量监理以及工人、电工和水暖工等等。从这些角色的命名可以看出,软件开发从建筑行业借鉴了很多。</p> <p>建筑行业遵循的流程是,把端到端的项目分成不同的阶段,每个流程阶段由不同的专业人士来负责。这种在每个阶段赋予角色的做法有利于充分利用成本高昂的人力资源。<br /> <img src="https://uploader.shimo.im/f/TKiP8PcWSk8x9fMD.jpeg!thumbnail" alt="图片" /><br /> 瀑布流程<br /> 这看起来是一个很棒的流程。瀑布模型在20世纪60年代后期开始采用,直到80年代中期它才成为事实上的软件交付标准。但在流程执行中出现了些问题。根据<a href="https://www.projectsmart.co.uk/white-papers/chaos-report.pdf">2014 问题报告</a>,31%的瀑布项目在投入很多后被取消,更有52%的项目预算需要翻倍。</p> <p>鉴于这种很低的成功概率,很多人开始各自提出新的、更好的方式来交付项目,以克服瀑布流程中的一些缺陷。</p><div align='right'><a href='https://www.infoq.cn/article/P290jducMT3xzx9exYel?utm_source=rss&utm_medium=article'>点击查看原文></a></div> Rory Madden https://www.infoq.cn/article/P290jducMT3xzx9exYel?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 22:27:33 GMT 传旷视科技最早于周五向港交所提交上市申请,融资规模高达10亿美元 https://www.infoq.cn/article/GpeX8ou0RQgrhHKvk5Yo?utm_source=rss&utm_medium=article <p><img src="https://static001.infoq.cn/resource/image/f1/d8/f1da9f1acb7eba6d7dfc0ea340b559d8.jpg" alt="" /></p> <blockquote> <p>InfoQ 8月23日消息,据彭博社报道,有知情人士透露,人工智能独角兽旷视科技计划最早于周五向港交所提交上市申请文件,融资规模可能高达10亿美元。</p> </blockquote> <p>而在三天之前,就曾有媒体称,旷视科技或将于短期内向港交所提交上市申请,旷视拟采用WVR架构(同股不同权结构)上市。但有市场人士指出,现在很多公司在提交上市申请时也要“看准点”,因此,旷视科技最终会否提交上市申请还要视市场情况而定。当时对于该传闻,旷视科技回应称不予置评。</p> <h2>近半年来旷视上市传闻不断</h2> <p>近半年以来,关于旷视科技上市的传闻一直不绝于耳。</p> <p>7月1日,据CV智识报道,旷视正筹备于今年之内赴香港上市,并积极考虑采用“同股不同权”架构。一位旷视内部人员透露,旷视目前距离上市已非常接近。另据南华早报消息,旷视IPO初步日期定在7月。路透社香港的报道称,旷视已邀请花旗、高盛和摩根大通等三家投行参与其赴港IPO。</p><div align='right'><a href='https://www.infoq.cn/article/GpeX8ou0RQgrhHKvk5Yo?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 刘燕 https://www.infoq.cn/article/GpeX8ou0RQgrhHKvk5Yo?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 20:07:17 GMT 如何查询数据是否已泄露?试试Firefox Monitor https://www.infoq.cn/article/1gNvW7gCsmSTkmCZxyRU?utm_source=rss&utm_medium=article <blockquote> <p>数据泄露事件层出不穷。8月21日,有两起数据泄露事件发生,分别是国内的雪球网和国外的电影票订阅服务商MoviePass。相比Facebook、万豪和华住发生的数据泄露,这两起数据泄露事件是“大巫见小巫”。但是,以后的数据泄露事件会不断增多,我们需要应对之策。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/39/50/39d85e0a147a1df7b86c393ae03afb50.jpg" alt="" /></p> <p>8月21日,微博上有网友爆料:雪球网发生数据泄露,涉及12万人的数据只卖75美元,泄露数据包含多项关键信息,例如姓名、身份证、手机号码、账户和密码。同一天,据外媒<a href="https://securityaffairs.co/wordpress/">Securityaffairs</a>披露,安全专家Mossab Hussein发现,电影票订阅服务商MoviePass暴露了数以千计的客户卡号和个人信用卡信息。因数据库未加密,包含信用卡数据的数据库被泄露,涉及包含1.61亿条记录。</p> <p>目前,无论是国内,还是国外,数据泄露事件持续增加,涉及人数越来越多。据启明星辰发布的《网络安全态势观察报告(2018-2019)》指出:过去一年多,各类信息泄露事件已连续5年突破历史记录。信息泄露事件呈现常态化现象,随着全球信息化程度的不断提高,这一情况会不断加剧。<br /> <img src="https://static001.infoq.cn/resource/image/4a/32/4a39c33a1fd88f6393d0b7cd36001332.jpg" alt="" /><br /> 信息泄露的途径主要分为内部人员或第三方合作伙伴泄露,信息系统本身漏洞泄露,机构本身的防护机制不健全,以及对安全配置的疏忽大意等问题。</p> <p>任何一起数据泄露事件,大家关心的问题是:这次数据泄露事件是否有我?我的数据是否已经被泄露?<br /> <img src="https://static001.infoq.cn/resource/image/10/25/1012155c9f125a614713444f87685125.jpg" alt="" /><br /> 针对这个问题,<a href="https://monitor.firefox.com/">Firefox Monitor</a>或许能“祝你一臂之力”。据维基百科介绍,Firefox Monitor是由Mozilla开发的在线服务,它于2018年9月25日正式推出。</p><div align='right'><a href='https://www.infoq.cn/article/1gNvW7gCsmSTkmCZxyRU?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 東山 https://www.infoq.cn/article/1gNvW7gCsmSTkmCZxyRU?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 19:25:11 GMT 华为史上最强AI芯片昇腾910问世,明年开源自研AI框架MindSpore https://www.infoq.cn/article/c6ie9MHewYvE0l15IvqY?utm_source=rss&utm_medium=article <blockquote> <p>2018 年 10 月,华为在上海举办的全连接大会上公布了两款芯片:昇腾 910 和昇腾 310,并表示它们将在 2019 年面世。<br /> 2019 年 8 月 23 日,华为在深圳总部举办的昇腾 910 AI 处理器和 MindSpore 计算框架发布会上,正式发布算力最强的 AI 处理器 Ascend 910(昇腾 910),同时推出了全场景 AI 计算框架 MindSpore,后者将在 2020 年第一季度全面开源。<br /> 华为公司轮值董事长徐直军在发布会上表示:昇腾 910、MindSpore 的推出,标志着华为已完成全栈全场景 AI 解决方案(Portfolio)的构建,也标志着华为 AI 战略的执行进入新的阶段。</p> </blockquote> <h2>昇腾910正式推出,华为AI生态再进一步</h2> <h3>算力最强AI处理器昇腾910</h3> <p>华为副董事长徐直军仍然负责本次发布,在会上他宣布:昇腾910芯片正式发布。这标志着华为AI生态又向前迈进了一大步。</p> <p><img src="https://constatic.geekbang.org/infoq/5d5f9a3f48631.png" alt="image" /></p> <p>去年在上海的全连接大会上,徐直军确认了华为“造芯”的传闻,并<a href="https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&amp;mid=2247493313&amp;idx=1&amp;sn=b591a5a6df896a0b085dafc72f6ef70a&amp;chksm=fbea5f0ecc9dd6182f8dd4e98b9ddcc8f082bda9fc1fa87b185ff36f578c64114148dfbcc7f7&amp;scene=27#wechat_redirect">宣布推出</a>昇腾910与昇腾310两款芯片,其中:</p> <ul> <li> <p>昇腾910,是目前全球已发布的单芯片计算密度最大的 AI 芯片;</p> </li> <li> <p>昇腾310,是目前面向计算场景最强算力的 AI SoC。</p> </li> </ul> <p>得益于达芬奇架构针对AI运算特征的设计,这两款芯片能够大大加速华为AI在平安城市、互联网、金融、运营商、交通、电力等各行业的应用。</p><div align='right'><a href='https://www.infoq.cn/article/c6ie9MHewYvE0l15IvqY?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 陈思,蔡芳芳 https://www.infoq.cn/article/c6ie9MHewYvE0l15IvqY?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 16:48:29 GMT IoT时代,高精度GNSS技术如何解决IoT场景下的时空定位问题 https://www.infoq.cn/article/u837YpVePljkTVwRiToV?utm_source=rss&utm_medium=article <blockquote> <p>IoT时代,定位是实现万物互联的重要基础,在一些重要的IoT场景下,精准时空技术如何与IoT结合?GNSS定位经过技术发展,如何实现定位从10米到亚米级甚至厘米级的跨越?精准时空技术的进步,对IoT的发展又意味着什么?</p> </blockquote> <p>从互联网到移动互联网再到 IoT,网络技术的发展其实是解决从人与人的连接到人与物的连接,最终到物与物连接的过程。 IoT 并不是一个新的行业,而是多行业融合形成的产业,从产业链角度自下而上来看,IoT 被分为4个层次:感知层(芯片/传感器)、网络层(芯片/通信模组/通信网络)、平台层(平台/操作系统)和应用层(智能终端/集成应用)。</p> <p><img src="https://static001.infoq.cn/resource/image/81/f0/8114554ea17f0785281c0a4f11c79bf0.png" alt="" /></p> <p>在今天,5G、数据、精准时空都被认为是 IoT 时代的基础设施,5G是网络层的基础设施:在网络传输层面让实时传输的速度变得更快更稳定;数据是平台层的基础设施:数据层面,包括 AI、云计算、大数据在内的技术让信息处理能力快速提升;而精准时空定位其实是聚焦于 IoT 感知层的基础设施:涉及到芯片和传感器的应用,让位置定位更实时更精准。很多人对精准时空定位是既熟悉又陌生的,可能听过 GPS、北斗,但是对精准时空的概念、 GNSS 是什么以及背后的定位原理不甚了解。</p> <p>IoT 时代,随着定位高精准化及定制化需求的出现,精准时空服务中的基础设施和高精度定位方案,将是打通从空间维度“物与物交流”的新一代科技及经济增长点,在解决各类终端设备的硬件适配和系统通用性问题后,精准时空服务技术将使得未来消费终端的更新换代以几何式增长。</p><div align='right'><a href='https://www.infoq.cn/article/u837YpVePljkTVwRiToV?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 王利莹 https://www.infoq.cn/article/u837YpVePljkTVwRiToV?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 16:06:25 GMT 最终,我们放弃了微服务 https://www.infoq.cn/article/p7AFC8pe0WAaAHupf6OH?utm_source=rss&utm_medium=article <blockquote> <p>微服务被认为是一种理想的架构模式,因此,Steven Lemon所在公司的领导层决定从单体架构向微服务架构迁移,这让整个开发团队在随后的的日子里苦不堪言,七大现实问题摆在面前无法解决,微服务架构的好处也没有享受到,并发现这不单单是一个技术问题。最终,整个团队决定放弃。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/97/e7/9774cde3b084d9337106a7414119d7e7.jpg" alt="" /></p> <h2>领导决定:迁移微服务</h2> <p>最近,我所在的开发团队在紧张的交付周期结束后,有了短暂的休息机会。领导层认为可以利用这段时间将单体架构迁移至微服务。经过一个月的调研和准备之后,我们最终放弃迁移计划,继续使用原先的单体架构。在我们看来,微服务不仅不会帮到我们,反而会对开发流程造成严重影响。</p> <p>微服务被认为是一种理想的架构模式,但并不适合我们。我们公司的情况是这样的:一共有200多名开发人员,不过我们团队只有5个人,大概有5%的后端开发工作涉及公司层面的单体系统,这是一个巨大的C#应用程序。剩下的时间,我们开发了自己的两个Node服务。</p> <p>我们团队负责的这两个服务都很小巧,完全可以控制开发、架构和部署整个流程。遇到性能问题时,我们会把生产环境中的实例数量增加一倍,直到把底层问题解决。我们几乎不与其他团队合作,因为这些服务是用TypeScript开发的,所以我们团队(主要是前端开发人员)能够在前端和后端使用相同的编程语言。最重要的是,我们可以在客户端及后端的验证和报告服务中包含复杂的规则计算引擎。总而言之,我们整个团队专注于特定业务。</p><div align='right'><a href='https://www.infoq.cn/article/p7AFC8pe0WAaAHupf6OH?utm_source=rss&utm_medium=article'>点击查看原文></a></div> Steven Lemon https://www.infoq.cn/article/p7AFC8pe0WAaAHupf6OH?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 16:02:52 GMT Kubernetes爆发严重漏洞:可能影响所有开源版本 https://www.infoq.cn/article/2lxylPOCU4cf9MR2S5fp?utm_source=rss&utm_medium=article <p>根据<a href="https://www.bleepingcomputer.com/news/security/severe-flaws-in-kubernetes-expose-all-servers-to-dos-attacks/">报道</a>,Kubernetes爆发严重漏洞,可能会影响所有开源版本。这两个漏洞是处理容器化应用程序的高严重性漏洞,可能允许未经授权的攻击者触发拒绝服务(DoS)状态。在发现漏洞后,Kubernetes开发团队已经发布了修补版本,以解决这些新发现的安全漏洞并阻止潜在的攻击者。</p> <p><img src="https://static001.infoq.cn/resource/image/b2/c0/b296eb5f63602eed8b926139f8479cc0.jpg" alt="" /></p> <p>Kubernetes产品安全委员会的Micah Hausler在Kubernetes安全问题公告列表上透露:“Go语言的net/http库中发现了一个安全问题,将会影响所有Kubernetes版本和组件。这些漏洞可能导致采用HTTP或HTTPS侦听器的任何进程面临DoS。”</p> <p>Netflix在8月13日宣布发现了多个漏洞,这些漏洞使本身支持HTTP/2通信的服务器暴露在DoS攻击面前。在与安全公告一同发布的八个CVE中,其中两个还影响Go和旨在服务于HTTP/2流量(包括 /healthz)的所有Kubernetes组件。</p> <p>标为CVE-2019-9512和CVE-2019-9514的两个漏洞已被Kubernetes产品安全委员会定为CVSS v3.0基础分7.5,这两个漏洞使“不受信任的客户端可以分配无限量的内存,直到服务器崩溃。”</p><div align='right'><a href='https://www.infoq.cn/article/2lxylPOCU4cf9MR2S5fp?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 赵钰莹 https://www.infoq.cn/article/2lxylPOCU4cf9MR2S5fp?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 15:53:39 GMT Pivotal 开源 Kubernetes 原生容器构建服务 kpack https://www.infoq.cn/article/rotUZxgljYWNdGRhDAo1?utm_source=rss&utm_medium=article <p>过去几年以来,容器技术的普及程度一直在不断提高。然而,这种技术的具体效用在企业规模场景下却往往难以量化。</p> <p>近期Pivotal推出了一系列产品,希望帮助企业通过Kubernetes原生工具链获得更多的回报,Pivotal Build Service就是其中的一个代表性的工具。</p> <p>Build Service可帮助开发团队持续构建、维护以及更新生产就绪型OCI镜像,其包含了两大核心组件:Cloud Native Buildpakcs以及自主研发的Kubernetes资源控制器。</p> <p>其中Cloud Native Buildpacks是由Pivotal与Heroku联合研发,能够以一致且可重现的方式构建模块与镜像,生成的镜像能够实现随处运行;第二大组件则是<a href="https://github.com/pivotal/kpack">kpack</a>,属于一组Kubernetes资源控制器,也正是我们今天文章的探讨主体。(感兴趣的朋友可以<a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/">点击此处</a>查看Kubernetes资源说明文档。)</p> <h2>kpack:一种 Kubernetes 原生容器构建与更新方式</h2> <p>我们希望在Build Service中将Cloud Native Buildpacks体验与Kubernetes的声明模式相结合,并以大家熟悉的方式扩展Kubernetes工作流程。立足这一目标,我们利用定制化资源定义对Kubernetes API进行了扩展。如此一来,我们就可以利用Kubernetes技术建立起一个可组合的声明式架构,进而用于构建服务。定制化资源定义(CRD)由定制化控制器负责协调,用于实现容器镜像的自动化构建,并可根据用户提供的配置随时对镜像加以更新。</p><div align='right'><a href='https://www.infoq.cn/article/rotUZxgljYWNdGRhDAo1?utm_source=rss&utm_medium=article'>点击查看原文></a></div> Matthew McNew https://www.infoq.cn/article/rotUZxgljYWNdGRhDAo1?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 15:39:18 GMT 2020年,你学的编程语言价值多少? https://www.infoq.cn/article/DHtaG30eXOWKVgmqcq0o?utm_source=rss&utm_medium=article <blockquote> <p>编程语言是人们指导或控制机器的工具,其开发目的在于让操控机器的过程更加简单和顺畅。正因如此,数百种编程语言应运而生。然而,它们的命运却各不相同。一些语言已不复使用,或将在未来几年淘汰。相应地,一些语言将会被充分使用,还有一些崭新的编程语言正在逐渐被人们所接受。</p> <p>本文选取真实可信的调查、统计数据、搜索结果以及薪资等数据,预测2020年编程语言的发展趋势。这篇文章将帮助初学者选择适合自己的入门语言,并指导资深人士在切换语言和继续使用当前语言之间作出选择。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/ba/f2/ba23d9dea388f3bc2c958bdbcba47df2.jpg" alt="" /></p> <p>我通过两个表格总结了过去五年间编程语言的潮流趋势。相关数据来源于<a href="https://insights.stackoverflow.com/survey/">2015—2019年Stack Overflow</a>的调查结果。为了帮助读者更加准确地理解,我将编程语言分为两组,第一组是2000年以前推出的编程语言,第二组是2000年以后推出的语言。虽然选择2000年作为划分界限是随机的,但这对于理解两组语言的发展趋势非常有帮助。表格还列出了这些编程/脚本语言的起源年份与主要用途。</p> <table> <thead> <tr> <th style="text-align:left"><strong>语言名称</strong></th> <th style="text-align:center"><strong>推出时间</strong></th> <th style="text-align:left"><strong>2015</strong></th> <th style="text-align:center"><strong>2016</strong></th> <th style="text-align:left"><strong>2017</strong></th> <th style="text-align:center"><strong>2018</strong></th> <th style="text-align:left"><strong>2019</strong></th> <th style="text-align:center"><strong>主要场景</strong></th> </tr> </thead> <tbody> <tr> <td style="text-align:left">Javascript</td> <td style="text-align:center">1995</td> <td style="text-align:left">54.4%</td> <td style="text-align:center">55.4%</td> <td style="text-align:left">62.5%</td> <td style="text-align:center">71.5%</td> <td style="text-align:left">67.8%</td> <td style="text-align:center">Web 开发、动态脚本、客户端和服务端</td> </tr> <tr> <td style="text-align:left">Java</td> <td style="text-align:center">1995</td> <td style="text-align:left">37.4%</td> <td style="text-align:center">36.3%</td> <td style="text-align:left">39.7%</td> <td style="text-align:center">45.4%</td> <td style="text-align:left">41.1%</td> <td style="text-align:center">企业应用</td> </tr> <tr> <td style="text-align:left">Bash/Shell</td> <td style="text-align:center">1971/79</td> <td style="text-align:left">-</td> <td style="text-align:center">-</td> <td style="text-align:left">-</td> <td style="text-align:center">40.4%</td> <td style="text-align:left">36.6%</td> <td style="text-align:center">自动化和系统管理</td> </tr> <tr> <td style="text-align:left">Python</td> <td style="text-align:center">1991</td> <td style="text-align:left">23.8%</td> <td style="text-align:center">24.9%</td> <td style="text-align:left">32.0%</td> <td style="text-align:center">37.9%</td> <td style="text-align:left">41.7%</td> <td style="text-align:center">通用</td> </tr> <tr> <td style="text-align:left">PHP</td> <td style="text-align:center">1995</td> <td style="text-align:left">29.7%</td> <td style="text-align:center">25.9%</td> <td style="text-align:left">28.1%</td> <td style="text-align:center">31.4%</td> <td style="text-align:left">26.4%</td> <td style="text-align:center">Web 开发、服务端</td> </tr> <tr> <td style="text-align:left">C</td> <td style="text-align:center">1972</td> <td style="text-align:left">16.4%</td> <td style="text-align:center">15.5%</td> <td style="text-align:left">19.0%</td> <td style="text-align:center">22.1%</td> <td style="text-align:left">20.6%</td> <td style="text-align:center">通用、底层开发语言</td> </tr> <tr> <td style="text-align:left">C++</td> <td style="text-align:center">1980/83</td> <td style="text-align:left">20.6%</td> <td style="text-align:center">19.4%</td> <td style="text-align:left">22.3%</td> <td style="text-align:center">24.6%</td> <td style="text-align:left">23.5%</td> <td style="text-align:center">通用</td> </tr> <tr> <td style="text-align:left">Ruby</td> <td style="text-align:center">1995</td> <td style="text-align:left">8%</td> <td style="text-align:center">8.9%</td> <td style="text-align:left">9.1%</td> <td style="text-align:center">10.3%</td> <td style="text-align:left">8.4%</td> <td style="text-align:center">Web 开发</td> </tr> <tr> <td style="text-align:left">R</td> <td style="text-align:center">1993</td> <td style="text-align:left">–</td> <td style="text-align:center">–</td> <td style="text-align:left">4.5%</td> <td style="text-align:center">6.0%</td> <td style="text-align:left">5.8%</td> <td style="text-align:center">统计计算</td> </tr> <tr> <td style="text-align:left">Objective-C</td> <td style="text-align:center">1986</td> <td style="text-align:left">7.8%</td> <td style="text-align:center">6.5%</td> <td style="text-align:left">6.4%</td> <td style="text-align:center">7.3%</td> <td style="text-align:left">4.8%</td> <td style="text-align:center">通用</td> </tr> </tbody> </table> <h2>观察结果</h2> <p>从2018年到2019年,除了Python以外,所有语言的流行度都在下滑。</p><div align='right'><a href='https://www.infoq.cn/article/DHtaG30eXOWKVgmqcq0o?utm_source=rss&utm_medium=article'>点击查看原文></a></div> AJIT KUMAR https://www.infoq.cn/article/DHtaG30eXOWKVgmqcq0o?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 15:01:47 GMT Azure Functions现已正式支持Python语言 https://www.infoq.cn/article/sIPZW5aObwEPobOsYRpN?utm_source=rss&utm_medium=article <p>近日,作为微软公司推出的云托管、无服务器、事件驱动型计算服务,Azure Functions<a href="https://visualstudiomagazine.com/articles/2019/08/22/azure-functions-python.aspx">宣布</a>正式支持Python编程语言。在此之前,Python支持功能就以预览形式发布,并得到GE航空以及TCF银行等多家企业的采用。</p> <p><img src="https://static001.infoq.cn/resource/image/73/a0/73c9e19e93a33a3fb0a9e56be8a8a7a0.jpg" alt="" /></p> <p>与亚马逊云服务中的AWS Lambda与Google Cloud Platform中的Google Cloud Functions类似,Azure Functions允许开发人员直接提交待执行的代码(通常作为事件或者绑定响应),且无需对服务器进行任何配置或者管理(皆由系统自动完成)。</p> <p>微软一直忙于对Azure Functions进行完善,先后于今年2月添加了Java支持能力,同时改进了对TypeScript的支持效果。随着此次对Python的支持,Azure Functions已经覆盖了两种最为常用的主流编程语言。</p> <p>Azure Functions团队的Daria Grigoriu在今年8月19日的一篇博文中指出,“现在,大家可以开发Python 3.6应用程序,并在跨平台开源Functions 2.0运行时上加以运行。应用程序能够以代码或者Docker容器的形式,直接交付至Azure当中基于Linux的无服务器托管平台。”</p><div align='right'><a href='https://www.infoq.cn/article/sIPZW5aObwEPobOsYRpN?utm_source=rss&utm_medium=article'>点击查看原文></a></div> David Ramel https://www.infoq.cn/article/sIPZW5aObwEPobOsYRpN?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 14:16:36 GMT 澎思科技刷新视频行人再识别(Video-based ReID)三大数据集世界纪录 https://www.infoq.cn/article/6E6R1D5g3HPCYX8kTHSA?utm_source=rss&utm_medium=article <p>继在三大主流单帧图片行人再识别数据集(Market1501,DukeMTMC-reID,CUHK03)刷新世界纪录后,近日,澎思科技(Pensees)在基于视频的行人再识别数据集(PRID-2011,iLIDS-VID,MARS)中再次取得突破性进展,并在三大数据集上实现算法关键指标首位命中率(Rank-1 Accuracy)大幅度提升,准确率创历史新高。<br /> <img src="https://static001.infoq.cn/resource/image/6a/40/6afc80799a2e56b5a39d59026fd32a40.png" alt="" /></p> <p><strong>实现关键指标提升,新算法刷新三大数据集世界纪录</strong><br />  <br /> PRID-2011、iLIDS-VID和MARS均为基于视频的行人再识别数据集。PRID-2011数据集中的视频对通过两个固定的监控摄像头进行采集,摄像头A包含385个行人,摄像头B包含749个行人。这些行人中,只有200个行人同时出现在两个摄像头中。iLIDS-VID是在PRID-2011之后公布的数据集,与PRID-2011相比,数据更加整齐,也更有挑战性。iLIDS-VID数据集是通过机场到达大厅的CCTV监控视频采集得到的,包含300个行人在两个摄像头下的600段视频。视频中存在严重的着装相似,光照和视角变化,复杂背景和遮挡现象,因此识别难度大。MARS数据集是目前基于视频ReID最大的数据集,是单帧图片行人再识别数据集Market1501的扩充版,图像数量由32,668幅扩展到了1,191,003幅。<br />  <br /> 与单帧图片的行人再识别数据集一样,首位命中率(Rank-1 Accuracy)和平均精度均值(Mean Average Precision,mAP)是衡量视频行人再识别ReID算法水平的核心指标。澎思科技此次一举实现在三大数据库上,仅利用原始数据就实现Rank-1 Accuracy关键指标大幅度提升。<strong>目前,澎思科技算法在最大的视频数据集MARS上的首位命中率指标已经达到88.8%,领先香港中文大学、中科大、北京大学等国内外知名机构。在iLIDS-VID和PRID-2011等数据集上首位命中率也分别达到了88.0%和95.5%。</strong><br />  <br /> <img src="https://static001.infoq.cn/resource/image/69/9c/6906d1488f3553b449d00931b014809c.png" alt="" /></p> <center>澎思科技行人再识别ReID算法在MARS数据集的部分测试结果</center> <p><strong>新算法立足于现实场景</strong></p> <p>澎思科技此次成果的取得源于澎思新加坡研究院对算法的自研创新和融合探索,是立足于澎思现有业务和商业模式,结合公司的发展方向针对性开展垂直领域技术研发和创新。主要包括以下几个方面:</p> <ol> <li>受遮挡、姿态变化、视角变化等因素的影响,视频序列中行人的特征是不连续的。用全局特征来度量每一帧图片的权重往往会损失掉许多重要的信息。采用分割重组策略将特定局部特征重组成多个视频序列进行学习,进而极大减少局部特征损失对最终特征的影响。</li> <li>其次,提出了全新的双向图注意力机制模块。将图卷积神经网络和SENet完美结合,在整个序列上进行通道域的模式选择学习。同时通过双向网络进行空间域的注意力区域学习。由于图卷积网络的特性,每一帧图片的注意力特征都是与其他帧相互学习结合的结果,从而极大提高特征的代表性。</li> <li>最终,利用帧间相似度进行序列融合。与大多数利用循环神经网络进行融合算法相比,最大的优势是不需要训练额外的模型参数,仅仅通过数学计算的方式就可以达到融合的目的。这样,数据的类内相似度得到了极大的提高。在结合三元损失函数进行训练后,类间相似度得到了降低,进而提高重识别效果。<br />  <br /> <img src="https://static001.infoq.cn/resource/image/86/41/862c5cb8f7461b016f281d658a3c7041.png" alt="" /></li> </ol> <p>基于视频的行人再识别与单帧图片的行人再识别任务目的是相同的,即在视角不重叠的多摄像机网络下进行行人的匹配。尽管基于单帧图片的行人再识别算法已经取得了不错的进步,但由于单帧图片只包含有限的行人信息,网络提取的特征不具备足够的代表性,检测结果往往受图片质量的影响较大。 <br />  <br /> 与此相比,视频序列的优势便凸显出来。一个短视频序列往往包含行人多运动状态下的更多特征,并且利用时序信息,可以将背景、遮挡等干扰因素的影响降到最低,提升识别的准确度。</p><div align='right'><a href='https://www.infoq.cn/article/6E6R1D5g3HPCYX8kTHSA?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 申省梅团队 https://www.infoq.cn/article/6E6R1D5g3HPCYX8kTHSA?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 12:18:29 GMT 以小见大,从Kafka Monitor源码解读看如何做好黑盒监控 https://www.infoq.cn/article/ucSru1uKkSswLXPcjQgC?utm_source=rss&utm_medium=article <p>众所周知,监控分为黑盒和白盒监控,黑盒监控是通过模拟外部用户对其可见的系统功能进行监控的一种监控方式。作为监控的重要一环,黑盒监控提供了让系统或者服务在发生故障时能够快速通知相关人员的能力。</p> <p>通常情况下白盒监控的数据来自服务或系统自身(例如CPU负载、堆栈信息、连接数······),所以易于采集。而相对而言,黑盒监控的数据通常来自系统和服务外部,需要我们自己开发相关功能监控模块来完成采集。那么,黑盒监控如何做?如何才能在及时发现服务故障的同时不会引起其它问题?</p> <p>本文将分享京东云在Kafka黑盒监控方面的一些实践经验,其中着重对Kafka Monitor监控逻辑的部分代码进行解读,以便大家能够对其优秀的设计有一个更为深入的了解。然后再结合我们在其它服务中的黑盒监控实践,来试图回答上面提出的问题。</p> <h2>Kafka Monitor介绍</h2> <p>Kafka Monitor是由Linkedin开源的一款非常优秀的针对Kafka的黑盒监控软件。它通过模拟客户端行为,生产和消费数据并采集消息的延迟、错误率和重复率等性能和可用性指标,来达到黑盒监控的目的。</p> <h3>Kafka的主要概念</h3> <p>在介绍Kafka Monitor功能监控之前,我们先了解下Kafka的几个主要概念:</p><div align='right'><a href='https://www.infoq.cn/article/ucSru1uKkSswLXPcjQgC?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 京东云应用研发部 https://www.infoq.cn/article/ucSru1uKkSswLXPcjQgC?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 11:46:29 GMT 国内80%程序员缺失基本功,做事凭本能,遇到问题靠加班解决,现实真有这么惨吗?| 话题 https://www.infoq.cn/article/z5Gm9SiaLQj26vLFIYIp?utm_source=rss&utm_medium=article <p>InfoQ与国内最早导入敏捷软件开发方法的熊节先生探讨了”程序员如何练好基本功“的问题,我们也针对这次讨论形成了一篇采访文章:《<a href="https://www.infoq.cn/article/QjDuMC2jewB7Gcv16_Df">为什么 80% 的国内开发者缺乏基本功?</a>》。在采访中,熊节提到:“程序员的基本功才是真正影响开发效率,甚至影响整个项目成败的核心。然而,国内 80% 的软件从业者都存在基本功缺失的问题,其实我想说 90%,太得罪人。”</p> <p>他认为“软件开发是一门手艺,讲究又快又好”,“不是那些高大上、新潮的技术、框架,而是我们每天要做的很基础的事情。比如快捷键是否熟悉,测试习惯好不好,代码干不干净,打字速度有多快等等”。</p> <p>他认为从业者很难进入到理想的工作状态的主要是能力的缺失。</p> <blockquote> <p>像如何拆解任务,如何管理任务进度,如何了解生产流水线是否健康,用什么方式协调人与人之间的合作,这些都是有能力要求的。而从业者不具备这个能力。这又回到最初提到的问题——基本功的缺失。在缺乏基本功的情况下,人们完全凭着人类的本能做事,遇到问题就靠加班解决。</p> </blockquote> <p>而获取扎实基本功的能力靠:</p> <blockquote> <p>练习,不断地练习,反复的刻意练习。刻意练习的要点是什么?第一,重复,不断地重复;第二,跳出舒适区,进入学习区进行练习。用一些枯燥的无趣的方式去训练,不断地磨练,最终形成一种“肌肉记忆”。</p> </blockquote> <p>那么国内程序员的基本功能力到底如何?基本功不扎实的程序员你身边见得多吗?这些基本功不扎实的程序员在日常工作中都有哪些表现?如何去提升自己的基本功?</p><div align='right'><a href='https://www.infoq.cn/article/z5Gm9SiaLQj26vLFIYIp?utm_source=rss&utm_medium=article'>点击查看原文></a></div> Tina https://www.infoq.cn/article/z5Gm9SiaLQj26vLFIYIp?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 11:38:38 GMT 微服务架构如何影响软件开发文化? https://www.infoq.cn/article/LGgNoeg29QoRFBsz5PPS?utm_source=rss&utm_medium=article <blockquote> <p>微服务,并不仅仅是一种代码构造方式。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/9c/5f/9c16dc301aab1fa5a3a5155066b0ad5f.jpg" alt="" /></p> <p>微服务概念一出现就引发了热烈讨论,很多文章都喜欢将其与整体式架构比较,乃至来自大型企业的用例等。然而,在说起微服务时,开发人员关注的往往是这场革命的技术意义,而非其象征的文化颠覆。虽然技术元素也很重要,但其中蕴含的文化变革更加值得重视。</p> <p>我很幸运能够在2014年左右快速融入这场潮流,我也清楚地记得当时能够将陈旧的整体式应用迁移至新的、酷炫无比的微服务架构是多么令人兴奋。和很多朋友一样,我刚开始也只关注技术方面的影响——毕竟,当时正是革命性技术快速涌现的时期(例如,Docker那时刚刚出现)。</p> <p>然而,经过几年发展,尽管在技术层面发生了诸多变化,但我认为微服务对组织中软件开发方式产生的最大影响主要体现在代码归属权以及团队的职能定位上。</p> <h2>功能团队</h2> <p>虽然我们也可以在整体式架构下建立具有跨职能特性的团队,但组织通常会根据具体技术功能(例如前端、后端、系统管理员以及数据库开发等)进行团队拆分。因此,开发人员很少能够接触到生产环境,因此几乎不需要考虑生产与维护方面的问题。James Lewis与Martin Fowler在最初定义微服务架构概念的文章中就强调过这一点。</p><div align='right'><a href='https://www.infoq.cn/article/LGgNoeg29QoRFBsz5PPS?utm_source=rss&utm_medium=article'>点击查看原文></a></div> Albert Kozłowski https://www.infoq.cn/article/LGgNoeg29QoRFBsz5PPS?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 11:30:26 GMT 跨 AZ 部署最佳实践之 Zookeeper https://www.infoq.cn/article/0CMYZPbbhTfCz1GgoLrP?utm_source=rss&utm_medium=article <p>跨AZ部署是实现服务高可用较为有效的方法,同时也极具性价比。如果实现了跨AZ部署,不仅可以消除服务中的单点,同时还可以逐步建设如下能力:服务隔离,灰度发布,N+1冗余,可谓一举多得。因此,接下来我们会对有状态的开源软件进行一系列的跨AZ部署的介绍,本次介绍Zookeeper。</p> <h2>ZK容错数</h2> <p>Zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的(完整机器列表是预先定义在ZK的配置文件中)。也就是说,一个ZK集群有3个实例,一个死了,还剩下2个正常的,过半了,所以3实例的Zookeeper的容忍度为1。同理,一个ZK集群有5个实例,2个死了,还剩下3个正常的,过半了,所以5实例的Zookeeper的容忍度为2。因此可以用2n+1来描述ZK集群的容忍度。考虑到3实例的集群只能故障一个实例,因此,线上集群一般都是五个实例的。</p> <p>按照上述的逻辑,七个实例甚至更多的实例不是更好吗?从实践角度看,如果一个集群5个实例扛不住的情况下,基本就需要做集群拆分了。7个实例的集群也许没啥问题,但是这么大压力的集群,一旦故障,影响面也是非常严重的,因此,更多的采用集群拆分而不是持续扩容的方式。</p> <h2>最佳实践</h2> <p>以线上最为常见的5实例的ZK集群为例进行说明,5实例的ZK集群主要有如下两种部署方式:</p> <p>延时敏感型:单AZ部署方案(AZ1:5),这种部署模式适用于Zookeeper服务的系统全部集中在同一个AZ内。在这种情况下,如果该AZ故障,那么系统必然不可用,这时,ZK即使可用也没有意义,因此也就没有必要去做跨AZ的部署了,并且跨AZ后,还会增加常态下的网络延时</p><div align='right'><a href='https://www.infoq.cn/article/0CMYZPbbhTfCz1GgoLrP?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 焦振清 https://www.infoq.cn/article/0CMYZPbbhTfCz1GgoLrP?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 11:07:24 GMT 换个视角看中台的对与错 https://www.infoq.cn/article/0kLRs9plv4RbyXgPjE6l?utm_source=rss&utm_medium=article <p><img src="https://static001.infoq.cn/resource/image/85/a3/8518d947c21b26a98e64976a2b6ba7a3.jpg" alt="" /></p> <p>中台建设,是近两年非常火热的一个话题,从产品中台,到技术中台,再到组织中台,各种概念、理念,以及方法论被深度的研究、探讨。</p> <p>对于互联网产品领域来讲,中台更多的是2B产品建设中涉及的课题,因为软件系统的抽象复用,更多的是做复杂B端系统建设中面临的问题。因此,中台产品设计,是所有B端产品经理应该深度关注的课题。</p> <p>针对B端产品设计领域,中台产品到底该如何设计?有何特点?设计的本质是什么?有何挑战?本文将从全新的视角,重新审视中台产品建设,让您更加深刻地理解中台产品设计精要。</p> <h2>经典视角下的中台建设</h2> <p>首先,我们有必要回顾下经典的中台建设视角。一般来讲,行业内往往从组织中台、产品中台、数据中台、技术中台这四个主题切入并探讨中台建设。</p><div align='right'><a href='https://www.infoq.cn/article/0kLRs9plv4RbyXgPjE6l?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 杨堃 https://www.infoq.cn/article/0kLRs9plv4RbyXgPjE6l?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 10:35:18 GMT Linux系统安全(七):Nginx 安全 https://www.infoq.cn/article/bZeacuVSCprFL70sD371?utm_source=rss&utm_medium=article <p>Nginx是Web服务器领域的后起之秀,以其现代软件架构设计所提供的高性能和灵活性而被越来越多的网站所采用,在2018年2月活跃网站中的使用比例已达到21.23%(数据来源:Netcraft),是继Apache之后的第二大Web服务器软件。在该部分,我们重点关注2个方面的Nginx的安全设置:使用HTTPS加密和使用NAXSI加固。</p> <h2>使用HTTPS加密网站</h2> <p>从CA签发机构购买了SSL证书后,在Nginx上配置HTTPS的方法是在配置文件nginx.conf中,添加以下配置项:</p> <pre><code>ssl on; ssl_certificate /opt/cert/server.crt; #指定证书存储位置 ssl_certificate_key /opt/cert/server.key; #指定私钥存储位置 ssl_session_timeout 5m; #指定SSL会话超时时间 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL协议版本 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#指定SSL加密算法 ssl_prefer_server_ciphers on; #指定优先采用服务器端加密算法 </code></pre> <p>在配置完成后,使用nginx -t检查配置项是否有误。如无报错,则可以通过重启nginx进程来使配置文件生效。</p> <h2>使用NAXSI加固Web</h2> <p>NAXSI是Nginx服务器上常见的Web应用防火墙。NAXSI的含义是“Nginx Anti XSS &amp; SQL Injection”(Nginx防御跨站脚本和SQL注入),其官方网站是https://github.com/nbs-system/naxsi。从技术上来说,NAXSI是Nginx的第三方模块,适用于很多类UNIX的操作系统平台上。</p> <p>NAXSI和ModSecurity相比,有如下的不同点:</p> <ul> <li> <p>NAXSI可以通过学习模式建立白名单机制,从而使用默认拒绝的方式来最大化的保障Web安全。这通常适用于网站代码和功能不频繁变化的场景,否则极易产生误报。</p><div align='right'><a href='https://www.infoq.cn/article/bZeacuVSCprFL70sD371?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 胥峰 https://www.infoq.cn/article/bZeacuVSCprFL70sD371?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 09:50:54 GMT 如何用 Go 语言写出好用的 Http 中间件? https://www.infoq.cn/article/mjBB5V5qFBKuS5twJpJB?utm_source=rss&utm_medium=article <p>当我们用Go语言编写较为复杂的服务时,一个永恒的话题就是中间件。这个话题在网上被<a href="https://medium.com/@matryer/writing-middleware-in-golang-and-how-go-makes-it-so-much-fun-4375c1246e81">一遍</a>、<a href="https://www.alexedwards.net/blog/making-and-using-middleware">一遍</a>、<a href="https://medium.com/@chrisgregory_83433/chaining-middleware-in-go-918cfbc5644d">又一遍</a>地讨论着。归根结底,中间件应该允许我们:</p> <ol> <li> <p>拦截ServeHTTP调用,并执行任意代码。</p> </li> <li> <p>在持续的链上对请求/响应流做变更。</p> </li> <li> <p>中断中间件链条,或继续下一个中间件拦截器,最终到真正的请求处理程序上面。</p> </li> </ol> <p>这些听起来跟<a href="https://expressjs.com/en/guide/using-middleware.html">express.js 中间件</a>很相似。我们研究了<a href="https://lmgtfy.com/?q=golang+middleware+library">许多资料</a>,发现了一些<a href="https://github.com/urfave/negroni#handlers">已经存在的解决方案</a>,这些方案跟我们想要的非常吻合,但他们要么有<a href="https://github.com/urfave/negroni#bundled-middleware">不必要的额外功能</a>,要么需求<a href="https://github.com/go-midway/midway#basic-design">不对我们的胃口</a>。很明显,我们可以基于<a href="https://expressjs.com/en/guide/using-middleware.html#middleware.router">express.js</a>编写中间件,安装这个干净整洁的组件之后,20行以下代码就可以实现一个轻量级的API</p> <h2>抽象</h2> <p>设计抽象时,首先我们要考虑的就是,如何写中间件函数(从现在起,可以称它为拦截器)。</p> <p>答案很明显:</p> <p>它们看起来就像 <code>http.HandlerFunc</code>,带一个额外的参数next,程序进行下一步的处理。这使得任何人都可以像编写简单函数一样,类似http.HandlerFunc这样来编写拦截器,做他们想做的,并能按照他们的意愿传递控制权。</p><div align='right'><a href='https://www.infoq.cn/article/mjBB5V5qFBKuS5twJpJB?utm_source=rss&utm_medium=article'>点击查看原文></a></div> Zohaib Sibte Hassan https://www.infoq.cn/article/mjBB5V5qFBKuS5twJpJB?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 09:00:00 GMT 携程酒店RSocket实践 https://www.infoq.cn/article/2bmKflDJGa2yHeMg*uMF?utm_source=rss&utm_medium=article <h2>一、初识RSocket</h2> <p>在QCon2019北京大会上第一次得知RSocket。印象深刻的是Netifi公司通过他们研发的RSocket帮助企业实现微服务,在40,000RPS的场景下,Istio需要每月3495美金,而Netifi每月只要388美金,同时性能提升10倍,这无疑对任何企业都是极具吸引力的。</p> <p>Netiffi的创始人在会上也谈到,使用Netiffi的Broker,得益于RSocket协议,无需独立部署监控、服务发现、健康检查、负载均衡等等中间件。如果是跨云部署,例如谷歌云与亚马逊云之间,或者亚马逊云与企业本地数据中心,都只要通过Netiffi的Broker即可无缝沟通,无需处理复杂的适配问题。</p> <p>回来查询了不算丰富的资料后发现,Istio的技术专家发文称RSocket Broker的service mesh比Istio有将近10倍的速度提升。考虑到Istio专家的观点还有一定说服力的,那么RSocket真的有那么厉害?</p> <h2>二、RSocket生产实践</h2> <p>我们决定到生产上面去实践RSocket,看看性能到底如何。现在已经支持RSocket的service框架有Spring Flux:</p> <p><img src="https://static001.infoq.cn/resource/image/b2/1e/b27e2659a572a6d23542ea268cbc771e.png" alt="" /></p><div align='right'><a href='https://www.infoq.cn/article/2bmKflDJGa2yHeMg*uMF?utm_source=rss&utm_medium=article'>点击查看原文></a></div> 刘诚 https://www.infoq.cn/article/2bmKflDJGa2yHeMg*uMF?utm_source=rss&utm_medium=article Fri, 23 Aug 2019 08:00:00 GMT
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<rss version="2.0">
<channel>
<title>InfoQ - 促进软件开发领域知识与创新的传播</title>
<link>https://www.infoq.cn</link>
<description>InfoQ 是一个实践驱动的社区资讯站点,致力于促进软件开发领域知识与创新的传播。</description>
<pubDate>Sat, 24 Aug 2019 08:03:33 GMT</pubDate>
<copyright>
Copyright © 2019, Geekbang Technology Ltd. All rights reserved. 极客邦控股(北京)有限公司
</copyright>
<item>
<title>FaceBook都认真发币了,银行区块链到底用的怎么样?</title>
<link>
https://www.infoq.cn/article/CYUvDW6UM7FFpPHbbqPN?utm_source=rss&utm_medium=article
</link>
<description>
<p>2019年6月18日,Facebook 发布消息称计划发行一种名为“Libra”的稳定币,通过Libra为全球超过十亿人提供普惠金融服务,Libra让已经略感平静的区块链湖面顿时活跃。从比特币到Libra,区块链技术走过了一个十年的轮回,从金融出发再回到金融。</p> <p>虽然目前Libra前途尚无定论,但是,它已经让全世界广泛、一致地深度思考了区块链技术对金融行业的改变能力。Libra是对区块链技术经典目标的回归,而且非常强势。</p> <p>《环球时报》英文版针对Libra发表的评论文章指出“全球数字货币竞争时代,中国不能缺席”,“随着全球数字经济竞争时代的到来,中国产业和监管机构都有必要就数字货币进行更多对话,理解甚至是鼓励数字货币。否则,中国有可能会在新的金融格局中落后”。</p> <p>人民银行2019年8月2日召开的工作会议中,也明确提出要加快我国法定数字货币的研究步伐。2019年9月,国务院发布的《关于支持深圳建设中国特色社会主义先行示范区的意见》中也指出,“支持深圳开展数字货币研究与移动支付等创新应用”。</p> <p>那么在区块链走过的这十年中,银行到底用的怎么样呢?我们一起来看些国内外银行的实际用例吧。</p><div align='right'><a href='https://www.infoq.cn/article/CYUvDW6UM7FFpPHbbqPN?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>付晓岩</author>
<guid>
https://www.infoq.cn/article/CYUvDW6UM7FFpPHbbqPN?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 23:19:20 GMT</pubDate>
</item>
<item>
<title>软件交付的演进历程</title>
<link>
https://www.infoq.cn/article/P290jducMT3xzx9exYel?utm_source=rss&utm_medium=article
</link>
<description>
<p>经常有人会问我什么是敏捷流程。我都会给出那个让人不尽满意的答案“没有一个单独的流程。它取决于每个团队的实际情况”。为了更好的回答这个问题,我撰写该文介绍了软件交付的演进历史。我打算归纳成一个线性的发展,即使我知道它并不像我要表达的那样有序和线性。但我觉得参考它,能得到比前面那个“取决于”的答案更多的信息。希望它对你同样有用。</p> <h2>开始阶段</h2> <p>软件开发刚开始的时候,并没有很好的经验或思想来指导一个开发项目的运行。最开始,人们标识出软件开发的一些关键假设,映射到那时已有的可理解的流程上。</p> <p>最初的假设如下:</p> <ol> <li>软件开发需要很长的时间</li> <li>软件发布不会频繁</li> <li>软件构建后很难进行更改,所以确保第一次把事情做对</li> <li>软件开发需要很多不同的、成本高昂的技能集</li> </ol> <p>建筑行业也有着类似的假设。建筑需要很长的时间,竣工后不能简单的添加一层或把面积扩大。建筑也涉及到很多不同的专业,从设计师到开发商,到质量监理以及工人、电工和水暖工等等。从这些角色的命名可以看出,软件开发从建筑行业借鉴了很多。</p> <p>建筑行业遵循的流程是,把端到端的项目分成不同的阶段,每个流程阶段由不同的专业人士来负责。这种在每个阶段赋予角色的做法有利于充分利用成本高昂的人力资源。<br /> <img src="https://uploader.shimo.im/f/TKiP8PcWSk8x9fMD.jpeg!thumbnail" alt="图片" /><br /> 瀑布流程<br /> 这看起来是一个很棒的流程。瀑布模型在20世纪60年代后期开始采用,直到80年代中期它才成为事实上的软件交付标准。但在流程执行中出现了些问题。根据<a href="https://www.projectsmart.co.uk/white-papers/chaos-report.pdf">2014 问题报告</a>,31%的瀑布项目在投入很多后被取消,更有52%的项目预算需要翻倍。</p> <p>鉴于这种很低的成功概率,很多人开始各自提出新的、更好的方式来交付项目,以克服瀑布流程中的一些缺陷。</p><div align='right'><a href='https://www.infoq.cn/article/P290jducMT3xzx9exYel?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>Rory Madden</author>
<guid>
https://www.infoq.cn/article/P290jducMT3xzx9exYel?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 22:27:33 GMT</pubDate>
</item>
<item>
<title>传旷视科技最早于周五向港交所提交上市申请,融资规模高达10亿美元</title>
<link>
https://www.infoq.cn/article/GpeX8ou0RQgrhHKvk5Yo?utm_source=rss&utm_medium=article
</link>
<description>
<p><img src="https://static001.infoq.cn/resource/image/f1/d8/f1da9f1acb7eba6d7dfc0ea340b559d8.jpg" alt="" /></p> <blockquote> <p>InfoQ 8月23日消息,据彭博社报道,有知情人士透露,人工智能独角兽旷视科技计划最早于周五向港交所提交上市申请文件,融资规模可能高达10亿美元。</p> </blockquote> <p>而在三天之前,就曾有媒体称,旷视科技或将于短期内向港交所提交上市申请,旷视拟采用WVR架构(同股不同权结构)上市。但有市场人士指出,现在很多公司在提交上市申请时也要“看准点”,因此,旷视科技最终会否提交上市申请还要视市场情况而定。当时对于该传闻,旷视科技回应称不予置评。</p> <h2>近半年来旷视上市传闻不断</h2> <p>近半年以来,关于旷视科技上市的传闻一直不绝于耳。</p> <p>7月1日,据CV智识报道,旷视正筹备于今年之内赴香港上市,并积极考虑采用“同股不同权”架构。一位旷视内部人员透露,旷视目前距离上市已非常接近。另据南华早报消息,旷视IPO初步日期定在7月。路透社香港的报道称,旷视已邀请花旗、高盛和摩根大通等三家投行参与其赴港IPO。</p><div align='right'><a href='https://www.infoq.cn/article/GpeX8ou0RQgrhHKvk5Yo?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>刘燕</author>
<guid>
https://www.infoq.cn/article/GpeX8ou0RQgrhHKvk5Yo?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 20:07:17 GMT</pubDate>
</item>
<item>
<title>如何查询数据是否已泄露?试试Firefox Monitor</title>
<link>
https://www.infoq.cn/article/1gNvW7gCsmSTkmCZxyRU?utm_source=rss&utm_medium=article
</link>
<description>
<blockquote> <p>数据泄露事件层出不穷。8月21日,有两起数据泄露事件发生,分别是国内的雪球网和国外的电影票订阅服务商MoviePass。相比Facebook、万豪和华住发生的数据泄露,这两起数据泄露事件是“大巫见小巫”。但是,以后的数据泄露事件会不断增多,我们需要应对之策。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/39/50/39d85e0a147a1df7b86c393ae03afb50.jpg" alt="" /></p> <p>8月21日,微博上有网友爆料:雪球网发生数据泄露,涉及12万人的数据只卖75美元,泄露数据包含多项关键信息,例如姓名、身份证、手机号码、账户和密码。同一天,据外媒<a href="https://securityaffairs.co/wordpress/">Securityaffairs</a>披露,安全专家Mossab Hussein发现,电影票订阅服务商MoviePass暴露了数以千计的客户卡号和个人信用卡信息。因数据库未加密,包含信用卡数据的数据库被泄露,涉及包含1.61亿条记录。</p> <p>目前,无论是国内,还是国外,数据泄露事件持续增加,涉及人数越来越多。据启明星辰发布的《网络安全态势观察报告(2018-2019)》指出:过去一年多,各类信息泄露事件已连续5年突破历史记录。信息泄露事件呈现常态化现象,随着全球信息化程度的不断提高,这一情况会不断加剧。<br /> <img src="https://static001.infoq.cn/resource/image/4a/32/4a39c33a1fd88f6393d0b7cd36001332.jpg" alt="" /><br /> 信息泄露的途径主要分为内部人员或第三方合作伙伴泄露,信息系统本身漏洞泄露,机构本身的防护机制不健全,以及对安全配置的疏忽大意等问题。</p> <p>任何一起数据泄露事件,大家关心的问题是:这次数据泄露事件是否有我?我的数据是否已经被泄露?<br /> <img src="https://static001.infoq.cn/resource/image/10/25/1012155c9f125a614713444f87685125.jpg" alt="" /><br /> 针对这个问题,<a href="https://monitor.firefox.com/">Firefox Monitor</a>或许能“祝你一臂之力”。据维基百科介绍,Firefox Monitor是由Mozilla开发的在线服务,它于2018年9月25日正式推出。</p><div align='right'><a href='https://www.infoq.cn/article/1gNvW7gCsmSTkmCZxyRU?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>東山</author>
<guid>
https://www.infoq.cn/article/1gNvW7gCsmSTkmCZxyRU?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 19:25:11 GMT</pubDate>
</item>
<item>
<title>华为史上最强AI芯片昇腾910问世,明年开源自研AI框架MindSpore</title>
<link>
https://www.infoq.cn/article/c6ie9MHewYvE0l15IvqY?utm_source=rss&utm_medium=article
</link>
<description>
<blockquote> <p>2018 年 10 月,华为在上海举办的全连接大会上公布了两款芯片:昇腾 910 和昇腾 310,并表示它们将在 2019 年面世。<br /> 2019 年 8 月 23 日,华为在深圳总部举办的昇腾 910 AI 处理器和 MindSpore 计算框架发布会上,正式发布算力最强的 AI 处理器 Ascend 910(昇腾 910),同时推出了全场景 AI 计算框架 MindSpore,后者将在 2020 年第一季度全面开源。<br /> 华为公司轮值董事长徐直军在发布会上表示:昇腾 910、MindSpore 的推出,标志着华为已完成全栈全场景 AI 解决方案(Portfolio)的构建,也标志着华为 AI 战略的执行进入新的阶段。</p> </blockquote> <h2>昇腾910正式推出,华为AI生态再进一步</h2> <h3>算力最强AI处理器昇腾910</h3> <p>华为副董事长徐直军仍然负责本次发布,在会上他宣布:昇腾910芯片正式发布。这标志着华为AI生态又向前迈进了一大步。</p> <p><img src="https://constatic.geekbang.org/infoq/5d5f9a3f48631.png" alt="image" /></p> <p>去年在上海的全连接大会上,徐直军确认了华为“造芯”的传闻,并<a href="https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&amp;mid=2247493313&amp;idx=1&amp;sn=b591a5a6df896a0b085dafc72f6ef70a&amp;chksm=fbea5f0ecc9dd6182f8dd4e98b9ddcc8f082bda9fc1fa87b185ff36f578c64114148dfbcc7f7&amp;scene=27#wechat_redirect">宣布推出</a>昇腾910与昇腾310两款芯片,其中:</p> <ul> <li> <p>昇腾910,是目前全球已发布的单芯片计算密度最大的 AI 芯片;</p> </li> <li> <p>昇腾310,是目前面向计算场景最强算力的 AI SoC。</p> </li> </ul> <p>得益于达芬奇架构针对AI运算特征的设计,这两款芯片能够大大加速华为AI在平安城市、互联网、金融、运营商、交通、电力等各行业的应用。</p><div align='right'><a href='https://www.infoq.cn/article/c6ie9MHewYvE0l15IvqY?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>陈思,蔡芳芳</author>
<guid>
https://www.infoq.cn/article/c6ie9MHewYvE0l15IvqY?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 16:48:29 GMT</pubDate>
</item>
<item>
<title>IoT时代,高精度GNSS技术如何解决IoT场景下的时空定位问题</title>
<link>
https://www.infoq.cn/article/u837YpVePljkTVwRiToV?utm_source=rss&utm_medium=article
</link>
<description>
<blockquote> <p>IoT时代,定位是实现万物互联的重要基础,在一些重要的IoT场景下,精准时空技术如何与IoT结合?GNSS定位经过技术发展,如何实现定位从10米到亚米级甚至厘米级的跨越?精准时空技术的进步,对IoT的发展又意味着什么?</p> </blockquote> <p>从互联网到移动互联网再到 IoT,网络技术的发展其实是解决从人与人的连接到人与物的连接,最终到物与物连接的过程。 IoT 并不是一个新的行业,而是多行业融合形成的产业,从产业链角度自下而上来看,IoT 被分为4个层次:感知层(芯片/传感器)、网络层(芯片/通信模组/通信网络)、平台层(平台/操作系统)和应用层(智能终端/集成应用)。</p> <p><img src="https://static001.infoq.cn/resource/image/81/f0/8114554ea17f0785281c0a4f11c79bf0.png" alt="" /></p> <p>在今天,5G、数据、精准时空都被认为是 IoT 时代的基础设施,5G是网络层的基础设施:在网络传输层面让实时传输的速度变得更快更稳定;数据是平台层的基础设施:数据层面,包括 AI、云计算、大数据在内的技术让信息处理能力快速提升;而精准时空定位其实是聚焦于 IoT 感知层的基础设施:涉及到芯片和传感器的应用,让位置定位更实时更精准。很多人对精准时空定位是既熟悉又陌生的,可能听过 GPS、北斗,但是对精准时空的概念、 GNSS 是什么以及背后的定位原理不甚了解。</p> <p>IoT 时代,随着定位高精准化及定制化需求的出现,精准时空服务中的基础设施和高精度定位方案,将是打通从空间维度“物与物交流”的新一代科技及经济增长点,在解决各类终端设备的硬件适配和系统通用性问题后,精准时空服务技术将使得未来消费终端的更新换代以几何式增长。</p><div align='right'><a href='https://www.infoq.cn/article/u837YpVePljkTVwRiToV?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>王利莹</author>
<guid>
https://www.infoq.cn/article/u837YpVePljkTVwRiToV?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 16:06:25 GMT</pubDate>
</item>
<item>
<title>最终,我们放弃了微服务</title>
<link>
https://www.infoq.cn/article/p7AFC8pe0WAaAHupf6OH?utm_source=rss&utm_medium=article
</link>
<description>
<blockquote> <p>微服务被认为是一种理想的架构模式,因此,Steven Lemon所在公司的领导层决定从单体架构向微服务架构迁移,这让整个开发团队在随后的的日子里苦不堪言,七大现实问题摆在面前无法解决,微服务架构的好处也没有享受到,并发现这不单单是一个技术问题。最终,整个团队决定放弃。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/97/e7/9774cde3b084d9337106a7414119d7e7.jpg" alt="" /></p> <h2>领导决定:迁移微服务</h2> <p>最近,我所在的开发团队在紧张的交付周期结束后,有了短暂的休息机会。领导层认为可以利用这段时间将单体架构迁移至微服务。经过一个月的调研和准备之后,我们最终放弃迁移计划,继续使用原先的单体架构。在我们看来,微服务不仅不会帮到我们,反而会对开发流程造成严重影响。</p> <p>微服务被认为是一种理想的架构模式,但并不适合我们。我们公司的情况是这样的:一共有200多名开发人员,不过我们团队只有5个人,大概有5%的后端开发工作涉及公司层面的单体系统,这是一个巨大的C#应用程序。剩下的时间,我们开发了自己的两个Node服务。</p> <p>我们团队负责的这两个服务都很小巧,完全可以控制开发、架构和部署整个流程。遇到性能问题时,我们会把生产环境中的实例数量增加一倍,直到把底层问题解决。我们几乎不与其他团队合作,因为这些服务是用TypeScript开发的,所以我们团队(主要是前端开发人员)能够在前端和后端使用相同的编程语言。最重要的是,我们可以在客户端及后端的验证和报告服务中包含复杂的规则计算引擎。总而言之,我们整个团队专注于特定业务。</p><div align='right'><a href='https://www.infoq.cn/article/p7AFC8pe0WAaAHupf6OH?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>Steven Lemon</author>
<guid>
https://www.infoq.cn/article/p7AFC8pe0WAaAHupf6OH?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 16:02:52 GMT</pubDate>
</item>
<item>
<title>Kubernetes爆发严重漏洞:可能影响所有开源版本</title>
<link>
https://www.infoq.cn/article/2lxylPOCU4cf9MR2S5fp?utm_source=rss&utm_medium=article
</link>
<description>
<p>根据<a href="https://www.bleepingcomputer.com/news/security/severe-flaws-in-kubernetes-expose-all-servers-to-dos-attacks/">报道</a>,Kubernetes爆发严重漏洞,可能会影响所有开源版本。这两个漏洞是处理容器化应用程序的高严重性漏洞,可能允许未经授权的攻击者触发拒绝服务(DoS)状态。在发现漏洞后,Kubernetes开发团队已经发布了修补版本,以解决这些新发现的安全漏洞并阻止潜在的攻击者。</p> <p><img src="https://static001.infoq.cn/resource/image/b2/c0/b296eb5f63602eed8b926139f8479cc0.jpg" alt="" /></p> <p>Kubernetes产品安全委员会的Micah Hausler在Kubernetes安全问题公告列表上透露:“Go语言的net/http库中发现了一个安全问题,将会影响所有Kubernetes版本和组件。这些漏洞可能导致采用HTTP或HTTPS侦听器的任何进程面临DoS。”</p> <p>Netflix在8月13日宣布发现了多个漏洞,这些漏洞使本身支持HTTP/2通信的服务器暴露在DoS攻击面前。在与安全公告一同发布的八个CVE中,其中两个还影响Go和旨在服务于HTTP/2流量(包括 /healthz)的所有Kubernetes组件。</p> <p>标为CVE-2019-9512和CVE-2019-9514的两个漏洞已被Kubernetes产品安全委员会定为CVSS v3.0基础分7.5,这两个漏洞使“不受信任的客户端可以分配无限量的内存,直到服务器崩溃。”</p><div align='right'><a href='https://www.infoq.cn/article/2lxylPOCU4cf9MR2S5fp?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>赵钰莹</author>
<guid>
https://www.infoq.cn/article/2lxylPOCU4cf9MR2S5fp?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 15:53:39 GMT</pubDate>
</item>
<item>
<title>Pivotal 开源 Kubernetes 原生容器构建服务 kpack</title>
<link>
https://www.infoq.cn/article/rotUZxgljYWNdGRhDAo1?utm_source=rss&utm_medium=article
</link>
<description>
<p>过去几年以来,容器技术的普及程度一直在不断提高。然而,这种技术的具体效用在企业规模场景下却往往难以量化。</p> <p>近期Pivotal推出了一系列产品,希望帮助企业通过Kubernetes原生工具链获得更多的回报,Pivotal Build Service就是其中的一个代表性的工具。</p> <p>Build Service可帮助开发团队持续构建、维护以及更新生产就绪型OCI镜像,其包含了两大核心组件:Cloud Native Buildpakcs以及自主研发的Kubernetes资源控制器。</p> <p>其中Cloud Native Buildpacks是由Pivotal与Heroku联合研发,能够以一致且可重现的方式构建模块与镜像,生成的镜像能够实现随处运行;第二大组件则是<a href="https://github.com/pivotal/kpack">kpack</a>,属于一组Kubernetes资源控制器,也正是我们今天文章的探讨主体。(感兴趣的朋友可以<a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/">点击此处</a>查看Kubernetes资源说明文档。)</p> <h2>kpack:一种 Kubernetes 原生容器构建与更新方式</h2> <p>我们希望在Build Service中将Cloud Native Buildpacks体验与Kubernetes的声明模式相结合,并以大家熟悉的方式扩展Kubernetes工作流程。立足这一目标,我们利用定制化资源定义对Kubernetes API进行了扩展。如此一来,我们就可以利用Kubernetes技术建立起一个可组合的声明式架构,进而用于构建服务。定制化资源定义(CRD)由定制化控制器负责协调,用于实现容器镜像的自动化构建,并可根据用户提供的配置随时对镜像加以更新。</p><div align='right'><a href='https://www.infoq.cn/article/rotUZxgljYWNdGRhDAo1?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>Matthew McNew</author>
<guid>
https://www.infoq.cn/article/rotUZxgljYWNdGRhDAo1?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 15:39:18 GMT</pubDate>
</item>
<item>
<title>2020年,你学的编程语言价值多少?</title>
<link>
https://www.infoq.cn/article/DHtaG30eXOWKVgmqcq0o?utm_source=rss&utm_medium=article
</link>
<description>
<blockquote> <p>编程语言是人们指导或控制机器的工具,其开发目的在于让操控机器的过程更加简单和顺畅。正因如此,数百种编程语言应运而生。然而,它们的命运却各不相同。一些语言已不复使用,或将在未来几年淘汰。相应地,一些语言将会被充分使用,还有一些崭新的编程语言正在逐渐被人们所接受。</p> <p>本文选取真实可信的调查、统计数据、搜索结果以及薪资等数据,预测2020年编程语言的发展趋势。这篇文章将帮助初学者选择适合自己的入门语言,并指导资深人士在切换语言和继续使用当前语言之间作出选择。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/ba/f2/ba23d9dea388f3bc2c958bdbcba47df2.jpg" alt="" /></p> <p>我通过两个表格总结了过去五年间编程语言的潮流趋势。相关数据来源于<a href="https://insights.stackoverflow.com/survey/">2015—2019年Stack Overflow</a>的调查结果。为了帮助读者更加准确地理解,我将编程语言分为两组,第一组是2000年以前推出的编程语言,第二组是2000年以后推出的语言。虽然选择2000年作为划分界限是随机的,但这对于理解两组语言的发展趋势非常有帮助。表格还列出了这些编程/脚本语言的起源年份与主要用途。</p> <table> <thead> <tr> <th style="text-align:left"><strong>语言名称</strong></th> <th style="text-align:center"><strong>推出时间</strong></th> <th style="text-align:left"><strong>2015</strong></th> <th style="text-align:center"><strong>2016</strong></th> <th style="text-align:left"><strong>2017</strong></th> <th style="text-align:center"><strong>2018</strong></th> <th style="text-align:left"><strong>2019</strong></th> <th style="text-align:center"><strong>主要场景</strong></th> </tr> </thead> <tbody> <tr> <td style="text-align:left">Javascript</td> <td style="text-align:center">1995</td> <td style="text-align:left">54.4%</td> <td style="text-align:center">55.4%</td> <td style="text-align:left">62.5%</td> <td style="text-align:center">71.5%</td> <td style="text-align:left">67.8%</td> <td style="text-align:center">Web 开发、动态脚本、客户端和服务端</td> </tr> <tr> <td style="text-align:left">Java</td> <td style="text-align:center">1995</td> <td style="text-align:left">37.4%</td> <td style="text-align:center">36.3%</td> <td style="text-align:left">39.7%</td> <td style="text-align:center">45.4%</td> <td style="text-align:left">41.1%</td> <td style="text-align:center">企业应用</td> </tr> <tr> <td style="text-align:left">Bash/Shell</td> <td style="text-align:center">1971/79</td> <td style="text-align:left">-</td> <td style="text-align:center">-</td> <td style="text-align:left">-</td> <td style="text-align:center">40.4%</td> <td style="text-align:left">36.6%</td> <td style="text-align:center">自动化和系统管理</td> </tr> <tr> <td style="text-align:left">Python</td> <td style="text-align:center">1991</td> <td style="text-align:left">23.8%</td> <td style="text-align:center">24.9%</td> <td style="text-align:left">32.0%</td> <td style="text-align:center">37.9%</td> <td style="text-align:left">41.7%</td> <td style="text-align:center">通用</td> </tr> <tr> <td style="text-align:left">PHP</td> <td style="text-align:center">1995</td> <td style="text-align:left">29.7%</td> <td style="text-align:center">25.9%</td> <td style="text-align:left">28.1%</td> <td style="text-align:center">31.4%</td> <td style="text-align:left">26.4%</td> <td style="text-align:center">Web 开发、服务端</td> </tr> <tr> <td style="text-align:left">C</td> <td style="text-align:center">1972</td> <td style="text-align:left">16.4%</td> <td style="text-align:center">15.5%</td> <td style="text-align:left">19.0%</td> <td style="text-align:center">22.1%</td> <td style="text-align:left">20.6%</td> <td style="text-align:center">通用、底层开发语言</td> </tr> <tr> <td style="text-align:left">C++</td> <td style="text-align:center">1980/83</td> <td style="text-align:left">20.6%</td> <td style="text-align:center">19.4%</td> <td style="text-align:left">22.3%</td> <td style="text-align:center">24.6%</td> <td style="text-align:left">23.5%</td> <td style="text-align:center">通用</td> </tr> <tr> <td style="text-align:left">Ruby</td> <td style="text-align:center">1995</td> <td style="text-align:left">8%</td> <td style="text-align:center">8.9%</td> <td style="text-align:left">9.1%</td> <td style="text-align:center">10.3%</td> <td style="text-align:left">8.4%</td> <td style="text-align:center">Web 开发</td> </tr> <tr> <td style="text-align:left">R</td> <td style="text-align:center">1993</td> <td style="text-align:left">–</td> <td style="text-align:center">–</td> <td style="text-align:left">4.5%</td> <td style="text-align:center">6.0%</td> <td style="text-align:left">5.8%</td> <td style="text-align:center">统计计算</td> </tr> <tr> <td style="text-align:left">Objective-C</td> <td style="text-align:center">1986</td> <td style="text-align:left">7.8%</td> <td style="text-align:center">6.5%</td> <td style="text-align:left">6.4%</td> <td style="text-align:center">7.3%</td> <td style="text-align:left">4.8%</td> <td style="text-align:center">通用</td> </tr> </tbody> </table> <h2>观察结果</h2> <p>从2018年到2019年,除了Python以外,所有语言的流行度都在下滑。</p><div align='right'><a href='https://www.infoq.cn/article/DHtaG30eXOWKVgmqcq0o?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>AJIT KUMAR</author>
<guid>
https://www.infoq.cn/article/DHtaG30eXOWKVgmqcq0o?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 15:01:47 GMT</pubDate>
</item>
<item>
<title>Azure Functions现已正式支持Python语言</title>
<link>
https://www.infoq.cn/article/sIPZW5aObwEPobOsYRpN?utm_source=rss&utm_medium=article
</link>
<description>
<p>近日,作为微软公司推出的云托管、无服务器、事件驱动型计算服务,Azure Functions<a href="https://visualstudiomagazine.com/articles/2019/08/22/azure-functions-python.aspx">宣布</a>正式支持Python编程语言。在此之前,Python支持功能就以预览形式发布,并得到GE航空以及TCF银行等多家企业的采用。</p> <p><img src="https://static001.infoq.cn/resource/image/73/a0/73c9e19e93a33a3fb0a9e56be8a8a7a0.jpg" alt="" /></p> <p>与亚马逊云服务中的AWS Lambda与Google Cloud Platform中的Google Cloud Functions类似,Azure Functions允许开发人员直接提交待执行的代码(通常作为事件或者绑定响应),且无需对服务器进行任何配置或者管理(皆由系统自动完成)。</p> <p>微软一直忙于对Azure Functions进行完善,先后于今年2月添加了Java支持能力,同时改进了对TypeScript的支持效果。随着此次对Python的支持,Azure Functions已经覆盖了两种最为常用的主流编程语言。</p> <p>Azure Functions团队的Daria Grigoriu在今年8月19日的一篇博文中指出,“现在,大家可以开发Python 3.6应用程序,并在跨平台开源Functions 2.0运行时上加以运行。应用程序能够以代码或者Docker容器的形式,直接交付至Azure当中基于Linux的无服务器托管平台。”</p><div align='right'><a href='https://www.infoq.cn/article/sIPZW5aObwEPobOsYRpN?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>David Ramel</author>
<guid>
https://www.infoq.cn/article/sIPZW5aObwEPobOsYRpN?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 14:16:36 GMT</pubDate>
</item>
<item>
<title>澎思科技刷新视频行人再识别(Video-based ReID)三大数据集世界纪录</title>
<link>
https://www.infoq.cn/article/6E6R1D5g3HPCYX8kTHSA?utm_source=rss&utm_medium=article
</link>
<description>
<p>继在三大主流单帧图片行人再识别数据集(Market1501,DukeMTMC-reID,CUHK03)刷新世界纪录后,近日,澎思科技(Pensees)在基于视频的行人再识别数据集(PRID-2011,iLIDS-VID,MARS)中再次取得突破性进展,并在三大数据集上实现算法关键指标首位命中率(Rank-1 Accuracy)大幅度提升,准确率创历史新高。<br /> <img src="https://static001.infoq.cn/resource/image/6a/40/6afc80799a2e56b5a39d59026fd32a40.png" alt="" /></p> <p><strong>实现关键指标提升,新算法刷新三大数据集世界纪录</strong><br />  <br /> PRID-2011、iLIDS-VID和MARS均为基于视频的行人再识别数据集。PRID-2011数据集中的视频对通过两个固定的监控摄像头进行采集,摄像头A包含385个行人,摄像头B包含749个行人。这些行人中,只有200个行人同时出现在两个摄像头中。iLIDS-VID是在PRID-2011之后公布的数据集,与PRID-2011相比,数据更加整齐,也更有挑战性。iLIDS-VID数据集是通过机场到达大厅的CCTV监控视频采集得到的,包含300个行人在两个摄像头下的600段视频。视频中存在严重的着装相似,光照和视角变化,复杂背景和遮挡现象,因此识别难度大。MARS数据集是目前基于视频ReID最大的数据集,是单帧图片行人再识别数据集Market1501的扩充版,图像数量由32,668幅扩展到了1,191,003幅。<br />  <br /> 与单帧图片的行人再识别数据集一样,首位命中率(Rank-1 Accuracy)和平均精度均值(Mean Average Precision,mAP)是衡量视频行人再识别ReID算法水平的核心指标。澎思科技此次一举实现在三大数据库上,仅利用原始数据就实现Rank-1 Accuracy关键指标大幅度提升。<strong>目前,澎思科技算法在最大的视频数据集MARS上的首位命中率指标已经达到88.8%,领先香港中文大学、中科大、北京大学等国内外知名机构。在iLIDS-VID和PRID-2011等数据集上首位命中率也分别达到了88.0%和95.5%。</strong><br />  <br /> <img src="https://static001.infoq.cn/resource/image/69/9c/6906d1488f3553b449d00931b014809c.png" alt="" /></p> <center>澎思科技行人再识别ReID算法在MARS数据集的部分测试结果</center> <p><strong>新算法立足于现实场景</strong></p> <p>澎思科技此次成果的取得源于澎思新加坡研究院对算法的自研创新和融合探索,是立足于澎思现有业务和商业模式,结合公司的发展方向针对性开展垂直领域技术研发和创新。主要包括以下几个方面:</p> <ol> <li>受遮挡、姿态变化、视角变化等因素的影响,视频序列中行人的特征是不连续的。用全局特征来度量每一帧图片的权重往往会损失掉许多重要的信息。采用分割重组策略将特定局部特征重组成多个视频序列进行学习,进而极大减少局部特征损失对最终特征的影响。</li> <li>其次,提出了全新的双向图注意力机制模块。将图卷积神经网络和SENet完美结合,在整个序列上进行通道域的模式选择学习。同时通过双向网络进行空间域的注意力区域学习。由于图卷积网络的特性,每一帧图片的注意力特征都是与其他帧相互学习结合的结果,从而极大提高特征的代表性。</li> <li>最终,利用帧间相似度进行序列融合。与大多数利用循环神经网络进行融合算法相比,最大的优势是不需要训练额外的模型参数,仅仅通过数学计算的方式就可以达到融合的目的。这样,数据的类内相似度得到了极大的提高。在结合三元损失函数进行训练后,类间相似度得到了降低,进而提高重识别效果。<br />  <br /> <img src="https://static001.infoq.cn/resource/image/86/41/862c5cb8f7461b016f281d658a3c7041.png" alt="" /></li> </ol> <p>基于视频的行人再识别与单帧图片的行人再识别任务目的是相同的,即在视角不重叠的多摄像机网络下进行行人的匹配。尽管基于单帧图片的行人再识别算法已经取得了不错的进步,但由于单帧图片只包含有限的行人信息,网络提取的特征不具备足够的代表性,检测结果往往受图片质量的影响较大。 <br />  <br /> 与此相比,视频序列的优势便凸显出来。一个短视频序列往往包含行人多运动状态下的更多特征,并且利用时序信息,可以将背景、遮挡等干扰因素的影响降到最低,提升识别的准确度。</p><div align='right'><a href='https://www.infoq.cn/article/6E6R1D5g3HPCYX8kTHSA?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>申省梅团队</author>
<guid>
https://www.infoq.cn/article/6E6R1D5g3HPCYX8kTHSA?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 12:18:29 GMT</pubDate>
</item>
<item>
<title>以小见大,从Kafka Monitor源码解读看如何做好黑盒监控</title>
<link>
https://www.infoq.cn/article/ucSru1uKkSswLXPcjQgC?utm_source=rss&utm_medium=article
</link>
<description>
<p>众所周知,监控分为黑盒和白盒监控,黑盒监控是通过模拟外部用户对其可见的系统功能进行监控的一种监控方式。作为监控的重要一环,黑盒监控提供了让系统或者服务在发生故障时能够快速通知相关人员的能力。</p> <p>通常情况下白盒监控的数据来自服务或系统自身(例如CPU负载、堆栈信息、连接数······),所以易于采集。而相对而言,黑盒监控的数据通常来自系统和服务外部,需要我们自己开发相关功能监控模块来完成采集。那么,黑盒监控如何做?如何才能在及时发现服务故障的同时不会引起其它问题?</p> <p>本文将分享京东云在Kafka黑盒监控方面的一些实践经验,其中着重对Kafka Monitor监控逻辑的部分代码进行解读,以便大家能够对其优秀的设计有一个更为深入的了解。然后再结合我们在其它服务中的黑盒监控实践,来试图回答上面提出的问题。</p> <h2>Kafka Monitor介绍</h2> <p>Kafka Monitor是由Linkedin开源的一款非常优秀的针对Kafka的黑盒监控软件。它通过模拟客户端行为,生产和消费数据并采集消息的延迟、错误率和重复率等性能和可用性指标,来达到黑盒监控的目的。</p> <h3>Kafka的主要概念</h3> <p>在介绍Kafka Monitor功能监控之前,我们先了解下Kafka的几个主要概念:</p><div align='right'><a href='https://www.infoq.cn/article/ucSru1uKkSswLXPcjQgC?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>京东云应用研发部</author>
<guid>
https://www.infoq.cn/article/ucSru1uKkSswLXPcjQgC?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 11:46:29 GMT</pubDate>
</item>
<item>
<title>国内80%程序员缺失基本功,做事凭本能,遇到问题靠加班解决,现实真有这么惨吗?| 话题</title>
<link>
https://www.infoq.cn/article/z5Gm9SiaLQj26vLFIYIp?utm_source=rss&utm_medium=article
</link>
<description>
<p>InfoQ与国内最早导入敏捷软件开发方法的熊节先生探讨了”程序员如何练好基本功“的问题,我们也针对这次讨论形成了一篇采访文章:《<a href="https://www.infoq.cn/article/QjDuMC2jewB7Gcv16_Df">为什么 80% 的国内开发者缺乏基本功?</a>》。在采访中,熊节提到:“程序员的基本功才是真正影响开发效率,甚至影响整个项目成败的核心。然而,国内 80% 的软件从业者都存在基本功缺失的问题,其实我想说 90%,太得罪人。”</p> <p>他认为“软件开发是一门手艺,讲究又快又好”,“不是那些高大上、新潮的技术、框架,而是我们每天要做的很基础的事情。比如快捷键是否熟悉,测试习惯好不好,代码干不干净,打字速度有多快等等”。</p> <p>他认为从业者很难进入到理想的工作状态的主要是能力的缺失。</p> <blockquote> <p>像如何拆解任务,如何管理任务进度,如何了解生产流水线是否健康,用什么方式协调人与人之间的合作,这些都是有能力要求的。而从业者不具备这个能力。这又回到最初提到的问题——基本功的缺失。在缺乏基本功的情况下,人们完全凭着人类的本能做事,遇到问题就靠加班解决。</p> </blockquote> <p>而获取扎实基本功的能力靠:</p> <blockquote> <p>练习,不断地练习,反复的刻意练习。刻意练习的要点是什么?第一,重复,不断地重复;第二,跳出舒适区,进入学习区进行练习。用一些枯燥的无趣的方式去训练,不断地磨练,最终形成一种“肌肉记忆”。</p> </blockquote> <p>那么国内程序员的基本功能力到底如何?基本功不扎实的程序员你身边见得多吗?这些基本功不扎实的程序员在日常工作中都有哪些表现?如何去提升自己的基本功?</p><div align='right'><a href='https://www.infoq.cn/article/z5Gm9SiaLQj26vLFIYIp?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>Tina</author>
<guid>
https://www.infoq.cn/article/z5Gm9SiaLQj26vLFIYIp?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 11:38:38 GMT</pubDate>
</item>
<item>
<title>微服务架构如何影响软件开发文化?</title>
<link>
https://www.infoq.cn/article/LGgNoeg29QoRFBsz5PPS?utm_source=rss&utm_medium=article
</link>
<description>
<blockquote> <p>微服务,并不仅仅是一种代码构造方式。</p> </blockquote> <p><img src="https://static001.infoq.cn/resource/image/9c/5f/9c16dc301aab1fa5a3a5155066b0ad5f.jpg" alt="" /></p> <p>微服务概念一出现就引发了热烈讨论,很多文章都喜欢将其与整体式架构比较,乃至来自大型企业的用例等。然而,在说起微服务时,开发人员关注的往往是这场革命的技术意义,而非其象征的文化颠覆。虽然技术元素也很重要,但其中蕴含的文化变革更加值得重视。</p> <p>我很幸运能够在2014年左右快速融入这场潮流,我也清楚地记得当时能够将陈旧的整体式应用迁移至新的、酷炫无比的微服务架构是多么令人兴奋。和很多朋友一样,我刚开始也只关注技术方面的影响——毕竟,当时正是革命性技术快速涌现的时期(例如,Docker那时刚刚出现)。</p> <p>然而,经过几年发展,尽管在技术层面发生了诸多变化,但我认为微服务对组织中软件开发方式产生的最大影响主要体现在代码归属权以及团队的职能定位上。</p> <h2>功能团队</h2> <p>虽然我们也可以在整体式架构下建立具有跨职能特性的团队,但组织通常会根据具体技术功能(例如前端、后端、系统管理员以及数据库开发等)进行团队拆分。因此,开发人员很少能够接触到生产环境,因此几乎不需要考虑生产与维护方面的问题。James Lewis与Martin Fowler在最初定义微服务架构概念的文章中就强调过这一点。</p><div align='right'><a href='https://www.infoq.cn/article/LGgNoeg29QoRFBsz5PPS?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>Albert Kozłowski</author>
<guid>
https://www.infoq.cn/article/LGgNoeg29QoRFBsz5PPS?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 11:30:26 GMT</pubDate>
</item>
<item>
<title>跨 AZ 部署最佳实践之 Zookeeper</title>
<link>
https://www.infoq.cn/article/0CMYZPbbhTfCz1GgoLrP?utm_source=rss&utm_medium=article
</link>
<description>
<p>跨AZ部署是实现服务高可用较为有效的方法,同时也极具性价比。如果实现了跨AZ部署,不仅可以消除服务中的单点,同时还可以逐步建设如下能力:服务隔离,灰度发布,N+1冗余,可谓一举多得。因此,接下来我们会对有状态的开源软件进行一系列的跨AZ部署的介绍,本次介绍Zookeeper。</p> <h2>ZK容错数</h2> <p>Zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的(完整机器列表是预先定义在ZK的配置文件中)。也就是说,一个ZK集群有3个实例,一个死了,还剩下2个正常的,过半了,所以3实例的Zookeeper的容忍度为1。同理,一个ZK集群有5个实例,2个死了,还剩下3个正常的,过半了,所以5实例的Zookeeper的容忍度为2。因此可以用2n+1来描述ZK集群的容忍度。考虑到3实例的集群只能故障一个实例,因此,线上集群一般都是五个实例的。</p> <p>按照上述的逻辑,七个实例甚至更多的实例不是更好吗?从实践角度看,如果一个集群5个实例扛不住的情况下,基本就需要做集群拆分了。7个实例的集群也许没啥问题,但是这么大压力的集群,一旦故障,影响面也是非常严重的,因此,更多的采用集群拆分而不是持续扩容的方式。</p> <h2>最佳实践</h2> <p>以线上最为常见的5实例的ZK集群为例进行说明,5实例的ZK集群主要有如下两种部署方式:</p> <p>延时敏感型:单AZ部署方案(AZ1:5),这种部署模式适用于Zookeeper服务的系统全部集中在同一个AZ内。在这种情况下,如果该AZ故障,那么系统必然不可用,这时,ZK即使可用也没有意义,因此也就没有必要去做跨AZ的部署了,并且跨AZ后,还会增加常态下的网络延时</p><div align='right'><a href='https://www.infoq.cn/article/0CMYZPbbhTfCz1GgoLrP?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>焦振清</author>
<guid>
https://www.infoq.cn/article/0CMYZPbbhTfCz1GgoLrP?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 11:07:24 GMT</pubDate>
</item>
<item>
<title>换个视角看中台的对与错</title>
<link>
https://www.infoq.cn/article/0kLRs9plv4RbyXgPjE6l?utm_source=rss&utm_medium=article
</link>
<description>
<p><img src="https://static001.infoq.cn/resource/image/85/a3/8518d947c21b26a98e64976a2b6ba7a3.jpg" alt="" /></p> <p>中台建设,是近两年非常火热的一个话题,从产品中台,到技术中台,再到组织中台,各种概念、理念,以及方法论被深度的研究、探讨。</p> <p>对于互联网产品领域来讲,中台更多的是2B产品建设中涉及的课题,因为软件系统的抽象复用,更多的是做复杂B端系统建设中面临的问题。因此,中台产品设计,是所有B端产品经理应该深度关注的课题。</p> <p>针对B端产品设计领域,中台产品到底该如何设计?有何特点?设计的本质是什么?有何挑战?本文将从全新的视角,重新审视中台产品建设,让您更加深刻地理解中台产品设计精要。</p> <h2>经典视角下的中台建设</h2> <p>首先,我们有必要回顾下经典的中台建设视角。一般来讲,行业内往往从组织中台、产品中台、数据中台、技术中台这四个主题切入并探讨中台建设。</p><div align='right'><a href='https://www.infoq.cn/article/0kLRs9plv4RbyXgPjE6l?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>杨堃</author>
<guid>
https://www.infoq.cn/article/0kLRs9plv4RbyXgPjE6l?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 10:35:18 GMT</pubDate>
</item>
<item>
<title>Linux系统安全(七):Nginx 安全</title>
<link>
https://www.infoq.cn/article/bZeacuVSCprFL70sD371?utm_source=rss&utm_medium=article
</link>
<description>
<p>Nginx是Web服务器领域的后起之秀,以其现代软件架构设计所提供的高性能和灵活性而被越来越多的网站所采用,在2018年2月活跃网站中的使用比例已达到21.23%(数据来源:Netcraft),是继Apache之后的第二大Web服务器软件。在该部分,我们重点关注2个方面的Nginx的安全设置:使用HTTPS加密和使用NAXSI加固。</p> <h2>使用HTTPS加密网站</h2> <p>从CA签发机构购买了SSL证书后,在Nginx上配置HTTPS的方法是在配置文件nginx.conf中,添加以下配置项:</p> <pre><code>ssl on; ssl_certificate /opt/cert/server.crt; #指定证书存储位置 ssl_certificate_key /opt/cert/server.key; #指定私钥存储位置 ssl_session_timeout 5m; #指定SSL会话超时时间 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL协议版本 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#指定SSL加密算法 ssl_prefer_server_ciphers on; #指定优先采用服务器端加密算法 </code></pre> <p>在配置完成后,使用nginx -t检查配置项是否有误。如无报错,则可以通过重启nginx进程来使配置文件生效。</p> <h2>使用NAXSI加固Web</h2> <p>NAXSI是Nginx服务器上常见的Web应用防火墙。NAXSI的含义是“Nginx Anti XSS &amp; SQL Injection”(Nginx防御跨站脚本和SQL注入),其官方网站是https://github.com/nbs-system/naxsi。从技术上来说,NAXSI是Nginx的第三方模块,适用于很多类UNIX的操作系统平台上。</p> <p>NAXSI和ModSecurity相比,有如下的不同点:</p> <ul> <li> <p>NAXSI可以通过学习模式建立白名单机制,从而使用默认拒绝的方式来最大化的保障Web安全。这通常适用于网站代码和功能不频繁变化的场景,否则极易产生误报。</p><div align='right'><a href='https://www.infoq.cn/article/bZeacuVSCprFL70sD371?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>胥峰</author>
<guid>
https://www.infoq.cn/article/bZeacuVSCprFL70sD371?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 09:50:54 GMT</pubDate>
</item>
<item>
<title>如何用 Go 语言写出好用的 Http 中间件?</title>
<link>
https://www.infoq.cn/article/mjBB5V5qFBKuS5twJpJB?utm_source=rss&utm_medium=article
</link>
<description>
<p>当我们用Go语言编写较为复杂的服务时,一个永恒的话题就是中间件。这个话题在网上被<a href="https://medium.com/@matryer/writing-middleware-in-golang-and-how-go-makes-it-so-much-fun-4375c1246e81">一遍</a>、<a href="https://www.alexedwards.net/blog/making-and-using-middleware">一遍</a>、<a href="https://medium.com/@chrisgregory_83433/chaining-middleware-in-go-918cfbc5644d">又一遍</a>地讨论着。归根结底,中间件应该允许我们:</p> <ol> <li> <p>拦截ServeHTTP调用,并执行任意代码。</p> </li> <li> <p>在持续的链上对请求/响应流做变更。</p> </li> <li> <p>中断中间件链条,或继续下一个中间件拦截器,最终到真正的请求处理程序上面。</p> </li> </ol> <p>这些听起来跟<a href="https://expressjs.com/en/guide/using-middleware.html">express.js 中间件</a>很相似。我们研究了<a href="https://lmgtfy.com/?q=golang+middleware+library">许多资料</a>,发现了一些<a href="https://github.com/urfave/negroni#handlers">已经存在的解决方案</a>,这些方案跟我们想要的非常吻合,但他们要么有<a href="https://github.com/urfave/negroni#bundled-middleware">不必要的额外功能</a>,要么需求<a href="https://github.com/go-midway/midway#basic-design">不对我们的胃口</a>。很明显,我们可以基于<a href="https://expressjs.com/en/guide/using-middleware.html#middleware.router">express.js</a>编写中间件,安装这个干净整洁的组件之后,20行以下代码就可以实现一个轻量级的API</p> <h2>抽象</h2> <p>设计抽象时,首先我们要考虑的就是,如何写中间件函数(从现在起,可以称它为拦截器)。</p> <p>答案很明显:</p> <p>它们看起来就像 <code>http.HandlerFunc</code>,带一个额外的参数next,程序进行下一步的处理。这使得任何人都可以像编写简单函数一样,类似http.HandlerFunc这样来编写拦截器,做他们想做的,并能按照他们的意愿传递控制权。</p><div align='right'><a href='https://www.infoq.cn/article/mjBB5V5qFBKuS5twJpJB?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>Zohaib Sibte Hassan</author>
<guid>
https://www.infoq.cn/article/mjBB5V5qFBKuS5twJpJB?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 09:00:00 GMT</pubDate>
</item>
<item>
<title>携程酒店RSocket实践</title>
<link>
https://www.infoq.cn/article/2bmKflDJGa2yHeMg*uMF?utm_source=rss&utm_medium=article
</link>
<description>
<h2>一、初识RSocket</h2> <p>在QCon2019北京大会上第一次得知RSocket。印象深刻的是Netifi公司通过他们研发的RSocket帮助企业实现微服务,在40,000RPS的场景下,Istio需要每月3495美金,而Netifi每月只要388美金,同时性能提升10倍,这无疑对任何企业都是极具吸引力的。</p> <p>Netiffi的创始人在会上也谈到,使用Netiffi的Broker,得益于RSocket协议,无需独立部署监控、服务发现、健康检查、负载均衡等等中间件。如果是跨云部署,例如谷歌云与亚马逊云之间,或者亚马逊云与企业本地数据中心,都只要通过Netiffi的Broker即可无缝沟通,无需处理复杂的适配问题。</p> <p>回来查询了不算丰富的资料后发现,Istio的技术专家发文称RSocket Broker的service mesh比Istio有将近10倍的速度提升。考虑到Istio专家的观点还有一定说服力的,那么RSocket真的有那么厉害?</p> <h2>二、RSocket生产实践</h2> <p>我们决定到生产上面去实践RSocket,看看性能到底如何。现在已经支持RSocket的service框架有Spring Flux:</p> <p><img src="https://static001.infoq.cn/resource/image/b2/1e/b27e2659a572a6d23542ea268cbc771e.png" alt="" /></p><div align='right'><a href='https://www.infoq.cn/article/2bmKflDJGa2yHeMg*uMF?utm_source=rss&utm_medium=article'>点击查看原文></a></div>
</description>
<author>刘诚</author>
<guid>
https://www.infoq.cn/article/2bmKflDJGa2yHeMg*uMF?utm_source=rss&utm_medium=article
</guid>
<pubDate>Fri, 23 Aug 2019 08:00:00 GMT</pubDate>
</item>
</channel>
</rss>