徐九

徐九 查看完整档案

北京编辑北京工业大学  |  计算机科学与技术 编辑SegmentFault  |  技术编辑 编辑 github.com/Sapesn 编辑
编辑

SegmentFault 思否社区老编辑

饮水机の守护神,艾泽拉斯的勇士,朝阳区埃米纳姆,我爸我妈的儿子,深夜撰稿者,统领一猫一狗的国王,Glory to the Sin'dorei!

个人动态

徐九 赞了文章 · 18 分钟前

为什么CynosDB叫真正的云原生数据库?

本文由腾讯云数据库发表

注:本文摘自2018年11月22日腾讯云数据库CynosDB新品发布会的演讲实录。随着互联网信息的发展,大家也对云这个词汇也不是特别陌生了,作为全球首选的云服务厂商之一的腾讯云,依托腾讯多年的业务积累和技术沉淀,我们推出了高性能、低成本、安全可靠的整体数据服务解决方案。并且随着客户数据日益增长,也做了相关的调研和分析,推出了腾讯云新一代自研数据库。我这里先卖一个关子,由我们这边的技术嘉宾给大家揭晓我们相关的数据库内容。

——————————我是分割线————————

img

大家下午好!我是腾讯云数据库产品中心NewSQL的产品负责人,我叫刘峰。我想在座的各位有谁了解什么叫NewSQL?我给出一个比较狭义的定义,NewSQL其实就是SQL加上NoSQL。我们说数据库有三个比较重要的历史阶段,第一是SQL标准的引入,第二个是NoSQL的流行,第三个是NewSQL的诞生。如果前两个重要的历史时期你们错过了,那么此时此刻是第三个重要的时刻,腾讯云自研的NewSQL数据库的诞生。

我们首先来看一下云数据库有哪些类型,有两种,搬迁和云原生。云计算时代的到来,厂商需要提供给客户云数据库服务,一个比较直接的想法是,作为云厂商我们可以把传统的数据库搬到云上来,给客户以租用的方式提供服务。这是大多数我们的云厂商提供服务的方式。当我们做了这件事情以后,我们发现传统数据库在云上有很多的问题,而这些问题是传统数据库既有的问题,在云上并没有得到解决。同时,我们发现传统数据库也不能适应云在扩展性、可靠性和规模化的优势。这个时候,就迫使我们云厂商来考虑,如何将传统的数据库和云数据库、云计算做一个融合,这个融合的点,我们称之为云原生。

举一个比较恰当的例子,大家可以理解为传统的数据库搬到云来提供云数据库服务是一种搬家模式,而云原生数据库提供的是一种“拎包入住”的方式。

刚才我们提到了传统数据库有很多问题。现在大家看一下传统数据库有哪些问题。

第一个问题,备份回档慢。这是一个经典的利用传统数据库在云上的备份回档的结构,如果要做备份回档我们需要把原有的数据拷贝一份到云存储上,同时将云存储的数据拷贝到用户数据库的实体上。1T的数据需要使用3个小时,2T的数据需要6个小时,如果备份回档3T的数据,就是今天晚上我就可以先下班了。

第二个问题,故障恢复慢,单独的数据库支撑的可能性是很低的,如果数据库宕机了,业务就中断了。通常的说法是,我们在主数据库边上会挂一个从数据库,从数据库会从主数据库来同步数据,但很不幸的是,大多数情况下,如果你的主数据库压力比较大的时候,从数据库是不能得到及时的数据更新的。举一个不恰当的例子是,在双十一购物高峰的时候你从购物网站选很多礼物放在购物车,而恰巧主数据库宕掉了,即使有从数据库,但却没有及时得到主数据库更新的数据,所以你会发现你购物车里的那些东西都已经不见了。我们认为在传统数据库上这种故障恢复慢的问题还是比较严重的。

第三和第四个问题,是纵向扩展弱、横向扩展弱。传统数据库是盒子,里面装的是数据,如果想扩展传统数据库需要一个更大的盒子。举一个更形象的例子,比如说我们自己开发了一款游戏,刚开始的时候我们认为这个游戏没有多少用户玩儿,我们用了一款数据库是1个CPU、2G内存100G存储空间,很幸运的是我这款游戏大卖了,这时候发现CPU的内存不够用了,需要扩展,传统数据库的做法是什么?是创建一个4核、8G、1T的数据库,之后把数据库搬迁到这里。这涉及到数据库迁移的问题,那么1T数据3个小时,2T数据6个小时,3T数据我今天也干不完,明天再接着干。相信这种服务提供给客户,客户也不会满意的,同样横向扩展是相同的问题。

第五个问题,维护成本高。为什么说维护成本高呢?如果使用传统数据库,既要人为地进行手动数据备份回档,又要参与横向和纵向的扩容,又要做故障恢复,人工参与的成本是很高的,同时加上原有架构的效率非常低,也导致时间成本和人工成本非常高,所以说我们的维护成本非常高。

第六个问题,资源利用率低。传统数据库是大盒子,盒子里面装CPU、内存和硬盘。但我需要很大的CPU、内存和硬盘吗?并不永远是这样的,有时候我们只需要更高的CPU、更大的内存,有时候需要更大的硬盘,难以满足用户在三个维度方面不同的需求正是传统数据库很大的问题,很多资源用不了那么多的时候就造成了资源的浪费。

第七个问题,可用性低。举一个上个月发生的例子,一家被微软高价收购的全球性的社交编程和代码托管网站,由于它用传统数据库主从架构在两个数据中心做了高可用性,美国政府更换了两个中心中间的光缆,中断了43秒,就是这43秒造成了整个网站24小时的宕机和瘫痪。大家可以想像,利用传统数据库架构,即便是这样的高科技公司都遇到了服务不可用的问题,何况是我们身边的企业。

为了解决传统数据库的问题,我们作为云服务厂商提供了一个完整的一站式的解决方案——腾讯云自研的数据库产品CynosDB。CynosDB源于单词Cynosure,是古希腊神话中北极星的名字,就是北天小熊座最亮的一颗星,现译为引人注目的人或物、天生的焦点。CynosDB是腾讯云自研的高性能、高可用、企业级云数据库,兼容开源数据库MySQL和PostgreSQL。

我们来看一下我们当初是怎么考虑要设计这样一款数据库的。借用当下比较流行的词叫“C位”,我们在CynosDB设计之初考虑了与C相关的设计特性。

CynosDB核心设计理念:

第一,Comprehensive ”兼”容并包,即全面兼容新版开源数据库MySQL和PostgreSQL,而目前业内厂商大多只能兼容一种。我们兼容了两款主流的开源数据库,这样做可以帮助企业实现平滑迁移。

第二,Creative分而治之。传统的数据库架构其实就是一个大盒子,怎么分才能把这个内存、CPU和磁盘进行合理的分配,减少资源浪费呢?我们的实现方式是分而治之,将计算与存储分离。不放在一个盒子里,放在多个盒子里面。实现了这种结构,就相当于我们需要在计算层和存储层之间进行通讯。通讯是通过网络来进行的,这使得我们需要减少网络通讯的流量,所以腾讯的CynosDB实现了一个“日志即数据库”的架构。

第三,Cloud Native应“云”而生。我们的数据库是搭建在腾讯云现有的高效稳定的云服务之上,所以我们能快速地搭建出高性能、高可用、高可靠的一套云数据库。

第四,Cost Effective事半功”倍”。我们需要一个在性能上能超过传统数据库的云数据库,并且可以给客户减少成本压力,因为云计算的本身其实是要给客户一个很实惠的服务,所以我们是说,可以实现真正的按量计费和弹性的扩增容。

第五,Cohesive相“辅”相成。极简的软件优化释放硬件红利。我们每年都会关心苹果手机的发布会,发布会上其实苹果每年都会讲我们今年有更高的CPU,我们有更大的存储量,大家有没有想过有一天,我们的苹果手机会运行得越来越慢,但苹果告诉你通过软件的优化,让原来的iPhone4、iPhone5、iPhoneSE,不需要升级到更快的CPU,更大的内存就可以用所有的AppStore的App呢?也许有一天苹果会做到这个,但CynosDB今天已经做到了。

现在看一下基于核心设计理念建构的CynosDB的产品架构。我们把盒子拆分了,我们将计算层独立出来,而存储层是用云自带的分布式存储来实现的。中间的通讯是通过网络进行计算层和存储层的通讯。我们的架构实现了真正的兼容多种数据库引擎,因为我们将计算层独立出来之后,我们的计算层就可以兼容多个数据库引擎。计算与存储分离之后,存储是一块独立的服务,大家可以理解计算是一层服务,存储是一层服务,外围我们接了云网络安全服务,不同的维度来保证安全可靠。我们给客户提供软件优化与新硬件相结合的解决方案,可以基于普通硬件来满足自己高性能、高可用的需求。如果有更高的要求,因为我们是一个企业级的数据库,我们可以结合新硬件,比如说我们基于SSD的SPDK的驱动和RDMA的网卡提供性能更高的数据库服务,这个选择权我们交给了客户。

所以我们说,CynosDB产品架构是基于云服务和普通硬件的数据库架构,我们释放硬件红利、不转嫁硬件成本。

后面重磅介绍一下我们CynosDB的一个核心部件叫做CynosFS可计算智能存储,这是腾讯独创的一个存储系统。我们在国内率先实现了“日志即数据库“的体系架构。什么意思呢?大家看到左边其实是传统数据库的一个体系架构。当传统数据库发生了一个写操作的时候,计算和存储之间需要进行诸多的IO写入。我在存储和存储备份之间也要同样地进行IO操作,其实是极大地增加了系统的负载。而CynosDB是右边的做法,我们将诸多的IO合并减少为只写日志,所以我们称它是日志即数据库,也就是说在我们的系统里只存在于数据的日志,我们称之为极简IO。这相当于我们把繁忙的北京二环改造成了一个全方位的、立体的轨道交通,极大地提高了系统的运行效率。除此之外,CynosDB还实现了存储的运维自动化,大家可以看到日志写完了之后是可以返回的,可是在存储底层,我们自动把数据存成三个副本,是通过分布式一致性协议来维护的。特殊的情况下,如果一个副本产生了错误我们会从另外两个副本自动地拷贝数据到损坏的副本上来修复数据。同时,蓝色的部分是我们的数据页,如果系统需要访问数据页,我们会义务地将日志转化成数据,并且这套系统实现了自动扩缩容,所以我们称之为运维自动化的分布式存储系统。

我们来看一下CynosDB利用这种独创的架构和独有的产品创造的能力

首先,我们是业内首家兼容多个数据库引擎的云数据库。

第二,性能突破100万大关,实现了商用数据库同等级别的极速性能。

第三,存储容量达到了128TB,实现了国外云数据库领先厂商一倍的性能和存储量。

第四,告别分钟进入秒级时代,之前提到了数据库的种种痛点,我们有恢复慢、主备切换不可控的问题,而CynosDB将整个计算节点、故障节点恢复的时间从分钟级带到秒级。我们在计算层和存储层分离之后可以实现快速的恢复,让故障节点高可用。

第五,秒级备份,刚才讲到备份回档1T数据需要的时间,CynosDB在这个痛点上进行了极大的提升,基于快照的备份和回档,实现了秒级的飞跃,比传统的备份回档的速度提高了180倍。

讲到上面的这些产品能力,我们要看一看CynosDB的用户价值,这是用户最关心的。

第一,降低成本,提供了一款具有超高性价比的数据库产品。我们是基于普通硬件和软件的极简优化才做到这一点。达到性能与可用性与商用数据库相当的水平,成本只有约1/15。

1)从显性成本来讲,云存储降低了硬件采购的成本,且我们的成本是低于国外商用数据库一个数量级。2)CynosDB将存储计算分离之后,存储实现了真正的池化。大家知道,规模化可以降低边界成本,并且产生边际效应,我们通过分布式计算存储将存储实现了真正的无服务器架构,实现了一个存储层的智能角度,极大地降低了存储的成本。也就是说,你可以根据自己的使用量来分配你的成本,不像我们原来需要一个盒子或者是需要一个更大的盒子。3),刚才我们讲到实现了诸多的自动运维的功能来减少人工干预,这相当于是降低了我们用户使用的隐性成本。

综合三个维度的成本的节约,我们的成本只有传统商业数据库的1/15。

第二,灵活的弹性能力。大家如果有在现在的云上面购买数据库的经历会知道,我们如果买一个数据库第一是需要多少CPU,第二是需要多大的内存,第三是需要多大的硬盘。要有CynosDB就不需要这三步操作了,不需要知道你要多大的硬盘,购买完之后需要10T,付10T的钱,需要百T付百T的钱,如果不需要存储可以不用花钱。找到了真正的自动扩缩容而按使用量付费。

第三,平滑上云。全面兼容MySQL5.7和PostgreSQ10,这是两个目前更新的开源数据库的版本,原有应用零改动,实现了企业的平滑迁移和快速上云。

第四,安全可靠。我从三个维度来给大家讲一下我们怎么样做到安全可靠的。这是我们云数据库乃至云服务的一个生命线。1)纵向维度,CynosDB存储实现了一个自动的多版本维护,就像刚才我讲到,我们写一份数据在我的存储其实是可以自动维护三个副本,在纵向上是增加了数据得多副本;2)我们提供了跨区域的高可用,你可以多添加几个副本到另外的数据中心区,即便是这个数据中心的数据宕了,那个数据还可以提供,我们提供了高可用性,进一步保障安全可靠;3)同时支持腾讯云现有的安全组和VPC进行网络隔离,腾讯云现在的网关服务可以抵挡黑客攻击和DDOS攻击。

我们将刚才所列举的诸多用户价值放在具体的应用场景来看,我们如何能解决企业的问题。

第一,高性能、高可用的企业应用。我们可以平滑上云,保证业务连续高效运转,可以降低企业的运营成本,可以通过自动运维减少人工干预。这里给大家爆一个料,我们的可计算智能存储将来会朝着人工智能领域发展,我们将来会将人工干预减少到最低。所以我说,CynosDB天生适用于传统企业,支撑传统企业的关键核心业务。

第二,互联网和游戏业务。1)应对峰值业务。我的同事也介绍到了,无论是电商还是游戏,互联网业务经常有很大的业务量的峰值变化。CynosDB灵活的计算扩展天生适合应对峰值业务。游戏领域我们经常会做冲在线用户数的活动。传统情况下,运维人员会提前一个月购置设备,等活动结束这个设备就不需要了,还需要把这些设备注销掉,可是CynosDB不需要这项工作。2)快速备份回档。刚才讲到我们将备份回档的速度提高了180倍,可以想像当你的游戏版本出现问题的时候,你比竞争对手更快地修复问题,会给客户提供更快的游戏服务。3)海量可扩展存储,CynosDB是一个分布式的共享存储,游戏的公司可以利用它来实现混服和合服的操作,同时不需要用多个实例来支撑游戏业务了。所以CynosDB天生适合应用于互联网公司、游戏和小程序。

此文已由作者授权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

查看原文

赞 2 收藏 0 评论 1

徐九 发布了文章 · 11月24日

微软中国与小冰公司达成战略合作,深化 AI + 云计算商业化行业解决方案落地

微软 x 小冰
图为微软公司副总裁、微软中国区首席运营官邹作基(左)、小冰公司首席执行官、原微软(亚洲)互联网工程院常务副院长李笛(中)和小冰公司董事长、原微软全球执行副总裁沈向洋博士(右)

2020年11月24日,北京 —— 今日,微软中国与小冰公司在北京宣布达成战略合作伙伴关系,强强联手,面向广大 ToB 重点行业客户,联合推出一系列人工智能+云计算商业化解决方案。首批微软和小冰共同联合推出的解决方案将覆盖人工智能金融、人工智能汽车及人工智能内容生产等三个垂直领域。双方随着人工智能与云计算联合技术优势的加深,将在今后不断拓展至更多垂直领域。


以“2020 行业深耕计划”为契机,微软中国将为小冰公司提供一系列优势资源,全面联合市场拓展、联合销售,以及合作伙伴生态系统的联合创新。此举旨在帮助双方重点行业客户在数字化转型的大潮中,进一步加速向智能化时代迈进。小冰公司董事长、原微软全球执行副总裁沈向洋博士,微软公司副总裁、微软中国区首席运营官邹作基,及小冰公司首席执行官、原微软(亚洲)互联网工程院常务副院长李笛共同出席了战略发布仪式。

clipboard.png
小冰公司董事长、原微软全球执行副总裁沈向洋博士

小冰公司董事长,原微软全球执行副总裁沈向洋博士表示:“大时代的变革呼唤创新。作为面向新交互形式的完整的人工智能技术框架,自发布以来,小冰一直引领着人工智能的技术创新。得益于框架本身的完备性,小冰在垂直领域的应用同样展现出明显的差异化优势及人工智能的巨大潜能。接下来,小冰公司将与微软中国联手,以全新的战略合作形式,进一步共同推动创新变革,共同为商业化客户创造价值。”

clipboard.png
微软公司副总裁、微软中国区首席运营官邹作基

微软公司副总裁、微软中国区首席运营官邹作基表示:“我们非常高兴小冰以全新的形式成为微软中国人工智能商业化解决方案领域的战略合作伙伴。小冰诞生于微软,在中国出生,是多年以来微软人工智能创新的成果,也是微软技术创新于中国、服务于中国的典型例证。微软中国与小冰公司在引领数字化转型机遇的理念、价值观与使命感,以及技术基础上的一脉相承,也为双方的合作奠定了坚实的基础。相信小冰作为全球领先的交互式人工智能应用,将能够与微软在行业应用和商业推广中的优势资源相互结合,加速推进人工智能交互在各行各业的商业推广,为构建跨界生态、赋能行业转型升级提供源源不断的新动能。”

clipboard.png
小冰公司首席执行官、原微软(亚洲)互联网工程院常务副院长李笛

同气连枝,强强携手,聚焦场景,加速关键行业的智能化跃迁

小冰是一套完整的、面向交互全程的人工智能交互主体基础框架,包括核心对话引擎、多重交互感官、第三方内容的触发与第一方内容生成,和跨平台的部署解决方案,相关领先技术覆盖自然语言处理、计算机语音、计算机视觉和人工智能内容生成等人工智能领域。该框架是目前全球范围内最成熟和最大的该类框架,其交互总量约占全球人工智能交互总量的60%。

小冰项目于 2013 年底在微软(亚洲)互联网工程院立项,采取代际更新的方式,逐年完善其基础框架结构,实现大规模跨平台部署、多模态交互、全双工语音交互,及包括文本创作、声音创作、视觉创作在内的人工智能创造能力。在全球多个国家,小冰单一品牌已覆盖 6.6 亿在线用户、4.5 亿台第三方智能设备和 9 亿内容观众。2020年7月13日,小冰从微软公司分拆,独立发展。

微软中国与小冰公司强强联手、共同推出的人工智能商业化解决方案,将采用微软智能云 Azure 作为服务中国及全球市场的云计算运营平台,将完善的人工智能交互体验融入关键行业的典型应用场景中,通过打造可复制、可推广、可成长的解决方案,满足客户推进业务模式转型创新的多样化需求。以小冰在To C领域技术优势和独有的竞争力,以及 To B 商业实践中所取得的成功经验为基础,结合微软中国在关键行业中的广泛而深入的客户资源,首批微软和小冰共同联合推出的解决方案将覆盖人工智能金融、人工智能汽车、人工智能内容生产等三个垂直领域。

  • 人工智能金融

小冰是目前全球范围内规模第一的金融文本摘要生成平台。自2017年11月起,小冰与万得资讯、华尔街见闻等国内主要金融信息服务提供商合作,为其用户提供由人工智能技术生成的上市公告文本摘要。上述服务覆盖全部26类金融类别,服务对象包括国内90%以上的金融机构交易员及40%以上的个人金融交易者。小冰人工智能技术的赋能,有效保证金融信息服务的稳定性、准确性及时效性,弥合投资机构、投资者与市场之间的信息鸿沟。

南京万得资讯科技有限公司总经理朱海峰表示:“小冰帮助我们在争分夺秒的金融交易市场,输送最新鲜的资讯信息,实现金融信息的全面和及时传递,助力万得用户获取及时、准确、完整的金融信息。未来,万得将与小冰继续加深合作,给用户带来更多创新的产品体验。”

  • 人工智能汽车

在汽车领域,小冰已成为华人运通等汽车品牌的深度共创合作伙伴,从前装设计阶段开始,与汽车厂商共同打造虚拟出行伙伴,在实现全车级语音控制的基础上,为用户提供自然而富有情感的互动。得益于人工智能技术,车载智能助手不仅仅是一位高效的助手,更是一位知冷暖、懂悲欢的亲密出行伙伴,为用户带来更美好温暖的出行体验,助力汽车厂商向智能化时代跃迁。

华人运通高合汽车创始人、董事长兼CEO丁磊表示:“华人运通高合汽车具备全球领先、高度智能的开放式H-SOA超体电子电气架构。在微软和人工智能小冰的赋能下,落地全球首个陪伴用户出行的车载情感化智能伙伴HiPhiGo,有与生俱来的学习、创造能力,可以与车主共同进化成长。未来,双方将共担改变人类未来出行的使命和愿景。”

  • 人工智能内容生产

小冰是人工智能创造领域的先行者,旨在通过人工智能技术,学习优秀的人类创造者的能力,进行基于文本、声音和视觉的内容生成,并倡导通过人工智能技术解决高度定制化内容的供需矛盾。在视觉内容生成领域,小冰的设计能力已在工业设计、数字印刷图案设计、纺织服装面料设计、包装设计等领域落地,旨在协助各领域改善设计方面的短缺。目前,小冰能够稳定设计三十余种主流风格,并实现按需创作,其图案的设计多样性达到 10 的 26 次方。多条面向量产化的生产线已实现产业化贯通,与中国纺织信息中心、国家纺织产品开发中心共同推出的人工智能纺织服装图案设计平台已投入生产。

国家纺织产品开发中心主任李斌红表示:“智能设计是智能制造的基础,这正是小冰创造力的价值所在。小冰的人工智能设计能力,赋能成千上万的纺织服装制造企业,帮助企业释放设计潜能,实现大规模、多样化、质量稳定的创意设计,重构产业发展优势,使 AI 设计能力成为全球时尚新的生产力。”

鲁丰织染有限公司总经理张战旗表示:“小冰针对我公司产品市场定位量身打造花型设计,提升设计能力和设计效率,提高产品附加值和市场竞争力,同时给我们带来更丰富的设计灵感和系列化的设计构思。小冰人工智能设计能力应用在服装纺织制造企业,从针对品牌客户的精准设计开发,到工艺的具体实现,都具有划时代的意义。”

深化战略合作伙伴发展,微软中国为小冰公司提供全链条支持

在不久前召开的微软中国年度合作伙伴生态大会(CPC 2020)上,微软中国正式推出“合作伙伴深耕项目”及作为其核心举措的“2020 行业深耕升级计划”,承诺充分动员微软各个部门,以产品技术、销售渠道、客户网络以及整个生态系统的合力,为合作伙伴扩大影响、提升受益、转型发展提供全方位的鼎力支持。

在整个生态中,小冰公司作为微软中国的战略合作伙伴,将得到微软中国为合作伙伴生态系统提供的优势资源与全力支持,拓展更广阔的发展空间。事实上,在今年微软合作伙伴大会现场,小冰已面向整个微软中国区生态系统生动展现了自己的实力。接下来,微软中国还将在一系列面向客户网络及合作伙伴生态系统的公开市场活动中,为小冰公司提供多样化的舞台,积极探索和拓展人工智能商业化应用的前景与未来。

segmentfault 思否

查看原文

赞 7 收藏 0 评论 0

徐九 发布了文章 · 11月23日

为什么你的“开发速度”和“产品性能”,都比不过竞品?丨开发者必读

牛顿

物理学家牛顿曾经说过:If I have seen further, it is by standing on the shoulders of giants。

荀子在《劝学》中也说过:假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。

他们所表达的意思其实是一致的,很多事情仅仅靠自己的力量是难以解决的,但如果我们懂得利用工具就能够轻松完成。

在项目开发中也是如此,开发者们也要懂得“善假于物”和“站在巨人的肩膀上”,合理的使用第三方工具,一样可以实现事半功倍的效果。

随着移动互联网的发展,大部分中小企业比拼的不仅仅是产品功能,而是产品交付速度、质量、性能以及针对特定场景的定制能力。因此,对于底层技术和架构而言,完全可以借助垂直领域的第三方工具,提高开发速度,并得到更好的产品性能。

以企业最普遍的场景 —— 表格为例,与大家探讨,第三方工具是如何帮助开发人员解放生产力,又是如何帮助他们优化产品性能和用户体验,从而保证为最终用户提供更具价值和更高质量的产品。

一、前言

大家应该都知道,很多企业的 IT 业务是从一张表格开始的。团队沟通中的信息共享大量依赖于表格,文档、报告、凭证以及基础数据的汇总分析,大部分都需要依靠表格的形式来进行决策的支持。

而伴随着企业数字化转型的迫切需要,远程办公模式已正式开启,纯在线的表格产品俨然成为了很多企业必备的工具之一。但综合性的协同办公产品大部分将更多的精力投入在了文档工具的优化当中,对于表格场景并没有投入足够多的时间与精力;另一方面表格产品看似很简单,但背后其实涉及到很多的技术实现,以及产品团队对于表格场景的熟悉度处理,目前的泛用性在线表格工具都很难具备相应的经验与能力。

因此,如果想要在企业 OA 系统中实现类似 Excel 的在线表格分析功能,为了避免耗费大量的开发精力却只得到一个”鸡肋产品“,最好的办法就是接入更专业的前端表格控件作为辅助。虽然,这类控件数量众多,但经过我的调查研究,能把“表格技术”这一细分场景发挥到极致的产品屈指可数。

究其原因,这些产品大多未攻克以下四个技术难点。

二、表格控件的四大技术难点

B/S 作为 Web 兴起之后的一种网络结构模式,统一了客户端,将系统功能实现的核心部分集中到服务器上。

但随之而来的问题是多浏览器差异、浏览器沙箱机制、内存访问受限、客户端性能低下等。作为数据载体的表格,最直接的影响就是经常会被“吐槽”卡顿,UI 界面“假死”,界面操作不流畅等。

引起这些问题的症结在于浏览器渲染引擎的基础原理:当界面元素越多,浏览器的渲染时间会显著增长,内存消耗会越大。这对于强计算逻辑的前端表格控件来说,无疑是棘手的难题。

由此可见,开发一款前端表格控件需要攻克这四个技术难点:性能、内存消耗、可靠性和操作体验。

1、性能

现代应用程序为了追求更好的用户体验,需要对 UI 界面反复优化,而频繁的修改界面 UI 元素,将引发多次浏览器重绘。在这个过程中,UI 元素的创建及修改,会激活内部垃圾回收机制,影响数据处理效率。

除此之外,前端开发环境的多样化、各类高 DPI 设备、手机、平板、4K 显示屏、企业大屏等,这些无不加重了企业应用系统的处理负担。

为此,业内目前最佳的解决方案是使用 Canvas 绘制模型。

Canvas 主要用于在网页上绘制图像,可以将其理解为画布,开发者们在这个画布上构建想要的效果。它与在浏览器中运行的其他应用有所不同,由于 Canvas 只在屏幕上特定的区域执行并显示效果,可以说它的功能是独占的,因此不太会受到页面上其他内容的影响,反之也是如此。

作为一种不依赖于浏览器解析的方式,使用 Canvas 绘制模型不仅可以解决性能问题,和 DOM 相比还提供了不失真的页面打印,做到所见即所得。

2、内存消耗

随着前端工程化的高速发展,各种前端工程脚手架日渐成熟,WebComponent 标准被提上日程,企业开始由 C/S 向 B/S 应用转型。为了优化内存,这就要求前端开发者,需要面对单线程处理复杂业务数据的挑战。

对于表格控件这类松散的文档结构,业内目前的最佳实践是采用稀疏矩阵存储模型(Sparse Array)来保存数据。

稀疏矩阵在机器学习方面是很常见的。由于稀疏矩阵含有许多数值为零的元素,可以用来压缩矩阵对象的内存台面空间,或者加速多数机器学习程序。

而在表格场景中,相较于传统的链式存储或数组存储,稀疏矩阵存储构建了基于行索引的数据字典,在松散布局的表格数据中,稀疏矩阵只会对非空数据进行存储,而不需要对空数据开辟额外的内存空间。

这种特殊的存储策略,不仅节省了内存消耗,也使得数据片段化变得更加容易。借助这个特性,开发者甚至可以随时替换或恢复整个存储结构中的任何一个级别的节点,实现高效的数据回滚和数据恢复。

3、可靠性

传统前端表格应用计算的特点,是没有稳定的框架计算器、语言计算精度差、表格计算依赖复杂。

随着企业数字系统应用的越来越深入,业务计算方式也变的越来越复杂,灵活度要求也越来越高。为了解决这个问题,必须了解计算引擎的计算流程后进行相应的可靠性优化。

spreadjs

如图所示是计算引擎在构建计算依赖链时的一个简单的流程图。表达式树从计算存储模型中找到对应的根节点以及根节点标识,随后遍历整个表达式树,找出其他依赖标识,构建依赖关系。

当整个依赖链中的任意节点发生变化时,如果沿着这条依赖链,可以查找依赖节点并进行重算,那么在这个过程中,没有在依赖链中的节点是不会发生重算计算的,也就是我们所说的没有脏值运算。

进行这样的机制优化后,可以大幅提升表格产品的运算速度,从而提供更好的使用体验和更加精准的运算结果。

4、操作体验

随着业务场景的丰富,表格系统需要承载更多的功能。例如触摸支持、富文本支持、前端 Excel 导入导出、JSON 存储等。

我们以触摸支持为例,随着大屏时代的来临,触摸操作成为了一项愈发普遍的使用场景。对于触摸来说,很多时候最难的并不是技术实现,而是对于场景的理解。用手机操作技术文档,单击单元格时,对应的位置是放大还是不放大?

对于不同的场景,用户需要的反馈是不同的,对于一款优秀的前端表格控件来说,这的确是技术难点,但却值得每一位开发者深入思考,并积极寻求优化方案。


在一切以用户体验为中心的互联网时代,任何开发活动都应该以改善用户体验为终极目标,产品优化当然也不例外,并且,产品优化最忌陷入纯粹为了追求技术极限而优化的境地。

而上述四个技术难点,在我和葡萄城的 SpreadJS 产品技术团队详细沟通后,也得到了充分的验证,因为,这同样是他们的客户在实际应用场景中最常面临的问题。

SpreadJS 纯前端表格控件,由业内最早进行表格产品研发的技术团队——葡萄城推出,如今已完美复刻了 Excel 的 UI 布局、数据透视表、450多种计算公式和182种形状,只要是涉及到 Excel 文件上信息化系统的场景,他们的产品功能都已经覆盖到了。

spreadjs

而用户之所以敢于用 SpreadJS 替代传统 Excel,正是基于其产品层面已经完成了大量的优化和迭代任务。据我了解,SpreadJS 在性能优化方面除了引入了 Canvas 绘制模型,还率先使用了双缓存画布技术,从而解决了常见的闪屏问题;此外还提供了支撑复杂逻辑运算的计算引擎,可以帮助开发者打造一个长久稳定且可靠的应用系统。

想要在产品层面进行优化,一方面需要“吃透”表格产品的底层技术逻辑,另一方面需要有大量实际的场景应用实践,这恰恰想要做独立开发的企业或者泛用性工具平台所不具备的,而借助 SpreadJS 这类专注于垂直领域的表格控件工具,则可以达到事半功倍的效果。

三、结语

正如我们前面所说,开发一款前端表格控件最难的不是技术,还有对表格产品的熟悉程度。因为纯技术的问题,在很多时候是难不住开发者的,靠时间与精力的投入总能弥补。然而,一款真正优秀的产品最重要的一点,则是对于应用场景,以及用户使用体验的细节把控。

就像在表格类工具中有一个算投资回报率的公式,几乎没有人知道这个公式用 Excel、Google Doc 算出来的结果是不一致的。而这个小到会被所有人忽略的细节,也是 SpreadJS 的研发团队告诉我的。

随着社会的发展,市场需要更灵活、效率更高的开发者解决方案,企业也要同时追求”开发速度“与”产品性能“,这在传统的开发思路中是不可兼得的,但如果做到善假于物,借助第三方工具平台则可以完全实现。

付出一些成本换来更大的发展机会与空间,谁又能说不是一笔好买卖?

文中资源扩展阅读:
SpreadJS 官网:https://www.grapecity.com.cn/...

segmentfault 思否

查看原文

赞 19 收藏 5 评论 0

徐九 赞了文章 · 11月21日

Google 2020开发者大会Flutter专题

由于疫情的原因,今年的Google 开发者大会 (Google Developer Summit) 在线上举行,本次大会以“代码不止”为主题,全面介绍了产品更新以及一系列面向本地开发者的技术支持内容。我比较关注的是移动开发,在本次大会上,关于Flutter 主题的演讲主要从 Flutter 性能方面优化和新功能进行展开。

作为全球增长速度第二的开源项目,越来越多国内开发者使用 Flutter 实现跨平台开发,包括腾讯英语君团队、阿里闲鱼团队等等。其在 开放性上的进步,得益于开源社区、生态建设、对 Web 的支持。
在这里插入图片描述
有兴趣的读者可以通过Google Developer官网进行学习:Google Developer官网

下面我们就来看一下这些新功能和性能上的优化。

Flutter 性能优化

首先为我们带来演讲的是Google 软件工程师李宇骞,他是Flutter 团队的一位软件工程师,主要专注于提升其性能。下面是具体的演讲内容:

2019 下半年,Flutter 团队共收到 23 个量化的性能提升;2020 上半年,Flutter 团队共收到 27 个量化的性能提升。2020 上半年 Flutter 团队共收到来自 78 位开发者的 49 个性能改进。

工具的性能十分重要,性能测试也同样至关重要,拥有良好的性能测试可以:

  • 快速重现问题;
  • 迭代和验证解决方案;
  • 提供数据,激励进一步的工作并防止倒退。

通常,能耗与渲染速度相关,每一帧渲染时间越长则能耗就越高,但能耗并不能衡量渲染速度,因为在某些情况下渲染速度快也可能会导致能耗升高,渲染速度慢也可能不耗能。

CPU 上运行时间虽然短,但由于新的算法利用了更多的 GPU 核心,所以 GPU 能耗反而增加;有些 CPU 上的任务被别的 I/O 或 GPU 任务阻塞,进行了长时间的等待,而等待的时间内并无过多能耗。

因此,在速度之外增加能耗测试是十分必要的。因为 Flutter 团队在 GitHub 上收到的大部分能耗问题都和 iOS 相关,所以此次 Flutter 首先加入了 iOS 的能耗测试,Android 的能耗测试工具会于后续加入。

开发者可以使用 Flutter Gallery App 在 Timeline 中查看 CPU/GPU 的使用率,也可以用集成测试自动检测 CPU/GPU 的使用率。
在这里插入图片描述

Flutter 还新加入了 SkSL 着色器编译预热功能,来帮助开发者消除着色器编译卡顿。如果一个 Flutter 程序第一次渲染某类动画时出现明显的卡顿,但是之后渲染这些动画时,卡顿完全消失,那么这就很可能是着色器编译卡顿。开发者可以使用 --trace-skia,然后检查 Timeline 来确认是否为着色器卡顿。
在这里插入图片描述

值得一提的是,SkSL 可以实现自动化生成与测试,这对于需要持续更新的 Flutter App 来说,可以节省很多的人力。

内存和包体积的测试工具

接下来,是由Flutter 用户体验研究员侯悠扬带来的测试工具专题。侯悠扬于 2017 年加入 Google,并于 2019 年加入 Flutter 团队。她是 Flutter 团队一名用户体验研究员,关注提升 Flutter 产品和开发工具的程序员体验。

此次,Flutter 团队更新了Dart开发工具。Dart 开发工具是面向 Flutter 和 Dart 开发人员的工具套件,包括如下一些小工具:

  • 布局检查(Inspector)
  • 性能调试(Performance)
  • 内存调试(Memory)
  • 网络调试(Network)
  • 包体积调试(App Size)
  • 调试器(Debugger)
  • 日志(Logging)

连接上设备然后运行Flutter应用,点击Android Studio底部工具栏中的【Open DevTools】按钮即可开启调试功能。

内存调试器功能

Flutter的内存调试器提供如下功能:

  • 事件窗格(Dart 和 Android 内存)
  • 手动和自动快照(snapshot)和垃圾回收(GC)
  • 内存分析
  • 内存堆分配累加器(Heap Allocation Accumulators)
  • 通过命令行界面将内存统计信息到处到 JSON 文件

内存测试

内存测试提供如下功能:

  • 通过 ADB 交互直接进行内存测试
  • Dart 开发工具内存测试
  • iOS 内存测试

更多信息可以通过这篇由 Flutter 工程师撰写的文章进行了解:怎么进行Flutter内存测试

包体积调试器功能

包体积调试器提供如下功能:

  • 可视化了应用程序的总大小,包括功能级别的 Dart AOT 快照;
  • 分析快照和应用包(APK,IPA 等);
  • 分析快照或应用程序包(APK,IPA 等)的差异;
  • 查看软件包级别的应用大小归因数据。

Pigeon与Flutter混合开发

什么是Pigeon

在早期的hybird开发模式中,前端和Native交互时需要native双端为JS提供接口。这种情况下如何规范命名,参数等就成了一个问题,如果单独维护一份协议文件,三端依照协议文件进行开发,很容易出现协议更改后,没有及时同步,又或者在实际开发过程没有按照规范,可能导致各种意外情况。

同样,在Flutter插件包的开发中,因为涉及到Native双端代码开发能力,Dart侧暴露统一的接口给使用者,也会出现同样的问题,此时Pigeon应运而生,Pigeon是Flutter官方推荐插件管理工具,可以使用来解决和优化 Native 插件开发上 platform channel 相关的问题。

Flutter官方提供的Pigeon插件,通过dart入口,生成双端通用的模板代码,Native部分只需通过重写模板内的接口,无需关心methodChannel部分的具体实现,入参,出参也均通过生成的模板代码进行约束。接口新增,或者参数修改,只需要在dart侧更新协议文件,生成双端模板,即可达到同步更新,有效的避免了参数修改,参数新增带来的双端代码不同步的问题,下面是Pigeon工作原理示意图。
在这里插入图片描述

下面是Pigeon给出的示例:
在这里插入图片描述

可以看到接入Pigeon后整体代码简洁了不少,而且规范了类型定义。

Pigeon接入

接下来我们看一下如何从零接入Pigeon。截止目前,Pigeon已经发布了0.1.15版本,如下图所示。
在这里插入图片描述
首先,新建一个名为testpigeon的Flutter项目,打开项目的pubspec.yaml文件,并添加如下依赖代码。

dependencies:
  pigeon: ^0.1.15

然后,按照官方的要求在项目目录下新建一个pigeons目录,作为存放dart侧的入口文件,内容为接口、参数、返回值的定义等,以及后面通过pigeon的命令,生产native端代码。接下来,新建一个message.dart 文件,并添加如下。

import 'package:pigeon/pigeon.dart';

class SearchRequest {
  String query;
}

class SearchReply {
  String result;
}

@HostApi()
abstract class Api {
  SearchReply search(SearchRequest request);
}

在上面的message.dart 文件中,通过 @HostApi() 注解标示了通信对象和接口,之后我们只需要执行如下命令,就可以生成对应代码到工程中。

flutter pub run pigeon  --input pigeons/message.dart

其实上面的命令是下面命令的简写方式:

flutter pub run pigeon  --input pigeons/message.dart  --dart_out lib/pigeon.dart  --objc_header_out ios/Runner/pigeon.h --objc_source_out ios/Runner/pigeon.m --java_out android/app/src/main/java/Pigeon.java --java_package "com.xzh.testpigeon"

命令的参数的含义如下:

  • --input:引入了我们创建的 message.dart 文件;
  • --dart_out:输出了 dart 模板文件;
  • --objc_header_out 和 --objc_source_out 输出了 object-c 文件;
  • --java_out 输出了 java 文件;

命令执行后 dart 文件输出到 lib 目录下, object-c 文件输出到了 ios/Runner 目录下,java 文件输出到指定的 com.xzh.testpigeon" 包名路径下,之后就可以开始正式接入。然后我们分别使用Android Studio和Xcode打开原生工程代码。

Android 工程代码

使用Android Studio打开Flutter项目的原生Android工程,生成的代码如下:

// Autogenerated from Pigeon (v0.1.15), do not edit directly.
// See also: https://pub.dev/packages/pigeon

package com.xzh.testpigeon;

import io.flutter.plugin.common.BasicMessageChannel;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.StandardMessageCodec;
import java.util.ArrayList;
import java.util.HashMap;

/** Generated class from Pigeon. */
@SuppressWarnings("unused")
public class Pigeon {

  /** Generated class from Pigeon that represents data sent in messages. */
  public static class SearchReply {
    private String result;
    public String getResult() { return result; }
    public void setResult(String setterArg) { this.result = setterArg; }

    HashMap toMap() {
      HashMap<String, Object> toMapResult = new HashMap<>();
      toMapResult.put("result", result);
      return toMapResult;
    }
    static SearchReply fromMap(HashMap map) {
      SearchReply fromMapResult = new SearchReply();
      Object result = map.get("result");
      fromMapResult.result = (String)result;
      return fromMapResult;
    }
  }

  /** Generated class from Pigeon that represents data sent in messages. */
  public static class SearchRequest {
    private String query;
    public String getQuery() { return query; }
    public void setQuery(String setterArg) { this.query = setterArg; }

    HashMap toMap() {
      HashMap<String, Object> toMapResult = new HashMap<>();
      toMapResult.put("query", query);
      return toMapResult;
    }
    static SearchRequest fromMap(HashMap map) {
      SearchRequest fromMapResult = new SearchRequest();
      Object query = map.get("query");
      fromMapResult.query = (String)query;
      return fromMapResult;
    }
  }

  /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/
  public interface Api {
    SearchReply search(SearchRequest arg);

    /** Sets up an instance of `Api` to handle messages through the `binaryMessenger` */
    static void setup(BinaryMessenger binaryMessenger, Api api) {
      {
        BasicMessageChannel<Object> channel =
            new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.Api.search", new StandardMessageCodec());
        if (api != null) {
          channel.setMessageHandler((message, reply) -> {
            HashMap<String, HashMap> wrapped = new HashMap<>();
            try {
              @SuppressWarnings("ConstantConditions")
              SearchRequest input = SearchRequest.fromMap((HashMap)message);
              SearchReply output = api.search(input);
              wrapped.put("result", output.toMap());
            }
            catch (Exception exception) {
              wrapped.put("error", wrapError(exception));
            }
            reply.reply(wrapped);
          });
        } else {
          channel.setMessageHandler(null);
        }
      }
    }
  }
  private static HashMap wrapError(Exception exception) {
    HashMap<String, Object> errorMap = new HashMap<>();
    errorMap.put("message", exception.toString());
    errorMap.put("code", exception.getClass().getSimpleName());
    errorMap.put("details", null);
    return errorMap;
  }
}

上面生成的 Pigeon.java 代码中包含了 Api 接口用于开发者实现交互逻辑,同时开发者可以通过 SearchRequest 获取 dart 发送过来的请求,通过 SearchReply 返回数据给 dart 。然后,还需要在Android的入口文件MainActivity 中实现 Api 接口来完成数据交互,代码如下。

public class MainActivity extends FlutterActivity {

  private class MyApi implements Pigeon.Api {
    @Override
    public Pigeon.SearchReply search(Pigeon.SearchRequest request) {
      Pigeon.SearchReply reply = new Pigeon.SearchReply();
      reply.setResult(String.format("Hi %s!", request.getQuery()));
      return reply;
    }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);
    Pigeon.Api.setup(getFlutterView(), new MyApi());
  }
}

首先,我们继承 Pigeon.Api 实现了 MyApi 对象,然后在 search() 方法中通过 request.getQuery() 获取 dart 的请求数据,并且通过 Pigeon.SearchReply 的 setResult 返回 数据给dart 端,最后通过 Pigeon.Api.setup(getFlutterView(), new MyApi())启动。

iOS

使用Xcode打开Flutter项目的iOS工程,把生成的 pigeon.h 和 pigeon.m 文件 link 到 Xcode 工程里,之后如下代码所示在 AppDelegate.h 引入 Api 协议。

#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "pigeon.h"

@interface AppDelegate : FlutterAppDelegate<Api>

@end

接下来,在 AppDelegate.m 中实现 search 接口,并在收到的 dart 消息后基于回复,最后调用 ApiSetup()方法将完成注册。

#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [GeneratedPluginRegistrant registerWithRegistry:self];
  // Override point for customization after application launch.
  FlutterViewController* controller =
      (FlutterViewController*)self.window.rootViewController;
  ApiSetup(controller.binaryMessenger, self);
  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}


-(SearchReply *)search:(SearchRequest*)input error:(FlutterError **)error {
    SearchReply* result = [[SearchReply alloc] init];
    result.result  = [NSString stringWithFormat:@"%s%@","Hi ",input.query];
    return result;
}


@end

Dart测试

最后我们在 Dart 代码中新建一个测试的代码,如下所示。

import 'pigeon.dart';

void main() {
  testWidgets("test pigeon", (WidgetTester tester) async {
    SearchRequest request = SearchRequest()..query = "Aaron";
    Api api = Api();
    SearchReply reply = await api.search(request);
    expect(reply.result, equals("Hi Aaron!"));
  });
}

Flutter 在阿里巴巴的应用

首先,主持人为我们介绍了Flutter的历史,介绍围绕美观、高效、流程和开放等几个方面来介绍Flutter。
在这里插入图片描述
接下来,阿里巴巴的无线技术专家门柳介绍Flutter在阿里巴巴的应用,闲鱼是阿里巴巴Flutter技术实践的先驱,也是国内最早尝试Flutter技术的大型互联网公司,而阿里巴巴旗下的淘宝也不甘示弱,也在某些模块结成Flutter,不过大多是业务级别的模块,而没有像闲鱼那样大规模使用。我们可以从下图看到Flutter在阿里巴巴的使用情况。

在这里插入图片描述
那为什么,这么多的移动应用开始使用Flutter来进行开发呢?首先,让我们来了解下跨平台技术的发展历程。
在这里插入图片描述
可以发现,移动跨平台开发经历了大约四个阶段:

  • 早期的WebView加载方案
  • 原生API桥接的Hybrid方案
  • 原生渲染方案(Web语法+原生UI)
  • 自绘渲染(独立布局/渲染)

而Flutter就是采用的自绘渲染方案,有兴趣的童鞋可以研究以下Flutter的架构。为什么选择Flutter进行跨平台应用开发呢,下面是Flutter所具有的一些优势:
在这里插入图片描述
不过,Flutter也不是万能的,Flutter目前处于快速迭代的阶段,所以保险起见,我们只在一些常规的业务开发和模块化的UI界面开发和部分游戏中使用Flutter。
在这里插入图片描述
总结起来,就是在一些富交互类应用和新型的应用中使用Flutter,对于视频、直播等渲染要求高的则继续使用原生进行开发。

那使用Flutter进行应用开发时,有哪些经验和问题需要注意呢?下图显示了阿里巴巴在使用Flutter进行应用开发时遇到的一些问题,大家使用时需要规避。
在这里插入图片描述
首先遇到的问题是,由于Flutter使用的是Dart进行开发,无疑增加了开发者的学习成本。其次,对于大型应用来说,如何保证代码质量,如何在多个平台运行自动化测试脚本也是一个问题;并且由于Flutter作为一门新的技术,如何快速的将老得业务迁移过来也是大家需要考虑的问题。总结一下,就是调试、测试、状态管理、缓和导航栈管理、跨平台兼容以及如何寻找解决方案的问题。
在这里插入图片描述
尽管Flutter已经提供了很多的工具,但是如何将它融入到阿里巴巴的客户端开发工作流中,是大家需要考虑的问题。
在这里插入图片描述
首先,为了提升开发效率,降低初期的接入成本,我们将Flutter Toolkit融入到Alibab DevOps工作流中,并自研了一些工具、打包和发布平台以及搭建调试环境。接下来,我们基于现存的技术积累,研发了一些中间件。
在这里插入图片描述
下面来看一个实例,即如何解决多图列表页面的内存占用问题。这类问题的特征如下:

  • 页面很长,图片很多,首次加载时间很长
  • 大量图片同时加载并生成纹理,内存飙升
  • Sliver中每项Cell拆分粒度很大,单个Cell占用多屏,难以回收

在这里插入图片描述
对于列表Flutter列表内存回收的问题,大家可以阅读 细化 Flutter List 内存回收,解决大 Cell 问题这篇文章。

对于上面的多图长列表的内存问题,我们可以从以下几个方面着手进行优化:

  • 拆分Cell,使每一项变得更小
  • 根据坐标判断图片是否在屏幕内,进而进行图片的懒加载和回收
  • 提前获取图片的宽高大小,减少布局和重绘
  • 以图片为单位进行纹理回收,而不是Sliver中的每项Cell为单位
  • 外接原生图片库,实现共享本地缓存

在这里插入图片描述
最后,我们来看一下Flutter在阿里巴巴的体系化建设。首先,Flutter的体系化建设主要从基础能力建设、研发平台和可持续迭代等几个方面着手。
在这里插入图片描述
下面是Flutter在阿里巴巴平台建设的具体的一些方案。
在这里插入图片描述
目前,Flutter在阿里巴巴已经经过了大规模的应用,并且我们自己的技术体系建设也在稳步推荐中,后面会将建设的一些成果通过社区分享出来。

附: Google 开发者大会

查看原文

赞 17 收藏 2 评论 1

徐九 发布了文章 · 11月20日

“开源软件供应链”,可能是对开源生态的一次重要重构

大教堂与集市

技术编辑:徐九丨发布自:思否编辑部

关注开源的朋友应该都听说过《大教堂与集市》这本书,书中对大教堂与集市进行了很形象的两种比喻。

大教堂给人的感觉,就像机构或者企业中传统的软件项目从立项到完结,有着详尽的流程规划以及质量把控;而开源软件更像集市的发展,没有既定的标准、没有严格的监管、没有明确的方向,看起来乱哄哄的杂乱无章,但却诞生了红帽、Android 和 iOS 这类基于开源的产物。

不可否认,开源本身确实存在着一些“隐痛”,其中最大的问题就是生态的割裂与分化,并且没有一条基于开源构建出的可行的商业模式,特别是在国内,各大企业、厂商虽然都在积极投身开源,尝试将开源与商业进行融合,但能够真的将开源商业模式跑通的寥寥无几。

为了让国内的开源软件生态得以良好发展、发挥出开源真正的价值,11 月中旬,在南京举办的开源软件供应链 2020 峰会中,各界开源人士围绕现代软件构建模式的关键供应关系网络进行了为期两天的探讨,而这次会议的主题 —— 「开源软件供应链」,可能正是解决这一问题的关键之一。这一条“供应链”,很可能将对开源生态进行一次重要重构。

一、什么是开源软件供应链?

“开源软件供应链”这一概念是由中科院软件所于2017年率先提出的。

供应链并不是什么新概念,但这是国内第一次将其引入开源领域。对于大部分领域来说,供应链最难的是打通各个环节间的交易或者交付,而对开源软件生态来说,上下游包含什么在之前的蛮荒发展阶段都还不甚清晰,思考清楚生态链的构成也成了进一步发展的前提。

峰会的开幕式上,中科院软件所所长赵琛从开源软件的源头出发,对比了国内外开源软件发展历史和现状,阐述了对开源软件生产方式、组织体系和运转机制的深刻理解。他表示,要建设可靠的开源软件供应链,不仅需要通过技术、社区和人才,还要保障软件供应的安全和高质量创新。为此,中科院软件所对开源软件供应链提出了一个定义:

一个系统在开发和运行过程中,涉及到的所有开源软件上游社区、源码包、二进制包、包管理器、存储仓库、社区、基金会等,按照依赖、组合等形成的供应关系网络。

从这个定义中我们可以看到,开源软件供应链的构成与传统的供应链模型存在着很大的差异。软件所副总工程师武延军在会上以《开源软件供应链研究及实践》为主题进行了分享,其中介绍到了开源软件供应链的几个特点:

• 商品迭代快
• 模块数量多
• 生产线上化
• 供应全球化
• 仓储集中化
• 用户多样化

正是这几个特点,让开源软件供应链的构建变得非常复杂,但这也说明拥有可靠的开源软件供应链是大规模商用软件的基础,开源软件的发展过程,其实就是供应链整合优化的过程。

二、开源软件供应链点亮计划,重构开源生态

本次开源软件供应链峰会共设立了七大主题 —— 操作系统&编译器、虚拟化&云源生、人工智能、大数据、分布式系统、开源文化&开源商业、开源&教育,而这些主题的选择,应该就是指明了供应链中的几个关键节点 —— 核心技术的发展、商业模式的融合、开源力量的拓展。

赵琛在会议中表示:“相较于发达国家,我国的开源基础核心技术仍然缺失,产业价值链仍然以中低端为主,生态关键环节仍存在挑战。”而武延军在峰会中也分享了国内开源面临的三个最主要的问题:

1、开源产业价值不高
2、开源社区贡献不足
3、开源生态受制于人

这是目前国内开源软件行业的现状。美国企业之所以占据着开源产业的高地,并且不存在自主可控的问题,原因之一就是具备成熟的开源软件供应链体系。只有打造出国内开源生态的供应链条,将目前零散的生态进行梳理重构,才可以分析出开源产业的核心价值与要素,更好的评估开源生态的短板与发展方向。

为此,软件所也在不断的研究与实践包括构建开源软件知识图谱、建立供应链可靠性风险识别与评估体系、建立供应链的量化评价指标等等,这些行业规范以及链条逻辑节点的梳理,才是进一步发展的基础和前提。

此外,生态的发展离不开人才的培养与输入。2020 年 4 月,软件所和 openEuler 社区共同主办了“开源软件供应链点亮计划-暑期2020”活动,旨在培养和寻找新生代的力量。该活动组委会负责人屈晟也于本次峰会中对项目的进展进行了介绍分享。

报告显示,这次活动共吸引了 42 个开源技术社区、246 位社区导师参与,上线了 388 个项目。截至 10 月底活动结束,有 3 位同学通过社区选举成为 Apache 项目的 Committer,超过100 位同学的贡献被社区认可并成为对应项目的 Contributor。

三、开源的新时代与新愿景

本次峰会的重头戏之一是《开源的新时代与新愿景》圆桌论坛。但想要真的迎来开源的新时代,除了打造供应链,还需要更多的力量共同参与,想要蓬勃良好的发展,“政产学研资用”缺一不可。

在武延军研究员的主持下, openEuler 社区理事会理事长江大勇、鹏城实验室启智平台秘书长刘明、清华大学计算机系长聘副教授陈渝、开放原子开源基金会秘书长杜玉杰、恒拓开源董事长马越、飞漫软件总经理魏永明等 6 位业界代表齐聚一台,分别代表供应链中不同的角色进行了深度交流,也为开源软件供应链点亮计划提出了一些可落地的发展建议。

峰会主论坛的最后,武延军也代表组委会向广大科研人员宣读了科研成果开源倡议书,倡议科研人员积极开源科研成果,遵守开源规则、维护知识产权,为开源科研成果的传播、改进和再发布创造便利条件,让科研成果发挥更大价值,服务更多领域。

相信国内的开源软件生态必将随着行业的规范与协作,进入新一个新时代,而新时代的到来,必然也承载着新的愿景。

开源会走向怎样的未来?又能为社会带来怎样的价值?在构建开源软件生态的路上,大教堂和集市是殊途同归还是分道扬镳,书中作者并没有给出答案,每一个从事开源的人可能也没有答案。

开源之路任重道远,但“开源软件供应链”概念的提出以及“开源软件供应链点亮计划”的发布实施,必将让开源领域的从业者拥有更强大的信心与底气,去链接更多开源力量、共建开源软件生态、发挥出开源更大的社会价值。

segmentfault 思否

查看原文

赞 13 收藏 1 评论 0

徐九 发布了文章 · 11月19日

谷歌发布最新 AI 工具,帮助城市绿化“降温”

google-AI

据外媒报道,谷歌今日(当地时间 11 月 18 日)发布了一款 AI 工具,借助 AI 和航拍绘制城市的“绿化地图”,提出绿化决策来解决全球变暖引发的极端高温天气。


根据数据显示,极端的高温天气每年在美国造成的死亡人数,比其他任何跟天气相关的灾难都要多。

由于所谓的城市热岛效应,炎热的气温在城市中可能更加危险。城市地区有更多的吸热表面和更少的绿色植物,平均温度比农村地区高出 6 华氏度。

而树木可以通过多种方式为城市降温。它们可以为人们和建筑物遮阳,当温度上升时,它们通过蒸散作用释放水分来为周围的空间降温。为了帮助城市的园林规划部门确定优先次序并提高种植效率,Google 成立了 「Tree Canopy」实验室,借助 AI 手段和城市航拍提供一些决策建议。

在分析了全年(春季,夏季和秋季)从飞机上收集的彩色和近红外航拍图像后,Google 能够“查明城市中的所有树木并测量其密度”,还可以通过比较不同角度的图像来创建高度图。

然后,该实验室使用专门的树木检测 AI 模型,检测树木的分布生成一张显示树木覆盖密度(也称为“Tree Canopy”)的地图。

google - Tree Canopy

通过这个特质的地图,可以分析出很多数据:

  • 植被覆盖率的百分比
  • 地区的人口密度
  • 哪些地区易受高温影响
  • 哪些地区可以增加绿化

这取代了传统需要进行耗时且昂贵的逐块研究绿化的决策方式,既高效也更科学。


Google 有个口号叫「技术不作恶」,但近些年科技公司们在这个基础上更进了一步,致力于「技术向善」。摩斯密码输入法、AI 疾病监控、智能洪水预报等等,特别是在今年的疫情期间,技术发挥了巨大的社会价值。

SegmentFault 思否在今年与各类厂商的合作中,有很多活动的主旨都是「技术向善」。比如 AWS 人工智能黑客马拉松,就是围绕遗失宠物的智能寻找、老年人的远程智能诊疗、环境污染的预测等赛题进行;小冰团队推出的“虚拟人类”,也让 AI 不再是冷冰冰的智能助手,而是人类温暖快乐生活的一份子。

在这个商业化的时代,很高兴能看到越来越多的企业、组织开始背负起技术责任感、探索人与技术共赢的方式,用技术为人类创造更多美好。

SegmentFault 思否社区 2020 中国技术先锋年度评选已于近日正式启动,其中特设了一项「技术向善奖」,旨在寻找具备较强社会责任感,能够将技术品牌构建与社会、经济、教育、公益相结合,或产品技术成果对于社会有较大贡献的企业、团队或产品线。期待自荐与推荐。

了解活动详情:2020 中国技术先锋年度评选启动,三大类别奖项申报中

segmentfault 思否

查看原文

赞 1 收藏 0 评论 0

徐九 发布了文章 · 11月18日

推出独立文档、视频会议升级,字节跳动旗下办公协作平台飞书发布全新版本「π」

飞书 - π

11 月 18 日,字节跳动旗下企业协作平台飞书在北京举办“2020 飞书未来无限大会”。字节跳动副总裁谢欣在演讲中表示,进入知识经济时代,飞书致力于打造一款配得上这个时代的工具。会上,飞书推出全新版本“π”,发布独立 App“飞书文档”,并在视频会议、即时沟通等功能上宣布了重大更新。

这是飞书自推出以来首次举办大型产品发布会。从去年开始,飞书逐步推向市场,越来越多的企业组织选择了飞书。谢欣表示,飞书的典型客户并非来自单一行业,“越是追求卓越的企业,越是渴求卓越的工具;越是这样的企业,越是喜欢使用飞书。”这也进一步坚定了飞书的方向:打造与追求卓越的企业相匹配的产品,并和企业共同成长。

字节跳动一年创造 2000 万篇飞书文档

clipboard.png

“过去二十多年,我们使用 word 的方式几乎没有改变。即使如今使用着最新的电脑和智能手机,但很多人却沿用着过去的工作方式和工具,这太对不起这个时代了。”回顾字节跳动做飞书的初心,谢欣表示,字节跳动成立的最初几年,试用过国内外所有主流的办公软件,但没有一个可以完全满足公司的需求。基于对“生产力工具缺乏变革、工具不应管控人而要激发人、B 端产品应具有和 C 端产品同样友好的用户体验”三方面的思考,字节跳动启动了飞书项目。

发布会上,谢欣表示,飞书不仅是在解决当前的问题,也要去创造未来的可能。知识经济时代,企业最重要的生产要素发生了变化,人和信息成为企业构建竞争力的核心。飞书围绕着人和信息思考产品。当工具把人和信息都服务好的时候,会出现一个新现象:知识的涌现。涌现并不是被设计出来的,而是自发产生的。

过去一年中,字节跳动全体员工在飞书上创建了超过 2000 万篇文档,如果打印成 A4 纸,堆叠起来的高度接近珠穆朗玛峰。谢欣表示,这些文档不仅是企业知识的积累,更是企业一笔宝贵的财富。

飞书加强了信息的创造、传播、消费和反馈的各个过程,让工作变得更高效、更愉悦。同时,飞书不仅是生产力工具,也能提升企业的组织能力。以飞书 OKR 为例,在字节跳动的发展历程中,OKR 发挥了巨大作用,提升了组织能力。如今,飞书的 OKR 正在帮助更多企业,激发员工潜能、增强企业竞争力。

张楠-飞书

飞书负责人张楠在「飞书未来无限大会」上,也首度公开介绍了飞书的产品定位及设计理念。

飞书文档 App 独立发布 “妙记”提供结构化智能会议纪要

在产品功能层面,飞书也迎来了一次大规模更新,并发布了全新的“π”版本。飞书总裁张楠介绍,“π”代表着“无限”,寓意飞书拥抱未来工作方式的无限可能。作为企业协作平台,飞书从底层打通了 IM、日历、文档、邮件、视频会议等基础应用,用开放平台衔接业务应用,并在流程体验上做到无缝集成。

在文档方面,飞书文档具有三大特点:“为创作添翼、为协作打造、以移动为先”。张楠表示,以前的文档里主要是文字、表格等静态的文本内容;现在,内容表达的形态更加丰富了。用户可以在飞书文档中“插入一切”,无论是音视频、文件、表格,还是流程图、投票、沟通群。同时,飞书文档不仅仅是多人协同编辑,更是能促进团队成员思维碰撞。此外,飞书文档设计初始就为移动而生,具有良好的跨设备体验。基于飞书的文档模块,飞书文档 App 作为一款独立应用也正式单独对外发布。

飞书文档还发布了三个重要的新功能:思维笔记、多维表格、双向链接。用户可以在飞书思维笔记上直接评论、批注,邀请同事一起协作办公。不同于传统表格,多维表格可以把信息更加结构化地组织起来,并且有多种视图,能够更清晰地表达数据之间的关联关系,辅助各种场景。如果引用了多个其他文档,系统会自动建立文档间的双向链接关系,通过生成网状关系图,帮助用户更好地找到相关文档。

视频会议方面,飞书会议人数上限提升到了 1000 人,并且支持 App、网页、电话等多种形式入会。飞书还上线了直播功能,可把飞书会议直播给内外部的用户,支持百万级在线观看,还能一键推流至抖音、西瓜等平台。

张楠表示,与“π”版本一起,飞书会议重点推出了全新功能 —— “妙记”。“妙记”不仅能将语音转化成文字,还具有强大的语义分析能力,帮助用户短时间内即可了解会议的核心内容,并且生成结构化智能会议纪要。

即时沟通方面,飞书将日历、文档、视频会议、审批等各种功能都与IM整合打通,用户不需要在各种工具之间来回切换,飞书的消息列表就是各类协作的一站式入口。除了内部沟通,飞书还上线了企业邮箱服务。无需另外安装App,用户在飞书上就能完成所有邮件的收发及管理,帮助用户连接起企业的内外沟通。

据了解,自推出以来,飞书凭借强大的产品能力快速“破圈”,从互联网、高科技、新媒体领域三大核心领域,向金融、零售等更多行业渗透。飞书正在让先进的工作方式成为更多企业基因的一部分,并推动其业务不断发展。

segmentfault 思否

查看原文

赞 3 收藏 0 评论 1

徐九 发布了文章 · 11月18日

传奇黑客 Mudge 加入 Twitter,曾为政府承包商进行机密工作

mudge-twitter

据路透社消息,在监管威胁加剧和严重安全漏洞的困扰下,社交媒体巨头 Twitter 正在任命世界上最知名的黑客之一 —— Peiter Zatko(因其黑客账号 Mudge 而广为人知)来解决从工程失误到错误信息的一切问题。

据悉 Mudge 将担任新的安全主管一职,赋予他广泛的授权,对 Twitter 的网络安全结构和做法提出改革建议,并将直接向 Twitter 首席执行官杰克·多西负责,预计在经过 45 到 60 天的审查后,将接管关键安全职能的管理。

Mudge 的故事

Mudge 在 1990 年代以臭名昭著的黑客团体 Cult of the Dead Cow 和 L0pht Heavy Industries 的名字而闻名。它们都以创建和分发黑客工具而闻名,但他们同时也是黑客社区独特文化的推动者,他们分发音乐和杂志,举办会议以及从事网络恶作剧和激进主义活动。

在 1990 年代后期,Mudge 在黑客社区中的核心作用,再加上互联网在商业上的重要性日益增强,导致与政治领导人之间的对话日益增多。1998 年,他和其他 L0pht 成员在美国国会作证,证明当时的信息安全质量标准很差。该小组在会议中告诉参会代表们,如果愿意,他们可以在短短 30 分钟内关闭互联网几天。

两年后,发生了一系列影响了 CNN、eBay、雅虎和亚马逊的黑客攻击,为此 Mudge 也曾受邀为当时的总统比尔·克林顿(Bill Clinton)提供有关互联网安全的建议,

为什么是 Twitter?

clipboard.png

这不是 Mudge 第一个入职的公司。他此前曾在电子支付独角兽 Stripe 负责安全工作,也曾在谷歌从事特殊项目的工作,并在五角大楼著名的国防高级研究与计划局(DARPA)监督发放网络安全项目的拨款。

而这次入职 Twitter,其实也是一次双向的选择。

“我不知道是否有人能解决 Twitter 的安全问题,但他会是我的首选。”Dan Kaufman 说,他曾在 DARPA 监督 Mudge,现在是谷歌高级产品组的负责人。

近年来,Twitter 面临众多安全挑战。一年前,美国政府指控两名男子多年前在 Twitter 工作时为沙特从事间谍活动,称他们传递了有关沙特王国批评者的私人信息。今年 7 月,一群年轻的黑客欺骗了员工,并赢得了对内部工具的访问权,这让他们改变了账户设置,然后从当时的总统候选人乔·拜登,微软创始人比尔·盖茨和特斯拉首席执行官埃隆·马斯克的账户中发推文。

“今年夏天的数据泄露事件是一个重要的提醒,提醒人们在建立一些必要的基本安全功能方面,Twitter 需要走多远,以运行一个被对手瞄准的服务,比因该事件被捕的青少年更熟练,”前 Facebook 首席安全官、现任斯坦福大学研究员 Alex Stamos 说,他曾帮助领导打击选举虚假信息的努力。

曾经在 Mudge 的安全咨询公司工作过的 Stamos 称,对于 Twitter 来说,他是一个非常合适的人选。“他们将不得不为这些问题找到创造性的解决方案,如果说 Mudge 在安全领域有什么出名的地方,那就是有创造性。”

而 Mudge 本人在接受专访时表示,他将致力于改善 Twitter 上的公共对话。他称赞了 Twitter 最近的一项举措,并赞赏了 Twitter 对非常规安全方法的开放态度,比如他提出的通过操纵从 Twitter 收到的关于人们如何与他们的帖子进行互动的数据来迷惑别有用心之人。

“他们愿意承担一些风险,在算法和算法偏差的挑战下,他们不会袖手旁观,等待别人解决这个问题。”

什么是真正的黑客文化?

知名黑客转行的故事其实屡见不鲜,George Hotz、Hector Xavier Monsegur、Kevin David Mitnick,这些顶尖黑客在近几年纷纷上岸。随着黑客文化的传播,社会和企业也逐渐明白了黑客的存在意义,对黑客有着更积极的看法,而企业和政府也开始聘请黑客来帮助自己解决困难。

成为一个黑客,是许多程序员心中暗藏多年的梦想。

“在黑客的文化中,优雅、简洁的创新是被高度崇尚的,就像在纯科学的领域,"《波士顿环球报》的记者伦道夫赖安在 1993 年的一篇警车展览相关的文章中写道,“黑客与一般校园中的那些喜欢恶作剧的人不一样,他们在一些需要细致计划、工程化和使用手段的事件中的表现,更具有创造力。”赖安写道:“黑客的本质应该是好的,不能去搞破坏,应该是安全的,这是条不成文的规则。事实上,黑客们有时也参与破坏他们自己的作品。”

当黑客们把天赋用对了地方,改变世界、创造美好可能也就是分分钟的事儿。

segmentfault 思否

查看原文

赞 1 收藏 0 评论 0

徐九 发布了文章 · 11月18日

微软发布Pluton处理器,为Windows PC提供全新安全功能

微软-Pluton

近日,微软发布了 Pluton 安全处理器,旨在为未来的 Windows PC 带来安全方面的进步。据悉,微软与 AMD、英特尔和高通公司合作开发了这款新的 Pluton 安全处理器。

这款新的安全处理器将使攻击者访问系统的难度大大增加,它还将提高微软防范物理攻击的能力,防止凭证和加密密钥被盗,并提供从软件漏洞中恢复的能力。


Pluton 设计通过在 CPU 中直接建立安全机制,消除了该通信通道受到攻击的可能性。使用 Pluton 架构的 Windows PC 将首先模拟一个 TPM,与现有的 TPM 规范和 API 一起工作,这将使客户立即受益于依赖于 TPM 的 Windows 安全功能增强,如 BitLocker 和 System Guard。

采用 Pluton 的 Windows 设备将使用 Pluton 安全处理器来保护凭证、用户身份、加密密钥和个人数据。即使攻击者安装了恶意软件或完全物理占有 PC,这些信息都无法从 Pluton 中删除。这是通过将敏感数据(如加密密钥)安全地存储在 Pluton 处理器内实现的,该处理器与系统的其他部分隔离,有助于确保新出现的攻击技术(如投机执行)无法访问密钥数据。

Pluton 还提供了独特的安全硬件加密密钥(SHACK)技术,有助于确保密钥永远不会暴露在受保护的硬件之外,甚至是 Pluton 固件本身,为 Windows 客户提供了前所未有的安全级别。

Pluton 为运行固件提供了一个灵活的、可更新的平台,实现了端到端的安全功能,这些功能由微软撰写、维护和更新。用于 Windows PC 的 Pulot 将与 Windows 更新过程集成,方式与 Azure Sphere 安全服务连接到物联网设备的方式相同。

segmentfault 思否

查看原文

赞 0 收藏 0 评论 0

徐九 发布了文章 · 11月18日

LinkedIn 开源 Java 机器学习函数库Dagli,提供开发高效能且生产就绪的模型

linkdeln - dagli

虽然机器学习的发展每天都在增长,但是来自 Algorithmia 的一项调查显示,大多数企业花费 8 到 90 天的时间来部署 ML 模型。大多数人将责任归咎于无法扩展,其次是模型可重复性方面的挑战,例如缺乏官方认可和工具不足。

而 LinkedIn 最近开源的 Dagli,是一种用于 Java 和其他 JVM 语言的机器学习库。该库使您可以轻松起草抗错误,可理解,可修改,可维护和可部署的模型管道,而不会招致技术负担。

Dagli 环境具有大量的工作管线组件(pipeline components),包含神经网路、逻辑回归、梯度提升决策树、FastText、交叉验证、交叉训练、特征选择、数据读取器、评估、特征转换等。而Dagli 环境提供工作管线定义、静态类型、不变性等特性,从根本上避免大部分的逻辑错误。此外,Dagli 也提供高度可移植性,开发者能应用于伺服器、Hadoop、CLI、IDE,与其他典型的JVM 环境中工作。

linkdeln - dagli

对资深的机器学习工程师来说,Dagli 提供开发高效能且生产就绪的模型,能够长期维护,也能扩充,与现在基于JVM 技术的堆叠整合。对于机器学习新手工程师,Dagli 提供直观的API,能结合熟悉的JVM 工具使用,并避免常见的逻辑错误。

LinkedIn 的自然语言处理研究科学家 Jeff Pasternack 表示,机器学习模型通常是集成管道的一部分。这使生产管道的建设,培训和部署更具挑战性。为了兼顾训练和推理,通常需要重复或外部工作来产生使模型的未来发展和维护变得复杂的无弹性胶粘代码。

GitHub: https : //github.com/linkedin/dagli

segmentfault

查看原文

赞 1 收藏 0 评论 0

徐九 赞了文章 · 11月17日

思否独立开发者丨@轩帅:开启技术变现之路,探索第三收入来源

独立项目名称:倾城之链

月收入:暂不到 1000

思否社区ID:@jeffjade


今天我们采访的是独立开发者是杨轩帅,他目前在国内一家做快应用相关的公司;目前,他的工作侧重管理、工具型产品,当然也仍会写写代码;出于对高效工作的追求,他比较热衷于创造一些好产品/工具。

目前杨轩帅仍是一名业余独立开发者。

工作内外,他都有很多想法,以及一些痛点;并且非常倾向将其抽象出来,加以设计,用代码实现出一个工具,或是一款产品,为自己和他人都能带来价值;即便只有自己用,也觉得很酷。

在谈到对独立开发者定义时,他表示:『独立开发者』,一般指的是“从产品立项、设计、开发、推广、到盈利的闭环全部独立完成的人”。也想有更多志同道合朋友,组成一个团队,聚集起来完成一款产品,但这并不容易。

在所有项目,包括倾城之链在内,全部工作都须自己去做,在不擅长的领域,难免捉襟见肘,比如 UI 设计、交互设计,推广等环节。

倾城之链

项目立项:这里主要介绍下倾城之链这个项目;从 17 年初,有开始立项,在业余时间策划、设计、编写以及部署等。主要部分功能,也是在 17 年就完成;这几年有陆续完善体验,塑造周边能力,以及发小程序、快应用等版本。

项目背景:开发这款项目,每个阶段,主要出发点都有些不同;最初:诞生这些想法,是出自个人需要。

立项动机:开发一款产品,为自己带盐;修炼技艺,创造挑战,追名逐利。时隔三年,仍在积极维护,主要是要靠其获取业余收入。在 17 、 18 年,分别写了关于「倾城之链」的文章,详细介绍了故事起源,名字由来,核心价值、如何访问、以及如何运作等。

面向群体:“所有互联网用户,以及 Web 应用创造者”,这是原本设想。但在实际推广中发现,互联网从业者是主要用户,地域多分布在一、二线城市。比如,有向家乡的亲友(对 Web 应用没有认知)推荐,这跟教它们编程一样艰难(摊手🤷‍♂️)。

对于这样的现状,现在也有所释怀,毕竟不是娱乐性质、而且不能立刻为用户带来可见“价值”的产品,在我们现在这个环境,很难快速推广开来;毕竟,我本人下了班,也经常会看看视频、玩儿下游戏,无脑的放松自我。何况倾城之链,又是偏向让用户主动发现、学习、探索的类型。

1、如何做的第一版产品?

17 年那会儿,年富力强,在大前端这块儿,尚不能融会贯通;有了这个想法后,就立马动手策划、技术选型、设计、编码、测试、买域名、购服务器、部署、验证等;很快就出品了第一版。当然,那时候感情上也正处于“空窗期”,使得有专心于此的业余时间和外部环境。

2、独立开发过程中遇到过哪些困难?最难搞定的是什么?

最难莫过于:“交互设计,UI 设计”,技术不懂可以学,时间不足可以挤,但在界面设计这块儿,实在是苦煞人也;自认为在审美这块儿,比起些专业设计师,也不遑多让;但真正自己去设计,总不尽如人意。各种参考、改版,就目前所呈现出来的,也不是个人所满意的。如果能有一优秀设计师携手,想必倾城之链现状,会比现在好很多。

3、项目目前取得了哪些成就?项目为你带来了什么?

就取得的成就而言,最大的是,目前已经收录全球优质网站 400 余个,且还在不断增长。

给我带来的就很多:

  • 原本就为练技,开发维护倾城,在高效开发 Web 应用积累满多经验;
  • 因为上一条,为自己的工作,或有形或无形,也带来非常大的帮助和价值;
  • 收录的所有 Web 应用,都须亲自逐一审核(+写推荐语),使得眼界大开;
  • 也因为上一条,使得接触到很多有价值产品,对工作,生活、或者写文都产品很大影响;
  • 倾城之链小程序发布几个月后,现在慢慢有了自然流量,接入广告后,每天都能带来些收益小惊喜;这比赚取工资来的开心。

4、你的商业模式是什么?是如何增长的?

截止目前,还没非常认真考虑商业模式;原本设想是,服务好用户(探索发现者,Web 应用创造者),不断丰富内容,从而逐渐产生更多价值;就会形成优良循环♻️,当用户达到一定规模,采取接入广告来获取收益。

但就目前而言,还未达到这一点;仍在积极收录优质 Web 应用、开发更多对用户有价值的功能。接下来,有计划投入一笔广告,从而提升产品知名度。

5、近阶段项目有哪些更新,未来会做什么变动

最近更新是,为审核通过的网站,自动发起首页截图,并压缩、上传至阿里云 OSS,从而展示给用户,能让用户在打开 Web 应用前,能够对其有一个初步了解。最近也是写了篇文章一键截图、压缩 & 上传至阿里 OSS,专门介绍了下具体实现和封装📦。

未来仍会持续维护、更新。功能路线图有在 Github Issues 记录。具体会投入多大力度,取决于后续广告投入后,所产生的收益高低。如果远高于预期,专职全勤投入也可以考虑。

6、如果项目重来一次你会做哪些改变?

我想会提早开发并重视小程序、快应用版本(得注册一个公司);从数据看,小程序所能带来的收益,要比 Google AdSense 多,且容易。

个人相关问题

1、推荐你最喜欢的一款产品 / 游戏 / App?并说明原因

没有限制条件的话,当然是倾城之链啦。毕竟“亲儿子”;何况我也是「倾城」的重度 & 忠实用户,而且还给自己带来了非常多的好处,最喜欢「倾城」,实属实至名归。

但就那样回答,颇有些符合咱传统习惯;如 Product Hunt(一个供用户分享和发现产品、专注于每日最佳新 APP 排行榜的社交新闻网站),Github 等,都是我非常喜欢的产品。尤其前者,倾城之链就需要向其多多学习;而且在这个阶段,Product Hunt,很多程度上,是我在互联网这块,视野拓展的主要源头之一。

2、分享一下你的技术栈和你日常的工作流?

在工作中,主要涉及开发快应用引擎、以及周边生态建设;使用的技术栈主要是:

  • 编程语言:JavaScript,TypeScript,Node.js、Css,Html 等;
  • 前端框架:Vue、React、Electron 等;
  • 构建工具:Webpack、Rollup、Gulp 等;
  • 应用类型:小程序、快应用、PWA 等;

在进行些个人项目开发中,也会用到 MongoDB、Redis、Nginx、Docker、Python 等。

日常工作流:多年来,都使用 Mac 作为开发工具;基于 VsCode、Sublime Text3 编写代码(写快应用、小程序,会用到对应 IDE);用 Git、Github、Gitlab 来控制项目版本;Jenkins 来持续集成;习惯使用 Markdown 写文档、博客;Xmind 绘制思维导图;使用各类 Terminal 命令行来提升效率(遇到没有诉求,会自己集成,如个人作品 Arya Jarvis).......

3、对独立开发者或编程初学者有什么建议?

对于独立开发者,鉴于每个人的初衷、身处环境、终极目标,都有所不同,暂没有更多建议。

对于编程初学者,倒有满多想说的:

  1. 对于编程,要“战略上藐视它 战术上重视它”,要认识到这并不是很难学,但须要付出努力,切勿眼高手低。
  2. 方向上,先易后难(可以先学学 JavaScript 或 Python 等),多读文档,多敲代码,勤于思考,举一反三,善于总结,坚持写博文。
  3. 找准方向后,建议采取“学以致用”的方式,循序渐进:可以定制一个需求,想法设法去实现,修炼编程基本功的同时,也锻炼了综合能力(如学习、搜索、排查问题等)。
  4. 最后就是坚持(凡事贵在坚持);坚持学习、总结、跟同行交流反馈、持续输出心得。须知:“念念不忘、必有回响”。

4、生活中有什么爱好?有什么个人的特别的工作习惯么?

生活中爱好,可谓非常广泛;譬如游戏、读书、听歌、看电影(动漫)、写东西、跟朋友聊天...... 但在业余时间,真正做的比较多是:编程和游戏;前者是为了追逐名利;后者则是为了减压,或者偶尔的放纵(周末安装,玩儿完删掉,循环往复)。

特别的工作习惯:个人崇尚效率(工欲善其事,必先利其器),每当遇到需求,总会先将需要的工具或者环境,快速准备妥帖,从而使得后续工作,尽可能顺畅、高效、省心。

5、聊聊你的思否的看法或对国内技术社区的看法

早在 2015 年 3 月,就有加入思否社区。那时候入还比较年轻,精力充沛,成长欲也很强;有空就会扫一扫“问答”,挑些感兴趣的问题来回答下。慢慢地,空闲时间不在那么多,偶尔在博客产出些文章,会借助「发头条」功能,分享给用户,也能给自己的站带来些流量,时至如今,也是喜之不已。如今,思否又发起「独立开发者计划」,这简直是我辈福音。即便时间不是很充盈,也抽空来接受采访。坦白说,「思否」我心中,国内最友好的技术社区。

国内其他技术社区,就用过了,也谈下个人看法:

  • 博客园:个人最初写博客的阵地;它在艰难的环境中成长、发展、壮大,博客园用户中成长出了一批又一批技术专家,在 IT 行业中大展身手!任互联网浪潮的此起彼伏,尽管时光流转岁月变迁,它依旧坚守初心,真的很棒。
  • CSDN:很早就知道它,但用的很少;因为它的权重很高,检索问题,经常会出现在搜索结果中;但总体来看,它质量低劣,且抄袭遍地,很多时候不能解决所遇问题,早已借助 Chrome 扩展,将其从搜索结果中屏蔽。
  • V2EX:独具匠心的发布、回复话题奖励机制,让这里的内容多了一层更趋于优质的可能;但内容更多不是技术,而是技术圈人的感慨;有时候在 v2ex 推广些个人产品,确实能短时间内带来不少流量;同时,也要具备一定内心成熟能力。
  • 掘金:一个帮助开发者成长的社区、面向互联网技术人的内容分享平台。倒是作为创作者,用过一段时间,但它那短时间内崛起的超大权重,远高于个人主博客,就不再用了。对于既得利益者,掘金是蛮好的存在。就个人使用感受,远不如「思否」友好。

独立开发者寄语

「倾城之链」作为一个开放平台,旨在云集全球优秀网站,探索互联网中更广阔的世界;在这里,你可以轻松发现、学习、分享更多有用或有趣的事物。如果您感兴趣想进一步了解,可以参见关于倾城;之前也有对「倾城之链」的来龙去脉,在博客中做了分享,具体可以参见以下文章:

除了「倾城」这款作品,利用闲暇也写了些工具,感兴趣的朋友,可以移步轩帅个人作品集查阅。

独立开发者支持计划-1.png

该内容栏目为「SFIDSP - 思否独立开发者支持计划」。为助力独立开发者营造更好的行业环境, SegmentFault 思否社区作为服务于开发者的技术社区,正式推出「思否独立开发者支持计划」,我们希望借助社区的资源为独立开发者提供相应的个人品牌、独立项目的曝光推介。

有意向的独立开发者或者独立项目负责人,可通过邮箱提供相应的信息(个人简介、独立项目简介、联系方式等),以便提升交流的效率。

联系邮箱:pr@segmentfault.com


image

二维码过期添加思否小姐姐拉你入群
image.png
查看原文

赞 8 收藏 2 评论 0

徐九 发布了文章 · 11月17日

华为官宣出售荣耀:华为不持有任何股份,30 余家代理商接盘自救

华为-荣耀

11月17日,多家华为供应链企业在《深圳特区报》发布联合声明,深圳市智信新信息技术有限公司已与华为投资控股有限公司签署了收购协议,完成对荣耀品牌相关业务资产的全面收购。出售后,华为不再持有新荣耀公司的任何股份。

声明指出,此次收购既是荣耀相关产业链发起的一场自救和市场化投资,能最大化地保障消费者、渠道、供应商、合作伙伴及员工的利益;更是一次产业互补,全体股东将全力支持新荣耀,让新荣耀在资源、品牌、生产、渠道、服务等方面汲取各方优势,更高效地参与到市场竞争中。

知情人士指出,华为被美国持续打压以来,荣耀的供应商、生产工厂、渠道和分销商都面临困难。这种情况下,华为出售荣耀,是在“保护渠道有水流,别干枯了,别害了上下游”。


据悉,深圳市智信新信息技术有限公司,由深圳市智慧城市科技发展集团与30余家荣耀代理商、经销商共同投资设立,包括天音通信有限公司、苏宁易购集团股份有限公司、北京松联科技有限公司、深圳市顺电实业有限公司、山东怡华通信科技有限公司、深圳冀顺通投资有限公司、河南象之音健康科技有限公司、福建瑞联优信科技有限公司、内蒙古英孚特通讯技术有限公司、哈尔滨金潭科技发展有限公司等。

声明表示,所有权的变化不会影响荣耀发展的方向,荣耀高层及团队将保持稳定。投资新荣耀的经销商和代理商也承诺:未来只享有财务上的投资回报,在业务侧将遵循公平交易的市场化原则,与其他经销商、代理商享受同等机会。


在华为内部,一直有着“双品牌”战略,其中荣耀对标小米主打互联网模式和年轻人市场,而华为品牌则可放手一搏,向上攻占高端市场,如P系列和Mate系列。独立运作之后,荣耀依托于华为集团的技术平台逐渐在中低端市场站稳脚跟,并在互联网手机的浪潮中寻找到一条适合自己的路径。

自 2013 年来,荣耀一直以优质产品收获一大批忠实用户,在年轻群体中收获较高品牌辨识度,与华为品牌形成区隔。

在成立的七年间,荣耀的销量也在不断攀升,在国内线上市场位居第一。2019 年第一季度荣耀销量能占到华为手机销量将近一半,在 2020 年第三季度,荣耀占到华为全球出货的四分之一左右,在国内占到三分之一左右。

此次收购既是荣耀相关产业链发起的一场自救和市场化投资,能最大化地保障消费者、渠道、供应商、合作伙伴及员工的利益,更是一次产业互补。

segmentfault 思否

查看原文

赞 0 收藏 0 评论 0

徐九 赞了文章 · 11月13日

天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝

Python中的深浅拷贝

在讲深浅拷贝之前,我们先重温一下 is==的区别。

在判断对象是否相等比较的时候我们可以用is==

  • is:比较两个对象的引用是否相同,即 它们的id 是否一样
  • == : 比较两个对象的值是否相同。
id() ,是Python的一个内置函数,返回对象的唯一标识,用于获取对象的内存地址。

如下

首先,会为整数1分配一个内存空间。 变量a 和 b 都指向了这个内存空间(内存地址相等),所以他们的id相等。

a is bTrue

但是,真的所有整数数字都这样吗? 答案是:不是! 只有在 -25 ~ 256范围中的整数才不会重新分配内存空间。

如下所示:

因为257 超出了范围,所以id不相同,所以a is b返回的值为False。

>>> a = 257
>>> b = 257
>>> print(id(a))
20004752
>>> print(id(b))
20001312
>>> print(a is b)
False
>>> print(a == b)
True

这样做是考虑到性能,Python对-5 到 256 的整数维护了一个数组,相当于一个缓存, 当数值在这个范围内,直接就从数组中返回相对应的引用地址了。如果不在这个范围内,会重新开辟一个新的内存空间。

is 和 == 哪个效率高?

相比之下,is比较的效率更高,因为它只需要判断两个对象的id是否相同即可。

== 则需要重载__eq__ 这个函数,遍历变量中的所有元素内容,逐次比较是否相同。因此效率较低

浅拷贝 深拷贝

给变量进行赋值,有两种方法 直接赋值,拷贝

直接赋值就 = 就可以了。而拷贝又分为浅拷贝和深拷贝

先说结论吧:

  • 浅拷贝:拷贝的是对象的引用,如果原对象改变,相应的拷贝对象也会发生改变
  • 深拷贝:拷贝对象中的每个元素,拷贝对象和原有对象不在有关系,两个是独立的对象

光看上面的概念,对新手来讲可能不太好理解。来看下面的例子吧

赋值

a = [1, 2, 3]
b = a
print(id(a)) # 52531048
print(id(b)) # 52531048

定义变量a,同时将a赋值给b。打印之后发现他们的id是相同的。说明指向了同一个内存地址。

然后修改a的值,再查看他们的id

a = [1, 2, 3]
b = a
print(id(a))  # 46169960
a[1] = 0
print(a, b)  # [1, 0, 3] [1, 0, 3]
print(id(a))  # 46169960
print(id(b))  # 46169960

这时候发现修改后的a和b以及最开始的a的内存地址是一样的。也就是说a和b还是指向了那一块内存,只不过内存里面的[1, 2, 3] 变成了[1, 0, 3]

因为每次重新执行的时候内存地址都是发生改变的,此时的id(a) 的值46169960与52531048是一样的

所以我们就可以判断出,b和a的引用是相同的,当a发生改变的时候,b也会发生改变。

赋值就是:你a无论怎么变,你指向谁,我b就跟着你指向谁。

拷贝

提到拷贝就避免不了可变对象和不可变对象。

  • 可变对象:当有需要改变对象内部的值的时候,这个对象的id不发生变化。
  • 不可变对象:当有需要改变对象内部的值的时候,这个对象的id会发生变化。
a = [1, 2, 3]
print(id(a)) # 56082504
a.append(4)
# 修改列表a之后 id没发生改变,可变对象
print(id(a)) # 56082504

a = 'hello'
print(id(a)) # 59817760
a = a + ' world'
print(id(a)) # 57880072
# 修改字符串a之后,id发生了变化。不可变对象
print(a) # hello world

浅拷贝

拷贝的是不可变对象,一定程度上来讲等同于赋值操作。但是对于多层嵌套结构,浅拷贝只拷贝父对象,不拷贝内部的子对象。

使用copy模块的 copy.copy 进行浅拷贝。

import copy
a = [1, 2, 3]
b = copy.copy(a)
print(id(a))  # 55755880
print(id(b))  # 55737992
a[1] = 0
print(a, b) # [1, 0, 3] [1, 2, 3]

通俗的讲,我将现在的a 复制一份重新分配了一个内存空间。后面你a怎么改变,那跟我b是没有任何关系的。

对于列表的浅拷贝还可以通过list(), list[:] 来实现

但是!我前面提到了对于多层嵌套的结构,需要注意

看下面的例子

import copy
a = [1, 2, [3, 4]]
b = copy.copy(a)

print(id(a)) # 23967528
print(id(b)) # 21738984
# 改变a中的子列表
a[-1].append(5)
print(a) # [1, 2, [3, 4, 5]]
print(b) # [1, 2, [3, 4, 5]]  ?? 为什么不是[1, 2, [3, 4]]呢?

b是由a浅拷贝得到的。我修改了a中嵌套的列表,发现b也跟着修改了?

如果还是不太理解,可以参考下图。LIST就是一个嵌套的子对象,指向了另外一个内存空间。所以浅拷贝只是拷贝了元素12 和子对象的引用!

另外一种情况,如果嵌套的是一个元组呢?

import copy
a = [1, 2, (3, 4)]
b = copy.copy(a)

# 改变a中的元组
a[-1] += (5,)
print(a) # [1, 2, (3, 4, 5)]
print(b) # [1, 2, (3, 4)]

我们发现浅拷贝得来的b并没有发生改变。因为元组是不可变对象。改变了元组就会生成新的对象。b中的元组引用还是指向了旧的元组。

深拷贝

所谓深拷贝呢,就是重新分配一个内存空间(新对象),将原对象中的所有元素通过递归的方式进行拷贝到新对象中。

在Python中 通过copy.deepcopy() 来实现深拷贝。

import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)

print(id(a)) # 66587176
print(id(b)) # 66587688
# 改变a中的可变对象
a[-1].append(5)
print(a) # [1, 2, [3, 4, 5]]
print(b) # [1, 2, [3, 4]]  深拷贝之后字列表不会受原来的影响

结语

1、深浅拷贝都会对源对象进行复制,占用不同的内存空间

2、如果源对象没有子目录,则浅拷贝只能拷贝父目录,改动子目录时会影响浅拷贝的对象

3、列表的切片本质就是浅拷贝


史上最全Python资料汇总(长期更新)。隔壁小孩都馋哭了 --- 点击领取

查看原文

赞 3 收藏 2 评论 0

徐九 关注了用户 · 11月13日

阿亮亮亮阿 @object_5c4ab6730030f

关注 172

徐九 发布了文章 · 11月13日

Zilliz融资4300万美元,创全球开源基础软件B轮融资新纪录

Zilliz

11月13日,AI 非结构化数据处理和分析软件公司 Zilliz 宣布完成 4300 万美元 B 轮融资。本轮融资由高瓴创投领投,挚信资本和 Pavilion Capital 跟投,A 轮领投方五源资本(原晨兴资本)和天使轮领投方云启资本继续超额加注,义柏资本担任独家财务顾问。

这是全球开源基础软件领域迄今为止最大单笔 B 轮融资。目前,Zilliz 已经累计完成超过 5300 万美元融资。Zilliz 创始人兼 CEO 星爵表示,本轮募集的资金将主要用于全球人才招募,构建开源软件生态,研发云端产品和服务,进一步促进 AI 非结构化数据处理和分析技术在全球的普及和应用。

“人类社会 80% 的数据都以非结构化数据的形态存在,它们并没有得到有效利用。” 星爵介绍说, “在过去几十年里,我们已经能够使用计算机来高效的处理数值和文本等结构化数据,但是对图片、视频 、行为画像、化合物三维结构和基因序列等等这些广泛存在的非结构化数据缺乏有效的处理方法。Zilliz 专注于 AI 非结构化数据处理和分析技术,借助于异构计算提供的强劲算力和高效的 AI 算法,使用高维度数据和模型(特征向量、Embedding)来进行数据处理,提供对非结构化数据的分析、理解、索引和搜索,助力各行各业积极拥抱数据智能,提高人类社会的数字化水平。”

星爵表示, “AI 非结构化数据处理和分析是加速全球人工智能和大数据变革的支点,我们会持续加大对这一领域的投入。通过向量相似度搜索引擎 Milvus 这一开源项目,我们已经大大降低了开发者构建非结构化数据分析处理类应用的成本。接下来我们会基于公有云打造云端非结构化数据服务,为全球开发者提供安全、可靠、易用并且低成本的云服务。”

作为B轮领投方,高瓴合伙人、高瓴创投软件与硬科技负责人黄立明表示,“人类和世界的交互远比基于文本的结构化数据要丰富多彩,高瓴相信,基于数据非结构化处理的向量搜索引擎正在定义搜索的未来。在创始人星爵的带领下,Zilliz 和其产品展现出了丰富的场景适应性和令人兴奋的市场表现力。我们相信,凭借对行业趋势的敏锐洞察、卓越且不断自我突破的技术创新力,Zilliz 将在开源模式下持续创造更大价值。”

A 轮领投方五源资本(原晨兴资本)合伙人刘凯表示,“三年前,当星爵首次向我们介绍他设想的数字化未来时代的数据处理技术时,我们觉得这是一个超级疯狂的想法,但我们选择了相信。在过去几年里,我们见证了星爵带领 Zilliz 作为 AI 非结构化数据处理和分析这一技术领域的开拓者,一步步将当时的疯狂想法实现,取得了一系列可喜的成绩。在未来,我们会继续长期支持 Zilliz。”

天使轮领投方云启资本董事总经理陈昱表示,“Zilliz 创始人星爵与团队对数据库技术、计算机体系架构以及开源模式有深刻的理解。Zilliz 研发的 AI 非结构化数据处理和分析系列产品在性能、扩展性、易用性等方面均处于全球领先地位。我们相信并看好 Zilliz 能够凭借突破的创新技术、深厚的行业认知和全球化的视野成为基础软件开源力量发展中的佼佼者。”

关于Zilliz

Zilliz 是一家专注于研发 AI 非结构化数据处理和分析系统的开源软件公司。Zilliz 成立于2017 年,团队分布于中美两地。Zilliz 研发的向量相似度搜索引擎 Milvus 于 2019 年 10 月在 GitHub 上开源,目前 Star 数量超过 4400,拥有超过 120 位贡献者,被全球超过 400 家组织和机构采用,在图像处理、计算机视觉、自然语言处理、语音识别、推荐系统、搜索引擎、药物发现和基因分析等多个领域有着广泛的应用。Milvus 于2020年4月被 LF AI & Data 基金会接受为孵化项目,目前在 LF AI & Data 基金会内贡献度排名第一。

该项目已入选「SFOSSP - 思否开源项目支持计划」,我们希望借助社区的资源对开源项目进行相关的宣传推广,并作为一个长期项目助力开源事业的发展,与广大开发者共建开源新生态。

有意向的开源项目负责人或团队成员,可通过邮箱提供相应的信息(开源项目地址、项目介绍、团队介绍、联系方式等),以便提升交流的效率。联系邮箱:pr@segmentfault.com

clipboard.png

查看原文

赞 1 收藏 0 评论 0

徐九 关注了用户 · 11月12日

阿里云视频云 @aliyunshipinyun

关注 8

徐九 赞了文章 · 11月12日

薇娅和李佳琦带货百亿奇迹背后是这些技术团队的努力

伴随11月11日的零点,2020年的双11热浪高潮终于汹涌而来,天猫双11全球狂欢季实时成交额突破3723亿。

file
此次淘宝直播数据显示,商家自播GMV占比超六成,直播商家覆盖数增长220%。

可想,薇娅与李佳琦的淘宝直播间大概是这场热浪之巅,据达人带货当日实时排行显示,两者分列一二位。

不妨简单回顾一下。

2020年10月21日零点,双11第一波预售,淘宝直播间宛若“过年”。

李佳琦直播间观看量超1.6亿人次,观看人数达7741万。薇娅直播观看量超1.4亿人次,人数达到5034万。从主播带货销售额来看,双11预售首日,TOP10主播一并贡献78.7亿元。去年双11全天,淘宝直播引导成交额仅200亿元,今年薇娅和李佳琦的预售首日成绩就抵得上去年双11淘宝直播的三分之一。

接踵而来,第二波沸点来自10月31日的天猫双11直播开幕盛典。

在大众已经对薇娅和李佳琦缔造的交易数字“免疫“之后,开始乐于观看直播间里的趣味片段出圈,俨然,直播也开始变成一种体验娱乐式节目。在天猫直播开幕盛典上,薇娅直播间,因朱一龙而“打乱”,尖叫响彻;而在李佳琦的直播间,他直接创造了“尾款人”概念,掀动了新消费社会。

无疑,薇娅和李佳琦仍是今天淘宝直播的标杆。根据行业调研,相比于传统电商 0.4%左右的购买转化率,李佳琦、薇娅等头部主播的购买转化率高达12%-14%。

file

淘宝直播的“一哥“、”一姐”为这个双11贡献了无限流量和销量。当然,聚划算和天猫双11的官方直播间,和其他淘宝TOP主播,同样是高流量高产量战地,不可小觑。

商业创新推动了这样的现象级事件发酵,但支撑这些沸点景象和数字奇迹的,必然是技术的巨大能量。其中,具体来说,阿里云视频云在整个淘宝双11直播间的全程护航上,起到重大支撑作用,这才使得8亿人蹲守、千万级并发的淘宝直播间保持平稳顺畅的观者体验。

Onsite最高等级 护航淘宝直播间

今年的双11淘宝直播间,阿里云视频云团队在其背后进行重度护航保障,用内部的专业术语便是“onsite”的最高等级。

整个双11淘宝直播间保障体系,配有完善的护航系统工具,包括重保流的大盘、业务大屏、帧率、码率等告警、水位告警,以及一些多流合屏的可视化监控的手段等等。而此次护航的重点时段,是针对“10.31 -11.02” 和“ 11.10 ~ 11.12”为onsite 护航的高峰时段,也正是二个重要的淘宝直播高峰时期。

据阿里云视频云的双11项目技术负责人介绍,整个洪峰期的重点是水位的监控和大盘的告警,防止多路推流的并发冲击各个云端的服务,比如转码、数据库、OSS的流量的并发限额等,同时,针对CDN 也会存在上行节点和下行节点的带宽流量的冲击。

对淘宝直播的云服务重保护航,阿里云视频云的支撑涉及到手机淘宝上所有主播的直播活动,同时会重度关注像李佳琦、薇娅这样的大流量头部主播,也包含其他高流量的TOP主播间和天猫官方直播间。

直播转码与RTS 两大核心支撑

在视频云坚实的CDN网络底层上(全球2800多个CDN节点进行多屏分发),视频云的护航技术中有两大核心要点:直播转码和RTS播放。

首先,直播转码,作为阿里云视频云的专属技术能力,是直播护航的重要部分。在实际操作中,淘宝直播重点对头部主播进行转码,确保不同的分发端,能够根据不同的网络状态选择不同码率的清晰度档次的视频,在流畅度下最大限度确保画质。

第二,是一个重要的超低延时直播概念——RTS(Real-timeStreaming)。RTS播放,在CDN分发节点进行RTMP到RTC协议转换的转发,以确保播放端能够进行RTS播放。RTS播放是基于GRTN网络的传输的,而GRTN也正是由阿里云视频云、手淘等多方合作共建。

低延时直播技术 实现直播间秒杀体验

重点来讲,RTS对淘宝直播间的体验操作至关重要。对大主播,可利于其直播间气氛控制,对中小主播,可提升与粉丝的互动效率和交易促成。

此次双11,淘宝直播使用的大部分是RTS播放,即让主播和粉丝的互动延时进入1s~1.5s的时代,让主播喊出“下链接”的时候,粉丝可以立即进行抢购。

低延时直播技术 支撑直播间秒杀体验

要知道,传统的直播技术,已经不能满足对互动要求更高的直播需求,为此,2019年阿里云视频云与淘宝直播共同推出超低延时直播服务RTS,该方案基于WebRTC实现,采用UDP传输协议打造,实现可以承载大规模并发,端到端延时1秒内的低延时直播体验。由于RTS服务部署于阿里云CDN节点,复用CDN的节点和网络资源,在接入成本、节点覆盖、承载能力上实现了平衡。经过一年多的不断磨炼,整体体验和服务也更为完善和成熟。

经验证,阿里云视频云RTS直播核心指标表现优异:相同卡顿率下,RTS直播延时降低75%,并且在相同网络延时和丢包率指标下,RTS直播播放成功率、卡顿率、秒开率等指标表现均有所提升,大幅优化直播体验。RTS已经在淘宝直播中大规模应用,降低了淘宝直播的延迟,提升了用户的互动体验。

同时,经过线上验证发现,低延迟直播对电商直播的成交有明显的促进作用,其中 UV 转化率提升4%,GMV 提升5%。在电商行业的业务价值提升之外,目前在教育直播、游戏直播等领域,已经有众多知名客户接入阿里云视频云的RTS服务并上线。

阿里云视频云 回顾护航淘宝直播三年

从2018年双11,阿里云视频云开始对淘宝直播进行重保护航。

该项目的技术负责人蔡鼎回忆到,阿里云视频云团队亲历手淘直播并发量从原先的几百路上涨到几万路,一起见证了电商直播的成长期和爆发期,互动延迟上从原先的3-10s的延迟到现在1~1.5s的延迟,编码上从原先的264到现在的265为主。

如此大规模的电商直播表明,会相继产生大规模的流量带宽成本。所以当到达一定规模体量的时候,成本节省是必当要考虑的,所以阿里云视频云着力于从编码器的改良上做优化提升,比如当前视频云与淘宝共建了S265。当然今后也会从用户的体验入手,做更多技术升级,目标是期望用户能够在有限的带宽下,观看到高画质、高音质、低延迟的专业化直播

此外,在直播技术规划思考上,当前在前端,很多头部主播拥有自身的运维和技术以及现场导播的团队,所以利用视频云的云技术,来大量普惠更多主播直播间的现场制播能力,也可能将是阿里云视频云的一个推进方向。

2020的双11与往年不同,各大平台的直播间成为鼎沸场景,对直播技术的需求和要求急速提升。阿里云视频云在电商直播爆发之际,探索推动新内容、新交互、新体验,以视频云技术普惠更多行业、更多场景,打造更多的未来可能性。

阿里云视频云技术公众号分享视频云行业和技术趋势,打造“新内容”、“新交互”。
查看原文

赞 13 收藏 0 评论 0

徐九 赞了文章 · 11月11日

开发者必备的一款神器!!!丨1024征文活动

image

作为开发者,经常会在多个环境中切换,需要修改本地的 hosts 文件,最原始的方法是,在系统盘中找到 hosts 文件,用文本编辑器打开本地 hosts 文件,然后编辑保存,每次切换环境都需要同样的操作,相当繁琐,最痛苦的是无法保存多个环境的配置信息,每次都需要重新编辑,无法在多个环境中快速切换。

今天给大家带来了一款好用的工具:SwitchHosts,是一款可以方便你管理和一键切换多个 hosts 方案的免费开源工具,跨平台支持 Windows、macOS 和 Linux 系统。

SwitchHosts 除了可以帮助你快速切换不同的 hosts 设置、编辑 hosts 文件外,它还有着一些很不错的特性,比如:

  • 免费、开源、支持三大操作系统
  • 系统托盘快速「一键切换」不同的 hosts 方案
  • 支持 hosts 文件语法高亮,可以方便用户更直观地阅读和修改 Hosts 内容;
  • 编辑 hosts 时,可以点击行号可以对行进行快速注释或取消注释
  • 支持远程 hosts,直接从指定网址读取 hosts 内容,方便多台机器同步 hosts 设置,这是一个很赞的特性!
  • 支持 hosts 配置的导入、导出备份
  • macOS 系统下可以支持 Alfred workflow 快速切换

基本上,有了 SwitchHosts,你就可以对 hosts 为所欲为了,轻松一键切换毫无鸭梨。而且,远程 hosts 方案也可以非常方便经常换电脑使用的人,配置一次到处使用!

本文参与了 SegmentFault思否征文「1024 征文活动」,欢迎正在阅读的你也加入。

查看原文

赞 1 收藏 0 评论 0

徐九 发布了文章 · 11月11日

思否开源项目推介丨GridManager.js:可对 Table 标签实例化的前端表格组件

GridManager.js

开源项目名称:GridManager.js
开源项目负责人:baukh789
开源项目简介:快速、灵活的对 Table 标签进行实例化
开源项目类型:个人开源
项目创建时间:2017
GitHub 数据:583 star,96 fork
GitHub 地址:https://github.com/baukh789/G...

项目介绍

GridManager 是基于原生 JS 实现的前端表格组件,快速、灵活的对 Table 标签进行实例化,让 Table 标签充满活力。

在对常见功能做出支持的前提下,提供了如:

  • 导出、打印、列配置、右键菜单、行列移动、用户偏好记忆等提升用户体验的功能。
  • 内置基础类库jTool, 对原生DOM提供了缓存机制。
  • 支持在原生 JS、jQuery、Angular 1.x、Vue、React 环境下使用,并对框架语法进行了友好的支持。

GridManager 是一款跨框架的表格组件,一套代码多框架运行。在不会三个框架都不叫前端的时代,助力于前端人员用更少的 API 做更多的事情。

实现功能清单

思否推荐

表格的创建在很多 CRM 系统中多有应,虽说有对应的的 UI 组件与框架,但是对于老旧的后台与产品,切换技术栈或者对应的框架,需求迭代也并不会给到时间。

借助 GridManager.js 这类的工具,即不影响项目的开发,也能快速接入新功能,导出、打印、列配置、右键菜单、行列移动、用户偏好记忆等提升用户体验的功能一应俱全,适配上原生 JS、jQuery、Angular 1.x、Vue、React 支持,可以很好的方便开发迭代项目。

该项目已入选「SFOSSP - 思否开源项目支持计划」,我们希望借助社区的资源对开源项目进行相关的宣传推广,并作为一个长期项目助力开源事业的发展,与广大开发者共建开源新生态。
有意向的开源项目负责人或团队成员,可通过邮箱(pr@segmentfault.com)提供相应的信息(开源项目地址、项目介绍、团队介绍、联系方式等),以便提升交流的效率。

segmentfault 思否

查看原文

赞 2 收藏 1 评论 0

徐九 发布了文章 · 11月11日

对中小企业来说,云服务什么最重要?

“不要告诉我世界是什么样的,要告诉我如何改变世界。”

2005年功成名就的苹果公司创始人乔布斯,受邀在斯坦福大学做了那个名载史册的演讲。在演讲中,他用这句流行于嬉皮士人群的哲言来回答学生关于苹果公司发展理念的提问。随后这句话,被认为是21世纪最伟大的科技公司创始人给整个科技界留下的遗产。

当然,这句话也激励了越来越多的大学生投身科技创业,彻底拉开了硅谷成为美国科技兴起之地的大幕。

我们今天居住的星球,因为沟通的日益紧密,被称作“地球村”。这意味着硅谷的风吹草动,必然会在大洋彼岸的这一个新兴的热土推广开来。

再加上最近这十年政府倡导的“大众创业和万众创新”政策,使得当前在中国科创领域最积极、最活跃因素,还是那些中小企业。

另外,从2019年起,云计算日益成为国际科技和商业关注的焦点,被誉为是下一个十年人类科技最可能突破的重点领域。

毕竟,云计算在中国商业领域中的应用日益成熟,以往那些必须自己拥有独立机房才能开始的互联网创新项目,现在变成了很简单的操作过程,这意味着中小企业创业的难度也逐渐降低。

这从另一个方面助推了科技创新在中国的蓬勃兴起。

而根据2019年各大云平台提供的数据可以看出,不论是绝对的数量还是投入程度,那些作为创新创业主体的中小企业,都是各大云平台不可或缺的用户群体。

最新消息显示,美国知名的财经网站Business Times近日发布了一个关于全球云平台运营的调查报告。

其中在云计算热度最高的中国市场,中小企业评估云平台吸引力的十个维度数据中,华为云出人意料拿到了安全、服务和业务全面性三个维度的前两名,其中服务榜单是第一名。

这引发了很多媒体的讨论,大家都有一个疑问:

在竞争激烈的中国云计算领域,为什么华为云能获得中小企业的青睐?

1.业务全面性

“我们选择把业务全部搬迁到华为云上,看中的就是华为云能提供的云计算功能全面性。”在谈及从2016年就把几乎全部业务都搬迁到华为云上的原因时,北京林克艾普科技有限公司运维负责人王娜对「子弹财经」这样表述。

林克艾普是一家舆情数据分析公司,主营业务其实是向企业和政府部门提供完整的定制化舆情分析系统与服务。

林克艾普
图 / 林克艾普官方

由于掌握了对舆情核心内容分析的逻辑方法,再加上独立开发的舆情定制化系统的数据分析能力较强,这两年林克艾普公司的业务增长迅速。

“我们在这一个行业沉淀已经10年的历史了,最近几年发展增速较快,每年的业务都在几千万的收入水平上。”

王娜认为,林克艾普公司在整个行业内的竞争优势非常明确。“一个是业务的包容性比较强,我们对任何的舆情都有分析和鉴别的能力;另一个就是我们可以为客户提供任何形式的舆情分析服务。”

在她看来,作为一家中小企业想在舆情服务市场存活下来,高度灵活的产品适配是必然的选择。

而对很多初创的企业或者初上云的企业,华为云除了提供按周期购买之外,它还贴心的提供按需定制的功能。

在王娜眼中,华为云这些能灵活化的云产品配置,是林克艾普公司自己的舆情产品能灵活定制服务客户的基础。“因为像我们自己的客户中小型企业偏多,他们可能就是有一段时间需要这个监测的系统。因此,我们能按照客户需求来定制华为云服务,这样能灵活的控制客户的支出。”

另外,“最终我们选择把所有的业务都搬上华为云,跟华为云的产品很全面有关系。”王娜觉得,从合作的过程可以看出,不管是前期的咨询还是后期的服务或者专业的配置,她都得到华为云很多的支持。“华为云会为了你的处境来设计产品,有的时候我们都想不到,结果发现华为有这项服务。”

给她最深印象的,是华为云会时不时的根据客户业务场景的变化,推出一些新的产品和服务。

“我们很多客户是家电企业,‘双11’期间他们对于系统监测有各种各样爆发的需求,这个时候我们会发现华为云提前会给我们发通知,告知我们又出现了哪些符合这一个时间段家电客户数据分析需求,很高效也很全面。”

在王娜眼中这个全面性让她和她的公司受益匪浅,也因此他们逐渐把在其他平台上的业务都迁移到了华为云。

王娜认为目前华为云对林克艾普来说,“用的产品越来越多,已经离不开了”。

2.安全保障力

而对于从专注传统物流运输转做网络货运平台的蓝精灵供应链有限公司而言,林克艾普公司关注的华为云产品全面性固然重要,但真正让他们下决心将几乎全部的数据和服务业务搬到华为云上的原因,其实是看中了华为云的安全保障能力。

clipboard.png
图 / 摄图网,基于VRF协议

“我们公司主营业务是与大宗物流运输相关的全流程信息化和交易结算服务,因此我们选择云平台,一个核心的标准就是安全保障能力。”

徐州蓝精灵供应链有限公司产品总监徐康在回答为什么会选择华为云作为云服务提供商的时候,这样对「子弹财经」表示。

在他看来,蓝精灵运营多年,拥有庞大业务存量和客户基础,并取得国家网络货运资质的无车承运人平台,亟需一个能够提供数据存储处理与安全保障的云服务合作商。

而2016年与华为云联手是蓝精灵供应链创立以来感觉放心的一个选择。毕竟在公测的时候,华为云的很多产品特性,就对徐州蓝精灵公司产生了莫大的吸引。

徐康觉得,选择华为云一方面是看中华为的技术先进性和稳定性,尤其是后者,对于这家网络货运公司来说异常重要。

“我们之前用过一家主流云平台,结果经常性的会有一些莫名其妙的错误,而后来选择华为云作为主要合作伙伴后,这种因为平台不稳定出现的错误就再也没有了。”

另外,他认为华为云应对突发安全事件的能力也是最终让公司做出决策的原因。毕竟,网络安全哪个平台都有类似的服务,但是出现突发事件时能协助及时解决,把影响降低到最小,才是衡量一家云平台安全保障能力的核心。

“我们曾遇到过一次突发事件,而在那次事件解决之后,整个公司就下定了把服务都迁移到华为云的决心。”

2017年刚上华为云的蓝精灵公司,由于开设了新的支付通道,没有意识到其中的部分代码与原有平台的代码有冲突,再加上有位于外地的黑客利用这一个漏洞对公司发起了网络攻击,这使得新的支付通道上线之后,服务器出现拥堵的情况。

“仅仅过了4个小时,技术团队就收到了华为云安全部门发过来的相关报告,针对于出现的漏洞逆推导出了问题的所在,而这个报告简直帮了大忙。”

徐康认为这样有预见性和分析能力的安全保障,是他们蓝精灵这种信息平台第一时间需要的。

“毕竟你让中小企业自己去做网络安全没有相应的研发能力与资源背书,但华为云跟别人最大的不同在于,他们能将这样的网络安全能力共享给所有的用户。”

而对于他来说,华为云在安全保障上的能力,几乎是所有平台中最出众的。“至少给我的感觉是,他们在技术方面很踏实、很专业。”

3.服务及时性

在这次Business Times公布的云平台调查报告中,华为云获得了中国区中小企业评价维度中服务及时性的第一名。

对此,北京斑马易境科技有限公司的总经理王朝朋深有体会。作为一家服务跨境电商企业的SaaS公司,斑马易境的ERP系统可以直接帮助这些跨境电商企业对接各大海外电商平台,做到一次发布商品信息,能快速同步到几乎全部的账户和平台,使得客户能在一个后台管理所有的产品和销售数据。

斑马易境
图 / 斑马易境官方

“由于我们服务的是跨境电商企业,这意味着我们选择云服务平台除了安全和产品以外,更看重它对我们服务的及时性。”

毕竟,跨境电商企业很多业务的时间跟国内正好相反,而且如果不在第一时间获得及时的沟通和反馈,他们遇到的技术问题可能会造成不可估量的损失。

“我们是2019年9月搬迁到华为云上的,一开始考虑的是华为云属于第三方平台,不涉及电商的业务,对我们服务的客户比较友好。但最后打动我们,并让我们下决心将全部的业务都迁移过来的原因,就在于华为云的服务很及时。”

王朝朋觉得,相较于其他平台有的时候以半天计算的工单回复时间,“我们在华为云上技术人员提出的工单和咨询,几乎都是秒回,慢的不到一小时也会给解决。”

关键从斑马易境入驻华为云之后,所有的销售和售后的服务,华为云这边都是安排工程师1对1的对接和落实。“这点对我们这样一个SaaS公司来说,太重要了。”

在他眼中,华为云服务的及时性现在已经变成整个公司对外SaaS产品市场优势的基础。

“今年的二季度,出现过一个比较紧急的问题。因为我们对接到国外很多电商平台,有一段时间东南亚那一块出现了比较严重的网络访问的异常,导致我们客户系统的使用出现故障。”

王朝朋表示,技术团队在第一时间向华为云递交了工单,“一般情况下这种重大问题,其他平台在一周之内能给解决就不错了。但华为云那边不是,他们内部比较重视,专门给我们组织了一个电话会议,同时给出了我们几套可选择性的解决方案,还是比较快的把我们这个问题最终解决掉了。”

关键这样的一个突发事件的解决,华为云从拿到工单到最终提出解决方案,仅用了不到72小时。

“这是非常重要的及时反馈,毕竟耽误用户使用电商平台的业务,那就相当于让他们少挣钱。”

在他眼中,斑马易境整个平台的核心,就是要帮助跨境电商卖家围绕降本增效,提升他们的管理能力和盈利水平。

因此平台任何的突发事件和纰漏,都最好能在第一时间得到解决,这样才能提升整个平台在用户那里的专业性和稳定性。

“华为云的技术在国内绝对属于第一梯队的领先层次,他们的服务还能做到如此的及时,这对我们这样的中小创业企业来说是一个福音。”

实际上,对中小企业来说,能在一个平台获取想拿得到的产品和服务,同时还能得到最及时的服务反馈和安全保障,这样就够了。

不用去看有多少花里胡哨的功能,也不用去想平台的知名度,只要它能协助企业的业务稳定开展,就是这些中小创业企业最需要的云服务平台。

从这点来看,华为云逐渐成为中小创业企业的首选是有其必然性的。

当然又逢“双11”,在这个每年都出现补贴和大促的关口,华为云也拿出了自己的诚意。

根据相关介绍,此次大促中云耀云服务器88元/年起,C6S云服务器2.3折起,C6云服务器7.7折起……此外,主会场还有通用福利,用户可以领11110元上云礼包、消费满额送华为Mate40及下单抽Mate Book X Pro等等。

一方面,华为云逐渐成为中小创业企业云平台的优先选择之一;另一方面,今年“双11”华为云又为中小企业拿出了富有诚意的促销政策。

也许,这能推动更多的中小企业享受云服务和云计算的优势。

而这一点,其实比各家平台在榜单上的排名更重要。

文/子弹财经 Rickzhang

华为云11.11上云嘉年华现已开始,详情见点击链接:活动官网
查看原文

赞 0 收藏 0 评论 0