掌门1对1微服务体系Solar阿里巴巴Sentinel落地实践

前言 掌门1对1精耕在线教育领域,近几年业务得到了快速发展,但同时也遭遇了“成长的烦恼”。随着微服务数量不断增加,流量进一步暴增,硬件资源有点不堪重负,那么,如何实现更好的限流熔断降级等流量防护措施,这个课题就摆在了掌门人的面前。由于 Spring Cloud 体系已经演进到第二代,第一代的 Hystrix 限流熔断降级组件已经不大适合现在的业务逻辑和规模,同时它目前被 Spring Cloud 官方置于维护模式,将不再向前发展。 如何选择一个更好的限流熔断降级组件?经过对 Alibaba Sentinel、Resilience4j、Hystrix 等开源组件做了深入的调研和比较,最终选定 Alibaba Sentinel 做微服务体系 Solar 中的限流熔断降级必选组件。 Sentinel 简介 阿里巴巴中间件部门开发的新一代以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性的分布式系统的流量防卫兵。它承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。它具有非常丰富的开源生态: 它和 Hystrix 相比,有如下差异: 摘自官网 Sentinel Roadmap 关于 Sentinel 如何使用,它的技术实现原理怎样等,官方文档或者民间博客、公众号文章等可以提供非常详尽且有价值的材料,这些不在本文的讨论范围内,就不一一赘述。笔者尝试结合掌门1对1现有的技术栈以及中间件一体化的战略,并着眼于强大的 Spring Cloud Alibaba 技术生态圈展开阐释。 Sentinel 深度集成 Apollo Sentinel 官方在 sentinel-datasource-apollo 模块中已经对 Apollo 做了一些扩展,主要实现了 Sentinel 规则的读取和订阅逻辑。这些并不够,我们需要对 Apollo 进行更深层次的集成。 摘自官网 在生产环境中使用 Sentinel Solar SDK 环境初始化 定制 EnvironmentPostProcessor 类,实现如下: Sentinel Dashboard 的项目名称从 Apollo AppId 的维度进行展示根据环境 env 值读取相应的配置文件,并访问对应环境的 Sentinel Dashboard 域名Sentinel Dashboard 在生产环境部署若干台 ECS 实例,阿里云 SLB 做负载均衡,实现对集群的水平扩展public class SentinelClientEnvironmentPostProcessor implements EnvironmentPostProcessor { private final ResourceLoader resourceLoader = new DefaultResourceLoader(); private static final String DEFAULT_CLASSPATH_LOCATION = "classpath:/META-INF/app.properties"; private static final String DEFAULT_LOCATION = "/META-INF/app.properties"; private static final String DEFAULT_LOG_LOCATION = "/opt/logs/"; @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { try { Resource appResource = resourceLoader.getResource(DEFAULT_CLASSPATH_LOCATION); if (!appResource.exists()) { appResource = resourceLoader.getResource(DEFAULT_LOCATION); } Properties appProperties = new Properties(); appProperties.load(new InputStreamReader(appResource.getInputStream())); String appId = appProperties.getProperty("app.id"); System.setProperty("project.name", appId); System.setProperty("csp.sentinel.log.dir", DEFAULT_LOG_LOCATION + appId); Properties properties = new Properties(); String path = isOSWindows() ? "C:/opt/settings/server.properties" : "/opt/settings/server.properties"; File file = new File(path); if (file.exists() && file.canRead()) { FileInputStream fis = new FileInputStream(file); if (fis != null) { try { properties.load(new InputStreamReader(fis, Charset.defaultCharset())); } finally { fis.close(); } } } String idc = properties.getProperty("idc"); String location; String env = System.getProperty("env"); if (StringUtils.isEmpty(idc)) { if (!isBlank(env)) { env = env.trim().toLowerCase(); } else { env = System.getenv("ENV"); if (!isBlank(env)) { env = env.trim().toLowerCase(); } else { env = properties.getProperty("env"); if (!isBlank(env)) { env = env.trim(); } else { env = Env.FAT.getEnv(); } } } location = "classpath:/META-INF/sentinel-" + env + ".properties"; } else { location = "classpath:/META-INF/sentinel-" + idc + ".properties"; } Resource serverResource = resourceLoader.getResource(location); properties.load(new InputStreamReader(serverResource.getInputStream())); for (String key : properties.stringPropertyNames()) { System.setProperty(key, properties.getProperty(key)); } System.setProperty(CommonConstant.SENTINEL_VERSION_NAME, CommonConstant.SENTINEL_VERSION_VALUE); } catch (Exception e) { LOG.error(e.getMessage()); } } private boolean isBlank(String str) { return Strings.nullToEmpty(str).trim().isEmpty(); } private boolean isOSWindows() { String osName = System.getProperty("os.name"); return !isBlank(osName) && osName.startsWith("Windows"); } } ...

June 9, 2020 · 8 min · jiezi

对话阿里云总裁张建锋解密阿里云再生长的动力合力和张力

文 |《财经》记者 谢丽容 秋冬交替往往在一夜之间。这一年,受疫情的客观影响,数字化新旧时代的交替,从稳步推进,转变为一夜之间——数字化成为中国经济的主要驱动力,变革因为疫情而更加强烈,政府、企业都认识到数字化的迫切性。 6月9日,在2020阿里云峰会上,《财经》主编何刚对话阿里云智能总裁张建锋,张建锋认为,经此一“疫”,原本需要3到5年的数字化进程,将在未来1年之内加速完成。 在这次对话中,张建锋表达了两个核心观点。 其一,阿里云历经11年的坚定投入和发展,早已演进成一朵不一样的云,不仅提供了云代表的新型计算架构,更是诞生了钉钉这样的新型操作系统,两者深度绑定,形成一个整体,为政企提供面向数字经济时代的新型基础设施。 就像传统信息时代PC和Windows的组合一样,企业既需要云这样的新型计算结构,也需要钉钉这样的新型操作系统,这是一个整体,前者提供水电煤一样的算力基础设施,后者如同新时代的Windows,让企业可以面向大数据、面向智能、面向IoT、面向移动化,快速开发管理组织和业务的所有应用。 其二,做好这个基础设施需要强大的技术能力。他认为,阿里云在软件层面已经达到世界顶尖水平,飞天是中国唯一自研云操作系统,今年将持续加大在芯片、服务器、交换机、网络等领域的自研力度。 而“做深基础”背后逻辑并不是简单替换,是基于云的特点来构建整套基础体系,就像当年阿里巴巴“去IOE”并不是做一个新的小型机替代了旧的小型机,而是用阿里云这辆汽车超过了旧时代的马车。“做深基础”要将飞天云操作系统向下延伸定义硬件,构建数字经济时代的新型基础设施。 以下为对话全文: 经此一疫,数字化加速 何刚:这次新冠疫情的蔓延,对经济和社会带来了特别重大的影响,这些影响体现在哪些方面? 张建锋:本来我们这次活动应该是在线下举办的,但今天我们用了相对特别的方法,也是因为疫情的影响。大家都是亲历者,但之前可能不会想到疫情会对我们造成这么大的冲击。从2月开始,中国的经济重心基本转移到抗疫上面。很多人在努力,医务工作者在前线抗疫,科技工作者在后台数字化抗疫。3、4月之后,数字化抗疫的重心从前期的“抗疫”转移到“重启”经济。到今天为止,我觉得数字化已经变成中国经济重要驱动力,包括政府、企业、学校,甚至广大的老百姓,真真切切地感受到了数字化带来的改变,线上的工作、生活,包括电子商务等,无接触经济蓬勃发展,这是疫情期间带来的巨大变化。 何刚:对于企业、社会、经济发展来讲,是否意味着一个全新重构的开始? 张建锋:疫情并不是这个时代孤立的一件事,我们今天本来就处于数字化转型的阶段,疫情对数字化是起到了非常强的推动作用,数字化变革可能会因为疫情变得更强烈。 我之前经常琢磨,秋天是怎么变化到冬天的?是一天天的温度降下来的,还是一个突然的变化过程?后来我发现,绝大部分时候是一夜之间冷空气袭来,一场狂风冷雨,瞬间就会从秋天变成冬天,季节转换完成。 这次疫情对于数字化转型进程的影响,有这个味道。由于疫情,政府企业都认识到了数字化的迫切性和重要性,普通人也享受到了数字化转型带来的很多好处,包括居家办公,电子商务等,这些需求因疫情而加速。因为疫情,很多事情本来是需要三五年的发展过程,可能会在一年之内就完成转换。 何刚:阿里云是中国数字化进程的重要推动者和参与者,也是底层技术的构建者,全球范围内,中国的数字经济大概发展处于一个什么样的阶段?有什么跟别的国家相比不太一样的重要特征? 张建锋:阿里巴巴本身是个数字经济的亲历者,也是一个推动者。阿里巴巴过去二十年的发展基本上伴随数字经济的发展到今天。从中国来讲,我认为是中国的数字化在全球是走在最前头。我们不管在消费领域、产业领域、政府治理、甚至农业都走在前面,我认为比大多数国家都走得要更完整。 从1999年开始,美国第一次提出政府要电子化,到现在都没有我们过去三年的数字化更深入。政府也好,治理也好,产业也好,大部分人都从数字化中得到了很好的收获,所以我觉得全社会今天对数字化要不要做、或者数字经济是不是未来,这已经达到了高度共识。 今天我们关注的重点是快速实现数字化的方式,这个行业能够根据数字化来重构自己的技术体系也好,业务体系也好,这是目前最关键的。 何刚:你提到两个词,一是全面无死角,从农业、工业、服务业包括政府、个人、社会组织;二是全速,谁能够更快速地实现数字化,谁有可能在未来获得更大的一种可能性。具体说说,从全面上云到全速重构区别是什么? 张建锋:全面上云是一个技术性阶段,原来的基础设施从非云到云;全面重构是一个更强的深化,要重构,需要关注的面会更广,包括理念要升级,组织要升级,经营模式、运营模式要升级,而上云更多着眼于技术升级。 都要升级的话,要把原来传统的信息化手段变成数字化手段,它对管理者的思路、对于经营者的思路都是一个重塑的过程。我和我们的客户交流也是这样,我们做很多数字化的项目,我们是通过交付一个项目来帮助客户打造一支团队。因为它不是在信息化时代时简单地采购产品,帮你交付就完了;因为要用好这个产品要有一个新的理念,你要重建这个产品,要重构这个组织、重构这个业务,这个是当下未来可能是最最重要的,所以我们叫做全速重构。 何刚:由于疫情,有人提到了几个行业,发现它很繁荣,我不知道这些行业会不会率先如何来实现全面重构,比如公共卫生领域、教育领域、交通,也包括大家谈得很多的工业互联网领域。 张建锋:公共卫生领域,疫情影响因素特别明显,因为计算机系统处理问题都是类似的,第一,把数据收集上来;第二,做一些分析;第三,根据分析结果做一些结论。防疫抗疫的所有环节,我认为数字化都可以发生巨大价值。比如,政府针对密切接触人员人群做外呼提醒和通知。原来是传统的人工打电话,每个外呼员,一天的极限是200通电话;现在我们采用AI的办法,一分钟打3500个电话。对方有问题,用AI来给你回答问题,这是这样一个新型的数字化体系,这个体系以前从来没有出现过。 教育方面,因为之前大家不能返校,我们知道大学推了很多年的多媒体教育,渗透率和接受度没有那么高,疫情期间,我们跟浙江大学合作,只花了7天时间就改造了200多个教室,几万师生就通过远程教育一夜之间就实现了,当天有一百多万人次的访问量,最热门的课我听说有十万人次来观看。真的是一夜之间,以前几年做的事情现在一周就做完了,还有非常多的例子。疫情催化了需求,不过这个事情,我觉得没有疫情也必然会发生。 何刚:是不是可以理解为,疫情的发生确实是一件坏事,但也为重构提供了一些新的机会,当年非典催生电子商务业态,这次新冠是不是也会催生数字经济业态? 张建锋:非典时我们做B2B贸易,所有的企业都不能出门推销自己的产品或者谈业务了,所以就转移到网上来了,一直发展到今天,其实也证明了零售业的这种形态比原来更高效,也是串联了大量的此前感觉和零售业没有太大关系的产业,诞生了新的行业,发挥了很大作用。我觉得像新冠之后,在线教育、在家办工、远程视频会议,它的一系列影响都是深远的。这一次刚好又在数字化转型的当下,我觉得要比那一次的SARS影响更深刻。 云钉一体:数字经济时代的PC+Windows 何刚:全速重构指的是什么,中间这一部分类似于当年操作系统? 张建锋:很多人问云到底是什么?云的理解有很多种,它有宽泛的理解和狭义的理解,狭义的理解就是原来的服务器这些东西,用新的模式来替代了。我们今天在中国讲的云,意义要宽泛多得多,今天的云,既有云基座,也有中台,也有上面的服务。 至少从我们的角度来看,云是一个新型计算体系结构,它从原来的PC时代,包括原来大机、小机的时代,全面升级成云的形式。当然,云的特点是分布式,分布式还是互联网时代的技术。云在互联网分布式基础上更强调弹性,更强调大范围调度,复用,更强调安全性,这是云本身很重要的特点。你要怎么做好云,就要一整套的云系统,我们叫做飞天云的操作系统来管理这个东西。这也是国内唯一自研的产品。 前两年阿里在说要做中台,外面也有很多人在聊类中台概念。他们虽然不理解,总觉得这是一个好东西,所以现在但凡是一个企业都在讲中台,都在建自己的中台。 我的理解,中台是一个新型操作系统,因为我们原来做信息化系统相对来说比较简单,把业务流程理解清楚了,程序员把业务流程变成一个信息系统就可以了。今天面临一个非常大的变化,因为今天的信息系统不是一个简单的业务流问题,还有数据流,还要移动化,还要用人工智能的办法通过大数据来挖掘等,这些都是以前的信息系统没有遇到过的。 这需要新型的操作系统,我们原来叫中台,其实它是超越于原来的以windows为代表的处理系统,上面做简单的信息化的开发。从信息化到数字时代它需要一个新型的操作系统,大家面向大数据、面向智能、面向IoT、面向移动化,开发自己的应用变得更方便。 不同的行业有不同的特点,有人是零售的,有人是做工业的,它们可以在中台之上继续构建自己的系统。所以中台其实是一个云时代的、大数据时代的、智能化时代的、移动化时代的一个新型的操作系统。 何刚:我理解,一个是数据中台,基于数据的;第二是基于不同行业的,叫做业务中台。可能就是数据中台对于阿里来讲是更容易让大家来通过你们的这种计算能力和云处理的能力,来实现,而业务中台可能跟行业要有一定的结合。 张建锋:阿里巴巴也好,政府也好,很多单位也好,因为现在全社会的数据非常丰富,数据的汇聚也变得更容易。因为有新型的技术手段,分析数据有类似人工智能等更好的工具,所以现在的宏观预测可以基于微观分析来直接通过算法推导出来。 不像以前,政府也好,企业也好,要一层层汇总。今天的大数据趋势,都是大量的、微观的数据融合的做分析,所以迫切的需要一套新型的工具,是基于数据的、基于人工智能的、基于移动的,我们就认为这是一个新型的中台,新型的操作系统。 何刚:有点像你们在把PC时代英特尔和微软的事做了,是吗? 张建锋:对,我觉得计算机的体系结构变了,上面的操作系统也变了,所以像阿里云+钉钉,就相当于以前的信息时代的PC+windows,类似于这样的一个概念。 我们相当于做了社会化的公共资源,我们一直认为,云是类似水电煤一样的公共服务,我觉得这个愿景越来越变成现实了,计算资源都公共服务化了,然后再提供一个新型的操作系统,让创新变得更容易发生了。 有很多行业今年发生了很大的变化。比如金融业。从今年开始,金融行业在积极拥抱新型的计算机体系结构,因为这是一整套从原来的PC时代、小型机时代到云时代一整套新的体系结构,这个体系结构不仅仅是技术变革,它还是一整套生态环境的重构,因为它的开发方式、理念都是一个新变化。 变化首先会发生在原来信息化做的比较好的那些行业,比如金融业、政府,他们的转型速度非常快。因为很多中小企业通用化的需求更高,不用搞广泛的定制,所以社会的公共服务也能基本满足他们的需求了。 阿里云现在有300万的客户,里面绝大部分是中小企业。对于那些中小企业来讲,这个相当于一个新型的淘宝,你原来要去做零售,要在线下开一个店,你要进货要去卖,要去做所有你不擅长的事情,例如开店租房本质上跟零售没有关系。现在中小企业在云的时代,它相当于在公共服务平台,像淘宝一样。 何刚:淘宝开店,很多事情淘宝来做。他只需要自己卖东西,发货收款。 张建锋:我觉得以后所有的行业都会齐头并进,因为它这里有现实的收益,也是一个新型创新平台。 何刚:提到疫情期间的应用,您提到远程期间的应用和教育,必须提一下钉钉,之前我用钉钉用得不是那么多,但是疫情期间审批、报销、开会各种东西,好像离了钉钉那天就没法干活了,能不能跟我分享一下,在疫情期间钉钉引发的现象级的应用,它究竟对钉钉意味着什么? 张建锋:我觉得很多人把钉钉理解为一个沟通工具,钉钉是远远超越沟通本身的,我理解成为我刚才讲的操作系统的重要组成部分,它主要解决几个问题,它非常好地解决了移动化的问题。今天包括政府也好、企业也好,它所有的服务对象、参与对象已经发生了变化,基本上人人都有智能手机,你说政府要服务一个老百姓也好,老百姓是移动化的,可以7×24小时的通过手机接触政府的服务,那就看政府有没有提供这样的服务,通过什么样的方式来提供这样的服务。 何刚:比如说到政府部门办事情,原来要搞申请公证,原来在上班时间人得去,现在如果有手机,你们有一个政务钉钉。 张建锋:在几年前办事要找到哪个部门办事,需要找到特定的办公室去办;后来,像杭州等一些地方做办事大厅,只要到办事大厅去办就可以了;再后来,推一窗通办,把原来办事大厅中每个窗口办特定的事情,改成每个窗口可以办任何事情,这里就需要后台系统进行改造,因为要有这个能力去处理所有的事情。 再之后是移动化,手机上就可以办。手机上办带来一个新的问题,你要7×24小时可办,因为手机不用下班。 整个过程一步步发展到今天,离不开后面整个系统的改造,也离不开整个政务流程的再造,这里面数字化发挥了很大作用。钉钉在这里面扮演很重要的角色,它就是移动化,又是一个新型的,里面有通讯录,有各种各样的电子流审批,它给他们要做移动化开发提供了非常好的应用。浙江省上面有一千多个应用基于钉钉这个平台开发的,这就是操作系统的典型特征,操作系统就是我自己做掉一部分事情,大家都可以在上面做更多的事情。钉钉就是一个新型的操作系统,也是我们操作系统的重要组成部分,这就是我们这边的定位。 何刚:现在在有些地方政府信息化做得比较好的,开始大量运用政务钉钉做行政管理。我们按照这样的思路,是不是未来还有各种钉钉,金融钉钉、零售钉钉、教育钉钉、医疗钉钉,会是这样的吗?有这样的规划吗? 张建锋:我觉得钉钉本身是一个平台,大企业可能对于自己的定制化要求非常高,所以推出了企业版。我们跟税务做了一个学习新税平台,原来有几十万的税务干部是垂管干部,税务干部要去学习、考核,要进行政策的传递,以前是一层层的,今天有这样的平台之后整个系统就管理起来了。 这样的话,对组织原来的运作模式就产生了非常深远的影响。比如说,教育系统也在用钉钉,原来教育局和学校、学校和老师、老师和家长、家长和学生,它是多方的主体,有个消息要从教育局通知到学生,之前的做法是一层一层通知下来。今天用钉钉这个平台,因为所有人在这个上面,可以非常容易地形成一个环路。我作为学生家长,在疫情期间,我也收到教育局在家学习的调查问卷,你小孩子学得怎么样?学科重不重? 原来教育局要了解学生的情况是非常难的,现在电子化,第一可以触达我,第二可以实时地知道,因为这个问卷上去的话我们很快就分析出来了。对各行各业都有很大的影响。今天我们数字化过程中就看你的业务跟数字化怎么结合,你怎么用好这样新型的一些工具跟手段,这个我觉得是最最重要的。 钉钉我觉得它本身是个操作系统,本身是个新的平台,就看大家怎么样来用好这个平台。 何刚:其实按你刚才这样一解释,我听了钉钉能做的事太多了,大家原来做一个联络工具,做一个简单的办公流程的东西,是大大低估了它潜在的对于人、信息和业务的这种连接能力。 张建锋:这就是我们刚才那个话题,就像windows和英特尔一样,他们是深度绑定成一个整体,对于消费者和用户来说它是个整体。云就是我们刚才讲的,替代了前一代的信息时代的基础架构,今天的云是未来面向数字经济时代的新型的体系结构,这个结构中,云是承担了这样一个职能。但对于很多行业来讲,他希望上面还有一个更容易去开发自己应用的平台,因为他要解决移动化的问题,要解决很多政府要审批流程、安全等等问题,所以它需要一个新的平台,钉钉是这个平台非常非常重要的组成部分。我们讲很多企业“云钉一体”,因为它基于这个体系可以开发出它面向未来的数字化的新的系统。 何刚:阿里云+ 钉钉就是云钉一体,数字经济时代新的windows+英特尔。 张建锋:数字经济时代我觉得最大的特点就是云+新型的操作系统。 何刚:就是你们的云钉一体。现在能给我们一个数字吗,钉钉可以公开的用户有多少,企业组织有多少? 张建锋:钉钉现在上面有1500万的组织,用户超过3亿,3亿用户用钉钉在工作、在学习,我觉得跟其他的工具非常不一样的。 何刚:所以我想它可能对于我们的大型企业显然很有用,它的连接能力,对于中小型企业,钉钉价值又在什么地方? 张建锋:大企业因为连接比较复杂,需要一个新型手段,中小企业是整体式的管理,我看到很多餐饮企业只有几十个人,所有工作,所有事情都通过钉钉在连接。因为原来可能要买很多的垂直化的应用,比如说他要做考勤,比如说他要做财务,比如说他要做人事,今天他都不需要这些东西了,钉钉就可以搞定,钉钉本身又是一个新型平台,很多人基于钉钉开发了通用的应用,甚至不用自己开发,把那些应用组合起来就可以了,这就大大降低了信息化、数字化的门槛。 做深基础,做厚中台,做强生态 何刚:阿里云在整个数字时代一个新的使命,就是构建数字经济的基础设施,如果具体来看的话,怎么理解数字经济的基础设施,包括哪些关键的支撑?钉钉在这次的现象级的应用增长当中,一开始曾经出现了拥塞,但是阿里云很快用强大的能力把它解决了,跑得很顺畅,3亿人能也能顺畅地跑,数字经济的基础设施是不是也可以支撑我们所说全速重构的这样快速的需求?需要做哪些关键支撑? 张建锋:我们去年提出做数字经济时代的基础设施,我们是一个公共的服务资源,这是我们做云计算一个非常强的两个特点。 刚才我们讲了,我们把云定义成一个新型计算体系,这是我们云来实现的;第二个我们要构建一个中台,做一个新型的操作系统,上面呈现各种各样行业的应用,这个前提下我们提出来自己是要做深基础,我们要把云的底座给做深,怎么做深呢?我们除了要做云的操作系统之外,我们有个飞天操作系统,要做调度等。我们还要做芯片、数据库,做路由器、交换机等,基于云的特点来构建整套的基础体系。 何刚:芯片就是去年一直在发布的AI智能芯片? 张建锋:AI,我们可能有更多的芯片,像我们做虚拟化等有很多芯片,而且现在安全很重要,我们也有自己的一些安全的芯片等。 何刚:所以第一个叫做深基础,第二是? 张建锋:第二是要“做厚中台”,中台作为一个新型的操作系统,要提供更多的功能,我们上面的应用才能更容易来开发,这些功能,包括AI的功能,大数据的处理,IOT的能力,移动的能力。这里面我们想把中台做得越厚,这个操作系统的功能就越强大。 还有第三,我们要做大做强生态。 最终不是阿里云来做所有事情的,我们是一个开放的体系,我们是希望软件开发上,基于云的结构、基于一个新型的操作系统,来帮助各行各业做一些应用的开发,所以我们提出“做深基础”、“做厚中台”、“做强生态”。这是我们作为数字经济时代基础的一个主要的出发点,也是一个落脚点。 何刚:今年4月20号的时候,你提出来阿里云未来要花一笔大钱,3年要花2000亿,当时把这个行业都震撼了,说有时候没钱是个事,钱多了怎么花也是一个问题。当时提到3年2000亿,要做新技术、新基建,帮助全社会做这种数字化的升级转型,为什么提出这么一个宏大的投资计划?具体会花在哪些方向? 张建锋:这个投资看上去很大,但是对于全社会的数字经济的新基建来讲,其实并不大。我们现在整个阿里云管理有超过100多万台服务器,我们预计在3年之后就会超过300万台服务器,300万台服务器本身的投资就是个非常巨大的投资。 还要去建新型的网络、大规模IDC等等的建设,我们还要投入一些新产品的研发,像芯片之类的研发投入都是非常大的。所以看起来2000亿好像很多,3年之内可能还不够,除了这些投资之外,我们还会更多的投资在人才上。我们今年人才还继续招聘,会招聘超过5000个工程师加入阿里云。 何刚:如果我们再仔细地想一下阿里一家投了2000亿,整个社会关于数字经济的基础设施投资在你看来,比如未来3—5年,大概会是一个什么量级的规模,企业和政府分别在里面大概能够扮演什么角色? 张建锋:这个投入可能会非常大。阿里巴巴比较集中在云计算的基础设施,还有5G也是非常大的投资,工业互联网可能是大头,我认为比消费互联网规模更大,而且对企业的影响应该也会更深远,工业互联网里有非常多行业,跟其他行业可能都不一样,这一块可能也是一个非常大的投入。 可能几万亿的投入是必须要做到的,因为没有这个投入就没有新型的基础设施,也谈不上数字经济。我们也看了2019年发的报告,2018年中国跟数字经济相关的GDP已经占到了34万亿,占中国整个GDP的三分之一,我觉得这个可能会进一步提高比例。所以说是非常大的量。 何刚:所以从整个未来趋势展望来看的话,我们看到无论是数字经济的基础设施,还是数字经济的这种应用,应该是一个非常令人激动美好的前景。 张建锋:我觉得数字化云化这是一个确定性会发生的事情,中国在这方面是走在世界的前头的。我们也有信心真正做好数字经济时代的基础设施。 推荐阅读 ...

June 9, 2020 · 1 min · jiezi

学霸的奇葩选择成功不仅靠运气对话阿里云MVP黄胜蓝

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!简介: 为了逃避高考,他凭借NOIP一等奖成功保送武大;大学时就负责校园门户网站的运维工作,不甘落于平凡,于是翘课创业,一举获得成功,工作之余还指导团队获得世界数学建模大赛金奖。黄胜蓝的成功似乎格外轻松,其实皆是步步为营,筹谋已久。以下为黄胜蓝的个人专访,推荐阅读(约3分钟)。一意孤行的“非主流”青春 我出身于非常传统的军人家庭,但儿时起我就比较叛逆,不喜欢接受主流价值观赋予的选项。家人总是很难理解,而我从未动摇过。 高一开始我就在策划逃避高考了,对比各种路径后选择参加奥林匹克竞赛。于是当同学都在挑灯刷题的时候,我在熬夜做计算机竞赛。好在最后获得了一等奖,得以顺利保送。当时有很多学校可以选,我家人倾向国防科技大学,但最终我选了学风自由开放的武汉大学。高三时别人开始冲刺,我进入放羊状态,开始思考大学自己要做什么。 进入大学以后,我老老实实上了一年课,同时负责武汉大学学生校园门户网站的运维工作,期间也指导团队参加世界数学建模大赛获得了金奖。不甘心大学生活就这么平凡度过,可能是骨子里的不安分吧,总想搞点事情,于是我跟两个校友一拍即合,合作创业。 剩下的3年里我翘掉所有课程,只在考试的时候出现,考前一两天集中看书,然后压着及格线顺利毕业。校招季收到了大厂的免试offer,但习惯了不走寻常路的我,还是决定继续有趣的创业生涯。 用6年改变1件小事 大家都用过我们的产品,只是不一定知道我们的名字。可能大家会意识到,以前进行网站验证的时候,需要辨认并输入复杂的验证码,近几年很多地方都改为拖动模块验证的方式,这就是我们的产品。它利用图神经网络技术区别是人为还是机器行为,来完成分析验证的过程。 极验验证诞生于武大附近的民房,2012-2015年是VC黄金期,我们利用Ipad演示拿到了20万种子轮资金,紧紧巴巴花了一年。其实现在想起来拿到融资的过程并不难,毕竟我们是平均年龄22岁的团队,毫无经验。这与时代的关系密不可分,我们运气还算不错。 创业的过程就没那么顺利了。对于当时的我们来说,每一个问题都很难,没有处理好就可能面临倒闭。一开始是技术方面,学生团队的技术基础薄弱,我们花了很多时间来打磨,提高稳定性。产品体验优化以后,市场问题又接踵而至。武汉的互联网发展资源太少,而我们又没有足够的资金混开社交圈。好在当时还有些社区论坛,为我们引流了首批客户。 当我们开拓了一批市场,就触及到竞争对手等的利益,服务器被频繁攻击,试图破解我们的验证。于是我们继续优化行为判断模型,提升服务端性能,不断完善迭代产品。现在我们的产品已经服务于游戏、直播、电商、社交媒体等20多个行业,承载每天十亿请求,涵盖20多万用户,包括KFC、几大航空公司、国家工商总局、新浪等。 年轻就是试错的资本 现在很多人不鼓励大学生创业,但我的建议恰恰相反。基于项目来说,毫无经验的大学生的确容易失败,但从个人角度出发,创业经历伴随的成长可以极大加速人生进程。人脉和经验通过常规职业路线也可以获取,但创始人的逻辑思维所带来的认知能力、战略性目光、视野与格局的成长速度,是无法相提并论的。不必过分关注结果,这份经历对于未来已经足够宝贵。 我建议大学生在校时就要提前规划好自己未来3-5年的人生,定位自己的核心优势,选几个方向来培养,可以是自己喜欢或者擅长的事情,重在坚持。依靠自己的竞争优势,超越同龄人足矣,彼时你会站在新的天地,看到更加不同的风景。 黄胜蓝的每一次选择看似乖张,其实始终都在对自己负责。他调侃自己不是一个安分的人,却可以心无旁骛做验证码6年。这位年轻的阿里云 MVP始终清晰、超前,坚定不移地靠近自己的理想人生。 我要成为阿里云 MVPlink 立即加入社群,与专家面对面,及时了解课程最新动态! 【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

June 9, 2020 · 1 min · jiezi

云原生时代消息中间件的演进路线

引言 本文以一张云进化历史图开场,来谈谈云原生时代消息中间件的演进路线,但本文绝对不是“开局一张图,内容全靠编”。 从虚拟化技术诞生以来,IaaS/PaaS/SaaS概念陆续被提了出来,各种容器技术层出不穷。到2015年,Cloud Native概念应运而生,一时间,各种云厂商,云服务以及云应用都加上了“云原生”前缀。 我们也一直在思考,传统的消息中间件需要做些什么才能加上云原生这个修饰词,这也是本文探讨的主题:传统的消息中间件如何持续进化为云原生的消息服务。 云原生消息服务 什么是云原生 首先来谈谈什么是云原生,云原生是一个天然适用于云计算的架构理念,实践云原生技术理念的应用可以最大化享受云计算的技术红利,包括弹性伸缩、按量付费、无厂商绑定、高SLA等。 应用在实践云原生技术理念时一般会遵循四个要素: 采取DevOps领域的最佳实践来管理研发和运维流程。通过CICD工具链做到应用的快速迭代和持续交付。采取微服务架构。采取容器及相关技术进行应用的托管。消息服务作为应用的通信基础设施,是微服务架构应用的核心依赖,也是实践云原生的核心设计理念的关键技术,通过消息服务能够让用户很容易架构出分布式的、高性能的、弹性的、鲁棒的应用程序。消息服务在云原生的重要性也导致其极可能成为应用实践云原生的阻塞点,所以消息服务的云原生化是至关重要的。 什么是云原生消息服务 先说结论,我们认为云原生消息服务是云原生的通信基础设施。2015年成立的CNCF基金会大范围推广了云原生的技术理念,并提供了一套完整的实践技术工具集,帮助开发者落地云原生理念。这套工具集收录于CNCF云原生全景图,其中消息中间件处于应用定义和开发层的Streaming和Messaging类目。 消息中间件在云原生的应用场景,主要是为微服务和EDA架构提供核心的解耦、异步和削峰的能力,在云原生全景图定义的其它层次领域,消息服务还发挥着数据通道、事件驱动、集成与被集成等重要作用。 另外云原生倡导面向性能设计,基于消息队列的异步调用能够显著降低前端业务的响应时间,提高吞吐量;基于消息队列还能实现削峰填谷,把慢服务分离到后置链路,提升整个业务链路的性能。 云原生消息服务演进方向 云原生时代对云服务有着更高的要求,传统的消息服务在云原生这个大背景下如何持续进化为云原生的消息服务,我们认为方向有这么几个: 高SLA 云原生应用将对消息这种云原生BaaS服务有更高的SLA要求,应用将假设其依赖的云原生服务具备跟云一样的可用性,从而不需要去建设备份链路来提高应用的可用性,降低架构的复杂度。只有做到与云一样的可用性,云在服务就在,才能称为真正的云原生服务。 低成本 在过去,每家公司自建消息中间件集群,或是自研的、或是开源的,需要投入巨大的研发、运维成本。云原生时代的消息服务借助Serverless等弹性技术,无需预先Book服务器资源,无需容量规划,采取按量付费这种更经济的模式将大幅度降低成本。 易用性 在云原生时代,消息服务第一步将进化成为一种所见即所得、开箱即用的服务,易用性极大的提高。接下来,消息服务将以网格的形式触达更复杂的部署环境,小到IoT设备,大到自建IDC,都能以跟公有云同样易用的方式接入消息服务,且能轻易地满足云边端一体化、跨IDC、跨云等互通需求,真正成为应用层的通信基础设施。 多样性 云原生消息服务将致力于建设大而全的消息生态,来涵盖丰富的业务场景,提供各式各样的解决方案,从而满足不同用户的多样性需求。阿里云消息队列目前建设了多个子产品线来支撑丰富的业务需求,比如消息队列RocketMQ,Kafka,微消息队列等。 标准化 容器镜像这项云原生的核心技术轻易地实现了不可变基础设施,不可变的镜像消除了IaaS层的差异,让云原生应用可以在不同的云厂商之间随意迁移。但实际上,很多云服务提供的接入形式并不是标准的,所以依赖这些非标准化云服务的应用形成了事实上的厂商锁定,这些应用在运行时是无法完成真正的按需迁移,所以只能称为某朵云上的原生应用,无法称为真正的云原生应用。因此,消息服务需要做到标准化,消除用户关于厂商锁定的担忧,目前阿里云消息队列采纳了很多社区标准,支持了多种开源的API协议,同时也在打造自己标准化接口。 总结一下,传统的消息队列将从高SLA、低成本、易用性、多样性和标准化几个方向持续进化为云原生的消息服务。 云原生消息三化 谈到云原生,离不开Kubernetes、Serverless以及Service Mesh,接下来为大家分享下我们如何利用K8S社区的生态红利,如何实践Serverless和Service Mesh技术理念。 云原生消息Kubernetes化 Kubernetes项目当下绝对是大红大紫,在容器编排和应用托管领域绝对的事实标准,整个社区也是生机盎然。所以,必须将我们的消息服务升级为K8S环境开箱即用的服务。 云原生消息Kubernetes化是指通过自定义CRD资源将有状态的消息集群托管至Kubernetes集群中,充分利用 K8S提供的部署、升级、自愈等能力提高运维效率,同时尽可能享受K8S的社区生态红利。 我们在RocketMQ开源社区也提供了CRD描述文件以及相应的Operator实现,通过这套实现,可以快速部署RocketMQ集群至K8S环境;利用K8S的能力低成本运维RocketMQ集群;也可以使用云原生的Prometheus观察集群指标。 RocketMQ完成Kubernetes化后,就变成了Kubernetes环境原生可访问的一个消息服务,将给开发者带来极大的便利性。 同时,在商业化环境,我们也正在依赖Kubeone将消息队列系列产品完成Kubernetes化。 云原生消息Serverless化 Serverless最核心的理念是“按需”,云原生消息Serverless化主要是从两个维度落地按需的概念。一方面根据业务规模自动化扩缩容实例规格、队列数等逻辑资源;另一方面,根据服务端负载自动化扩缩容计算、存储等物理资源。 逻辑资源按需扩缩容: 在用户侧,更关心的是消息实例提供的逻辑资源是否充足,比如购买的实例TPS规格是否足够,队列数量是否能满足扩展性需求。比如一个商业化的MQ实例中,可以根据用户的流量对实例规格进行自动的升降配,从2W TPS至10W TPS按需调整;也可以根据用户分布式消费者的数量规模,对逻辑队列数量进行动态调整;用户完全不需要进行容量评估。 物理资源按需扩缩容: 在云服务开发者侧,我们更关心的是如何通过Serverless降低运维成本,避免手动的机器购买、VIP申请、磁盘申请以及集群扩缩容等。在Kubernetes化完成后,可以很轻易地根据集群Load等指标自动扩容MQ 物理资源;在集群缩容的处理上,会比较麻烦,因为每个MQ 节点其实是有状态的,图中的某个PV 代表了一个CommitLog,我们在内部通过在ASI上支持PV漂移,在RocketMQ存储层支持多CommitLog挂载来完成自动化缩容。 云原生消息Mesh化 Service Mesh出发点是解决微服务架构的网络问题,将服务之间的通信问题从业务进程中进行剥离,让业务方更加专注于自身的业务逻辑。 云原生消息Mesh化将消息的富客户端能力下沉至Sidecar,将消息的服务发现、负载均衡、流量监控等职责与业务逻辑隔离,在运行时完成透明组装,同时提供细粒度的消息灰度和治理能力。 目前阿里云消息队列 RocketMQ 是国内第二个成功进入 Service Mesh 官方社区的中间件产品,在进行Envoy适配的过程中推动了Envoy社区加速对on-demand CDS的支持,创新性地使用Pop消费模式来适配Mesh的无状态网络模型。 ...

June 8, 2020 · 1 min · jiezi

全球CT影像20秒诊断阿里云为新冠AI辅助诊断系统加速

新冠病毒全球爆发 2020年注定是不平凡的一年,新型冠状病毒肆虐全球,对于每个人来说都是一场灾难。 根据丁香园统计的数据,截止到2020年5月29日,全球新冠(COVID-19)累计确诊病例5,593,631人,累计死亡353,334人。虽然中国疫情已经进入尾声,但是全球疫情新增确诊病例却呈现持续上升趋势。 毫无疑问,COVID-19不是一座城市的疫情,也不是一个国家的疫情,而是全世界的疫情,没有人能够置身事外,需要共同面对。 诊断一位患者,医生要肉眼阅读数百幅CT影像 一般来说,一个病人的CT影像包含数百张切面,即使经验丰富的医生也需要花费大约15-20分钟的时间去阅读CT影像,才能得到准确的诊断。 在新冠疫情爆发期,疑似患者的CT影像被证实成为筛查新冠肺炎的高效手段,这就代表每个医生每天需要进行批量CT影像的读片判断,无疑这个工作量是惊人的。同时依靠医生肉眼识别病灶微小的变化会花费大量时间,不仅诊断效率低,也会造成医生压力大,患者等待时间长。 50万份CT训练,澳科大开发新冠肺炎AI辅助诊断系统 在疫情初期,澳门科技大学医学院张康教授团队便携手中国科学院、国家生物信息中心、清华大学、中山大学孙逸仙纪念医院、广州再生医学与健康广东省实验室、四川大学华西医院等团队,联合应急开发了基于胸部CT和X-ray影像学的新冠肺炎AI辅助诊断系统。 该科研团队在分析了超50万份临床影像学数据的基础上,利用了深度学习、迁移学习、语义分割等多种人工智慧前沿技术,辅助临床医生进行新冠肺炎的快速诊断和定量分析。该AI模型以高精准度和高效率的优势,不仅可以辅助临床医生做诊断决策,提高诊断准确率,还可以减少其工作量,加快诊断效率,节省患者等待时间。 澳门科技大学医学院张康教授,图片源自澳科大官网 借助阿里云快速部署,实现20秒内CT影像诊断 科研团队需要让新冠肺炎AI辅助诊断系统快速上线使用,实现真正的帮助一线医生快速诊断抗击疫情。由于时间紧急,传统的线下部署方式,要进行设备及线路采购、部署、测试,再将业务部署在线下数据中心,不仅搭建周期长,而且缺乏弹性,很难满足快速部署业务的需求。 经过多次测试和研讨,阿里云以高性能计算、全球加速网络、极速存储等技术优势取得了澳科大张康团队的信赖。在全球加速网络及GPU性能的保证下,系统将影像科医生阅读CT影像缩短至20秒内,且平均准确率高达90%。 阿里云GA,30分钟实现全球加速网络部署 新冠肺炎AI辅助诊断系统想要实现一处部署,全球服务,首先要解决网络连接问题。一张稳定、高速的全球网络可以保证全球科研机构及移动办公的个人,随时随地快速上传CT文件及下载分析结果,从而实现科研成果的全球规模化应用。 阿里云为此次新冠肺炎AI诊断系统的部署提供了全球加速解决方案,通过全球加速GA产品,依托阿里巴巴遍布全球的优质传输网络,可以有效提升全球数据访问的稳定性。GA内置的TCP协议优化能力,还可以大幅提升传输性能。尤为值得一体的是,传统的专线部署周期长达数月,而采用阿里云GA构建的全球加速网络,只需要30分钟部署时间,为业务系统的快速上线提供了基础保障。 当前该系统已经在武汉市金银潭医院、中山大学孙逸仙纪念医院、中山大学第三附属医院、广州医科大附属第一医院、湖北宜昌市中心人民医院、安徽医科大学第一附属医院、新疆喀什地区第一人民医院、四川大学华西医院、澳门科技大学、美国、巴西、伊拉克等地部署,接下来会在全国及世界范围内推广应用。阿里云洛神网络团队协助高校及科研机构,用科技抗击疫情,为全球抗击COVID-19贡献一份力量。

June 8, 2020 · 1 min · jiezi

来一起八卦一下数据湖

June 8, 2020 · 0 min · jiezi

智能制造的灾备问题如何解决

提起压力、温度校准行业会让大部分非专业人士感到陌生。但实际上,在我们的日常生活中,很多设备都是需要经过压力检测、温度检测、过程信号检测合格之后才正式投放市场使用的, 北京康斯特仪表科技股份有限公司(以下简称康斯特)就是在这样的行业耕耘了多年。康斯特成立于2004年,康斯特专注于为全球用户提供压力、温度及过程仪表的校准及检测技术专业解决方案。2015年,公司于深交所创业板上市,股票代码300445。 一、未雨绸缪:智能制造,安全先行在智能制造的大趋势下,康斯特锐意发展,践行国际化布局的长期战略,2019年,在贸易新格局变化和全球经济增长放缓的重重压力下,公司坚持高质量扩张模式发展,继续追加研发投入,把握新一轮科技产业变革趋势,推进校准测试和科技创新的融合。通过创新赋能提升产品网络化、智能化能力,实施技术升级迭代,打造持续盈利的增值反应堆。 作为一家发展多年的制造企业,康斯特积累了大量的数据,数据存储容量快速增长,对数据安全的要求也不断提高。为了应对业务的快速发展,以及未来全球化的企业战略,康斯特在建立了自己的数据中心的同时,也不断在云端寻求新的尝试。在数据安全方面,康斯特希望采用一个更加贴近实际需求的灾备解决方案。 二、有备无患:释放混合云的技术红利为了对智能制造的趋势以及数字化的全面转型,康斯特基于专业的技术与服务能力,与阿里云合作,经过深入交流沟通后,根据康斯特自身的业务和数据的特性,最终采用了全能备份型灾备解决方案,实现本地到云端的混合云架构部署。 ▲方案架构 首先,阿里云 DR208灾备一体机经阿里云公共云级压力测试,提供了安全稳定的本地灾备空间来存放被保护服务器的复制数据,可以在外部网络不稳定时提供足够的临时存储,确保备份复制不中断。同时,可根据策略加密压缩后上传至云端,依托于阿里云的弹性扩容,节省了本地IDC机房的投入,减少本地设备采购交付周期。
其次,阿里云DR208灾备一体机结合了阿里云生态伙伴、Gartner魔力象限灾备领军厂商Commvault的备份解决方案,该方案可以为企业数据中心、远程分支机构、以及云上数据提供强有力的保护,并支持加密、压缩、重删等技术,保证数据快速、安全、高效地备份到云上。
第三,阿里云提供备份软件和硬件整体售后服务,解决了软硬件分离所导致的诊断效率低且不容易定位等问题。 三、混合云存储:鱼和熊掌,可兼得“阿里云的混合云存储产品非常适合云康斯特这样的制造企业,不仅构建了一个统一的数据管理平台,而且在数据安全方面提供了极大保障,提升了运维效率,免除了我们的后顾之忧,从而可以将更多的时间和人力投入到业务创新中。”——北京康斯特仪表科技股份有限公司 信息化部经理聂明茜随着新一轮科技革命与产业变革,以智能制造培育新动能、促进新发展,正成为全球制造业变革和科技创新的一个重要方向。在这样的时代背景下,康斯特将继续秉承“让校准更轻松”的核心理念,为客户提供校准及检测技术专业解决方案,并创造更大的价值。而在这个过程中,依托于阿里云存储产品,康斯特正在创造出更多的可能。

June 5, 2020 · 1 min · jiezi

疫情下开源数据库逆势增长新基建下国产数据库迎机遇

2020年5月DB-Engines 数据库流行度排行大家都看了吗? 虽然 Top 10 与上月没有任何变化,但仔细观察本月的排行榜,Oracle 较上月几乎持平,仅微涨 0.02 分;相较而言,MySQL 增长明显,达到 14.29 分,比其4月份的增长( 8.62 分)高了近 66%。 而微软的两个产品 Microsoft SQL Server 和 Microsoft Access 继续下滑,分数分别下降 5.12 分和 2.02 分;IBM Db2 也出现了 2.99 分的跌落,老牌商业数据库在全球遭受新冠病毒疫情影响下可谓有些捉襟见肘。 再看 PostgreSQL ,一改上月颓势,本月增长 4.95 分,可以说在疫情影响的经济形势下,开源数据库抗住了压力。 近一个月以来,新冠病毒引起的疫情在海外持续、快速蔓延,目前已累计确认人数超过511万、累计死亡人数超过33万。阴霾笼罩下,全球经济遭遇重创,“活久见”层出不穷,技术和就业也都不可避免的受到影响。 原计划于4月底前发布的 Oracle Database 20c 公开版本,现在也未能如期。不过 Oracle 20.3 已在云上更新,尽管大多数人可能还看不到,但事实就是如此,Oracle 从 20.1 开始,悄无声息地按照其新的版本策略,更新迭代到第3个版本号了。 此外,MySQL 8.0.20 GA版已于4月27日正式发布,除了缺陷修复外,还包括了增加SHOW_ROUTINE权限、改进hash join、加入新的索引级别的优化器提示、Performance Schema改良、X Plugin改良、InnoDB改良、二进制日志事务压缩等在内的一些新特性。开源力量不可小觑! 按照惯例,我们再来看一下国产数据库排行榜。在国产数据库中,Top 10如下图所示。阿里云自研的云原生数据库 PolarDB 稳中上进,得分比上月有所提高,是国产数据库中的重要力量。 可以说,疫情影响下的国产数据库保持积极成长,这或许跟“新基建”的带动有关。信息技术应用创新产业作为“新基建”的重要组成部分,包括5G网络、数据中心等“新基建”被按下“快进键”,国产化数字生态建设也将加速推进,数据库特别是国产数据库必将迎来成长和发展的新机遇。 2020年的第5个月已经进行到了接近尾声,随着国内疫情防控形势向好,生产生活加快恢复,让我们重拾热情,用数据驱动美好世界! DB-Engines数据库流行度排行关系型数据库前10位: Key-Value 数据库存储前10位: 文档类数据库存储前10位: 时序数据库前10位: 图数据库前10位: ...

June 5, 2020 · 1 min · jiezi

2020年阿里云年中大促福利选品全攻略

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!2020年阿里云年中大促活动于6月1日正式上线啦!活动时间为:2020年6月1日至2020年6月30日主会场链接:https://www.aliyun.com/activity/618?utm_content=g_1000136221这篇攻略旨在盘点本次大促的福利,并给大家整理了一份选品指南,方便大家快速、低成本上云。 年中大促福利大起底: 领取满减大礼包,最高可减12000元;云产品优惠:云服务器低至0.9折,工商注册9.9元起,商标钜惠270元,域名新注0元起,云数据库1折起;每日签到抽iPhone 11 Pro;分享返现高达31%;云分期百万补贴,首付20%;选品指南:领取大礼包页面填写自己的业务需求和预算,商品个性化推荐;常见6大业务场景解决方案和产品组合;产品线选品;百元专区会场,免费和超低价产品试用。年中大促福利大起底1、领取满减大礼包,最高可减12000元 前往主会场点击“领12000元大礼包”,填写需求和预算,领取大礼包。 购买的时候记得先将选中的云产品加入购物车,然后通过购物车一起购买。 除了满减礼包,有可能还会有意外豪礼奥,小编还领到了Teambition的免费试用权益。 2、 云产品特惠 阿里云全线产品享特惠,其中云服务器低至0.9折,工商注册9.9元起,商标钜惠270元,域名新注0元起,云数据库1折起; 3 、每日签到抽iPhone 11 Pro 年中大促期间每日签到可以无门槛抽奖,做任务嗨可以赚双倍积分,积分可以兑换豪礼奥~ 小编刚抽到20积分,赶紧去试试自己的手气吧~ 抽奖戳:https://club.aliyun.com/ 4. 分享返现高达31% 加入云大使,分享返现高达31%,客户省钱我赚钱~ 链接https://promotion.aliyun.com/ntms/yunparter/index.html 5. 云分期百万补贴,首付20% 云分期发放百万补贴助力企业上云,费率超低,首付仅2成,轻松上云。 链接:https://www.aliyun.com/yunfenqi/promotion 如何选品?1、领取大礼包页面填写自己的业务需求和预算,商品个性化推荐; 在领取大礼包的页面填写上云需求和预算范围,可以得到个性化地商品推荐,这样就不用在众多产品中去捞适合自己的那一款啦~ 2、常见6大业务场景解决方案和产品组合 为了方便用户选品,这一届年中大促特别推出了电商专区、企业初创服务、数字新基建、业务安全、企业应用、音视频专区6大常见业务场景下的解决方案及产品组合,一站式解决了上云问题。极大地降低了用户自己选品、组合的难度,是不是很优秀呢~ 3、产品线选品 如果有明确的产品需求,可以通过主会场【口碑爆款】专区,查看适合自己的高性价比产品;也可以通过产品专场寻找需要的商品。 云服务器专场:https://www.aliyun.com/daily-act/ecs/activity_selection_618 云数据库专场:https://www.aliyun.com/database/dbfirstbuy 域名知产专场:https://tm.aliyun.com/channel/activity_618domain 企业应用中心:https://ac.aliyun.com/ 4、百元专区会场多款产品免费/超低价试用 如果想先尝试上云的用户,可以前往百元专区会场,多款免费试用和超高性价比的商品 链接:https://www.aliyun.com/activity/618/baiyuan 最后祝大家年中上云省钱又省心~ 【云栖号在线课堂】每天都有产品技术专家分享! 课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态! 【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

June 5, 2020 · 1 min · jiezi

云原生之路容器技术落地最佳实践

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 阿里妹导读:随着容器技术的快速发展和广泛应用,毫无疑问云原生技术是未来发展的必然趋势。作为国内最早布局容器技术的阿里云,无论在技术还是产品上,都取得了极大的成果。阿里云资深技术专家易立通过阿里云容器服务,分享容器技术落地的最佳实践,希望能够帮助同学们更好地理解容器技术和云原生理念,合理地设计上云架构,充分发挥云的价值。 没有集装箱,就没有全球化。——《经济学人》什么是容器?容器的英语是 Container,它的意思是集装箱。我们知道,经济全球化的基础就是现代运输体系,而其核心正是集装箱。集装箱的出现实现了物流运输的标准化,自动化,大大降低了运输的成本,使得整合全球的供应链变为可能。这就是著名经济学人谈到的“没有集装箱,就没有全球化”。 集装箱背后的标准化、模块化的理念也在推进建筑业的供应链变革。在最近,疫情爆发之后。10 天 10 夜,在武汉火神山,一个可以容纳上千床位的专科医院平地而起,在抗疫过程中发挥的重要作用。整个医院都是采用集装箱板房吊装。模块化的病房设计,预置了空调、消杀、上下水等设施,极大加速了施工速度。 容器的通俗理解 软件集装箱 ”容器技术“ 也在重塑整个软件供应链。容器作为一种轻量化的操作系统虚拟化技术,和和传统的物理机、虚拟化技术和使用方式有什么不同呢?打个比喻: 传统物理机就是独栋大别墅 一家人独占,住的舒适,不会被别人打扰。应用独占物理机,性能优异。但是缺点就是贵、交付时间长,资源利用率也不高。虚拟机就是联排住宅 每户有独立的空间,有较好的隔离性。每栋房屋之间共享水电、地基等基础设施。容积率提升了,成本下降了,交付速度也加快了。通过虚拟化技术,虚拟机中的应用可以实现安全隔离,还可以有效提升资源利用率。但是,虚拟机交付后还需进行应用配置和安装,交付速度还不够快。容器就是集装箱板房 集装箱房采用模块化设计,自带装修,可以快速搭建,随时移动。这是 2022 年卡塔尔世界杯一个体育场的设计。它将完全使用集装箱方式搭建一个可以容纳 4 万人的体育场。每个集装箱模块都在在中国生产,已经预置了看台,卫生间,酒吧等功能,在中国生产完毕后在卡塔尔组装。不但工期可以缩短 3 年,而且赛事结束后可以拆卸,搬迁到其他地方。容器利用操作系统中 cgroup,namespace 等技术实现资源隔离。容器共享操作系统内核,非常轻量,没有资源损耗,支持秒级启动,极大提升了系统的应用部署密度和弹性。容器镜像将应用和其依赖的系统组件和配置打包在一个标准化的、自包含的格式中。通过容器镜像方式进行应用分发和交付,可以让应用即开即用,并一致地运行在不同环境。容器的价值 在过去几年中,容器技术得到了越来越广泛的应用。其中最主要的 3 个核心价值是: 敏捷 天下武功唯快不破。在企业数字化转型时代,每个企业都在面临着新兴业务模式的冲击和众多的不确定性。一个成功的企业不是看他现在规模有多大,过去的战略有多成功,而是要看他是否有能力持续创新。容器技术提升了企业的 IT 架构的敏捷性,从而提升了业务敏捷性,可以加速业务创新。比如疫情期间,教育、视频、公共健康等行业的在线化出现了爆发性高速增长。通过容器技术可以很好地把握业务快速增长的机遇。在业界的统计中,使用容器技术可以实现 3~10 倍交付效率提升,这意味着企业可以进行快速迭代,低成本试错。 弹性 在互联网时代,企业 IT 系统经常需要面对电商大促、突发事件等可预期和非预期的流量增长。通过容器技术可以充分发挥云计算的弹性,通过提升部署密度和弹性来降低计算成本。比如在线教育,面对疫情之下指数级增长的流量,可以通过容器技术来缓解扩容的压力,支持数十万教师在线教学,百万学生在线学习。 可移植性 容器技术推进了云计算的标准化进程。容器已经成为应用分发和交付的标准,可以将应用与底层运行环境解耦;Kubernetes 成为资源调度和编排的标准,屏蔽了底层架构的差异性,帮助应用平滑运行在不同的基础设施上。CNCF 云原生计算基金会推出了Kubernetes一致性认证,进一步保障了不同 K8s 实现的兼容性。采用容器技术来构建云时代的应用基础设施将变得越来越容易。 Kubernetes:云原生时代的基础设施 现在 Kubernetes 已经成为了云应用操作系统,越来越多应用运行在 Kubernetes 基础之上:从无状态的 Web 应用,到交易类应用(如数据库、消息中间件),再到数据化、智能化应用。阿里经济体也基于容器技术,实现了全面的云原生上云。 阿里云容器服务介绍 阿里云容器服务产品家族可以在公共云、边缘计算和专有云环境提供企业容器平台。阿里云容器产品的核心是 Kubernetes Service - ACK 和 Serverless K8s - ASK,它们构建在阿里云的一系列基础设施能力之上,包括计算、存储、网络、安全等,并提供标准化接口、优化的能力和简化的用户体验。ACK 通过 CNCF K8s 一致性兼容认证,并提供了一系列企业关注的核心能力,比如安全治理,端到端可观测性、多云混合云等。 ...

June 4, 2020 · 3 min · jiezi

ClickHouse内核分析MergeTree的存储结构和查询加速

注:以下分析基于开源 v19.15.2.2-stable 版本进行 引言ClickHouse是最近比较火的一款开源列式存储分析型数据库,它最核心的特点就是极致存储压缩率和查询性能,本人最近正在学习ClickHouse这款产品中。从我个人的视角来看存储是决定一款数据库核心竞争力、适用场景的关键所在,所以接下来我会陆续推出一系列文章来分析ClickHouse中最重要的MergeTree存储内核。本文主旨在于介绍MergeTree的存储格式,并且彻底剖析MergeTree存储的极致检索性能。 MergeTree存储MergeTree思想提到MergeTree这个词,可能大家都会联想到LSM-Tree这个数据结构,我们常用它来解决随机写磁盘的性能问题,MergeTree的核心思想和LSM-Tree相同。MergeTree存储结构需要对用户写入的数据做排序然后进行有序存储,数据有序存储带来两大核心优势: • 列存文件在按块做压缩时,排序键中的列值是连续或者重复的,使得列存块的数据压缩可以获得极致的压缩比。 • 存储有序性本身就是一种可以加速查询的索引结构,根据排序键中列的等值条件或者range条件我们可以快速找到目标行所在的近似位置区间(下文会展开详细介绍),而且这种索引结构是不会产生额外存储开销的。 大家可以从ClickHouse的官方文档上找到一系列的MergeTree表引擎,包括基础的MergeTree,拥有数据去重能力的ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree,拥有数据聚合能力的SummingMergeTree、AggregatingMergeTree等。但这些拥有“特殊能力”的MergeTree表引擎在存储上和基础的MergeTree其实没有任何差异,它们都是在数据Merge的过程中加入了“额外的合并逻辑”,这部分会在后续介绍MergeTree异步Merge机制的文章中详细展开介绍。 MergeTree存储结构为了方便大家理解表的存储结构,下面列举了某个POC用户的测试表DDL,我们将从这个表入手来分析MergeTree存储的内核设计。从DDL的PARTITION BY申明中我们可以看出用户按每个区服每小时粒度创建了数据分区,而每个数据分区内部的数据又是按照(action_id, scene_id, time_ts, level, uid)作为排序键进行有序存储。 CREATE TABLE user_action_log ( `time` DateTime DEFAULT CAST('1970-01-01 08:00:00', 'DateTime') COMMENT '日志时间', `action_id` UInt16 DEFAULT CAST(0, 'UInt16') COMMENT '日志行为类型id', `action_name` String DEFAULT '' COMMENT '日志行为类型名', `region_name` String DEFAULT '' COMMENT '区服名称', `uid` UInt64 DEFAULT CAST(0, 'UInt64') COMMENT '用户id', `level` UInt32 DEFAULT CAST(0, 'UInt32') COMMENT '当前等级', `trans_no` String DEFAULT '' COMMENT '事务流水号', `ext_head` String DEFAULT '' COMMENT '扩展日志head', `avatar_id` UInt32 DEFAULT CAST(0, 'UInt32') COMMENT '角色id', `scene_id` UInt32 DEFAULT CAST(0, 'UInt32') COMMENT '场景id', `time_ts` UInt64 DEFAULT CAST(0, 'UInt64') COMMENT '秒单位时间戳', index avatar_id_minmax (avatar_id) type minmax granularity 3) ENGINE = MergeTree()PARTITION BY (toYYYYMMDD(time), toHour(time), region_name)ORDER BY (action_id, scene_id, time_ts, level, uid)PRIMARY KEY (action_id, scene_id, time_ts, level);该表的MergeTree存储结构逻辑示意图如下: MergeTree表的存储结构中,每个数据分区相互独立,逻辑上没有关联。单个数据分区内部存在着多个MergeTree Data Part。这些Data Part一旦生成就是Immutable的状态,Data Part的生成和销毁主要与写入和异步Merge有关。MergeTree表的写入链路是一个极端的batch load过程,Data Part不支持单条的append insert。每次batch insert都会生成一个新的MergeTree Data Part。如果用户单次insert一条记录,那就会为那一条记录生成一个独立的Data Part,这必然是无法接受的。一般我们使用MergeTree表引擎的时候,需要在客户端做聚合进行batch写入或者在MergeTree表的基础上创建Distributed表来代理MergeTree表的写入和查询,Distributed表默认会缓存用户的写入数据,超过一定时间或者数据量再异步转发给MergeTree表。MergeTree存储引擎对数据实时可见要求非常高的场景是不太友好的。 上图展示了单个MergeTree Data Part里最核心的一部分磁盘文件(只画了action_id和avatar_id列其关的存储文件),从功能上分主要有三个类: ...

June 4, 2020 · 2 min · jiezi

基于XEngine引擎的实时历史数据库解决方案揭秘

实时历史库需求背景在当今的数字化时代,随着业务的迅速发展,每天产生的数据量会是一个惊人的数量,数据库存储的成本将会越来越大,通常的做法是对历史数据做归档,即将长期不使用的数据迁移至以文件形式存储的廉价存储设备上,比如阿里云OSS或者阿里云数据库DBS服务。 然而在部分核心业务的应用场景下,针对几个月甚至几年前的“旧”数据依旧存在实时的,低频的查询甚至更新需求,比如淘宝/天猫的历史订单查询,企业级办公软件钉钉几年前的聊天信息查询,菜鸟海量物流的历史物流订单详情等。 • 如果这时从历史备份中还原后查询,那么查询时间将会是以天为单位,可接受度为0 • 如果将这些低频但实时的查询需求的历史数据与近期活跃存储在同一套分布式数据库集群下,那么又会带来以下两大挑战 存储成本巨大,进而导致成本远大于收益,比如钉钉聊天信息数据量在高度压缩后接近50PB,很难想象这些数据不做压缩会带来多大的资金开销性能挑战巨大,随着数据量越来越大,即使针对数据做了分布式存储,单实例容量超过大概5T以后性能也会急剧下滑,进而影响到近期活跃数据的查询性能,拖垮整个集群运维难度巨大,比如针对海量数据下发一个表数据结构变更操作,很难想象全部完成需要多长时间实时历史库场景需求分析通过上面的分析,不管是冷备份还是在线历史数据混合存储在同一张物理表上的方法都是不可取的,一般实时查询历史数据库的场景,一般需要有以下几个关键特性 成本可控,历史数据的存储成本无法接受和在线库一样线性增长实时查询,历史数据的查询RT要做到与在线活跃库几乎一致查询频次较低,一般来说,越“旧”的数据查询频率越低统一查询入口,不管是活跃数据还是历史数据,查询入口保持一致改造成本需要尽可能低,最好能做到不做任何应用代码修改,可以认为历史库对程序开发人员来说是完全透明的可能存在历史数据更新需求数据规模较大,一般在100TB以上X-Engine引擎介绍X-Engine简介X-Engine是阿里云数据库产品事业部自研的联机事务处理OLTP(On-Line Transaction Processing)数据库存储引擎。作为自研数据库POLARDB的存储引擎之一,已经广泛应用在阿里集团内部诸多业务系统中,包括交易历史库、钉钉历史库等核心应用,大幅缩减了业务成本,同时也作为双十一大促的关键数据库技术,挺过了数百倍平时流量的冲击。 与传统的InnoDB引擎不同,X-Engine使用分层存储架构(LSM-Tree)。分层存储有两个比较显著的优点: 需要索引的热点数据集更小,写入性能更高。底层持久化的数据页是只读的,数据页采用紧凑存储格式,同时默认进行压缩,存储成本更低。相比InnoDB引擎,依据数据特征,使用X-Engine存储空间可降低至10%~50%,我们在著名的Link-Bench和阿里巴巴内部交易业务两个数据集上测试了X-Engine的存储空间效率。在测试中,对比开压缩的InnoDB引擎,X-Engine有着2倍空间优势,而对比未开压缩的InnoDB,X-Engine则有着3~5倍的优势。 实时历史库方案,为何不是其他高压缩引擎• 通常我们默认MySQL是当今最流行的开源数据库,大概率是在线核心数据库集群的首选。相比其他高压缩的存储引擎,引入X-Engine完全无需做任何SQL代码改造,并且支持事务,接入成本最低,学习成本几乎为0 • 写入性能更强,X-Engine相比同为LSM-tree架构的Rocksdb,有超过10倍的性能提升。 • 在存储层引入数据复用技术等,优化Compaction的性能,降低传统LSM-tree架构中Compaction动作对系统资源的冲击,保持系统性能平稳 • 引入多个层级Cache,同时结合Cach回填和预取机制,利用精细化访问机制和缓存技术,弥补传统LSM-tree引擎的读性能短板,X-Engine的点查询能力几乎与Innodb持平 下图是X-Engine与主流历史数据存储方案对比 历史数据存储选型 备份至OSS 开源HBase X-Engine 压缩率 高 高 高 是否支持查询 支持解析历史备份文件查询 高 高 实时性 N/A 较高 非常高 应用代码改造代价 N/A 很高 几乎不用修改 事务支持 N/A 仅支持单行事务 强 主要场景 冷备份 大数据生态 OLTP 实时历史数据库架构设计和实现总体架构思路基于上文对实时历史库和X-Engine的介绍,阿里云数据库团队推出以X-Engine引擎为历史数据存储核心,同时生态工具DTS作为在线/历史数据流转通道,DMS作为历史数据无风险删除的完整“实时在线-历史库”方案,针对不同的业务场景和客户需求,在具体实现上可能会有所不同,我们提供了多种实时历史库方案的具体实现。主体架构图如下,核心思路为: 久经考验的Innodb引擎作为OLTP在线库核心引擎,主要处理高频查询/更新请求,满足在线活跃数据高并发,高性能,强范围查询的业务需求阿里巴巴数据库团队自研的高压测存储引擎X-Engine作为历史库核心引擎,主要响应历史数据入库/查询/更新请求,满足历史数据冷热数据频次不一,低存储成本,高性能的业务需求(范围查询可能性能受限)统一DB接入层,根据设置的业务时间属性将请求分别转发至不同的存储引擎。针对特殊场景下的跨引擎访问,在应用层做聚合展示在线-历史数据通过阿里云提供的生态体系工具做历史数据迁移和过期数据删除,确保链路更为稳定可靠 在线库/历史库拆分方案一般来说,需要使用到实时历史库的场景,数据量都足够大到单台宿主机存放不了。在线数据库可能是根据业务水平或垂直拆分的多个RDS,也可能是一个规模较大的DRDS集群。为了尽可能地保证在线库的性能,推荐将在线库/历史库完全拆分解耦 • 历史库集群存储全量数据 • 通过DTS链路打通在线库和历史库,实时同步 • DTS链路过滤Delete操作 • 可直接使用新版DMS配置历史数据定期删除 源端为DRDS集群数据同步链路走RDS• 多条DTS链路打通底层RDS节点,同步性能强 • RDS数量较多可支持API批量创建和配置 • 链路稳定性更好 • 需要保证源端目标端库表数量一致,数据路由规则一致 ...

June 4, 2020 · 1 min · jiezi

解密阿里云高效病原体基因检测工具

1.背景介绍病原体基因检测,为各种严重感染的诊断提供了基础。病原体检测流程分成五个步骤:(1)采集病人的样本,比方说静脉血,痰液,肺泡灌洗液,或者脑脊髓液等。(2)对样本进行培养,提取样本中的核酸组织。(3)通过高通量基因测序仪,对核酸序列进行测序。高通量测序为了保证精度,会将很长的核苷酸序列,切成小的分片,分别进行测序,在读取基因序列上,一般是50pb到200bp不等。(4)高通量测序之后,需要查询相关的病原体标准序列,找到匹配的基因序列。(5)通过将这些小的片段进行分析,得到全部基因片段的组成成分(即检测结果),从而为病人的疾病确诊以及精准治疗提供有力的支持。 图1. 病原体基因检测流程 对于生物分析检测来说,通常情况下,一次病原体检测,大约会生成5亿左右的75bp的基因片段。过滤掉一些人的基因组织序列之后,还需要查询1亿左右的基因片段。通常情况下,会使用nBlast [1]工具来进行基因匹配,这部分在整个病原体检测过程中,也是非常耗时的部分,大约需要2-3个小时。阿里云AnalyticDB向量版提供了一个高效的基因检索工具,大大提升了基因分析的性能,能够在几十分钟内完成整个病原体的查询检测过程。 2.基因检索应用2.1 基因检索功能图1展示了病原体基因检索的界面。当前演示包含了12182个病毒的碱基序列,我们将病毒切分成150bp的小片段(总共1590804个片段),转化成向量之后,存储到AnalyticDB中。在检索框中,用户可以输入一段基因序列,到我们当前的系统中进行检索。为了方便大家使用,我们挑了新冠病毒,艾滋病毒,埃博拉病毒和中东呼吸综合症的基因序列来进行演示,用户可以拷贝相关的序列,来检测查询的性能。 图2. 核酸查询演示 图3用户输入了一段新型冠状病毒的基因序列,可以看到排到前面的序列片段就是我们要找的新冠的病毒的序列。因为当前AnalyticDB提供高效的向量索引,系统会在毫秒级的时间内,返回相关的基因片段。 图3.基因检索结果 2.2 端到端的基因分析我们模拟了人体的基因采样,将新型冠病毒基因(塞尔维亚MT450872 [2],美国MT450873 [3])和中东呼吸症MERS基因(NC_019843.3 [10]),三株病毒混合在一起,打散成75bp的序列,当做测试集合。我们希望,通过当前病毒库的检索分析,能够识别出当前测试集合中包含新型冠状病毒和MERS病毒。当前系统通过匹配检测,我们生成图4。 图4. 基因匹配结果 可以看到经过检测,病毒库检索系统返回了三个基因组(NC_045512.2,NC_019843.3和NC_038294.1)。NC_045512.2(65%)是武汉海鲜市场的新型冠状病毒的基因;NC_019843.3(20%)是MERS病毒的基因;而NC_038294.1(13%)是beta型英国冠状病毒,经过查询这个是MERS病毒的另外一个名字 [8],也属于MERS病毒。因此,通过分析,当前混合测试集合中包含了新型冠状病毒和MERS病毒。 2.3 应用架构总体设计阿里云基因检索系统的总体架构如图5所示,AnalyticDB负责整个应用的全部的结构化数据(比方说,基因序列的长度,基因的名称,基因的种类,以及基因的详细介绍,DNA或者RNA等)和基因序列产生的特征向量的存储和查询。在查询的时候,我们使用基因向量抽取模型,将基因转化成向量,在AnalyticDB库中进行粗排检索。在向量匹配的结果集中,我们使用经典的Needleman-Wunsch [4]算法进行精排,返回最相似的基因序列。 图5.基因检索系统框架 3.基因训练和查询模型3.1 基因查询过程基因模型的训练已经在上一篇文章中 [5],进行了详细的讲解。通过训练好的DNA K-Mer模型,我们可以得到每个k-mer的向量。给定一段12bp的基因序列(如图6),我们在这段基因序列中抽取出5个8-mers。我们将这5个8-mers转成对应的向量,求和归一化之后,就是这段12bp的基因序列的最终的向量。当然,为了提升精度,我们也可以使用doc2vec [6]等学习模型来对整段基因片段进行转化。 图6.DNA序列转向量 3.2 基因精度分析我们训练了两个模型,全部病毒模型和21个病原体细菌模型(痤疮丙酸杆菌,金黄色葡萄球菌,表皮葡萄球菌,溶血葡萄球菌,大肠埃希氏菌,鲍曼不动杆菌,结核分枝杆菌,肺炎链球菌,肺炎克雷伯氏菌,流感嗜血杆菌,副流感嗜血杆菌,嗜麦芽窄食单胞菌,铜绿假单胞菌,屎肠球菌,纹带棒状杆菌,人疱疹病毒4型(EB病毒),细环病毒,人腺病毒B组,黄曲霉,白色假丝酵母,耶氏肺孢子菌)。我们将一个基因,每隔150个bp,做一下切分。然后将150bp的小的分段,转化成向量存在库里面,进行检索。因此病毒数据集包括12182个病毒, 1590804个分段;21个细菌共275个基因,1521807个分段。 实验1(见表1)系统随机的在当前的基因库里面,取出75bp的小的片段。我们知道这75bp的基因片段是在哪个基因的哪个片段中提取的。我们将这75bp的基因段到库里面进行检索,查找返回前N个结果集中,查看是否包含这75bp的基因段对应的基因片段。Top-n的精度(Precision(n)),用公式(1)进行计算。 其中,n表示查询返回的列表的长度。u表示查询的次数,在实验中u取的是1000次。表示在第i次查询中,序列si是否出现在Top-n的列表中,出现为1,不出现为0。如果n越小,精度越高,说明我们的方法在实际中非常有效。我们可以看到,针对两个模型来说,top20的精度,都在99%以上。精度在0.99以上,对于实际检验基因片段包含物种基因是足够了的。 表1.基因查询精度检测 数据集 top 1 top 2 top 3 top 4 top 5 top 10 top 20 病毒 0.866 0.965 0.983 0.986 0.99 0.992 0.994 21个细菌 0.901 0.975 0.987 0.987 ...

June 4, 2020 · 1 min · jiezi

数据湖概念特征架构与案例

写在前面: 最近,数据湖的概念非常热,许多前线的同学都在讨论数据湖应该怎么建?阿里云有没有成熟的数据湖解决方案?阿里云的数据湖解决方案到底有没有实际落地的案例?怎么理解数据湖?数据湖和大数据平台有什么不同?头部的云计算玩家都各自推出了什么样的数据湖解决方案?带着这些问题,我们尝试写了这样一篇文章,希望能抛砖引玉,引起大家一些思考和共鸣。感谢南靖同学为本文编写了5.1节的案例,感谢西壁的review。 本文包括七个小节:1、什么是数据湖;2、数据湖的基本特征;3、数据湖基本架构;4、各厂商的数据湖解决方案;5、典型的数据湖应用场景;6、数据湖建设的基本过程;7、总结。受限于个人水平,谬误在所难免,欢迎同学们一起探讨,批评指正,不吝赐教。 一、什么是数据湖数据湖是目前比较热的一个概念,许多企业都在构建或者计划构建自己的数据湖。但是在计划构建数据湖之前,搞清楚什么是数据湖,明确一个数据湖项目的基本组成,进而设计数据湖的基本架构,对于数据湖的构建至关重要。关于什么是数据湖,有如下定义。 Wikipedia是这样定义的: A data lake is a system or repository of data stored in its natural/raw format,[1] usually object blobs or files. A data lake is usually a single store of all enterprise data including raw copies of source system data and transformed data used for tasks such as reporting, visualization, advanced analytics and machine learning. A data lake can include structured data from relational databases (rows and columns), semi-structured data (CSV, logs, XML, JSON), unstructured data (emails, documents, PDFs) and binary data (images, audio, video). [2]A data swamp is a deteriorated and unmanaged data lake that is either inaccessible to its intended users or is providing little value ...

June 3, 2020 · 4 min · jiezi

案例解析广东自由流收费稽核方案AI稽核新模式

随着取消省界收费站工程落成,我国逐步迈进全国高速公路“一张网”运行感知新时代。借助交通强国和“撤站”政策,2019年12月,广东联合电服和阿里云共同宣布,全国首个高速不停车收费AI稽核项目正式落地广东,在业内率先使用AI和大数据技术准确处理高速公路不停车收费的稽核工作。 # 案例背景:联合电服的挑战与机遇 广东联合电服负责广东省公路联网收费和电子不停车收费的实施工作,是省内唯一发行汽车ETC粤通卡的企业,同时还负责省内高速公路联网收费清分结算的工作,是全国高速公路联网收费体系中的广东省联网中心营运实体。在全国取消省界收费站的工作中,联合电服作为广东撤站工作组的核心落地团队,承担了大量的具体任务,推进了高速公路收费站的ETC发行工作。 # 业务痛点:收费稽查和追缴难度变大 随着省界收费站的取消,以及ETC上车潮的爆发,高速公路的路网服务从省域路网扩大到全国一张网,导致收费稽查和追缴难度变大。 精准问题:收费的准确性依赖于路侧的收费设施设备,对车辆识别要求更高,仅识别车牌已不满足新场景下的稽核要求。如何准确地对车辆身份进行识别,规避收费逃费,有效地进行稽核,是业内要面对的问题。效率问题:按照新的收费技术要求,车辆图片、视频带来以往数十倍的存储和计算压力,稽核的效率急需提升。系统压力:广东省每天600多万交易流水,翻倍到过亿,15倍以上的增长;半年新增1000万用户,需要IT资源快速支持发卡业务,发卡、收费系统压力倍增。稽核需求:公路院报告显示,目前逃费约为3万/km/年,广东省每年逃费2.5亿,占收入总比的 0.5%,行业协会打逃,目前实现追缴不到1亿,每年损失超过5个亿,收费稽核业务需求倍增。 # 解决方案:解决高速撤站收费痛点 视频识别技术:广东联合电服与阿里云合作,借助阿里云全球领先的视频识别技术,精确感知车辆特征,建设智能化稽核分析系统,发现车辆以套牌、遮牌等形式偷逃费的行为。数据技术:在图片、视频全部上云的基础上,还原车辆在全路网的行驶轨迹,突破以往单个设备只能提供有限依据的限制,堵住车辆换卡逃费、绕路逃费的漏洞。边缘计算:在边缘节点上提供稳定的计算能力,通过实时数据处理,缓解图片、视频传输上云的流量压力。案例创新:全国首个高速不停车收费AI稽核项目省域范围AI稽核:国内首家在省域范围内落地,利用人工智能和大数据技术对高速公路偷漏逃费行为进行稽核分析,并投入实际运行的AI大稽查系统。云边一体、全局协同。全广东省的100多个路段布设了边缘计算能力,同时在省联网中心布设了中心技术节点,实时获取信息,进行相应的处理。多源推理,轨迹还原。融合路段RSU数据、视频图像数据、互联网地图数据,还原车辆行驶轨迹。以图搜图。融合车辆特征识别、车辆通行行为识别等多种技术,实现车辆身份的准确推理。特征档案。建立基于路网车辆特征的档案库,一车一档案,一行一轨迹,自动、准确识别各类通行异常行为。一键稽查,准确高效。通过多源推理还原车辆行驶,形成证据链,高效协助通行费稽查补缴。 # 方案价值:为高速公路收费稽核业务智能化升级带来新动能 (1)新技术实现稽查业务智能化升级 资源使用:所有资源按需使用,上云后贴合业务流量曲线准备计算资源,成本大幅优化。大数据融合稽查:全路网覆盖的摄像头轨迹还原与分析提供实时与离线的轨迹还原、重点货车的偷逃费行为研判,为稽核中心提供科技手段提高打击成效并减少工作压力。 (2)“云边一体”部署模式得到最佳资源性价比分布式和低延时计算:边缘计算聚焦实时、短周期数据的分析,能够更好地支撑本地业务的实时智能化处理与执行。效率更高:由于边缘计算距离龙门架、路段业主分析系统更近,在边缘节点处实现了对数据的过滤和分析,因此效率更高。缓解流量压力:在进行云端传输时通过边缘节点进行一部分简单数据处理,进而缩短设备响应时间,减少从设备到云端的数据流量。 (3)以数据资源为核心推动联合电服融合创新发展项目总体将在数据融合和资源整合的基础上,推动数据开放共享,提升联合电服的数据分析能力,为将来数据中台的建设奠定最为坚实的数据能力,并为有效处理复杂的业务问题提供新的手段。 除广东高速外,阿里云还与诸多地区高速达成合作,致力于“更聪明”的道路。在以智慧高速与自由流收费和省界收费站里面的场景中,阿里云还落地了包括云计算技术、自主可控的飞天云平台,稽核平台、收费的方案等,更好实现路段级数字化运营。 广东联合电服总经理李斌表示:“云计算、人工智能等新技术为高速公路收费稽核业务智能化升级、高速智慧运营带来了新的可能,这次与阿里云的合作也将为联合电服在数字化转型上提供更多想象空间。” 阿里云智慧交通专题上线啦!方案全景、体验中心、客户案例、上云模式、架构师咨询……更多详情,进入专题!

June 3, 2020 · 1 min · jiezi

ClickHouse内核分析MergeTree的Merge和Mutation机制

注:以下分析基于开源 v19.15.2.2-stable 版本进行 引言ClickHouse内核分析系列文章,继上一篇文章 MergeTree查询链路 之后,这次我将为大家介绍MergeTree存储引擎的异步Merge和Mutation机制。建议读者先补充上一篇文章的基础知识,这样会比较容易理解。 MergeTree Mutation功能介绍在上一篇系列文章中,我已经介绍过ClickHouse内核中的MergeTree存储一旦生成一个Data Part,这个Data Part就不可再更改了。所以从MergeTree存储内核层面,ClickHouse就不擅长做数据更新删除操作。但是绝大部分用户场景中,难免会出现需要手动订正、修复数据的场景。所以ClickHouse为用户设计了一套离线异步机制来支持低频的Mutation(改、删)操作。 Mutation命令执行ALTER TABLE [db.]table DELETE WHERE filter_expr;ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr;ClickHouse的方言把Delete和Update操作也加入到了Alter Table的范畴中,它并不支持裸的Delete或者Update操作。当用户执行一个如上的Mutation操作获得返回时,ClickHouse内核其实只做了两件事情: 检查Mutation操作是否合法;保存Mutation命令到存储文件中,唤醒一个异步处理merge和mutation的工作线程;两者的主体逻辑分别在MutationsInterpreter::validate函数和StorageMergeTree::mutate函数中。 MutationsInterpreter::validate函数dry run一个异步Mutation执行的全过程,其中涉及到检查Mutation是否合法的判断原则是列值更新后记录的分区键和排序键不能有变化。因为分区键和排序键一旦发生变化,就会导致多个Data Part之间之间Merge逻辑的复杂化。剩余的Mutation执行过程可以看做是打开一个Data Part的BlockInputStream,在这个BlockStream的基础上封装删除操作的FilterBlockInputStream,再加上更新操作的ExpressionBlockInputStream,最后把数据通过BlockOutputStream写回到新的Data Part中。这里简单介绍一下ClickHouse的计算层实现,整体上它是一个火山模型的计算引擎,数据的各种filer、投影、join、agg都是通过BlockStrem抽象实现,在BlockStream中数据是按照Block进行传输处理的,而Block中的数据又是按照列模式组织,这使得ClickHouse在单列的计算上可以批量化并使用一些SIMD指令加速。BlockOutputStream承担了MergeTree Data Part列存写入和索引构建的全部工作,我会在后续的文章中会详细展开介绍ClickHouse计算层中各类功能的BlockStream,以及BlockOutputStream中构建索引的实现细节。 在Mutation命令的执行过程中,我们可以看到MergeTree会把整条Alter命令保存到存储文件夹下,然后创建一个MergeTreeMutationEntry对象保存到表的待修改状态中,最后唤醒一个异步处理merge和 mutation的工作线程。这里有一个关键的问题,因为Mutation的实际操作是异步发生的,在用户的Alter命令返回之后仍然会有数据写入,系统如何在异步订正的过程中排除掉Alter命令之后写入的数据呢?下一节中我会介绍MergeTree中Data Part的Version机制,它可以在Data Part级别解决上面的问题。但是因为ClickHouse写入链路的异步性,ClickHouse仍然无法保证Alter命令前Insert的每条纪录都被更新,只能确保Alter命令前已经存在的Data Part都会被订正,推荐用户只用来订正T+1场景的离线数据。 异步Merge&MutationBatch Insert和Mutation的数据一致性struct MergeTreePartInfo{ String partition_id; Int64 min_block = 0; Int64 max_block = 0; UInt32 level = 0; Int64 mutation = 0; /// If the part has been mutated or contains mutated parts, is equal to mutation version number. ... /// Get block number that can be used to determine which mutations we still need to apply to this part /// (all mutations with version greater than this block number). Int64 getDataVersion() const { return mutation ? mutation : min_block; } ... bool operator<(const MergeTreePartInfo & rhs) const { return std::forward_as_tuple(partition_id, min_block, max_block, level, mutation) < std::forward_as_tuple(rhs.partition_id, rhs.min_block, rhs.max_block, rhs.level, rhs.mutation); }}在具体展开MergeTree的异步merge和mutation机制之前,先需要详细介绍一下MergeTree中对Data Part的管理方式。每个Data Part都有一个MergeTreePartInfo对象来保存它的meta信息,MergeTreePartInfo类的结构如上方代码所示。 ...

June 3, 2020 · 3 min · jiezi

阿里云专属数据库重新定义云数据库新形态

阿里云数据库专属集群专属链接云专属数据库,重新定义云数据库新形态数据库是一个有着超过40年历史的悠久行业,前期一直被传统的如Oracle等少数几家厂商把持。云计算的先行者AWS在2009年率先推出RDS服务(Relational Database Service ),商业上通过云计算的模式颠覆了传统license交付的模式,产品上通过全托管的服务模式,在技术和产品上帮助客户代维数据库,颠覆了客户自运维的模式,降低了客户使用数据库的门槛,使得客户聚焦到业务本身,生产力得到了极大的提高。 阿里云作为国内云数据库的领导者,在2010年推出了阿里云RDS服务,经过10年的发展,阿里云RDS已经发展成为了一个完整的价值体系,支持MySQL、MariaDB、SQL Server、PostgreSQL等,并由此发展出来一系列NoSQL、OLAP、工具等产品。今天的阿里云数据库已经名列全球云数据库Top 3,比肩AWS和Azure等国际重量级玩家。 当前上云已经成为一种趋势,而在上云的过程中,数据库则被认为是非常重要的一环。越来越多的中大型客户,尤其是在传统行业中,客户在线下或者云上自建数据库,有自己使用数据库的习惯、熟悉的工具集和监控运维体系,如何在提供便捷、灵活的云数据库服务的同时,兼顾企业客户对于数据库自主可控制、安全合规性诉求,使得客户能够对接现有的监控运维体系、数据库专业工具。这一次,在迎接中大型企业上云的浪潮中,阿里云数据走在了时代的前列,创新提出了云数据库专属集群新形态,在完全兼容云数据库所有能力的基础上,再次释放技术创新的价值,让客户享受到资源专属、灵活可定制的超级能力。 为了释放技术创新的洪荒之力,云数据库专属集群从五个方面入手: 一、业内首创客户自主可控、无缝对接监控运维系统当前大部分云厂商提供的数据库服务是对客户透明下层的主机和操作系统,阿里云数据库专属集群通过开放OS权限,使得客户能够保留原有的数据库管理模式。 通过堡垒机让客户可以登陆和管理数据库实例所在主机,一个堡垒机可登录多个数据库主机(如下图所示)。堡垒机的主要作用是记录用户的所有行为,用户所有的命令都必须经过堡垒机,不开放数据库主机公网访问,保障数据库主机的安全性。 云数据库专属集群开放OS权限,让客户获得更多自主可控的权限,可充分发挥客户DBA的价值,及时解决数据库问题。 二、做性价比最高的数据库,进一步降低企业TCO数据库一般都采用单独部署的形态,在实际使用过程中每个数据库实例均预留了一定量的CPU资源,CPU利用率基本在50%左右,造成资源的闲置和浪费。现有的系统架构,无法既满足业务的实际需要,又进一步降低TCO。 1、提供资源超配专属集群主机内部通过系统的调度,利用业务本身高低峰,实现“犬牙交错”的部署形式,使得资源得到最大化利用,可以获得比实际物理资源要多的资源,同时进一步降低TCO。 专属集群主机的超配能力,当CPU超配300%时,仅相当于同等规格ECS 50%的成本支出。专属集群主机上部署的数据库内核和原PaaS上的数据库实例相同,都是阿里云加强的企业版,相比官方企业版相当于每年节省数十万的License费用。 2、混合部署多种数据库很多客户不止使用一种数据库,经常出现MySQL+Redis,MySQL+PostgreSQL这样组合使用,从业务角度来看进行不同类型数据库混合部署,这样更加贴近业务实际。 专属集群将支持不同的数据库如MySQL,PostgreSQL,Redis进行混合部署,后续更加扩展到OLTP和OLAP的混合部署,进一步满足不同客户的实际需求。 三、做最灵活的数据库,让客户充分享受灵活定制的能力传统全托管云数据库,给所有客户尽力提供一个最优质的服务,但是大中型客户天然的业务复杂度,让通用策略和方法变得捉襟见肘,只有结合业务的平台才能获得最佳成本和效益。云数据库专属集群会逐渐将底层平台的能力释放出来,让客户可以结合业务灵活地去定制,比如超卖策略,备份策略,HA策略,带宽任意用满,CPU/Memory灵活配比,只读任意副本等等。以资源调度策略为例: 云数据库专属集群提供灵活的资源调度策略,大促时利用均衡型策略分摊新购的机器压力,平时利用紧凑型策略充分利用资源,最高节省60%的整体成本;专属集群灵活的资源弹性策略可解燃眉之急,本地快速弹升CPU、IOPS等资源,DBA干预系统资源分配解决业务问题。 四、做最安全的数据库云数据库专属集群将底层物理机整体调度给单个客户使用,让客户在公共云上享受类似私有云一样完全隔离的专属物理资源,实现CPU、内存,带宽完全独占。 五、做最稳定的数据库,享受全托管服务一样的体验阿里集团在长期服务电商业务的过程中,积累了丰富的数据库经验和版本,今天通过云计算技术将集团的版本同时释放出来,云数据库专属集群和RDS一样,除了提供开源的MySQL、PostgreSQL、Redis等这些数据库之外,分别提供对应的阿里集团内部的版本,三节点企业版本,Tair等。相比社区版本,这些企业版本在稳定性、性能等企业能力上有本质的提升,典型有: 1、 MySQL企业版本相对于开源版1.5倍的性能提升,最高4个9的高可用性,满足客户高性能、高可用性要求。 2、 Tair相比Redis提供3x性能提升的高性能版本和90%混合存储的能力。 写在最后云数据库专属集群是阿里云专为大中型企业用户定制优化的解决方案,填补了市场空白,具有资源独享、自主可运维、多数据库混合部署等特点。让用户既享受到云数据库的灵活性,又满足企业对数据库合规性、高性能和安全性要求。在推出的短短的几个月时间,就受到了众多大中型的客户信任和欢迎。云专属数据库浪潮已经势不可挡,接下来会持续推出客户急需的能力,阿里云诚意打造,让云数据库专属集群成为上云标配。

June 3, 2020 · 1 min · jiezi

如何使用MaxCompute-Spark读写阿里云Hbase

背景 Spark on MaxCompute可以访问位于阿里云VPC内的实例(例如ECS、HBase、RDS),默认MaxCompute底层网络和外网是隔离的,Spark on MaxCompute提供了一种方案通过配置spark.hadoop.odps.cupid.vpc.domain.list来访问阿里云的vpc网络环境的Hbase。Hbase标准版和增强版的配置不同,本文通过访问阿里云的标准版和增强版的Hbase简单的描述需要加的配置。 Hbase标准版 环境准备 Hbase的网络环境是存在vpc下的,所以我们首先要添加安全组开放端口2181、10600、16020.同时Hbase有白名单限制我们需要把对应的MaxCompute的IP加入到Hbase的白名单。 设置对应vpc的安全组 找到对应的vpc id然后添加安全组设置端口 添加Hbase的白名单 在hbase的白名单添加 100.104.0.0/16 创建Hbase表 create 'test','cf' 编写Spark程序 需要的Hbase依赖 <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-mapreduce</artifactId> <version>2.0.2</version></dependency> <dependency> <groupId>com.aliyun.hbase</groupId> <artifactId>alihbase-client</artifactId> <version>2.0.5</version></dependency>编写代码 object App { def main(args: Array[String]) { val spark = SparkSession .builder() .appName("HbaseTest") .config("spark.sql.catalogImplementation", "odps") .config("spark.hadoop.odps.end.point","http://service.cn.maxcompute.aliyun.com/api") .config("spark.hadoop.odps.runtime.end.point","http://service.cn.maxcompute.aliyun-inc.com/api") .getOrCreate()val sc = spark.sparkContextval config = HBaseConfiguration.create()val zkAddress = "hb-2zecxg2ltnpeg8me4-master\*-\*\*\*:2181,hb-2zecxg2ltnpeg8me4-master\*-\*\*\*:2181,hb-2zecxg2ltnpeg8me4-master\*-\*\*\*:2181"config.set(HConstants.ZOOKEEPER\_QUORUM, zkAddress);val jobConf = new JobConf(config)jobConf.setOutputFormat(classOf\[TableOutputFormat\])jobConf.set(TableOutputFormat.OUTPUT\_TABLE,"test")try{ import spark.\_ spark.sql("select '7', 88 ").rdd.map(row => { val name= row(0).asInstanceOf\[String\] val id = row(1).asInstanceOf\[Integer\] val put = new Put(Bytes.toBytes(id)) put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes(id), Bytes.toBytes(name)) (new ImmutableBytesWritable, put) }).saveAsHadoopDataset(jobConf)} finally { sc.stop()}}} ...

June 2, 2020 · 2 min · jiezi

Istio-从懵圈到熟练二分之一活的微服务

作者 | 声东 阿里云售后技术专家 <关注阿里巴巴云原生公众号,回复 排查 即可下载电子书> 《深入浅出 Kubernetes》一书共汇集 12 篇技术文章,帮助你一次搞懂 6 个核心原理,吃透基础理论,一次学会 6 个典型问题的华丽操作! Istio is the future!基本上,我相信对云原生技术趋势有些微判断的同学,都会有这个觉悟。其背后的逻辑其实是比较简单的:当容器集群,特别是 Kubernetes 成为事实上的标准之后,应用必然会不断的复杂化,服务治理肯定会成为强需求。 Istio 的现状是,聊的人很多,用的人其实很少。所以导致我们能看到的文章,讲道理的很多,讲实际踩坑经验的极少。阿里云售后团队作为一线踩坑团队,分享问题排查经验,我们责无旁贷。这篇文章,我就跟大家聊一个简单 Istio 问题的排查过程,权当抛砖。 二分之一活的微服务 问题是这样的,用户在自己的测试集群里安装了 Istio,并依照官方文档部署 bookinfo 应用来上手 Istio。部署之后,用户执行 kubectl get pods 命令,发现所有的 Pod 都只有二分之一个容器是 READY 的。 # kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-68868454f5-94hzd 1/2 Running 0 1m productpage-v1-5cb458d74f-28nlz 1/2 Running 0 1m ratings-v1-76f4c9765f-gjjsc 1/2 Running 0 1m reviews-v1-56f6855586-dplsf 1/2 Running 0 1m reviews-v2-65c9df47f8-zdgbw 1/2 Running 0 1m reviews-v3-6cf47594fd-cvrtf 1/2 Running 0 1m 如果从来都没有注意过 READY 这一列的话,我们大概会有两个疑惑:2 在这里是什么意思,以及 1/2 到底意味着什么。 简单来讲,这里的 READY 列,给出的是每个 Pod 内部容器的 Readiness,即就绪状态。每个集群节点上的 kubelet 会根据容器本身 Readiness 规则的定义,分别是 tcp、http 或 exec 的方式,来确认对应容器的 Readiness 情况。 更具体一点,kubelet 作为运行在每个节点上的进程,以 tcp/http 的方式(节点网络命名空间到 Pod 网络命名空间)访问容器定义的接口,或者在容器的 namespace 里执行 exec 定义的命令,来确定容器是否就绪。 ...

June 2, 2020 · 4 min · jiezi

神结合一招玩转K8s和微服务治理

发布会传送门 进入直播间还有好礼等你拿! EDAS产品免费试用:https://www.aliyun.com/activity/middleware/edaspromotiononmay 首届云原生编程挑战赛正式开战!立即报名瓜分330000现金奖:https://tianchi.aliyun.com/specials/promotion/cloudnative#problem-definition 观看《云原生架构师培训课程》领取新用户折扣:https://yqh.aliyun.com/live/AlibabaCloudNative 云原生的发展速度日新月异,要用好却绝非轻而易举,当开发者开始使用云原生或向云原生架构迁移时,往往会面临一些困境: 第一,云原生对于软件产品存在约束,如必须满足容器化,12要素等,因此要让一个遗留系统适配云原生体系,不免会需要做一些改造,其中甚至会涉及到开发模式的转变,对部分团队而言,转变的过程可能充满挑战。第二,K8s复杂性足以让很多开发者望而却步,而只有对其有较好的掌握才能发挥好云原生带来的优势,否则可能导致系统难以维护,甚至因错误的配置引发故障。而让开发者的技术水平紧跟K8s的发展速度,这本身也需要持续投入,这些额外的投入也背离了让开发只关注业务的初衷。第三,虽然开源社区给云原生贡献了丰富的能力组件,但对于线上业务,尤其是企业级的服务来说,开源组件的性能,可靠性和可维护性能否经得住考验,以及运维团队是否有能力对这些开源组件兜底,这也是在技术选型前所必须做的考虑。总之,了解云原生和K8s只是开始,想要将云原生在业务落地,发挥云原生的价值,选择一条合理的“原生化”路径,才是开发者要关注的核心问题。 阿里巴巴对于云原生的运用起步很早,对于在具有大规模,高可靠和分布式特征的系统上应用云原生技术有丰富经验。EDAS作为出品自阿里巴巴云原生团队,阿里云上aPaaS的旗舰产品,在早期也提供了容器和K8s的支持能力。近期随着EDAS 3.0版本的重磅发布,更是将云原生融入了EDAS的功能核心,致力于帮助业务进行云原生落地,立足云原生平台打造更强大的应用管理能力,释放技术红利,服务广大开发者。 下文将通过一些示例,带领大家一窥究竟,看EDAS如何帮开发者“躺着”进入云原生时代,玩转云原生。“纯粹”的云原生 无法否认,EDAS是阿里云平台上的商业化产品,而云原生主要由开源社区所倡导,两者显然出自泾渭分明的两个阵营,那“纯粹”是在掩耳盗铃? 其实不然,商业化与开源并非水火不容,相反在很多领域他们总是相辅相成,这个话题并非本文关注的重点,若抛开“出身”的因素,我们理解的“纯粹”指的是: 在原生的体系下,对资源进行组合和抽象,抽象后的资源也不脱离原生体系不侵入,不限制,不破坏已有云原生资源的使用约定得益于K8s的开放性,EDAS实现的原理并不复杂,用户只需要在K8s配置资源(应用),通过声明式的配置将其置于期望的状态上,EDAS就能感知变更,自动维护并调整状态,使其最终与用户期望一致,从而达到管控应用的目的,这一切并不需要修改K8s的版本,只需要安装EDAS提供的扩展即可。 下面从两方面来具体介绍EDAS的做法和因之带来的优势。 云原生应用定义 前文提到,EDAS将应用抽象成了资源,这个过程中,应用定义的设计是至关重要的。在声明式的规则下,应用定义需要能覆盖软件生命周期过程中每个主体的配置,状态和关系的描述,并保证良好的可读性,因此,它必须归纳自大量应用,复杂场景和长久维护的经验总结,也只有这样才能保证定义不脱离实际,能被高效的推演到其他应用上。 EDAS没有重复造轮子,选择了“开放应用模型(OAM)”这一开放标准来作为应用定义,并选择与之共建的方式来丰富标准的内容。可以说,EDAS是OAM在阿里云上的一个实现。 对于开发者来说,EDAS使用OAM提供了两大好处: OAM消除了厂商平台对开发者的绑定,虽然不同平台能支持的运维特征以及底层实现方式各部相同,但只要厂商都遵循同样的标准,同一份应用配置是可以在不同的平台之间进行迁移的。因此对于EDAS上产生的应用,是可以被迁移到其他同样遵循OAM规范的平台的,针对其他平台迁移EDAS的场景也同理。OAM隐藏了特定的底层workload类型,通过更高的抽象层次避免了直接操作底层K8s的复杂性,提供了独立的ApplicationConfiguration资源,通过对Component(组件)配置Trait(运维特征)来施加不同的运维能力,Component和Trait的设计较好的分离了开发和运维团队的关注点,让应用生命周期中的配置和协作工作变得更为简单。由于ApplicationConfiguration也是K8s自定义资源(CR),所以开发者可以直接使用kubectl工具对其进行增删查改操作,EDAS遵循K8s面向终态的设计原则,最终将应用调整到预期的状态,对开发者来说操作应用与操作常规的Deployment资源并没有差异,也可以非常方便的与其他CI/CD工具或者GitOps工作流相集成。 下面给出了一份EDAS的应用yaml示例片段,通过kubectl apply这样一份配置即可创建一个用指定Jar包部署的EDAS应用: apiVersion: core.oam.dev/v1alpha1 kind: ApplicationConfiguration metadata: name: helloedas namespace: default spec: components: componentName: stateless-component instanceName: group-1 parameterValues: name: packageVersion value: '{"buildPackageUrl":"http://demo.oss-cn-hangzhou-internal.aliyuncs.com/prod/demo/SPRING_CLOUD_PROVIDER.jar","showName":"2020-05-07 20:20:18","type":"war","url":"http://demo.oss-cn-hangzhou-internal.aliyuncs.com/prod/demo/SPRING_CLOUD_PROVIDER.jar"}'name: artifactFormat value: FatJarname: softwareComponents value: '[{"componentId":"5","componentKey":"Open JDK 8","createTime":0,"desc":"Open JDK 8","downloadUrl":"http://edas-hz.oss-cn-hangzhou.aliyuncs.com/agent/prod/files/jdk-8u65-linux-x64.rpm","expired":false,"id":"5","imageId":"","md5":"1e587aca2514a612b10935813b1cef28","type":"JDK","version":"8"}]'name: replicas value: "1"name: showName value: helloedasname: description value: ""traits:* name: rollout properties: * name: auto value: "true" * name: batches value: "1"* name: imagebuilder properties: * name: tag value: helloedas-1588854022 * name: registry value: registry-vpc.ap-northeast-1.aliyuncs.com * name: baseImage value: registry-vpc.cn-hangzhou.aliyuncs.com/edas\_unified/edas-openjdk:8-1.0 * name: timeout value: "900"Deployment编辑 ...

June 2, 2020 · 1 min · jiezi

联手友盟打造云上数据增长样板间-好兔视频成功逆势突围

前言:更多关于数智化转型、数据中台内容可扫码加群一起探讨 阿里云数据中台官网 https://dp.alibaba.com/index (作者:友盟+) “消费升级”是近年来的中国消费市场热门词汇,消费升级的同时也驱动了内容消费升级。在这样的大众消费市场下,一款主打技术类内容的短视频App——好兔视频应运而生。作为非BATT系的初创型企业,如何在竞争激烈的视频行业破局,实现逆风翻盘? 好兔视频选择牵手友盟+,深度融合行业应用大数据,建立设备质量分层等数据应用模型,帮助处于初创期的好兔视频解决数据应用、拉新、留存等运营难题,实现发展突围。 好兔视频瞄准了时下内容消费升级的大趋势,专注于精选实用小视频, 生活技能分享,希望给那些热爱生活的人提供一些高品质的内容,深受国内高知人群欢迎。 机遇与挑战并存,视频行业大数据壁垒亟待破局 互联网巨头掌控互联网应用和服务的绝大部分数据资源,BATT系App占据了用户使用时长的70%,不难发现数据规模马太效应越来越严重,中小型App开发企业难以靠一己之力突破互联网巨头的“数据霸权”。 这主要体现在以下几个方面:首先,中小型企业日活可能只有几十万到数百万不等,难以与BATT系应用的亿级数据集竞争;同时,中小型企业缺乏横向和纵向完整的用户画像,对于新推广的每个用户而言都是全新用户,冷启动硬伤凸显,难以做到千人千面的用户服务,而BATT系的用户画像已经非常完整,根据海量用户的产品矩阵,可以大概猜测出用户的收入、喜好等用户画像。 最关键的是,缺少大数据加持,中小型App经常会处于盲人摸象的状态,这是因为当前的网络应用已经不是一个数据孤岛,而是在不同行业或不同领域上相互依赖和关联,如果仅仅依靠单一垂直App获取单一局部数据集往往会导致认知偏差,而不是 站在一个全网数据下看待问题,导致你认为的通常并不是你认为的,就像盲人摸象一样。无法全面洞悉偏好,更无法进行精准化、个性化、智能化的内容推荐。 时长即数据,友盟云助力好兔视频数据短板变长板 时长即数据的发展背景下,中小型App要突破必须有数据能力加持,尤其需要关注天生的大数据短板,以谋求破局。为此,好兔视频携手友盟+,通过深度融合数据来解决视频应用所面临的行业痛点。 借助阿里云的PaaS平台,形成一个全域的行业应用大数据,建立好兔视频专属的大数据库,将数据短板转化为长板。在友盟云之上(集成领先的阿里云技术,将互联网企业业务数据与行为数据的无缝融合)打通好兔视频的业务数据与行为数据,使得好兔视频可以在“云上”进行建模和一系列计算,计算出可使用的标签并改善内容推荐机制,提升产品的使用体验。 此外,通过与友盟+的行为数据打通,好兔视频可以勾勒出完整的画像,减少认知偏差,为产品运营以及用户服务等方面提供数据支撑。比如,IN的数据包括了一些设备的使用时长、Push等信息,好兔视频可能自身无法获取到系统的数据,通过友盟+就能了解到设备的安装、价值等数据,实现对流失的预测分析,给用户提供最及时的视频内容。 精耕细作大数据富矿,赋能好兔视频构建拉新留存新通道 当下,经历了流量主导下的跑马圈地后,以精品化的内容策略撬动用户数据新增长,正在成为视频应用新的成长通道。然而,面对网络虚拟环境,单单凭借一个App的局部数据,一方面会导致用户认知偏差,容易把用户带偏。另一方面又要针对作弊、营销、非自然人的机器操作等方式做出应对方案,帮忙企业更好地专注核心业务用户体验本身。诚然,大数据的应用和服务创新成了解决视频行业痛点的关键。 在以往,传统型的数据服务需要大量的调研时间和成本,并且难以对原始数据进行二次开发利用,造成数据资源闲置,并加重中小企业的研发负担。在友盟云之上,好兔视频不仅能够更快捷地获取海量的数据资源,还能进一步挖掘数据背后的富矿。 例如,好兔视频能够通过“云上”平台数据模型对现有数据进行二次计算,一方面多维度洞察用户需求并构建完整用户画像,弥补与BATT四大巨头之间在用户画像上的差距,实现千人千面的智能化推荐,满足用户更加个性化的需求;另一方面可以通过数据风控,精准识别风险设备,实现对设备质量进行分层评估,促进用户与内容运营的良性互动,提升次日留存率。 值得一提的是,友盟+与好兔视频基于大数据所构建的设备质量分层评估模型,通过90天的设备日志检测全网的设备行为,多维度的指标衡量、地域、活跃、设备的可在线、累计渠道和黑名单等来评估数据质量,可将设备价值分为A、B、C、D四类设备。 从价值流上看,A类设备到C类设备的占比基本呈下降的趋势,但到了D类设备,也就是低价值设备,却有了一个提升。其实,D类设备所有的操作都更加类似于A类设备,也就是高价值设备。好兔认为这可能与线上是一个虚拟的环境有关,生活在社会顶层和社会底层环境的设备,在线上的行为可能是类似的,有待下一步分析。 在这种情况下,好兔如果单看一个应用内的局部数据,就容易导致认知的偏差,将用户导向机制引偏。同时,从不同分层设备应用内行为数据也能看出,作弊设备由于各项数据都非常高,特别是设备使用时长,可能超过高价值设备,对用户识别有较高的干扰。 通过友盟+的加持,好兔就能获取到视频分类的播放数据,从而更精准地识别作弊设备。可以看出,由于好兔主要提供生活技能类视频,价值越高的设备对好兔App提供的生活窍门、美食、百科、健康等内容的喜好就越来越高。只有作弊设备是特例,其播放数据相对比较平均,无法看出其喜好。凭借这一点,好兔就能比较明显地发现可能是设备的操作,避开用户引导的误区。 通过设备分层的数据融合实践,好兔视频得以全方位实现单一App无法做到的识别作弊设备或营销行为等非自然人操作方式,帮助好兔视频把所有的运营精力和营销精力集中在A类高价值设备,拉新和促活也有更明确的指标和有效的策略指导,开辟一条快速成长的新通道。 提升短视频应用的企业竞争力,大数据融合扮演着至关重要的角色。随着越来越多的大数据服务能力的开放和加持,友盟+不仅能够帮助视频应用实现更多的创新,而且在大数据的风控、精准营销以及用户运营服务上也能够更加精益求精,持续为中小型App企业提供技术支持。 未来,友盟+携手好兔视频所打造的深度数据融合“样板间”会被广泛应用于各行各业。 数据中台是企业数智化的新基建,阿里巴巴认为数据中台是集方法论、工具、组织于一体的,“快”、“准”、“全”、“统”、“通”的智能大数据体系。目前正通过阿里云数据中台解决方案对外输出,包括零售、金融、互联网、政务等领域,其中核心产品有: Dataphin,一站式、智能化的数据构建及管理平台;Quick BI,随时随地 智能决策;Quick Audience,全方位洞察、全域营销、智能增长;Quick A+, 跨多端全域应用体验分析及洞察的一站式数据化运营平台; 官方站点:数据中台官网 https://dp.alibaba.com

June 2, 2020 · 1 min · jiezi

安防视频监控行业新基建如何落地

“两会”期间, “新基建”(即新型基础设施建设)被频频提及,并且被首次写入《政府工作报告》,国家提出了对 "新基建" 的 2020 计划 ,具体指: 加强新型基础设施建设,发展新一代信息网络,拓展 5G 应用,建设充电桩,推广新能源汽车,激发新消费需求、助力产业升级。 作为“新基建”的重要内容,具有高速率、低时延、大带宽等特点的5G网络将迈入快速发展的新阶段。而随着5G网络的发展,一些相关行业也将随之出现变革。以视频监控行业为例: 首先,超高清视频时代到来 不断变化的市场需求使得视频图像逐步从标清、走向高清甚至超高清。5G网络技术的普及还将推进超高清视频的传输效率进一步提升,从而解决数据提取及进行分析应用时,因为图像的清晰度不够而无法使用的问题。 其次,智能化成为发展趋势。 人脸识别、行为识别、车牌识别、目标分类等人工智能算法的快速发展,使得安防智能化成为了近两年最为明显的一个发展趋势。 根据IDC的相关预测, AI摄像头将持续高速增长,并大量替换传统摄像头。智能视频监控技术近几年来被广泛研究并开始实际应用,通过将AI相关的视觉技术融入视频监控系统,可以对视频数据流进行图像处理、目标分析,实现自动检测、目标跟踪等目的,对视频监控系统进行实时控制,变被动监控为主动监控。在机场、高速公路等场景中,对于摄像头高清化的要求进一步提高,高清摄像头不仅提高日常工作的效率,同时也让机器视觉技术有了用武之地,进一步挖掘数据相关价值。 第三,混合云成为更好的落地方式。 以阿里云所提供的视频监控数据的云端直接存储解决方案为例。该方案针对安防行业大规模集中式或分布式存储需求而推出,提供存储虚拟化管理功能,将所有存储节点空间合并成一个存储虚拟池,对外提供海量存储空间管理。云存储管理解决方案的存储节点以云架构为基础,专注于视频、图片等文件的存储业务,集节点虚拟化、视频图片管理,结构化数据存储于一体,具有高性能、高可靠、高密度、高扩展性、高易用性等特点。 此外,阿里云同样支持混合云存储方式部署。线下采用标准化设备部署,并且与合作伙伴视频监控平台通过专线进行平台级联,视频数据直接存入云端对象存储中。在文件的生命周期管理上,文件定期删除动作可以由平台侧软件定期发起。当客户端需要调取历史视频回放时,首先查询线下平台对应设备录像信息,其次通过线下平台通过专线从阿里云存储中调取。 2019年,某市政府与阿里巴巴集团签署合作框架协协议,通过“人工智能+城市大脑”、区域互联网医疗和移动支付城市等多个合作项目,在数据基础设施、民生服务、城市治理、智慧产业等领域全方位开展合作,力争将该市打造成利用人工智能促进民生普惠、城市精治的全国典范。 在安防监控场景中,使用混合云存储阵列进行线下部署。 视频监控数据可以无缝写入阿里云混合存储产品,可实现云上云下的数据流转,云上无缝扩容。同时,不管在云上还是云下的存储数据,都可以无缝与阿里云AI产品地雀一体机、数据智能AI平台等无缝对接,进行智能分析。 首先,该方案可以做到成本以及时间上的节省。采用混合云方案,节省本地IDC机柜空间,降低用电功耗压力,数据无缝上云,进而大幅缩短存储项目扩容周期;在前期投入上,采用按月付费的方式减少资金压力;云上存储可保证高达12个9的可靠性,保证业务的连续运行。 其次,运用数据智能缓解城市建设中的焦点和难点问题,优化城市综合治理能力和公共服务水平;利用云计算、移动互联网、视觉人工智能、物联网等技术,在智慧旅游、安全校园、智慧城市、工业互联网、智能制造等领域开展合作。 事实上,技术推动的“新基建”改造早已开始。比如被人们广为熟知的杭州城市大脑,现在已经被全球23个城市所引进。在疫情期间,阿里云更是全力投入数字经济新基建,将阿里巴巴20年建设的技术能力带给全社会,帮助政府和企业建设面向未来的新型基础设施。

June 1, 2020 · 1 min · jiezi

5G边缘计算行业通识阿里云ENS技术演进之路

近日,阿里云杨敬宇在CSDN阿里云核心技术竞争力在线峰会上进行了《5G基础设施-阿里云边缘计算的技术演进之路》主题演讲,针对5G时代下,行业和技术的趋势、边缘计算产业通识以及阿里云边缘计算从过去到未来的技术演进之路进行分享。 5G+AI需求推动边缘计算不断向前 算力分布形态发生根本变化 回顾历史,自从1994年接入互联网,已经有20多年的时间,从应用场景看,终端从PC时代走到了移动时代,也包括电视、摄像头、IoT等终端。而背后的基础设施也从早期的自建服务器,到当前全站上云这种模式。整体看来,网络架构是云、端两层架构。 当5G来临,消费互联网逐渐向产业互联网延伸,物联网、工业互联网、车联网、医疗健康、在线教育、企业远程视频会议等大带宽、低时延、大流量的场景被激活,原有的云、端两层网络架构很难满足新的产业互联网之下对低时延、低成本以及本地化计算的需求,这就促成了边缘计算出现的第一波应用。与此同时,5G的一个关键特性是,与2G、3G、4G的管道形式不同,5G允许在基站或者网络中的任何位置进行分流,所以5G也为边缘计算提供了技术上的可行性。以上两点,是边缘计算在5G时代走上风口的最核心原因。 在云、端两层网络架构中,计算要么发生是在云上,要么在手机、PC、电视机等终端上面,随着IoT万物智联的普及,工业互联网、车联网、智能家居、智慧城市、自动驾驶、云办公、3D视频等新型的产业应用出现之后,全部的计算发生在云端可能无法满足时延要求,而全部发生在端侧,对端的要求又比较高。 所以,计算从原本的云端两层结构,逐渐迁移到基站以上和云以下的位置,在城市这样的位置实现距离与效率的平衡,演变成云、边、端三层结构,这将是未来主流的计算分布形态。 杨敬宇: 2020年是划时代的一年,是从消费互联网走向产业互联网的转折之年,也是边缘计算领域真正乘风而行的一年,期待5G边缘计算能够规模商用和真正落地。 边缘计算行业通识:技术架构、产业协同与应用场景 前面也提到,5G原生支持在通信管道内分流做边缘计算,技术上具备了计算下沉到基站的可能性。也就是,在4G之前,在通信网络中一头是端,一头是云。如果把通信网络比作一条高速公路,它是没有服务区的,所有的信息流都是从这条高速公路上流转运行。5G有一个非常好的特性,就是允许在高速公路上修建服务区,当信息在基站的位置,就可以把它分流出来进行本地计算,可以在社区网格、街道乡镇、地市区县、省会城市等等整个通信网络的任何一个位置实现计算。 在场景方面,未来沉浸式消费计算和产业互联网会涌现大量的“低时延高可靠/大带宽/大连接,低成本,属地化”等边缘计算需求。未来5G边缘计算有一些产业应用会大量的涌现。同时,终端的计算上云,比如云游戏、云桌面等应用场景,不管是对用户的成本,还是企业和设备的成本与维护来讲,都是最佳的状态。 边缘计算产业上下游有众多参与者,主要包括运营商、云厂商、专业服务厂商以及设备和芯片商等,分别从各自的优势来为边缘计算产业发展提供助力。 云厂商一直提供一种按需付费的云服务,随着产业互联网的到来,云厂商会结合边缘计算将云服务进一步延伸和拓展,大型、集中的计算还是交由云中心来完成,对于时延、成本、本地化计算有强需求的则放在边缘来完成。于运营商来讲,边缘计算是在运营商的城域网或5G核心网、基站等位置去计算,计算就发生在运营商的整个网络体系里面,无论是国外还是国内的三大运营商,目前对边缘计算的投入都是非常大的。而专业服务厂商包括一些CDN厂商,他原来定义的计算其实是放在地级市这种IDC之中,还不是严格意义上的通信互联网的边缘,同样也是一种边缘。另外,边缘计算之中有一部分是设备,比如在网关领域做边缘计算,这就涉及到了设备商和芯片厂商的领域了。 现阶段边缘计算的应用场景大约分两大类,一类是需要在全国各地,甚至全球各地去部署这种分布式计算资源,典型应用就是CDN内容分发网络,它其实就是在分布式节点上去提供内容缓存与转发。未来在线教育、在线会议和其他场景也是分布式互联网应用的核心场景。另外一类就是产业应用,对计算有本地化、低时延的诉求,可能在10公里、百公里范围内就要完成计算,比如视频汇聚、智慧园区等等场景。 边缘节点服务:开放、标准、灵活、易用的边缘云操作系统 谈到公共云与边缘云的区别以及边缘云的主要技术特征和挑战,杨敬宇认为主要有四点。 第一,公共云与边缘云都是大规模,但是规模属性不同。公共云是中心式的大规模的云,通常由少量的大资源去构成,而边缘计算通常是由大量的小节点组成。同时,从技术上来讲,公共云的整个的保障体系、机房、电力、网络环境和边缘云所处环境是不太一样的,所以边缘云与公共云的建设、资产管理逻辑都有所不同,这也是它非常大的一个挑战。 第二,边缘云并不是每1个小节点是一朵云,杨敬宇所认为的边缘云,是上万个节点或者上百万的节点组成的一朵云。所以边缘云是需要基于不可靠互联网的形成集中管理、统一调度的,甚至当边缘节点出现网络中断的时候还能够脱网自治。 第三,边缘计算要承接物联网、车联网各种各样的网络连接需求,所以边缘计算要解决如何去做5G网络分流的问题,包括计算什么样的流量需要分流,分流计算完之后又该怎样录流,它不是简单的提供一个计算服务,而是要云网一体的去提供给客户去使用。 第四,从客户的使用方法上来讲,以往公共云大家习惯的方式是:买一个region、几台机器,还有一个IP,就会知道它在哪里。但是边缘计算如果沿用这样的形式其实是可能会是一个灾难。 杨敬宇做了个恰当的比喻:实际上,使用边缘计算就应该像我们使用电话一样,当电话的时候我一定会使用一个4G或一个基站,甚至当开车的时候,手机连着基站还是会不断发生变化,但是作为使用者并不会关心基站在什么位置,我只是享受了打电话这个服务,我希望服务对我而言是无感的。所以,对于这种大规模边缘计算基础设施来讲,不是简单地去卖用户一个一个节点的计算能力,而需要考虑如何提供给用户一个在体验上更加无缝、在成本上有极大帮助的这么一套计算体系。我们一直将ENS比喻成一个操作系统,操作系统它的特点就是我的应用程序是基于进程、线程来使用CPU和内存,用户不用关心这个程序到底在CPU的哪个核上以及它用哪个时间片去计算。所以,ENS操作系统要做的就是算力的管理以及算力的无缝使用,这是比公共云更难处理的一部分。 如上图所右侧示,阿里云ENS最底层仍然是各种各样的基础设施,基于这个基础设施以及阿里云的虚拟化、以及在网络计算存储安全方面的技术沉淀,在上面形成一个大规模、分布式的未知未知无感的、屏蔽底下资源差异、规模差异和使用差异的一个边缘云操作系统或者边缘计算平台。通过能力的开放以及运维联动,为上层应用提供了一套更便于使用的基础设施。 阿里云是从2017年开始进行技术上的打磨,并且基于遍布全球的CDN节点去改造为边缘计算节点,经过2年的发展,在2019年时,阿里云边缘计算其实做到了中国300多个地级市的全域覆盖,将计算的时延控制在10毫秒以内。也就是当用户去看视频,可能25帧的视频需要播放40毫秒,那么10毫秒就会让用户的视觉上毫无换帧的感知,对于云游戏、云桌面等应用,可以在时延上得到极大的满足。 边缘计算的概念近几年十分火热,但是各家在理解定义上,包括所实现的技术栈上,还是存在一定的差距。为了边缘计算行业积极良性的发展,阿里云在行业标准化方面也投入了大量的精力。2018年12月,阿里云牵头发布了边缘云白皮书,在行业内首次定义了边缘云计算的概念。在2019年9月的云栖大会上,阿里云联合20多家单位对边缘云计算的通用技术要求标准进行发布,同时在12月份,阿里云也获得了由中国电子技术标准化研究院颁发的首批《边缘云标准符合性测试证书》,也意味着阿里云在推进边缘云领域标准化建设上更进一步。 杨敬宇认为:阿里云边缘计算是要构建城市计算,也就是以地级市为单位的去逐渐部署边缘云基础设施,为阿里巴巴经济体与行业客户的各类应用落实到边缘云提供助力,去赋能5G时代万物智联的智慧城市生活更快来临。

June 1, 2020 · 1 min · jiezi

引领开源新风潮阿里巴巴编程之夏第二期重磅来袭

“唯有热爱,可抵岁月漫长”。 2020 年 5 月 25 日,阿里巴巴编程之夏(Alibaba Summer of Code,以下简称 ASoC )第二期正式上线,项目规模再度升级,来自开源社区的 Apache Dubbo、Apache RocketMQ、Dragonfly、Nacos 等明星开源项目多达 20 个;导师阵容配置豪华,来自阿里巴巴集团的技术专家、开源社区核心成员、Apache 孵化器导师等多达 32 位;领域涉及微服务、容器、AI 等多个热点方向,旨在联合开源社区打造诚意满满、公平公正的开源实习平台,以阿里巴巴开源技术力量为“推手”,让中国开源社区和开发者精英受到世界范围内的认可。 阿里巴巴于 2019 年举办了首届 ASoC,开启了中国企业在国际开源实习的新风潮,拉动了高校学生投身开源社区共建的极大热情。与受美国国家法案限制的 GSoC 不同的是,ASoC 申请人不限国籍,面向对象为全球年满 18 周岁的高校学生群体,本科生、硕士和博士研究生均可申请。只要是通过最终评估的学员,均可获得与阿里巴巴实习生同等的奖学金,并有可能获得阿里巴巴技术大神面授的机会。 (编程之夏开源项目一览) 1. 谁适合报名 脑洞巨大、想法多多、动手能力强、编程一级棒,既能仰望星空又能脚踏实地的热血青年。 2. 你将有机会获得 一笔丰厚的奖学金;一条进入阿里云的绿色招聘通道;一个具有重要价值的开源贡献者证书;一份参与国际开源基金会顶级项目的难得经历;这些收获,不仅仅是未来求职简历上浓墨重彩的一笔,更是向高阶开源贡献者晋级的闪亮起点。 (导师授予学员开源贡献者证书,阿里巴巴副总裁、阿里开源开放委员会委员长贾扬清致辞) 3. 活动流程 ASoC 活动日期为 2020 年 5 月 25 日 - 9 月 5 日,学生可以利用暑期时间参与到开源项目中,全程线上协作,无需线下参与。 05-25,查看开源项目 idea list 并提交提案;06-30,零点截止提交提案,只接收官网申请;07-07,公布入选名单,以收取确认邮件为准;07-12,项目启动,须保证每周 40 个小时的 coding 工作;08-01,项目中期评估,导师在线保驾护航;08-28,项目最终评估,综合打分多维评估;08-31,宣布最终结果,公布结业名单;09-05,结业典礼,更多惊喜。4. 报名方式 ...

June 1, 2020 · 1 min · jiezi

DSW面向AI研发的集成开发平台

发布会传送门 产品详情 云原生技术,注重用户体验,提升研发效率 环境搭建是算法研发过程中的重要一环,这里除了硬件选型外,软件环境的安装配置,后续升级往往会耗费不少时间。DSW借助阿里云ECS,Docker和Kubernetes等云原生技术,能够在2,3分钟内帮用户完成环境搭建。用户可以根据算法需要和成本考虑, 选择阿里云ECS提供的包括CPU和异构计算GPU在内的所有资源规格。不仅支持预付费,还支持后付费。 DSW还配置了10多种适用于不同AI场景的典型软件环境配置, 包括Tensorflow和PyTorch等主流训练框架的不同版本组合,供用户选择。作为高度开放的开发环境,DSW开放sudo权限给用户、支持任意第三方库安装。 为了满足不同水平层次和开发习惯的算法用户,结合可视化,交互式编程和命令行输入,DSW提供了3种编程入口:WebIde适用于工程化要求比较高的项目;JupyterLab适用于快速POC试验;Terminal入口可用于快速执行Shell命令,运行程序和简单的编辑等。 DSW还开发和预装了各种JupyterLab和WebIDE插件, 比如广受深度学习开发者喜爱的可视化工具Tensorboard,用户在DSW内通过Launcher,Commands打开,甚至还可以使用%tensorboard魔法命令直接在Notebook中开启等多种方式使用Tensorboard。不仅支持本地文件,还可以打开存放在OSS,ODPS里的训练日志。针对算法同学使用Python比较多的特点, DSW的WebIDE内安装了Python插件, 可以直接在浏览器内在线调试,单步跟踪程序运行。用户还可以根据需要,自主安装需要的任意插件。 DSW支持多种数据源读写,包括NAS, OSS,云盘和MaxCompute,尤其是内置了dswmagic魔法命令可以让用户在ipynb文件中使用SQL语句读写MaxCompute表中数据,预置的SQL编辑器支持语法高亮、智能提示、自动补全等功能,还支持运行带变量替换功能的Sql脚本。查询结果自动以最友好的图形化展示。 为了节省资源成本,用户可以利用停机不收费功能,在实例闲置不用时关机保存环境, 需要时再一键快速恢复。此外, DSW支持用户自定义镜像安装,可以基于之前保存或定制的环境创建实例。 DSW在公有云上支持了多次百队以上规模的天池大赛,在阿里集团内同样也承接着比赛,经过千锤百炼,证明不仅适合个人和团队研发,也支持大规模算法竞赛和教育培训。 安全性和稳定性是用户比较关心的问题,DSW使用的计算,存储和网络资源,完全是使用用户自己的账号购买,并部署到用户自己的vpc内部, 可以方便与用户其他数据打通。用户间完全隔离,还具备非常好的安全性。基于阿里云ECS和容器服务, 稳定性有保障。 集成PAI的各能力组件,加速业务落地 身为PAI这个大家庭的一员, DSW除了完成单机开发训练功能之外, 还内置部分PAI的基础能力。比如用户可以直接在实例内利用PAI视觉类算法包EasyVision进行图像分类训练评估、预测; 通过自动调参AutoML进行算法超参数自动调优;用户甚至能够无感知的享受PAI编译优化算法组件TAO提供的训练过程中的算子优化。最后, DSW还提供了供算法直接读取MaxCompute表数据的CommonIO组件,支持TableRecordDataSet, TableReader,TableWriter等标准接口,方便训练程序直接提交到PAI的分布式训练集群。 可以预见,在不久的将来, 会有更多的PAI算法包内置进DSW基础镜像内。 DSW也会依赖PAI SDK,围绕数据读取,加工,模型训练, 模型管理以及在线服务等AI研发生产流程的关键环节,为用户提供像Pipeline搭建,调度和管理之类的一条龙服务。

May 29, 2020 · 1 min · jiezi

阿里云机器学习PAI-DSW-20-Alink商业版重磅发布

DSW 2.0:面向AI研发的集成开发平台 DSW(Data Science Workshop)是阿里巴巴PAI团队根据多年的AI算法和产品研发经验积累,围绕提高AI算法研发效率,降低研发成本而推出的一款适用于各类AI开发者的云端机器学习集成开发环境。DSW2.0是借助阿里云ECS,Docker和Kubernetes等云原生技术,能够在几分钟内帮用户完成环境搭建,相对DSW1.0开放更高的开发权限,满足各个层面客户的使用需求。 云原生架构DSW借助阿里云ECS,Docker和Kubernetes等云原生技术,能够在几分钟内帮用户完成环境搭建。用户可以根据算法需要和成本考虑,选择阿里云ECS提供的包括CPU和异构计算GPU在内的所有资源规格。 满足不同层次开发习惯结合交互式编程和命令行输入,DSW提供了三种编程入口: WebIde适用于工程化要求比较高的项目;JupyterLab适用于快速POC试验;Terminal入口可用于快速执行Shell命令,运行程序和简单的编辑等。 预装丰富插件DSW还开发和预装了各种JupyterLab和WebIDE插件,比如广受深度学习开发者喜爱的可视化工具Tensorboard,用户在DSW内通过Launcher,Commands打开,甚至还可以使用%tensorboard魔法命令直接在Notebook中开启等多种方式使用Tensorboard。不仅支持本地文件,还可以打开存放在OSS,ODPS里的训练日志。针对算法同学使用Python比较多的特点, DSW的WebIDE内安装了Python插件,可以直接在浏览器内在线调试,单步跟踪程序运行。用户还可以根据需要,自主安装需要的任意插件。 支持多种数据源读写NAS, OSS,云盘和MaxCompute,尤其是内置了dswmagic魔法命令可以让用户在ipynb文件中使用SQL语句读写MaxCompute表中数据,预置的SQL编辑器支持语法高亮、智能提示、自动补全等功能,还支持运行带变量替换功能的Sql脚本。查询结果自动以最友好的图形化展示。 Alink:流批一体机器学习算法平台 Alink拥有丰富的批式算法和流式算法,能够帮助数据分析和应用开发人员能够从数据处理、特征工程、模型训练、预测,端到端地完成整个流程。Alink提供的功能算法模块中,每一个模块都包含流式和批式算法。比如线性回归,包含批式线性回归训练,流式线性回归预测和批式线性回归预测。另外,Alink算法覆盖分类、回归、聚类、评估、统计分析、特征工程、异常检测、文本、在线学习、关联分析等经典领域,是一个通用的机器学习算法平台。 算法性能我们从下图中可以看出在回归算法中,Alink算法性能最高优于Spark 1.38倍;分类算法中Alink大多数算法性能优于Spark,最高优于2.52倍;聚类算法Alink算法性能最高优于Spark 1.85倍;协同过滤Alink算法性能最高优于Spark 2.26倍。 Flink VS Spark算法性能 更友好的交互式体验我们提供两种用户使用界面:web和PyAlink。Web界面提供拖拽的方式创建试验,通过对每一个组件进行配置完成整个试验的参数配置。在各个算法节点旁,我们用闪烁的小灯泡?表示“运行中”的状态,用对勾✅表示“运行完成”的状态。一般情况下,只有批式(batch)组件才有可能运行结束。基于各个组件的运行状态,可以十分方便地判断当前实验运行到了什么程度。 同时为了满足脚本用户的需求,我们提供了PyAlink on notebook,用户可以通过PyAlink的python包使用Alink。PyAlink支持单机运行,也支持集群提交。并且打通Operator(Alink算子)和DataFrame的接口,从而使得Alink整个算法流程无缝融入python。PyAlink也提供使用Python函数来调用UDF或者UDTF。 阿里云机器学习PAI是覆盖人工智能全链路的产品家族,自上线以来,受到广大AI开发者的喜爱,经过千锤百炼,证明不仅适合个人和团队研发,也支持大规模算法竞赛和教育培训。本次重磅发布的PAIDSW2.0和商业版Alink致力成为最懂用户的轻量化AI服务,包含数据处理、建模、训练、模型优化、在线预测等多种产品版块,为用户提供一站式体验服务。 发布会传送门 产品详情www.aliyun.com

May 29, 2020 · 1 min · jiezi

Flink-作为现代数据仓库的统一引擎Hive-集成生产就绪

在2020年,你的数据仓库和基础设施需要满足哪些需求? 我们总结了几下几点: 首先,当下的企业正快速转向更实时化的模式,这要求企业具备对线上流式数据进行低延迟处理的能力,以满足实时(real-time)或近实时(near-real-time)的数据分析需求。人们对从数据产生到数据可用之间延迟的容忍度越来越低。曾经几个小时甚至几天的延误不再被接受。用户期待的是几分钟甚至几秒钟的数据端到端体验。 第二,数据基础设施需要具备同时处理线上和线下数据的能力,两种模式在实际应用中都不可或缺。除了上面提到的流处理,用户也需要批处理做即席查询(ad-hoc query)和数据挖掘。数据基础设施不应该要求用户二选一,而应该提供两个选项并且都是高质量的。 第三,数据工程师、数据科学家、分析师和运维人员都在渴望一套统一的数据技术栈,以便更轻松的使用。大数据领域的技术栈已经支离破碎很多年了,企业可能有一套流处理系统,一套批处理系统,一套线上数据分析系统。这基本都是由于当年流处理框架不够成熟而被迫采用过时的 lambda 架构造成的问题。现在不同了,流处理已成为主流,终端用户不必再学习多种技能和维护各种复杂的工具和数据处理管道(data pipeline)。用户渴望的是一套统一的简单易学易维护的方案。 如果你对以上问题深有同感,那说明这篇文章很适合你。我们来看看如何真正解决这个问题。 接下来我将带各位了解下 Flink 与 Hive 生产级别的整合工作。 Flink 与 Hive 生产级整合Flink 一直遵循“ 流优先,批是流的一个特例”的思想理念。在这一思想的指导下,Flink 将最先进的流式处理技术运用到批处理中,使得 Flink 的批处理能力一早就令人印象深刻。特别是在 Flink 1.10 中我们基本完成了从1.9开始的对 Blink planner 的整合工作后,Flink SQL 的批处理能力更上一层楼。 Hive 在大数据生态中已成为标准的数据仓库组件。它不仅仅是一个 SQL 引擎,也是一个数据管理系统。但由于自身的局限,Hive 在当下面临很大的挑战,也无法满足的用户需求。 基于此,我们从 Flink 1.9 推出了 Flink 和 Hive 整合的 beta 版本。在过去几个月中,我们基于用户的反馈,在各个方面都对产品进行了加强。我很高兴的宣布,Flink 和 Hive 的整合在 Flink 1.10 版本中能实现生产可用! 下面来为大家介绍一些细节。 统一的元数据管理Hive Metastore 已逐渐成为 Hadoop 生态中元数据管理的中枢。很多公司都用 Hive Metastore 管理他们的 Hive 甚至非 Hive 的元数据。 ...

May 29, 2020 · 1 min · jiezi

从零入门-Serverless-架构的演进

作者 | 许晓斌 阿里云高级技术专家 本文整理自《Serverless 技术公开课》第 1 讲,点击开始学习。 关注 “Serverless” 公众号,回复 入门 ,即可获取 Serverless 系列文章 PPT。 传统单体应用架构 十多年前主流的应用架构都是单体应用,部署形式就是一台服务器加一个数据库,在这种架构下,运维人员会小心翼翼地维护这台服务器,以保证服务的可用性。 (单体架构) 随着业务的增长,这种最简单的单体应用架构很快就面临两个问题。首先,这里只有一台服务器,如果这台服务器出现故障,例如硬件损坏,那么整个服务就会不可用;其次,业务量变大之后,一台服务器的资源很快会无法承载所有流量。 解决这两个问题最直接的方法就是在流量入口加一个负载均衡器,使单体应用同时部署到多台服务器上,这样服务器的单点问题就解决了,与此同时,这个单体应用也具备了水平伸缩的能力。 (单体架构-水平伸缩) 微服务架构 1. 微服务架构演进出通用服务 随着业务的进一步增长,更多的研发人员加入到团队中,共同在单体应用上开发特性。由于单体应用内的代码没有明确的物理边界,大家很快就会遇到各种冲突,需要人工协调,以及大量的 conflict merge 操作,研发效率直线下降。 因此大家开始把单体应用拆分成一个个可以独立开发、独立测试、独立部署的微服务应用,服务和服务之间通过 API 通讯,如 HTTP、GRPC 或者 DUBBO。基于领域驱动设计中 Bounded Context 拆分的微服务架构能够大幅提升中大型团队的研发效率。 2. 微服务架构给运维带来挑战 应用从单体架构演进到微服务架构,从物理的角度看,分布式就成了默认选项,这时应用架构师就不得不面对分布式带来的新挑战。在这个过程中,大家都会开始使用一些分布式服务和框架,例如缓存服务 Redis,配置服务 ACM,状态协调服务 ZooKeeper,消息服务 Kafka,还有通讯框架如 GRPC 或者 DUBBO,以及分布式追踪系统等。 除分布式环境带来的挑战之外,微服务架构给运维也带来新挑战。研发人员原来只需要运维一个应用,现在可能需要运维十个甚至更多的应用,这意味着安全 patch 升级、容量评估、故障诊断等事务的工作量呈现成倍增长,这时,应用分发标准、生命周期标准、观测标准、自动化弹性等能力的重要性也更加凸显。 (微服务架构) 云原生 1. 基于云产品架构 一个架构是否是云原生,就看这个架构是否是长在云上的,这是对“云原生”的简单理解。这个“长在云上”不是简单地说用云的 IaaS 层服务,比如简单的 ECS、OSS 这些基本的计算存储;而是应该理解成有没有使用云上的分布式服务,比如 Redis、Kafka 等,这些才是直接影响到业务架构的服务。微服务架构下,分布式服务是必要的,原来大家都是自己研发这样的服务,或者基于开源版本自己运维这样的服务。而到了云原生时代,业务则可以直接使用云服务。 另外两个不得不提的技术就是 Docker 和 Kubenetes,其中,前者标准化了应用分发的标准,不论是 Spring Boot 写的应用,还是 NodeJS 写的应用,都以镜像的方式分发;而后者在前者的技术上又定义了应用生命周期的标准,一个应用从启动到上线,到健康检查,再到下线,都有了统一的标准。 2. 应用生命周期托管 有了应用分发的标准和生命周期的标准,云就能提供标准化的应用托管服务。包括应用的版本管理、发布、上线后的观测、自愈等。例如对于无状态的应用来说,一个底层物理节点的故障根本不会影响到研发,因为应用托管服务基于标准化应用生命周期可以自动完成腾挪工作,在故障物理节点上将应用的容器下线,在新的物理节点上启动同等数量的应用容器。可以看出,云原生进一步释放了价值红利。 在此基础上,由于应用托管服务能够感知到应用运行期的数据,例如业务流量的并发、cpu load、内存占用等,业务就可以配置基于这些指标的伸缩规则,再由平台执行这些规则,根据业务流量的实际情况增加或者减少容器数量,这就是最基本的 auto scaling——自动伸缩。这能够帮助用户避免在业务低峰期限制资源,节省成本,提升运维效率。 本文总结 在架构的演进过程中,研发运维人员逐渐把关注点从机器上移走,希望更多地由平台系统管理机器,而不是由人去管理,这就是一个对 Serverless 的朴素理解。 作者简介 许晓斌,阿里云高级技术专家。目前负责阿里集团 Serverless 研发运维平台建设,在这之前负责 AliExpress 微服务架构、Spring Boot 框架、研发效率提升工作。《 Maven 实战》作者,曾经是 Maven 中央仓库的维护者。 【关注有礼】 关注 “Serverless” 公众号,后台回复 抽奖 ,将有机会获得“纽曼蓝牙音响”、“阿里云全自动定制雨伞”、“淘公仔”,5 月 25 日 10:00 开奖,快来试试运气吧! ...

May 29, 2020 · 1 min · jiezi

如何用一套引擎搞定机器学习全流程

作者:陈戊超(仲卓) 深度学习技术在当代社会发挥的作用越来越大。目前深度学习被广泛应用于个性化推荐、商品搜索、人脸识别、机器翻译、自动驾驶等多个领域,此外还在向社会各个领域迅速渗透。 背景 当前,深度学习的应用越来越多样化,随之涌现出诸多优秀的计算框架。其中 TensorFlow,PyTorch,MXNeT 作为广泛使用的框架更是备受瞩目。在将深度学习应用于实际业务的过程中,往往需要结合数据处理相关的计算框架如:模型训练之前需要对训练数据进行加工生成训练样本,模型预测过程中需要对处理数据的一些指标进行监控等。在这样的情况下,数据处理和模型训练分别需要使用不同的计算引擎,增加了用户使用的难度。 本文将分享如何使用一套引擎搞定机器学习全流程的解决方案。 先介绍一下典型的机器学习工作流程。如图所示,整个流程包含特征工程、模型训练、离线或者是在线预测等环节。 在此过程中,无论是特征工程、模型训练还是模型预测,中间都会产生日志。需要先用数据处理引擎比如 Flink 对这些日志进行分析,然后进入特征工程。再使用深度学习的计算引擎 TensorFlow 进行模型训练和模型预测。当模型训练好了以后再用 TensorFlow serving 做在线的打分。 上述流程虽然可以跑通,但也存在一定的问题,比如: 同一个机器学习项目在做特征工程、模型训练、模型预测时需要用到 Flink 和 TensorFlow 两个计算引擎,部署相对而言更复杂。TensorFlow 在分布式的支持上还不够友好,运行过程中需要指定机器的 IP 地址和端口号;而实际生产过程经常是运行在一个调度系统上比如 Yarn,需要动态分配 IP 地址和端口号。TensorFlow 的分布式运行缺乏自动的 failover 机制。针对以上问题,我们通过结合 Flink 和 TensorFlow,将 TensorFlow 的程序跑在 Flink 集群上的这种方式来解决,整体流程如下: 特征工程用 Flink 去执行,模型训练和模型的准实时预测目标使 TensorFlow 计算引擎可以跑在 Flink 集群上。这样就可以用 Flink 一套计算引擎去支持模型训练和模型的预测,部署上更简单的同时也节约了资源。 Flink 计算简介 Flink 是一款开源大数据分布式计算引擎,在 Flink 里所有的计算都抽象成 operator,如上图所示,数据读取的节点叫 source operator,输出数据的节点叫 sink operator。source 和 sink 中间有多种多样的 Flink operator 去处理,上图的计算拓扑包含了三个 source 和两个 sink。 ...

May 28, 2020 · 2 min · jiezi

终于要跟大家见面了Flink-面试指南

面试,一个令人大多数同学头疼的问题,要么成功进入心仪公司,要么沮丧与其失之交臂。但是,如果能在面试前就能知道面试官将会问的问题,然后可以好好提前准备,这种感觉是不是特别棒? 之前社区帮大家汇总了目前 15 家重量级公司的招聘需求更新在社区招聘帖,也收到了很多同学的反馈: “投了一堆简历,但是都没面试机会” “面试官说是想招高阶人才” “**哎,感觉像我这种毕业年限短, 公司又是小公司,本科也不太好的,找工作太难了**” 最后只能总结: “我不优秀,我连面试机会都没有” 也太南南南了! 那么究竟怎么积累技术实力,成为 Flink 高级开发,拿下心仪公司的 offer 呢?小松鼠征集了 Flink 用人主管的核心诉求并提供一份超级清晰、实用的学习路径。虽然我们都不会读心术,但破解面试难题也有思路可寻! Tips:2020 Flink 最新招聘信息查看请见下方链接,内推或有招聘需求的公司可联系小松鼠(微信ID:Ververica2019)投递 JD~ 2020 最新 Flink 招聘岗位汇总: https://juejin.im/post/5df9e25fe51d4557f5450274 01 了解用人主管的需求 在收集招聘信息时小松鼠了解到用人主管的核心需求以及面试了部分同学之后的感受,总结下来主要分为以下方面: 经验都偏少,缺乏复杂场景的历练在用 Flink 做数据开发,但没有底层修改经验想招比较高阶的对 Flink 底层有深入研究的同学,但是高阶的太难找需要有深入研究、改造经验的也可以,独立完成问题排查与任务调优请注意关键词!「复杂场景历练」、「底层修改经验」、「高阶」、「问题排查与调优」,这是当前大多数岗位对 Flink 开发同学的预期,相当于划重点呐!除了解用人主管的核心需求外,我们也需要结合自身基础,找对合适的岗位方向。 02 找对岗位方向 小松鼠总结了市面上大多数招聘内容,对这些岗位进行分析并整合,可以看到如下表格内容。总体上分为3个方向: (不完全统计,仅供参考) 众所周知,平台开发或底层引擎开发都需要对 Flink 有钻研精神,需要持续专注地深耕,对技术深度、技术原理掌握甚至是源码能力要求都较高。 相对而言,业务类的开发则更关注具体应用场景,大多是在平台的基础上进行业务场景的应用开发,对底层、源码的要求相对较低。 总体上,无论选择哪种技术方向,扎实的语言功底都是基础,而对开源社区的贡献、对 Flink 生态有深入了解等都将成为 blingbling 的加分项。 03 从小白到 Flink 高级开发,应该掌握哪些技术? 如果你了解到自己与用人主管的核心需求存在哪些差异,或者有自己倾向的岗位方向,那么恭喜你已成功完成心理建设。第三部分,小松鼠邀请了 Apache Flink PMC 程鹤群(军长)来帮大家解决“从小白到 Flink 高级开发,应该掌握哪些技术?”这个核心问题,此处感谢 Apache Flink PMC 伍翀(云邪)的反馈与建议。 首先,送你一份 X-mind!公众号后台回复关键字「面试」,可以下载 PDF 版本~ ...

May 28, 2020 · 1 min · jiezi

下一代云原生应用制品管理平台容器镜像服务企业版优惠进行时

随着越来越多的企业拥抱容器、拥抱云原生技术,享受技术带来的弹性、敏捷、可移植的便利,但是在实现容器技术生产落地时,很难规避以下痛点问题: 1、 运维复杂度:需要自建一个高可用的镜像服务去面对峰值流量等弹性场景,并且实时关注及时扩容;当面对全球多地域部署的场景,还要运维管理复杂的网络拓扑图。 2、 安全风险:容器具备有高密部署、高动态、自动恢复等一些特性,会给业务安全带来极大的挑战。 3、 生态闭环:容器镜像的托管、部署、运行时监控需要一整套的解决方案。 容器镜像服务企业版(ACR EE)将从四个维度解决以上痛点问题: 1、 云原生制品托管:提供多架构容器镜像托管支持,多版本Helm Chart的托管;提供从源代码到标准容器镜像构建服务,也支持海外构建、智能构建、自动化构建、多阶段构建等构建能力。 2、 多维度安全保障:提供制品加密存储;支持镜像安全扫描,多维度扫描保障镜像内容安全;此外提供镜像加签能力,保障整个镜像分发链路上的安全可信;细粒度网络访问控制管理,保障公网和VPC端网络下的访问安全。 3、 加速应用分发:覆盖在全球主要地域、提供多种同步策略和网络链路优化,保障镜像分发的高效、稳定、安全;单集群、多节点的场景下支持多种大规模分发。 4、 提效应用交付:DevSecOps全面升级;提供云原生交付链的能力,支持全链路可观测、可追踪、可设置;多种策略支持,保障安全交付。 企业版( ACR EE),是解决云原生应用制品安全托管与高效分发的最热方案,目前众多行业 Top 企业已在大规模使用。 选择容器镜像企业版(ACR EE),享受容器技术带来的便利的同时,轻松规避容器技术生产落地伴随的问题。活动期间新购享9.5折优惠,续费享9折优惠哟~(包年直享8.5折优惠) 产品购买传送门:https://www.aliyun.com/product/acr 优惠直享链接:https://common-buy.aliyun.com/?commodityCode=acr_ee_public_cn 了解更多 :https://help.aliyun.com/document_detail/60945.html

May 27, 2020 · 1 min · jiezi

开放下载OSS运维基础实战手册

作为一名云运维工程师,在攻克OSS的道路上难免会遇到"天花板"。放轻松,《OSS运维基础实战手册》帮你轻松解决!本书透彻解析OSS核心概念,十二心法打开全新运维视角,力求帮助云运维工程师们打破能力上升瓶颈。 本书兼顾理论与实践,通过讲授运维实战十二心法,以更加直观,具体的方式帮助读者快速上手,带领读者在本书中领略作者的缜密思路,并学会用这种思路来应对各种不期而遇的OSS难题。 《OSS运维基础实战手册》的作者,阿里云工程师韩笠,具有多年对象存储运维以及 SDK 开发经验,目前专注存储,SDK 调优领域。 点此下载电子书 本书秉承直观透彻、循序渐进、基础知识与案例实践紧密结合的讲授特色,手把手指导读者从零开始轻松入门OSS。 目录 1.OSS的五个核心优势 阿里云对象存储服务(Object Storage Service,简称 OSS),OSS 具有与平台无关的 RESTful API 接口,可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。本次电子书的第一章节就带大家揭秘oss的五个核心优势,快速入门oss。 2.简单易用,API 调配全掌握 OSS 支持 RESTFUL API 形式调用,基本上服务端控制台上的功能配置,都可以通过 API 完成配置操作。也可以通过 OpenAPI 对文件进行集群的管理,结果用户访问控制台(RAM policy)加强客户的安全屏蔽,文中对支持的API进行整合,轻松掌握API 调配。 3.6个基础名词带你入门OSS 掌握这六个产品名词, oss问题无处可藏 4.实操前须知的10项使用限制 了解实操前须知的10项使用限制,精准快速上手OSS 5.两大经典错误场景的镜像回溯 OSS 回源功能,也称镜像回源,本章节介绍两种主要功能,一种是 404 回源,另外是重定向回源 6.学会自动刷新配置,解决几十万用户存储问题 阅读本章节内容,教你在保证 CDN 缓存下的文件在原站(OSS)更新的情况下自动更新的方法。 7.5个场景全面了解跨域配置 经常遇到有跨域的问题,老生长谈,却又屡禁不止,谈到跨域我们就了解下它是什么? 8.不同场景下的OSS 事件通知功能实现 通过自定义关注的Object信息,第一时间掌握不同场景下的OSS 事件通知 9.如何兼得bucket policy简单易操作和精细权限粒度 本章节带你走近了解bucket policy ,揭秘其简单易操作和精细权限粒度的真相。 10.低价高效!OSS如何处理视频 媒体处理(ApsaraVideo Media Processing,原MTS)是一种多媒体数据处理服务。它以经济、弹性和高可扩展的音视频转换方法,帮助您将存储于OSS的音视频转码成适合在PC、TV以及移动终端上播放的格式。本章节分享OSS处理视频的秘诀。 11.动静分离——实现全站加速 全站加速(DCDN) 与 OSS 是常见的站点动静分离的方式,可以实现将静态资源存储在 OSS 上,并通过 DCDN 加速 OSS 实现静态资源的访问加速效果。如果是动态业务,可以通过最短路由上传回传; ...

May 27, 2020 · 1 min · jiezi

国际免费版-新冠疫情数据分析APP正式发布

简介 在今年2月初,SLS 已经发布针对新冠病毒肺炎疫情国内动态展示分析 APP,目前该能力全面开放给政府、社区、第三方平台和开放者进行广泛应用,完全免费开放。还没有关注过的同学可以通过以下链接了解背景: 新冠病毒疫情分析 APP 官方文档云栖博文、直播最近,随着新冠病毒肺炎疫情在全球爆发,SLS 又推出了跟踪关注全球范围疫情动态的分析大盘。与国内大盘主要关注国内疫情(数据来源于央视新闻、人民日报、各省市卫健委公告)相比,国际疫情大盘则是跟踪关注全球范围的疫情动态,数据来源是被国际上广泛引用的约翰·霍普金斯大学开源数据集。 SLS 阿里云日志服务(SLS)是针对日志类数据的一站式服务,无需开发就能快捷完成海量日志数据的采集、消费、投递以及查询分析等功能,提升运维、运营效率。日志服务主要包括实时采集与消费、数据投递、查询与实时分析等功能,适用于从实时监控到数据仓库的各种开发、运维、运营与安全场景。 作为日志分析中台,日志服务提供了一站式的数据采集、加工、查询分析、AI计算、可视化,并支持互联互通。 亮点 1. 提供规整的疫情数据,并每天定时同步更新 SLS 已经将疫情相关数据进行收集和规整,每天定时更新,并形成可视化平台覆盖全球各个国家/地区、省份/州的疫情信息。你只需要专注在数据的分析和展示,其它繁琐的细节 SLS 都已经处理好。 2. 预定义丰富数据大盘、并支持自定义 内置多份数据大盘并支持自定义提供全球各个国家/地区、省份/州疫情态势。支持交互式查询分析、自定义报表、深钻与告警等。 全球疫情态势概览 各国家/地区的疫情详情 3. 数据平台开放,互联互通 数据平台开放,互联互通日志服务是开放的,可以和大量其他环境的系统、三方应用或开源进行对接。提供易扩展的数据分析、存储、可视化平台能力,如DataV、Blink、OSS、流计算、Grafana、SOC等。 4. 完全免费 完全免费疫情服务应用以及相关资源数据,包括仪表盘、告警等功能完全免费。 数据 导入和规整 可能有一些同学只关注对 COVID-19 疫情的数据分析,也想要上手试一试,但是对于如何从各个数据源获取并处理数据不了解,又或者对 SLS 的 SQL 不是很熟练。为了帮助这部分同学方便快捷的实现数据分析,SLS 已经将疫情相关数据进行收集和规整,并且每天定时更新。你只需要专注在数据的分析和展示,其它繁琐的细节 SLS 都已经处理好。 数据样例 type: Country/Region Casesversion: v2020-04-17T11:55:36Last Update: 2020-04-09 01:12:20Country/Region: ChinaCountry/Region (ch): 中国LatLng: 35.000074,104.999927Confirmed: 83798Confirmed Hist: [644, 923, 1409, 2079, 2882]Confirmed Trend: {"2020-01-23": 644, "2020-01-24": 923, "2020-01-25": 1409, "2020-01-26": 2079, "2020-01-27": 2882}New Confirmed Hist: [95, 279, 486, 670, 803]New Confirmed Trend: {"2020-01-23": 95, "2020-01-24": 279, "2020-01-25": 486, "2020-01-26": 670, "2020-01-27": 803}Deaths: 3352Deaths Hist: [18, 26, 42, 56, 82]Deaths Trend: {"2020-01-23": 18, "2020-01-24": 26, "2020-01-25": 42, "2020-01-26": 56, "2020-01-27": 82}Recovered: 78556Recovered Hist: [30, 36, 39, 49, 58]Recovered Trend: {"2020-01-23": 30, "2020-01-24": 36, "2020-01-25": 39, "2020-01-26": 49, "2020-01-27": 58} ...

May 27, 2020 · 3 min · jiezi

扎心天天写代码方向真的对吗

“每个人的时间都是有限的,在有限的时间里选择一项值得投入的技术会变得尤为重要。” 笔者从 2008 年开始工作到现在也有 12 个年头了,一路走来都在和数据打交道,做过很多大数据底层框架内核的开发(Hadoop,Pig,Hive,Tez,Spark),也做过多年上层数据计算框架(Livy, Zeppelin)以及数据应用开发,包括数据处理,数据分析以及机器学习。现在是 Apache Member 以及多个 Apache 项目的 PMC 。2018 年加入阿里巴巴实时计算团队专注在 Flink 的研发。 今天我想结合自己过去的职业经历来聊聊如何评估一项技术是否值得学习。我一直在大数据这个圈子,从最初的 Hadoop 到后来的 Hadoop 生态项目 Pig,Hive,Tez,然后又到新一代的计算引擎 Spark ,再到最近在做的 Flink ,大数据计算引擎贯穿我的整个职业生涯。我个人来说是比较幸运的,在每个阶段都在做比较火的技术,当时更多的是凭着自己的兴趣和直觉在选择技术类型。现在回过头来看我觉得需要从下面 3 个大的纬度来评估一项技术是否值得学习。 1、技术深度 2、生态广度 3、进化能力 01 技术深度 技术深度是指这项技术的根基是否扎实,护城河是否够宽够深,是否很容易被其他技术所替代。通俗的来说就是这项技术是否解决了其他技术所不能解决的有重要价值的问题。这里有两个要点: 1、这个问题没有人能解,是这项技术首先解决了这个问题。 2、解决这个问题能够带来重大价值。 拿我职业生涯开始阶段学习的 Hadoop 为例。当时 Hadoop 刚出来的时候是一项革命性的技术,因为当时除了 Google 宣称自己内部有一套 GFS 和 MapReduce 系统外,业界其他公司都没有一套完整的海量数据解决方案。而随着互联网技术的发展,数据量与日俱增,处理海量数据的能力迫在眉睫。Hadoop 的诞生正好解决了这一燃眉之急。 随着技术的发展, Hadoop 的处理海量数据能力的优势慢慢被人习惯,相反 Hadoop 存在的缺陷被人不断诟病(性能差,MapReduce 编写复杂等等)。而这时候Spark应运而生,解决了 Hadoop MapReduce 计算引擎的顽疾。Spark 远超过 Hadoop 的计算性能以及极其优雅简单的 API 迎合了当时用户的需求,受到了广大大数据工程师的热捧。 现在我在阿里巴巴从事的是关于 Flink 的研发工作,主要原因是我看到了工业界对实时性的需求以及 Flink 在实时计算这个领域的霸主地位。之前大数据遇到的最大挑战在于数据规模大(所以大家会称之为“大数据”),经过工业界多年的努力和实践,规模大这个问题基本已经解决了。接下来几年,更大的挑战在于速度,也就是实时性。而大数据的实时性并不是指简单的传输数据或者处理数据的实时性,而是从端到端的实时,任何一个步骤速度慢了,就影响整个大数据系统的实时性。 在 Flink 看来, Everything is stream 。Flink 的以 Stream 为核心的架构是业界独一无二的,由此而产生的性能优越,高扩展性,端到端 Exactly Once 等特性,更是使得 Flink 在流计算领域是当之无愧的王者。 目前主流的流计算引擎有 3 个:Flink、Storm 和 SparkStreaming 。 ...

May 27, 2020 · 2 min · jiezi

阿里云专家赵伟教你在CDN边缘节点上构建多层纵深防护体系

网络安全态势严峻,常见的五大网络攻击风险类型赵伟认为,企业线上服务所面临的安全风险,主要来自以下五个方面: DDoS攻击DDoS攻击类型已有20多年历史,它攻击方式简单直接,通过伪造报文直接拥塞企业上联带宽。随着IoT等终端设备增多,网络攻击量也愈发凶猛。根据阿里云安全中心报告显示,在2019年,超过100G的攻击已经比较常见,而且超过 500G 的攻击也已经成为常态。一旦企业服务面临这种情况,上联带宽被打满,正常请求无法承接,就会导致企业服务无法正常提供线上服务。因此,防御DDoS 攻击依然是企业首先要投入去应对的问题。 CC攻击相比于四层DDoS攻击伪造报文,CC攻击通过向受害的服务器发送大量请求来耗尽服务器的资源宝库CPU、内存等。常见的方式是访问需要服务器进行数据库查询的相关请求,这种情况想服务器负载以及资源消耗会很快飙升,导致服务器响应变慢甚至不可用。 Web攻击常见的 Web 攻击包括SQL 注入、跨站脚本攻击XSS、跨站请求伪造CSRF等。与DDoS和CC以大量报文发起的攻击相比,Web 攻击主要是利用 Web 设计的漏洞达到攻击的目标。一旦攻击行为实施成功,要么网站的数据库内容泄露,或者网页被挂马。数据库内容泄露严重影响企业的数据安全,网页被挂马会影响企业网站的安全形象以及被搜索引擎降权等。 恶意爬虫根据阿里云安全中心的报告数据显示,2019年,恶意爬虫在房产、交通、游戏、电商、资讯论坛等几个行业中的占比都超过50%。恶意爬虫通过去爬取网站核心的内容,比如电商的价格信息等,对信息进行窃取,同时也加重服务器的负担。 劫持篡改劫持和篡改比较常见,当网站被第三方劫持后,流量会被引流到其他网站上,导致网站的用户访问流量减少,用户流失。同时,对于传媒、政务网站来说,内容被篡改会引发极大的政策风险。 企业线上业务需要构建多层次纵深防护面对愈发严峻的网络安全态势,为了应对以上安全风险,企业在关注线上业务的流畅、稳定的同时,也要构建多层次纵深防护体系,从各个层面建立响应的应对措施和防护机制。 在网络层,需要进行DDoS攻击的清洗和处理,当造成更严重影响需要通过切换IP以及联合黑洞机制去缓解。在传输层,相较于传统明文传输,通过https的支持去进行传输层面加密,来避免证书伪造。在应用层,需要进行CC防护、防爬、业务防刷的能力部署,防止恶意攻击者刷带宽的情况发生,避免经济和业务损失。贴近源站的防护方面,需要部署WAF和防篡改,对源站和内容进行防护。 企业需要在网络层、传输层、应用层等多层次构建防护能力,同时在应用层,对于不同场景要有不同防护措施。 基于CDN构建边缘安全+高防中心防护安全架构基于对纵深防护的理解,阿里云CDN的安全架构是基于CDN分布式节点实现的边缘安全防护机制,同时联动高防清洗中心进行防护。 如下图所示,整体安全架构第一层防护就是构建在全球CDN节点上,将更多安全能力加强在边缘节点上,通过多层次多维度流量数据统计和攻击检测的能力,包括DDoS、HTTP访问信息等数据汇总到安全大脑,安全大脑再对数据进行综合分析,针对不同层次的攻击下发相应的动态防御策略到边缘节点。与此同时,边缘节点自身也会进行自动防御和清洗。另外,整体安全架构将WAF和防篡改能力部署在回源节点上,对攻击到达源站之前进行防御。如果源站希望只在CDN服务之下,不想暴露在公网上,整体架构也会基于CDN提供源站高级防护能力,避免源站被恶意扫描者被发现。 对于金融、政府等场景,需要具备大流量抗D的能力,CDN有海量边缘节点通过自己的调度和清洗能力把大部分DDoS攻击给消化掉。当一旦出现更严重的DDoS攻击时,安全大脑会指导智能调度,将被攻击的流量切换到高级防护节点去清洗。 阿里云CDN安全架构三个核心能力在以上的CDN安全架构基础之上,赵伟也对DDoS防护智能调度、Web防护以及机器流量管理三个核心能力进行解读。 一、DDoS防护智能调度:边缘节点分布式抗D与高防中心大流量抗D联动 DDoS防护智能调度的策略是,业务流量缺省通过CDN分发,最大程度确保加速效果和用户体验,而当检测到大流量 DDoS 攻击之后,智能调度会判断严重程度并决策由高防进行 DDoS清洗,同时根据攻击情况进行区域调度或全局调度,而当DDoS 攻击停止后,智能调度系统会自动决策将高防服务的业务流量调度回 CDN 边缘节点,尽最大可能的保证正常加速效果。 DDoS防护智能调度最核心就是边缘加速、智能调度、T级防护三块,边缘加速的基础上具备充分的DDoS攻击检测以及智能调度的能力,决策什么时候进行高防去清洗,严重的攻击进入T级防护中心进行清洗。目前方案已经在金融行业、传媒行业沉淀了典型客户。 二、Web防护——八层安全功能,层层过滤恶意请求 Web防护的策略是通过层层过滤,来抵御恶意请求。第一层是精准访问控制,指具体对http请求的拦截策略;第二层是区域封禁,对业务无效区或者异常地域请求进行拦截;第三层IP信誉系统,是利用阿里云多年积累的互联网IP大数据画像,对恶意行为进行分类并对IP进行拦截;第四层是黑名单系统,是对某些UA或者IP进行拦截,以上四层都属于精确拦截;第五层是频次控制,对相对高频且访问异常IP进行拦截;第六层是对于互联网机器流量进行管理,阻断恶意爬虫;第七第八层是WAF和源站高级防护,对于源站进行更深层次的防护。 赵伟认为:CDN边缘节点是最接近互联网用户的,在所有的访问请求中,可能有正常用户的请求,当然也会存在爬虫、注入、跨站的访问请求,经过以上逐层的防护策略,过滤掉相应恶意请求,最终可以达到只有正常请求返回源站的效果。 三、机器流量管理——识别互联网Bot流量,阻断恶意爬虫 机器流量管理部署在边缘,当各种互联网访问进入CDN边缘节点之后,机器流量管理系统会提取最原始的Client信息,分析信息计算Client特征值,并与阿里云安全积累的机器流量特征库进行匹配,最终识别结果,正常访问、搜索引擎、商业爬虫这些行为是网站期望的行为,会被放行,而恶意爬虫会被拦截。在处置动作上,机器流量管理相比当前常见嵌入在正常页面中的行为,侵入性有所降低,支持相对平滑的接入。 下图是一个实际的案例,在执行机器流量管理策略的时候,首先会对某域名进行流量分析,左侧图是针对某域名开启机器流量分析后,识别出超过 82% 的请求为恶意爬虫,然后开启拦截机器流量中的恶意爬虫流量后,如右侧图所示,域名峰值带宽下降超过80%。 CDN目前已经是互联网流量的主要入口,把安全能力注入CDN边缘节点,为客户提供一站式安全加速解决方案成为行业大势所趋。在发布会的最后,赵伟分享到:未来,阿里云政企安全加速解决方案将在场景化、便捷化、智能化三个方面深耕,为客户提供更贴近需求的、更快捷省心的、更智能高效的安全策略,让CDN可以成为每个企业在线服务的第一道防线,来保障企业应用的安全、稳定运行。 点击回顾发布会详情 活动福利: 2020年6月30日前,CDN加速10Mbps以内带宽免费试用1个月,30Gbps DDoS防护、高级版WAF试用1周,并赠送一次漏洞扫描服务,总名额限100个,先到先得。 点击填写表单参与活动 答疑钉钉群:34249460

May 27, 2020 · 1 min · jiezi

为啥号称安全的NAS屡次被病毒攻击

5月初B站一位UP主资料泄露,并在知乎引起广泛的讨论,蒲公英也参与了一下,提出可以用NAS备份,结果惨遭质疑:人家就用的NAS还被泄露,那组建NAS有什么用? 经过深入分析,这个锅NAS不背,其中另有隐情! NAS被攻击的原因 首先经过专业人士分析,NAS被攻击存在两种情况: 第一种情况 计算机已经被病毒感染,或者病毒已经入侵内网。那攻击NAS里的文件轻而易举。 第二种情况 NAS服务器开启了暴露在外网的功能,黑客通过外网攻击勒索。 对于第一种情况,只能说做好备份或者不要点击陌生的链接、软件等。而今天就谈谈第二种多数NAS被攻击的原因。 暴露在公网的危害 黑客从外网怎么攻击NAS?一般是通过端口。 如果说IP代表具体某台电脑,那端口就是访问该电脑各种服务的入口,而防火墙就是门卫,不让病毒轻而易举的进门! 比如2017年永恒之蓝爆发,通过samba协议文件共享的445端口进行传播,当时给出的方法就是关闭对应端口,或者通过防火墙阻断对应端口的流量。 而上面B站UP主的NAS直接放在了公网上,并且开启了windows远程桌面的3389端口,而且使用了弱密码,刚上线的第一天就被攻破。所以这并不是说NAS不安全! 常见的解决方案 组建虚拟专用网 跨公网搭建一条加密隧道,使两端局域网互通就可以了。因为跨越公网的隧道是加密的,这个隧道的安全性就能得到保障。 这样,从公司访问家里的nas资源就相当于局域网访问。家里的nas在公网没有暴露危险端口,这样也能保证nas在公网的安全了,但是操作起来复杂。 比如用蒲公英把两个不同的区域的设备组在一个局域网里,这样等于组建了一个内网,访问起来非常方便。

May 27, 2020 · 1 min · jiezi

开箱即用Knative-给您极致的容器-Serverless-体验

作者 | 冬岛  阿里巴巴技术专家 导读:托管 Knative 开箱即用,您不需要为这些常驻实例付出任何成本。结合 SLB 云产品提供 Gateway 的能力以及基于突发性能型实例的保留规格功能,极大的节省您的 IaaS 开支,您支付的每一分钱都没有浪费。<关注阿里巴巴云原生公众号,回复 报告 即可下载完整调查报告> CNCF 发布的年度调查报告显示 2019 年 Serverless 技术进一步获得了更大的认可。其中 41% 的受访者表示已经在使用 Serverless,另外 20% 的受访者表示计划在未来 12-18 个月内会采用 Serverless 技术。而在众多开源的 Serverless 项目中 Knative 是最受欢迎的一个。如下图所示, Knative 占据了 34% 的份额,遥遥领先于第二名 OpenFaaS,Knative 是自己搭建 Serverless 平台的首选。 Knative 之所以这么受欢迎和容器的生态不无关系。和 FaaS 模式不同的是 Knative 不要求用户对应用做非常大的改造,只要用户的应用完成了容器化就能部署在 Knative 中。并且 Knative 在 Kubernetes 之上提供了更聚焦的应用模型,让用户无需为应用的升级、流量灰度花费精力,这一切都是自动完成的。 云主机的发展历程在云计算出现之前,企业想要在互联网上对外提供服务需要先在 IDC 租赁物理机,然后再把应用部署在 IDC 的物理机上。而物理机的性能在过去十几年里始终保持着摩尔定律的速度在增长。这就导致单个应用根本无法充分利用整个物理机的资源。所以就需要有一种技术解决资源利用率的问题。简单的想如果一个应用不够就多部署几个。但在同一个物理机下多个应用混合部署会带来很多问题,比如: 端口冲突资源隔离系统依赖以及运维困难虚拟机的出现就很好的解决了上述问题,通过虚拟机技术可以在同一个物理机上虚拟出多个主机,每一个主机只部署一个应用,这样一台物理机不但可以部署多个应用,还能保证应用之间的独立性。 随着企业的发展,一家企业可能会维护很多应用。而每一个应用需要很多的发布、升级、回滚等操作,同时这些应用可能还需要在不同的地域分别部署一套。这就带来了很多运维负担,这些运维难题首当其冲的就是应用的运行环境。所以后来出现了容器技术,容器技术通过内核级别的轻量级隔离能力不但具备与 VM 几乎同等的隔离体验,还带来了一个巨大的创新就是容器镜像。通过容器镜像可以非常容易的复制应用的运行环境,开发人员只需要把应用的依赖都做到镜像中,当镜像运行的时候直接使用自带的依赖提供服务。这就解决了应用发布、升级和回滚以及多地域部署等过程中的运行环境问题。 当人们开始大规模使用容器技术之后发现大大减轻了维护实例运行环境的负担,此时最大的问题就是应用多实例的协调以及多个应用之间的协调。所以容器技术普及不久 Kubernetes 就出现了,和以往的 VM、容器技术不同,Kubernetes 天然就是一个分布式面向终态的设计,不是单机上的能力。Kubernetes 对 IaaS 的资源分配抽象了更友好的 API,用户无需关心具体的分配细节,Kubernetes Controller 会根据面向终态的生命自动完成分配和故障转移以及负载均衡等。这使得应用开发人员无需关心具体的实例是运行在哪里,只要在需要的时候 Kubernetes 能够分配出资源即可。 ...

May 26, 2020 · 5 min · jiezi

史上最快网速澳大利亚研究小组使用光学芯片实现-44-Tbps-数据速度

技术编辑:芒果果丨发自 思否编辑部SegmentFault 思否报道丨公众号:SegmentFault 来自澳大利亚 Monash、Swinburne 和 RMIT 大学的一组研究人员称,他们已经使用一种名为微梳的光学芯片成功测试并记录了世界上最快的 44.2 Tbps 互联网数据速度。 这项发现发表在《自然通讯》杂志上,揭示了数据速度如何支持墨尔本 180 万个家庭的高速互联网连接,用户可以在几秒钟内下载 1000 部高清电影。 新型光学芯片体积更小,可替代 80 台 红外激光器研究人员称,微梳被称为比现有电信硬件更小、更轻的设备,可以代替 80 台红外激光器,并在对国家宽带网络所用网络进行镜像的基础设施中进行了负载测试。 研究人员将微梳放在 RMIT 墨尔本市校区和 Monash 大学 Clayton 校区之间 76.6 公里的暗光纤中。微梳用于模仿彩虹状的红外激光,因此每个“激光”都具有用作单独通信通道的能力。 为了模拟测试期间的互联网使用高峰,研究人员通过 4THz 带宽的每个通道发送了最大的数据。 地下光纤或成网络通信骨干能力,可支持远程通信该研究的首席作者  Monash 大学电气和计算机系统工程讲师 Bill Corcoran 认为,这项研究证明,地下光纤将成为现在和将来通信网络的骨干能力。他说:“我们已经开发了可扩展以满足未来需求的产品。我们在这里谈论的不仅是 Netflix,还包括我们使用其通信网络的更广泛的规模。这些数据可用于自动驾驶汽车和未来的交通运输,并可帮助医药,教育,金融和电子商务行业,以及使我们能够与几公里外的孙子们一起阅读。” RMIT 的 Arnan Mitchell 表示,该项目的未来目标是在不增加大小、重量或成本的前提下,将当前的发送器从每秒数百 GB 扩展到每秒数十 TB。他说:“从长远来看,我们希望制造出集成的光子芯片,从而能够以最小的成本在现有的光纤链路上实现这种数据速率。” 澳大利亚其他能源替代研究其他研究方面,悉尼大学的科学家测试了如何提高钙钛矿太阳能电池的热稳定性,使其有可能被用作硅基太阳能电池的替代品。 实验中使用的某些钙钛矿细胞的样品。 悉尼大学纳米科学系主任 John Hooke 表示:“钙钛矿是太阳能系统的一个非常有希望的前景。它们非常便宜,比硅薄 500 倍,因此具有柔韧性和超轻量。它们还具有巨大的能量使能特性和较高的太阳能转化率。” 科学家使用带有压力密封的聚合物玻璃毯来抑制钙钛矿细胞的分解,这一过程称为除气。 悉尼大学纳米科学主席 Ho-Baillie 说:“这一过程,称为’除气’,是我们开发该技术并提高其耐用性的工作的中心部分。我一直对探索如何将钙钛矿太阳能电池结合到隔热玻璃(例如真空玻璃)中感兴趣。因此,我们需要了解这些材料的除气性能。” 该测试还能够确定钙钛矿太阳能电池是否能够在相对湿度为 85% 的情况下以及在 -40 度至 85 度之间的温度下进行 75 次循环后能否存活超过 1800 小时。 ...

May 26, 2020 · 1 min · jiezi

Flink-与-Hive-的磨合期

有不少读者反馈,参考上篇文章《Hive 终于等来了 Flink》部署 Flink 并集成 Hive 时,出现一些 bug 以及兼容性等问题。虽已等来,却未可用。所以笔者增加了这一篇文章,作为姊妹篇。 回顾 在上篇文章中,笔者使用的 CDH 版本为 5.16.2,其中 Hive 版本为 1.1.0(CDH 5.x 系列 Hive 版本都不高于 1.1.0,是不是不可理解),Flink 源代码本身对 Hive 1.1.0 版本兼容性不好,存在不少问题。为了兼容目前版本,笔者基于 CDH 5.16.2 环境,对 Flink 代码进行了修改,重新打包并部署。 其实经过很多开源项目的实战,比如 Apache Atlas,Apache Spark 等,Hive 1.2.x 和 Hive 1.1.x 在大部分情况下,替换一些 Jar 包,是可以解决兼容性的问题。对于笔者的环境来说,可以使用 Hive 1.2.1 版本的一些 Jar 包来代替 Hive 1.1.0 版本的 Jar 包。在本篇文章的开始部分,笔者会解决这个问题,然后再补充上篇文章缺少的实战内容。 剪不断理还乱的问题 根据读者的反馈,笔者将所有的问题总结为三类: Flink 如何连接 Hive 除了 API 外,有没有类似 spark-sql 命令识别不到 Hadoop 环境或配置文件找不到依赖包、类或方法找不到1. Flink 如何连接 Hive 有的读者不太清楚,如何配置 Flink 连接 Hive 的 Catalog,这里补充一个完整的 conf/sql-client-hive.yaml 示例: catalogs: - name: staginghive type: hive hive-conf-dir: /etc/hive/conf hive-version: 1.2.1 execution: planner: blink type: batch time-characteristic: event-time periodic-watermarks-interval: 200 result-mode: table max-table-result-rows: 1000000 parallelism: 1 max-parallelism: 128 min-idle-state-retention: 0 max-idle-state-retention: 0 current-catalog: staginghive current-database: ssb restart-strategy: type: fallback deployment: response-timeout: 5000 gateway-address: "" gateway-port: 0 m: yarn-cluster yn: 2 ys: 5 yjm: 1024 ytm: 2048 sql-client-hive.yaml 配置文件里面包含: ...

May 25, 2020 · 7 min · jiezi

数智化时代合格数据架构师如何养成

文章将从云计算基建、大数据基建、数据构建、数据管理、数据应用5个角度,阐述数据架构师的必备技能和素养。 云计算基建 传统的IT架构已存在几十年,随着企业业务的快速发展,对于业务的可用性要求越来越高,对于成本的压力也越来大。是否存在一种方式能以更低成本、更高性能和可用性的方式支持新时代的企业信息化要求? 部分互联网公司由于自身业务快速发展的原因,做了大量尝试。阿里巴巴率先发起的“去IOE运动”:将IBM机器替换成云上服务器,将ORACLE数据库替换成云上数据库,将EMC存储替换成云上存储服务器。带来的不仅仅是成本的降低,同时也提供了更加稳定、安全的环境。云计算作为信息时代的水、电、煤已成为行业共识。随着云计算的兴起,企业全面上云的拐点已到。作为一名合格的数据架构师,对云计算基础设施需要有充分的理解。 首先,相较于传统的服务器,架构师需要了解云上是如何实现稳定、弹性、安全、成本、易用、扩展的云上服务器的。还包括如何实现物理资源的虚拟化,如何通过弹性伸缩从容面对业务的峰谷,如何通过多地域多可用区实现容灾等。另外,数据架构师需要能评估服务器所需资源类型,通过技术调研和论证,得出所需要的服务器的资源,例如面对不同的业务和技术场景,企业需要的是紧凑型、通用型、均衡型、内存型、独享型哪种类型的服务器。其次,网络同样也是数据架构师必须掌握的基础知识,如何设计安全的网络机制、如何规划合理的网络配置、如何进行可靠的网络连接(包括不同虚拟网络之间以及与客户本地IDC进行连接方式等),都是数据架构师在工作中会遇到的各种挑战。最后,数据架构师需要了解各种云上数据库(包括关系型数据库、NoSQL数据库等)的应用场景、产品特性等。以及如何保障其可靠性,安全性、可用性、扩展性、成本。另外还有对象存储产品的特性,如何对视频、图片等数据进行有效的管理。如何通过CDN等手段提高用户访问响应速度。大数据基建 大数据借着云计算的东风,也开始在信息时代发挥越来越重要的地位。阿里巴巴提出的数据中台概念和实践,也在云上落地开花。面对体量巨大、时效要求高、形式多样化、价值密度低的企业大数据,对于数据架构师,需要在采集、计算、存储等基础技术的原理和应用场景形成自己的知识体系。 首先,数据架构师需要了解业界通用的PC端和无线端采集、爬虫采集等场景的具体方案。理解从埋点申请、可视化埋点实施、验证、发布到监控的全生命周期管理。其次,对于离线计算和实时计算的模式和原理,以及对应场景的离线计算和实时计算的产品都应该熟悉掌握,在洞察客户需求后,能合理的做计算模式的选择和判断。最后,大数据在存储上与业务系统在场景和目标上的本质区别,需要理解如HDFS的大数据存储原理、MPP架构的原理和常用场景、消息中间件用于实时计算的方式等。数据构建 数据架构师很重要的职责就是思考如何对数据做合理有效的构建,形成标准、统一、可公用、可理解的公共数据,让业务能够尽情在建设好的数据上驰骋沙场,利用数据创造出业务价值。 首先,好的数据体系能够对数据进行有效的横向分层,合理的纵向分类。通过数据体系的构建,能够让数据生产者更合理高效的组织数据,数据消费者能更有效的理解和获取所需数据,数据管理者能更高效的管理好数据。因此数据架构师需要能从全局上对数据体系有个整体上长远的规划。其次,数据需要能够被更好的组织和使用还需要有合理的数据建模方法论的支撑,例如基于维度建模的数据构建方式能够让数据以事实表和维度表的方式的方式向上提供数据服务,并且预先通过基于分析对象的汇总数据能够提供统一标准的业务指标定义。数据架构师需要有理解业务、抽象实体、形成模型的知识体系,并且在遇到问题时能从合理性、可扩展性、易用性、可理解性等各种角度给出模型设计的合理解决方案。最后,就算数据架构师不需要做代码开发,可是这个能力是对数据架构师最基本的要求,只有充分理解了数据加工的整个过程,才能基于数据的思维去设计好数据体系。在碰到项目开发同学遇到数据处理问题时,能够及时提供有效的帮助,对于建立项目中的信任关系也起到了关键的作用。数据管理 数据质量是数据能被信任的关键,也是数据中台建设能否成功的关键。因此数据架构师需要设计事前、事中和事后的数据质量检测和处理机制,保证数据在完整性、准确性、及时性、一致性上满足业务的要求。 数据架构师还需要保证数据治理能够形成有效的闭环,从发现治理问题、推送给责任人、引导治理动作、治理效果评估、到下一次进行新的治理问题发现,根本上杜绝数据“有人生、没人养”的困局。就像环境治理一样,只有基于体系化的长效机制才能还我们绿水青山。 数据是一把双刃剑,因为它在给业务带来价值的同时,数据安全的问题是另一把可致企业于死地的利剑。数据架构师要对数据安全规划做在最前头,从数据产生到消亡全生命周期进行安全制度和流程的规划,同时需要通过如差分隐私、保序脱敏等各种技术手段保障数据安全。 数据只有让业务充分使用才能产生价值,因此首先数据架构师需要思考如何提高数据的易用性,包括从数据的业务视角组织形式、数据标准口径的定义方式、基于元数据帮助业务理解数据等方式。再次,数据是有成本的,因此需要能够更好的衡量数据带来的价值,形成数据资产ROI,再配合相应的数据运营手段,才能让数据资产化和价值化互相促进发展,相爱相生。 数据应用 数据架构师需要能够让数据更好的服务业务,但是应抛弃疲于奔命于各种跑数取数的深渊中,需要能跳出一个个单点的需求,能更全面的思考如何主动服务业务。 首先,数据架构师需要有很强的业务理解能力,对客户的业务能基于行业视角有清晰的理解,并且能基于理解做进一步的抽象,抽象出业务的本质。其次,数据架构师能从业务方的需求、对业务和数据的理解沉淀出一系列的分析思路。也需要能通过算法结合数据,思考如何进行数据的深度挖掘,挖掘出高价值数据。最终能将思路和方法通过产品化的方式沉淀,主动服务业务,与业务共创数据价值。最后,数据的本质是为了赋能商业、创造商业,因此数据架构师需要有一定的商业思维,能理解数据如何使商业更加智能,如何驱动商业的发展,如何创造新的商业形态。总结 技术到业务,方法论到产品化,全局规划到细节把控,数据架构师需要在大数据的方方面面都承担起重要的作用。更重要的是,需要有对大数据行业未来的信心、对职业发展方向的恒心、对漫长落地过程的耐心、对赋能商业的热心。 阿里巴巴数据中台团队,致力于输出阿里云数据智能的最佳实践,助力每个企业建设自己的数据中台,进而共同实现新时代下的智能商业! 阿里巴巴数据中台解决方案,核心产品: Dataphin,以阿里巴巴大数据核心方法论OneData为内核驱动,提供一站式数据构建与管理能力;Quick BI,集阿里巴巴数据分析经验沉淀,提供一站式数据分析与展现能力;Quick Audience,集阿里巴巴消费者洞察及营销经验,提供一站式人群圈选、洞察及营销投放能力,连接阿里巴巴商业,实现用户增长。

May 25, 2020 · 1 min · jiezi

新一代高效Git协同模型AGitFlow详解

【以下为分享实录,有删节】 Git工作流概述及AGit-Flow的优势 目前,Git已成为源代码管理的标准和基础设施。“为什么Git能这么成功”?Git的创建者Linux在Git十周年的一次采访中,道出了其中的奥秘: The big thing about distributed source control is that it makes one of the main issues with SCM’s go away – the politics around “who can make changes.” 他认为Git能成功最关键的不是因为它更快、更安全,也不是因为Git是分布式的,而是解决了“到底谁能够贡献代码”这个问题。传统的集中式版本控制系统只能针对核心用户开放写授权,长期来看这对项目做大、做强是不利的。而Git改变了传统版本控制系统不能够让跟多开发者贡献代码这个顽疾,让“只读用户”也可以通过“代码评审”的方式参与到项目开发中。 当前业界有两种最常用Git 工作流:GitHub和Gerrit。他们都具备仓库的授权模型简单,只读用户可参与代码贡献的特点。 如上图所示,我对这两种GIT工作流做了优劣势分析: ** 代码评审模式不同:** GitHub 的代码评审称为 “pull request”,每个特性改动生成一次代码评审。 Gerrit 的代码评审称为 “Change”,每个提交生都会生成一个“变更单”,这个变更单就是一次代码评审。 工作流类型不同: GitHub 的工作流属于分布式,当开发者需要参与项目的时候,虽然没有“写”的权限,但是可以通过“Fork”的方式创建一个个人仓库(派生仓库),他就可以在这个派生仓库中去创建代码分支,创建pull request。GitHub 底层采用的是原生的 Git(即 CGit)。 Gerrit 的工作流是集中式,所有用户工作在统一管控的集中式仓库中。Gerrit 要求用户在本地克隆仓库中安装一个 “commit-msg” 钩子,以便在生成的提交中插入唯一的“Change-Id”,向服务器推送要使用特殊的 git push 命令。Gerrit 采用的是 JGit(Java 的 Git 实现)。 ...

May 25, 2020 · 2 min · jiezi

揭秘政企安全加速解决方案的架构与应用场景实践

政企网络化、在线化面临哪些挑战? 政企涵盖了政府、金融、传媒以及传统企业等几个行业,随着“互联网+”业态的迅速发展,政企数字化转型正当时,特别是在新冠疫情的影响下,各行各业线上业务运营能力的建设步伐进一步加快,架构网络化与业务在线化已经成为政企不可或缺的能力。 具体到各个业务场景中,在政务领域,国家大力推进网上业务来实现数字化治理,向公众提供流畅、稳定的在线服务,以增强其服务水平和效率,提升公众满意度;在金融行业,网上银行、手机支付、移动证券、网上营业厅等新兴的金融类应用在飞速发展,更多的交易、认证、审核等业务流程在互联网上完成;在广电传媒领域,依托带宽提速以及近年来区县融媒体业务的发展,基于互联网的广电新媒体、融媒体在产业中的地位日益提升,互联网上的访问体验以及安全性越发关键;在传统企业领域,借助数字化转型实现能效提升的过程,将经历数字化、网络化、智能化这几个阶段,其中网络化进程中的设备互联、业务联网上云、企业在线营销及服务等场景,成为了传统企业的首要任务。 与此同时,我国对网络安全的监管也在持续不断地加强,且非常强调自主可控,特别是关键信息基础设施(指面向互联网、面向公众提供网络信息服务或者支撑通信、金融、交通、公用事业等重要行业的信息系统或工业控制系统),对国家安全、经济安全、社会稳定、公众健康和安全至关重要。4月27日,由网信办、工信部,中国人民银行,广电总局,国密局、密码局等12个部委,联合制定了《网络安全审查办法》,对党政机关业务系统、网上金融、传媒新闻网站、企事业单位网站和办公系统等关键信息基础设施的网络安全审查提出了进一步明确的安全监管要求,值得政企行业高度重视。 综上所述,在政企行业面对的核心挑战是:既要在线开放,又要流畅稳定,还要安全合规。如何帮助政企行业更好地满足安全和加速两方面的需求,确保互联网之上的传输安全和用户访问体验,这也是云计算从业者们格外关注和需要解决的问题。 政企安全加速解决方案的整体架构 阿里云本次发布的政企安全加速解决方案是兼顾了加速、安全与合规的一站式解决方案。其集成了静态加速、全站加速,包括四层IP应用加速和七层WebSocket加速等能力,可以全面提升用户访问效率,同时,集成了边缘WAF、DDoS攻击防护、分布式CC攻击防护等安全能力,在传输安全层面支持国密算法https安全机制,可以有效帮助政府、传媒等领域提升防篡改、防爬虫能力,规避相应内容安全风险。 政企安全加速解决方案在安全合规、稳定极速和省力省心三个维度赋能政企客户。首先,凭借上述安全能力帮助客户抵挡来自互联网的恶意攻击,保障业务可用性不受损,确保内容和数据的安全,同时丰富、全面的安全特性也可以帮助客户去满足高规格的等保合规要求;其次,依托阿里云CDN在资源、技术的储备以及多年沉淀的最佳实践,可以为政企行业的用户提供稳定极速的访问体验。第三,解决方案也为政企行业构建了专业的服务队伍,团队具备多个国家部委、大型股份制银行、央媒等大型项目的最佳实践经验,可以提供日常服务、应急响应、重大活动护航以及多重安全保障支撑。同时,产品方案无需部署设备,通过API和控制台快速接入应用系统,技术对接十分简单便捷。 政企安全加速解决方案的应用场景及行业价值 场景一:政务类平台政企安全加速解决方案服务于各类政务门户、电子政务、一网通办等应用,以及党建学习类、在线教育类平台,帮助其缓解95%以上网络流量压力,有效屏蔽用户激增带来的访问瓶颈问题,并对源站进行隐藏和保护。同时,基于国密算法https实现传输链路层加密,有效防劫持、防篡改,保护网站内容安全。此外,通过UA/IP黑白名单/Refer防盗链,以及DRM数字版权管理等安全机制,多维度防止视频盗播,保护优质版权内容不受侵害。 场景二:金融在金融领域,银行、证券、保险机构的门户网站、手机app以及交易认证审核、金融双录、内部培训等业务场景下,有着严格的等保合规要求,SSL证书及国密要求较高,政企安全加速解决方案提供端到端的国密https传输加密解决方案,包括keyless、双证书、IPv6等在等保合规中要求比较明确的安全特性。同时,解决方案基于DDoS/CC防护以及边缘WAF,帮助金融机构应对网络攻击,保证业务安全稳定不中断。此外,解决方案集成全站加速,基于七层/四层加速有效提高交易成功率至 99.9%,缩短交易时长30%以上,优化金融企业跨国以及大规模交易、访问下的用户体验。 场景三:广电传媒在广电传媒领域,广电新媒体平台、地方传媒以及区县融媒应用中普遍面临着https普及率不高、内容篡改风险、版权视频的盗播盗链、视频流畅率等技术挑战,政企安全加速解决方案通过国密https传输加密有效防止劫持和篡改,同时基于UA/IP黑白名单/Refer防盗链,以及DRM数字版权管理等安全机制,确保优质版权内容不被盗播盗链。 场景四:企业办公传统企业的业务场景,如零售、车企、能源、航空等行业,其在线化可以分为企业内部在线办公以及外部面向客户的各种服务、应用这两个部分。政企安全加速解决方案可以基于全站加速,七层/四层加速来支持跨区域、跨运营商的系统协同和API加速,改善平台访问体验。同时,在安全方面,解决方案中集成的边缘WAF能力,可以有效实现防爬虫、防刷、WEB系统入侵的防护,避免因企业网站被爬、平台被刷而导致的核心数据泄露,确保企业数据及源站的安全。 阿里云政企安全加速解决方案已经广泛应用于政务平台、网上银行、零售、航空等领域之中,帮助客户满足合规性、安全性以及用户访问体验的要求,赋能线上业务以极速、安全、可靠地互联网体验,助力更多政企抓住数字化发展机遇,在数字化转型中获得先机。 点击回顾发布会详情 活动福利: 2020年6月30日前,CDN加速10Mbps以内带宽免费试用1个月,30Gbps DDoS防护、高级版WAF试用1周,并赠送一次漏洞扫描服务,总名额限100个,先到先得。 点击填写表单参与活动 答疑钉钉群:34249460

May 25, 2020 · 1 min · jiezi

Redis-的-4-大法宝2019-必学中间件

Redis 的 4 大法宝,2019 必学中间件 Redis是什么? 全称:REmote DIctionary Server Redis是一种key-value形式的NoSQL内存数据库,由ANSI C编写,遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis最大的特性是它会将所有数据都放在内存中,所以读写速度性能非常好。当然,它也支持将内存中的数据以快照和日志的形式持久化到硬盘,这样即使在断电、机器故障等异常情况发生时数据也不会丢失,Redis能从硬盘中恢复快照数据到内存中。 官网:https://redis.io/ 中文:http://www.redis.cn/ Github:https://github.com/antirez/redis Redis有什么优势? 1、性能高,速度快 Redis命令执行速度非常快,官方给出的读写性能可以达到10W/秒。为什么会如此之快呢?有以下几个因素: 数据存储在内存中,直接与内存连接。由相对底层的C语言实现,离操作系统更近。实现源码很精湛,仅仅几万行代码,简单稳定。使用了单线程模型,无多线程竞争、锁等问题。2、丰富的数据结构 Redis与其他的内存数据库不同的是,Redis拥有丰富的数据类型,如字符串、哈希、列表、集合、有序集合等。正是因为Redis丰富的数据类型,所有它能应用的场景非常多。 3、丰富的特性 除了支持丰富的数据结构外,还支持以下高级功能。 支持键过期功能,可以用来实现定时缓存。支持发布/订阅功能,可以有来实现消息队列。支持事务功能,可以保证多条命令的事务性。支持供管道功能,能够批量处理命令。支持Lua脚本功能。支持集群分片和数据复制功能。支持内存数据持久化硬盘功能。4、丰富的客户端 官网索引:http://www.redis.cn/clients.html 从官网给出的客户端列表可以看出,各种各种的语言都能接入到Redis,接入包括了所有的主流开发语言。 目前使用Redis的公司非常多,国内外都有很多重量级的公司在用。所以,现在学习Redis是大势所趋,学好Redis能为自己在日后的工作谋生中增加一个强有利的竞争手段。 欢迎工作一到五年的Java工程师朋友们加入JavaQQ群:219571750,群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

September 10, 2019 · 1 min · jiezi

不做会死互联网时代的企业必定都要实现中台

AI 前线导读: 自 2018 年底以来,伴随着阿里、腾讯、百度、京东等一众互联网巨头的大规模组织架构调整,“中台”的热度陡然攀升。一时间,各大互联网公司纷纷开始跟随建设中台。中台的概念是被阿里带火的,2015 年,马云正式确定了阿里的中台战略,最早从 2009 年建设“共享事业部”开始,经过十年实践,阿里将自己的技术和业务能力沉淀出了一套综合能力平台,并梳理出了一套中台建设的方法论。如今,阿里提出的“大中台、小前台”的管理模式也已经成为主流的数字化转型思想,很多企业都想学习阿里的中台策略。但长期以来,外界多听闻过关于阿里中台的各种“故事”,但鲜有人知道,阿里的中台到底是什么?究竟在做什么?在 ArchSummit 全球架构师峰会(深圳站)2019现场, InfoQ 有幸采访到了阿里云中间件架构总监谢纯良,听他分享关于阿里巴巴中台建设的实践与思考。 以下为 InfoQ 与阿里云中间件架构总监谢纯良对话全文,有删减。 InfoQ:您是什么时候、是什么契机加入阿里云?目前主要负责哪一块业务? 谢纯良:我此前曾先后在 BEA、Oracle 工作,连续 13 年一直在专注于中间件领域,包括中间件的应用、架构。2015 年,当时只是听说阿里很牛,尤其是做中间件很牛,因为一个偶然的机会就进入了阿里。目前,我在阿里主要负责中间件的应用、商业化等工作。今天再回过头来看,其实这些东西就是外面传说中的业务中台,是其中很重要的组成部分。 InfoQ:在明天的演讲中,您会讲述阿里巴巴数字化转型的实践历程,您觉得有哪些关键的经验可以作为模版,给其他企业借鉴或者直接复制? 谢纯良: 有非常多。 InfoQ:最关键几个点? 谢纯良:外界只听闻过阿里当时为什么要提业务中台这个概念、“大中台”、“小中台”等,但鲜有人知道阿里的业务中台做的究竟是什么,在新闻报道中也找不到特别多相关资料。所以,我们这一次也是正式的、第一次对外去讲一讲,阿里的业务中台究竟是什么。 其实掰开来看,它包括几部分内容:一是阿里这么多年的 IT 建设沉淀的一个技术平台;第二,整个中台建设其实是有很多坑的,阿里在长期的实践中梳理出来了一整套方法论;第三是现在大家看得见的这套业务体系,即在天猫淘宝上交易的这套体系。现在我们要把阿里数字化转型的经验对外输出的话,有一些东西是可以直接拿出去的,比如技术平台,(其他企业)就可以直接复制。 此外,在方法论层面,以往是很少对外讲的,但从今年 5 月开始,我们已经在逐步对外输出一些经验,诸如“怎样建中台“、“怎样管理中台”,“你的业务跑在中台上,怎样不断地进化成长为一个真正意义上的大中台“等等,在建设中台的过程中,“坑”是比较多的,我们积累的一些模版、规范,外部企业是可以直接拿去用的,现在也已经有很多企业在用了,用的效果非常好。 InfoQ:是通过阿里云对外输出吗? 谢纯良:是的,整个阿里巴巴的输出都是通过阿里云。 InfoQ:数字化转型对于企业来说有什么好处? 谢纯良:这是个好问题。今天我们大家都在思考的一个问题是,为什么要做数字化转型?(之前)经过十年、二十年的 IT 建设,很多业务已经实现了数字化、流程自动化了,那为什么还要谈转型?第二个思考的问题是,要转到哪里去?第三个问题是,怎么转? 我曾经跟大量的较大型的外部企业的 CEO、CTO 去聊这几个问题,得到的答案真是五花八门,很多人并没有想清楚为什么要转?有人说因为我现在系统有问题,不好用,听说阿里那个好用。其实,为什么要转?最根本的原因,在我们看来,就是现在的环境变了。我们以前做的系统云有点类似于计划经济,你的终端有多少是定的。而今天在互联网、移动互联网时代,环境、尤其是用户环境已经发生了巨大的变化,你的终端用户已经变成了一个巨大的一个基数,可能是几千万、上亿,像阿里可能都十几亿了。当如此庞大的基数要访问你的系统的时候,这个系统要有抗压的能力,在出现大规模瞬间高峰时,要有抗压能力。 另一方面,今天我们做生意的环境也在变化,从前线下摆个摊别人就会来买,现在很多时候不是这样,现在在流量经济下,要去推荐,那么根据什么去推荐?以前的系统都是孤岛式的建设,信息在一个系统里是非常有限的,如果要做一个精准的推荐,你的数据不是够的,没法去做精准的营销,是做不到千人千面的精准营销的。生意的模式在变化,所以你必须得去转(型),这个“转”是大家有意识的,有痛点,才会转。 转到哪里去?转肯定得有个目标,阿里在 2015 年提出要进入 DT 时代,是跟中台战略配套提出来的。我的理解是,今天数字化转型的目标就是要转到 DT 时代,因为到了 DT 时代,所有数据是有结构化的,数据的清洗也做完了,才能用得上现在大数据的一些技术、AI 的技术,否则就用不上。 那怎么转呢?从旧时代到新时代怎么去转?很多人现在提的是中台,对阿里来说,通过 IT 如何去引领业务的发展这一套体系探索了十年,也形成了一套方法论。业务中台本身是带一套方法论的,如果学习借鉴阿里去“转”,大概率是能成的。因为阿里在十年前就做了数字化转型,那时阿里做的生意就是基于互联网的,比很多传统企业先感知到互联网环境下的这些特殊要求,而他们这几年才逐步感觉到环境变了,所以要转型。 InfoQ:所有的传统企业都需要去做这个(数字化)转型吗? 谢纯良:什么时候需要?如果从信息技术发展的大趋势上看,我觉得是有必要的。我总结过去的 IT 建设时代有点像过去的“马车时代”,随着“汽车时代”的到来,它总要被淘汰掉的。而如今,我们已经迎来了云计算时代,或者说数据时代 /DT 时代,它代表了一种先进的生产力,在这个时代,你才能把现在一些重要的云计算技术、大数据的技术、AI 技术等用起来,不到这个时候你用不起来。因此,我觉得企业都要转,只是早晚的问题。 InfoQ:提到“早晚”,企业需要做怎样的前期准备,或达到一个什么阶段之后,才能开始去做转型? 谢纯良:首先我觉得,如果你的业务还是传统的业务,可能现在转的时机还没到。但如果你的业务跟互联网密切相关,那就要考虑快速去转型。 InfoQ:可否分享一个具体案例 ? 谢纯良:比如我们接触最早的中石化最典型。中石化主要做传统的资源类油品业务,它整个的加油体系都是固定的加油站,好像没必要放到一个中台上去。但它后来又发现,它又做采购又做油品相关、炼油等业务,它需要把上百万与其关系密切的供应商组织起来,这就是一个互联网生意了,这时,它必须有一个互联网时代的玩儿法,或互联网时代的 IT 建设的办法,它才能做。在采用了阿里的中台方法后,中石化转型非常成功。 ...

September 9, 2019 · 1 min · jiezi

浏览器开发者控制台使用入门基础

开发者控制台代码是很容易出现错误的。你也很可能犯错误...... 哦,我在说什么?只要你是人,你一定会犯错误(在写代码的时候),除非你是机器人)。 但在浏览器中,默认情况下用户是看不到错误的。所以,如果脚本中有错误,我们看不到是什么错误,更不能够修复它。 为了发现错误并获得一些与脚本相关且有用的信息,浏览器内置了“开发者工具”。 通常,开发者倾向于使用 Chrome 或 Firefox 进行开发,因为它们有最好的开发者工具。一些其他的浏览器也提供开发者工具,有时还具有一些特殊的功能,通常它们都是在追赶 Chrome 或 Firefox。所以大多数人都有“最喜欢”的浏览器,当遇到某个浏览器独有的问题的时候,人们就会切换到其他的浏览器。 开发者工具很强大,功能丰富。首先,我们将学习如何打开它们,查找错误和运行 JavaScript 命令。 Google Chrome打开网页 bug.html。 在 JavaScript 代码中有一个错误。一般的访问者看不到这个错误,所以让我们打开开发者工具看看吧。 按下 key:F12 键,如果你使用 Mac,试试 key:Cmd+Opt+J。 开发者工具会被打开,Console 标签页是默认的标签页。 就像这样: 具体什么样,要看你的 Chrome 版本。它随着时间一直在变,但是都很类似。 在这我们能看到红色的错误提示信息。这个场景中,脚本里有一个未知的 “lalala” 命令。在右边,有个可点击的链接 bug.html:12。这个链接会链接到错误发生的行号。在错误信息的下方,有个 > 标志。它代表“命令行”,在“命令行”中,我们可以输入 JavaScript 命令,按下 key:Enter 来执行(key:Shift+Enter 用来输入多行命令)。 现在,我们能看到错误就够了。稍后,在 <info:debugging-chrome> 章节中,我们会重新更加深入地讨论开发者工具。 Firefox、Edge 和其他浏览器大多数其他的浏览器都是通过 key:F12 来打开开发者工具。 他们的外观和感觉都非常相似,一旦你学会了他们中的一个(可以先尝试 Chrome),其他的也就很快了。 SafariSafari(Mac 系统中的浏览器,Windows 和 Linux 系统不支持)有一点点不同。我们需要先开启“开发菜单”。 打开“偏好设置”,选择“高级”选项。选中最下方的那个选择框。 现在,我们通过 key:Cmd+Opt+C 就能打开或关闭控制台了。另外注意,有一个名字为“开发”的顶部菜单出现了。它有很多命令和选项。 通常,当我们向控制台输入一行代码后,按 key:Enter,这行代码就会立即执行。如果想要插入多行代码,请按 key:Shift+Enter 来进行换行。这样就可以输入长片段的 JavaScript 代码了。 ...

September 9, 2019 · 1 min · jiezi

互联网垄断认定标准政策趋于统一-体现包容原则

9 月 1 日,由国家市场监管总局制定的3部反垄断法配套行政规章《禁止垄断协议暂行规定》《禁止滥用市场支配地位行为暂行规定》《制止滥用行政权力排除、限制竞争行为暂行规定》正式落地施行 《禁止滥用市场支配地位行为暂行规定》充分考虑了新经济行业的特殊性,也体现了包容审慎的监管原则。在市场支配地位认定方面,暂行规定吸收了对互联网行业竞争特点、用户数量、网络效应、掌握和处理数据能力等考虑因素,摆脱了传统分析路径依赖,以更加科学的标尺评估企业的市场控制力 3 部配套行政规章实现了我国反垄断执法机构整合后,反垄断法律制度的统一、细化和优化,是在反垄断法修订之前我国主要反垄断法律制度的最新和最重要的发展,这对于加强我国新形势下的反垄断执法工作意义重大。 新闻来源:法制日报

September 9, 2019 · 1 min · jiezi

前端开发者可以选择哪些代码编辑器

代码编辑器程序员接触时间最长的就是代码编辑器。 代码编辑器主要分两种:IDE(集成开发环境)和轻量编辑器。很多人喜欢这两种各选一个。 IDEIDE(集成开发环境)是用于管理整个项目具有强大功能的编辑器。顾名思义,它不仅仅是一个编辑器,而且还是个完整的开发环境。 IDE 加载项目(通常包含很多文件),并且允许在不同文件之间切换。IDE 还提供基于整个项目(不仅仅是打开的文件)的自动补全功能,集成版本控制(如 git)、集成测试环境等一些其他“项目层面”的东西。 如果你还没考虑好选哪一款 IDE,可以考虑下面两个: Visual Studio Code(跨平台,免费)WebStorm(跨平台,收费)对于 Windows 系统来说,也有个叫 “Visual Studio” 的 IDE,请不要跟 “Visual Studio Code” 混淆。“Visual Studio” 是一个收费的、强大的 Windows 专用编辑器,它十分适合于 .NET 开发。用它进行 JavaScript 开发也不错。“Visual Studio” 有个免费的版本 Visual Studio Community。 大多数 IDE 是收费的,但是他们都可以试用。购买 IDE 的费用对于一名合格的程序员的薪水来说,肯定算不了什么,所以去选一个对你来说最好的吧。 轻量编辑器“轻量编辑器”没有 IDE 功能那么强大,但是他们一般很快、优雅而且简单。 “轻量编辑器”主要用于立即打开编辑一个文件。 “轻量编辑器”和 IDE 最大的区别是,IDE 一般在项目中使用,这也就意味着在开启的时候要加载很多数据,如果需要的话,在使用的过程中还会分析项目的结构等。如果我们只需要编辑一个文件,那么“轻量编辑器”会更快。 实际上,“轻量编辑器”一般都有各种各样的插件,这些插件可以做目录级(directory-level)的语法分析和补全代码。所以“轻量编辑器”和 IDE 也没有严格的界限。 下面是一些值得你关注的“轻量编辑器”: Atom(跨平台,免费)。Sublime Text(跨平台,共享软件)。Notepad++(Windows,免费)。Vim 和 Emacs 很棒,前提是你知道怎么用。不要争吵上面列表中的编辑器都是我和我的朋友(他们都是我认为很优秀的开发人员)已经使用了很长时间并且很满意的。 世上还有很多其他很好的编辑器,你可以选择一个你最喜欢的。 选择编辑器就像选择其他工具一样。要看你的项目,以及个人的习惯和喜好。 现代 JavaScript 教程:开源的现代 JavaScript 从入门到进阶的优质教程。在线免费阅读:https://zh.javascript.info/ 扫描下方二维码,关注微信公众号「技术漫谈」,订阅更多精彩内容。 ...

September 8, 2019 · 1 min · jiezi

一起来聊一下-JavaScript-的用途和那些特性

JavaScript 简介我们一起来聊一下 JavaScript,用它能做什么,它有哪些特性,以及一些跟它配合使用的技术。 什么是 JavaScript?JavaScript 最初的目的是为了“赋予网页生命”。 这种编程语言我们称之为脚本。它们可以写在 HTML 中,在页面加载的时候会自动执行。 脚本作为纯文本存在和执行。它们不需要特殊的准备或编译即可运行。 这方面,JavaScript 和 Java 有很大的区别。 为什么叫 <u>Java</u>Script?JavaScript 在刚诞生的时候,它的名字叫 “LiveScript”。但是因为当时 Java 很流行,所以决定将一种新语言定位为 Java 的“弟弟”会有助于它的流行。 随着 JavaScript 的发展,它已经变成了一门独立的语言,同时也有了自己的语言规范 ECMAScript。现在,它和 Java 之间没有任何关系。 现在,JavaScript 不仅仅是在浏览器内执行,也可以在服务端执行,甚至还能在任意搭载了 JavaScript 引擎 的设备中都可以执行。 浏览器中嵌入了 JavaScript 引擎,有时也称作 JavaScript 虚拟机。 不同的引擎有不同的“代号”,例如: V8) —— Chrome 和 Opera 中的 JavaScript 引擎。SpiderMonkey —— Firefox 中的 JavaScript 引擎。……还有其他一些代号,像“Trident”,“Chakra”用于不同版本的 IE,“ChakraCore”用于 Microsoft Edge,“Nitro”和“SquirrelFish”用于 Safari,等等。上面这些名称很容易记忆,因为经常出现在网上开发者的文章中。我们也会用到这些名称。例如:某个新的功能,如果“JavaScript 引擎 V8 是支持的”,那么我们可以认为这个功能大概能在 Chrome 和 Opera 中正常运行。 引擎是如何工作的? 引擎很复杂,但是基本原理很简单。 引擎(通常嵌入在浏览器中)读取(“解析”)脚本。然后将脚本转化(“编译”)为机器语言。然后这机器语言代码快速地运行。引擎会对流程中的每个阶段都进行优化。它甚至可以在运行时监视编译的脚本,分析数据流并根据这些对机器代码应用优化。最后,脚本会执行地非常快。 ...

September 7, 2019 · 1 min · jiezi

地图POI类别标签体系建设实践

导读POI是“Point of interest”的缩写,中文可以翻译为“兴趣点”。在地图上,一个POI可以是一栋房子、一个商铺、一个公交站、一个湖泊、一条道路等。在地图搜索场景,POI是检索对象,等同于网页搜索中的网页。在地图客户端上,用户选中一个POI,会有一个悬浮的气球指向这个POI。 如上图左边,这家商场内的屈臣氏是一个POI;而所谓类别标签,就是在类别维度对POI属性的一种概括,比如,屈臣氏的类别标签化妆品,而屈臣氏所坐落的凯德mall,类别标签是商场;右侧则是商场query搜索召回的一系列POI,都具有和query相匹配的类别属性。 上图也展示了类别标签的两种主要使用场景:为用户提供丰富信息和支持决策,一方面在前端为用户显示更丰富的信息,另一方面支持搜索的类别搜索需求,主要是在地图场景query和POI双方都具有丰富的多义表达,通过传统的文本匹配引擎或者简单的同义词泛化是难以达到目的的,因此挖掘标签作为召回和排序依据。 我们的类目体系建设主要依据以下几点: 用户实际的query表达,主要为了支持用户的搜索需求;真实世界的客观类目分布,以及pm对该分布的认知;不同标签间的从属、并列关系。最终每个大类将构建一个多层的多叉树体系,比如购物类别的划分: 类别标签建设的难点我们的目标是打标,就是将POI映射到上面类目树体系的各个节点上,很显然这是一个分类问题,但又不是一个单纯的分类问题: 多标签问题:屈臣氏打上化妆品的标签,是一个一对一的映射;而部分POI,可能同时具有多个标签,比如汤泉良子,可以洗浴、按摩、足疗;xx家具店,打上家具店标签同时,必须打上其父节点家居建材标签。整体上,这是一个多标签问题,而不是多分类问题;文本相关问题:大多数的POI具有比较直观的文本标题,比如小牛电动车、海尔专卖店、东英茗茶、熙妍精衣、新生贵族,通过名称文本分析,可以预测出比较正确的结果。另一方面,又不是纯文本问题,比如苹果专卖,仅从文本无法确认是一个手机店,还是一个水果店;还有一些表达,比如老五批发,低频表达或者不含类别信息,则需要引入其他特征来进行解决;综合性问题:算法可能解决主要问题,但现实世界的复杂,通过单纯的算法是难以完全覆盖的,比如酒吧中夜店和清吧的区分,三甲医院、汽车4S店的打标,低频品牌的识别等,通过受限的样本和特征无法尽数解决,但又无法置之不理。此外,应用方对于标签的准召和产出速率也有较高的要求:打标准确率低,则可能导致用户搜索时召回错误POI;覆盖率低,则可能导致用户期待的结果被漏掉;而待建设的大分类有20+,同时每个大分类有数十个子标签,大小标签总量上千。则必须使用高速高效、准召均有保障的方法进行打标,才能有效落地收益。 综上,我们要解决的类别标签打标的主要问题,是一个多标签分类问题,主要使用文本进行识别,但有必要引入其他非文本特征或手段,才能比较完满的解决。 技术方案整体方案设计 如图,为了高效完成打标,我们设计了主要的流程模块,具体描述如下: 特征工程:文本特征解决最主要的打标问题,但同时地图场景下POI文本偏短,长尾分布广泛,具有较多的低频文本或者完全不含类目信息的低频品牌等,而评论、简介等长文本描述往往偏于高频,而难点在于解决低频。因此特征设计上,尽可能使用一些通用特征,比如POI名称、typecode(生产方维护的另一套分类体系)、来源类别(数据提供方的原始零件类别)、品牌等通用特征;对于高频专有特征或数据,一般不在通用模型中进行识别;样本工程:样本的挖掘和清洗、以及模型的设计也是旨在解决通用性的打标问题,POI表达的多样性,而同时标签数量极多,导致需要的样本量也极大,标注成本较高时,必须考虑人工标注之外的样本来源;分类模型:单纯的文本分类模型,不能解决非文本的问题,同时多标签的问题,也不能单纯使用多分类模型来解决;我们设计了多种贴合业务的模型改造工作;多路融合:分类模型能解决主要的问题,但不是全部问题。在地图场景下,总有些算法之外的待解问题,如5A景点、三甲医院,以及各类品牌,模型难以尽数处理。我们设计多路打标,如品牌库对品牌效果进行兜底,引入外部资源批量解决非算法问题,引入专项挖掘解决非通用的打标类别等等……总体上对模型之外的问题引入外部知识辅助进行打标,从整体上收敛问题。后面将重点介绍业务的主要难点,在样本和模型上的主要工作。 样本工程 样本来源&清洗 样本方面,经过一些实验论证,标签数量多,每个标签需要的样本量大,人工标注几乎不可能满足要求,因此考虑主要使用点击日志和一些现成的外部资源: 点击日志数据量大,能够循环产生,同时反映了用户最直接的意图;缺点是含有的噪声大,同时用户点击往往偏向于高频,低频表达较为稀缺;外部资源数据量小,但多样性较好,能够弥补点击数据在低频表达不足的问题。通过引入这两方面的样本,我们很快得到了数百万的原始样本,这么大量级的样本,即使清洗依然是一个及其巨大的工作量,为了高效地清洗样本,我们设计了结合主动学习的两级模式: 在两方面的初始样本引入后: 首先对数据进行抽样清洗,并将清洗过程抽象为业务规则,进行全局清洗和迭代;当整体系统且明显的噪声趋于收敛后,我们通过对剩余数据进行划分,每次抽取部分数据建模,对另一部分数据进行识别,然后对识别不好的一部分数据进行人工标注;如此反复迭代多轮。通过一种类似主动学习的方式,使人工标注的价值最大化,避免低信息量重复样本的反复标注造成人力浪费。下面具体介绍点击样本的挖掘思路。 点击样本挖掘 搜索点击日志凝聚了无数用户的需求与智慧,大多数的搜索业务都能从中挖掘最原始的训练样本。具体到当前的挖掘业务,首先要解决的问题是样本表达形式的不一致问题。具体描述为: 点击数据:query -> POI需要样本:tag -> POI解决方案:tag -> query -> POI如下图,要挖掘内衣的样本集,人工定义了该标签的映射的query集合seed query,再通过这个query集合去召回对应的click样本,就可以直接作为标签内衣的样本。 在实际操作中,我们增加了seed query到泛化集合的映射,即由人工定义的高频query集合泛化到一个更大的同义集合后,再由同义集合进行click样本的召回,其出发点在于: 高频的query主要点击集中于高频的样本,要解决的问题难点在于低频表达的挖掘,因此对query进行从高频到低频的泛化,以期通过低频query召回低频的样本表达,比如丝袜到休闲棉袜,内衣到维密、都市丽人等方面的扩展。 query泛化过程: query的泛化,需要通过高频集合获得近义的低频表达,同时又要保证不会过度的语义扩散,导致泛化集合偏离了标签原本的语义。我们主要尝试了以下方案: word2vec:通过对点击或外部语料学习word粒度的向量表达,对query中的多个word进行maxpooling,得到query的向量表达,再通过query向量去全量集合中搜索向量距离近的其他query。该方法的主要问题是通过word粒度的embedding刻画的query表达,在泛化过程中不太受控,容易引入大量的噪声,清洗难度大,同时存在显著case的漏召。同义词:该方法召回非常受限,且得到的query不一定符合用户的自然表达。Session上下文:地图场景的session普遍较短,召回受限且语义有偏离,准召均不高。推荐方法:继续考虑点击日志的挖掘,将各个query比作user,点击的POI作为item,考虑引入推荐的思想进行相似query挖掘——即点击相同或相似POI的query具有某种程度上的相似性,而query和POI点击关系天然构成一个社交网络,由此参考了两种基于图的推荐方式:SimRank,通过query与POI间的点击关系形成二部图,两个节点间的相似度由他们共同关联的其他所有点加权平均得到,通过反复迭代多轮后,相似度趋于稳定,得到两两query间相似度; a、b表示图中的两个节点,定义自相关度为1,即s(a, a)=1,I(a)、I(b)表示与ab相连的节点集合,对于不同的a、b,其相似度描述为: DeepWalk,是一种学习网络中节点的表示的新的方法,是把language modeling的方法用在了网络结构上,从而使用深度学习方式学习网络中节点间的关系表示。类似simrank方式,通过query与POI间的点击关系构成点击网络,在点击网络上进行随机游走,通过对游走片段的学习,得到query的向量表达,再通过向量表达计算query的相似召回。 推荐方法的两种方案中,simrank计算量极大,在小数据量上实验经过了较长时间的迭代,而数千万点击数据计算资源和计算时间都将变得极大,成本上不合算;而DeepWalk随机游走方式在实际测试中取得了较好的效果: 比如,原始query为涂料,泛化得到其子分类、品牌等,ETC可以得到一些地方性的命名表达。 不同于将query分词后学习其word粒度embedding表达,DeepWalk在这里直接学习整个query,即Sentence的表达,避免了将query分词为多个word再pooling过程中语义偏移;而且直接query粒度的表示学习,得到的挖掘结果更加符合线上的实际表达,便于我们后续召回点击POI样本的操作;同时粗粒度的学习对网络节点间社会关系会有更优的保留。 整体上,通过query泛化步骤,样本集合的低频表达比例明显提升。 模型设计与迭代 使用分类的方式解决打标问题,是业类相似场景的通用做法。具体到业务角度,我们需要模型解决的打标数据范畴主要分为四类: 高频后缀识别低频后缀识别品牌识别非文本识别(typecode、来源类别等)前三类可以使用纯文本分类模型,但非文本特征无法直接用文本模型进行整合;同时,样本数据在前期具有噪声大、分布不均衡的特点,都需要兼顾。 分层多分类 前期使用多分类模型解决分类问题,对于每一个非叶节点构建一个多分类器,从根部开始构建,分到最后一级输出为叶节点。其特点是直观,和标签体系比较匹配。 这种方式有比较明显的缺陷:方案结构复杂不稳定,维护难,样本组织相当繁杂;上级分类模型的错漏,将层层影响下级的分类效果。 每个标签二分类 业务前期受限于优化前的搜索效果,样本集有一定量的噪声,同时体系在调研期间也会时常迭代,不断优化,需要一个解释性强、兼容变化,同时又能直接支持多标签的模型。 因此,我们尝试了对每个标签训练二分类模型,待识别的POI经过所有的二分类模型预测后结果合并使用,再进行后续的业务逻辑建设,该方式较好地解决了业务多标签的场景,避免同一POI多个标签间的冲突。 在样本方面,使用ovr方式组织样本,样本比例可调整(正负例比例、负例来源比例等),兼容了业务样本不均衡问题。 统一模型 单标签的二分类模型具有良好的解释性,以及每个标签建模带来的灵活性,很好匹配了业务的前期需求,迅速推进标签效果落地,线上恶劣case大量收敛,同时较原来的人工专家规则方式,召回明显提升的同时,效率也提升十倍以上。 前期为了短平快地推进业务,使用简单二分类模型迅速解决了主要问题,随着搜索效果的不断提升,业务上也有了更高的质量要求,而LR二分类模型依然存在一些问题: 使用词袋特征,维度膨胀特征选择造成低频特征损失泛化性能一般,需要大量建设业务规则独立建模,标签间的关系识别不充分(父子、共现、互斥)负样本大量降采样,浪费样本模型数量极多,维护成本高为了达到更好的效果,深度模型的升级有了必要,深度文本分类,常用的模型有cnn、rnn以及基于attention的各种模型,而attention模型主要解决的是长文本的深层语义理解问题,我们业务场景需要解决的是短文本简单语义的泛化问题,同时考虑到需要和非文本特征结合,以及分类效率方面的考虑,我们选择textCNN模型。 ...

August 28, 2019 · 1 min · jiezi

互联网局域网万维网三者区别

互联网(internet)互联网是指多台设备(如计算机、手机等)通过特定通信协议(TCP/IP、IPX/SPX、NetBIOS、NetBEUI、Apple Talk)组成的网络。一般可分为以下三种: 局域网局域网LAN(Local Area Network):一般不大于10公里,而且通常只使用一种传输介质;地域上看局域网通常是用在一座建筑物或一个工厂内,使用上通常是某一单位或某一部门使用,规模上一般不超过几百个用户。城域网城域网MAN(Metropolitan Area Network):城域网是一种比局域网更大的网,通常覆盖一个城市,从几十公里到100公里不等,可能会有多种介质,用户的数目也比局域网更多。广域网广域网WAN(Wide Area Network):一切大于城域网的网都可称为广域网。不同的局域网、城域网或广域网还可以根据需要互相链接构成规模更大的国际网。因特网(Internet)因特网是由上千万台设备组成的网络(一般指具有一定规模的网络)。因特网使用TCP/IP协议让不同设备彼此通信。设备接入因特网需要满足两个要求,首先网络设备必须安装TCP/IP协议,用于和因特网的其他网络设备通信;其次必须具备一个公网地址,用于在因特网中标记该设备,使得因特网的其他网络设备能将其定位。 万维网(World Wide Web)万维网是基于因特网,通过TCP/IP应用层协议中的HTTP协议提供的服务,浏览器使用HTTP协议与服务器进行通信,发送数据请求,获取HTML文件,再通过浏览器解析,最终以网页的形式呈现给用户。 三者联系互联网 > 因特网 > 万维网只要多台设备之间可以通过特定的通信协议进行通信,它们便组成了一个互联网。因特网中的设备则必须使用TCP/IP协议通信,且要构成一定规模的网络(包含若干子网络),不同子网络必须具备自己的公网地址。万维网则是TCP/IP应用层协议中的HTTP协议所提供的服务,实现用户通过浏览器浏览网页。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序: HTTP(Hyper Text Transfer Protocol,超文本传输协议)FTP(File Transfer Protocol,文件传输协议)SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)Telnet远程登录

August 21, 2019 · 1 min · jiezi

阿里云与A站在一起后悄悄干了件大事

八月盛夏,“AcFun弹幕视频网站”(简称“A站”)的视频服务器全面迁移上阿里云(此处应有掌声)! A站去年与阿里云达成此项合作。在迁移过程中,阿里云提供专业技术解决方案团队,为A站建立就近迁移方案,定制专门的迁移工具,同时加以自动和人工双重校验环节,在确保数据安全的情况下完成高效迁移。整个迁移上云的工作历时半年多,完整迁移了A站建成十多年以来,累计数百万份的视频稿件。 去年6月快手正式收购A站。7月,快手派出的第一批服务端开发团队负责人飞哥与团队入驻A站。“A站要重生,播放体验不能弱于行业内。”飞哥说。 将视频系统重构优化的最佳方式是全面迁移上云,完成服务器迁移后,A站基础配置明显提升,服务器不再宕机。数据显示, A站在今年7月视频UP主数量环比增加45%,日弹幕总数增加55%,日视频投香蕉数量(用户给UP主的打赏)总数增长88%,粉丝数增长128%,日活环比实现成倍的增长。 此外,在合作过程中,A站还携阿里云在原有的基于有效时间的签名鉴权算法上,更新了一套“二次鉴权中心”的方案,借助数据算法标记出盗链网站,通过鉴权规则阻止恶意访问。方案实施后,屏蔽A站上每日多达数十亿次的盗链访问请求,释放了近90%的宽带资源。 “现在我们已经不需要去监控或关注云服务质量,阿里云能够一站式解决,在A站最关键的时候阿里云提供了最好的服务。”飞哥说。 云计算作为一项新兴技术,经历10年发展已在关键技术和应用规模上全面超越传统IT。全面上云的拐点到了,上云后综合成本下降一半,稳定性有10倍以上提升,安全性更是提升50倍。 趋势嗅觉灵敏的企业不仅将网站APP等互联网业务放在云上,还将核心系统在内的全量业务上云。其中,不仅包括创业公司和互联网公司,大型企业、公共服务机构也在全面上云。 行业分析认为,阿里云在视频领域拥有绝对的技术优势,依托于全球范围内2500多个CDN节点、120 T带宽的资源储备以及全自动的质量监测和流量调度能力,搭建超大规模的媒体处理、分发平台,每天连接10亿台设备,每年超过100EB的数据实现分发。 阿里云视频云帮助客户快速构建稳定、高效、全面、易用的企业级视频应用,已在超低延时直播、大型赛事直播、移动短视频、智能视频生产、版权视频保护、实时音视频通信等业务场景推出完整的产品与解决方案,成为文娱、教育、金融、传媒、电商、游戏等众多行业数十万企业客户的共同选择。 本文作者:阿里云头条阅读原文 本文为云栖社区原创内容,未经允许不得转载。

August 19, 2019 · 1 min · jiezi

阿里研究员吴翰清世界需要什么样的智能系统

阿里妹导读:吴翰清,被大家亲切地称为“小黑”“道哥”。他是阿里巴巴研究员,更是一位“白帽黑客”。15岁,考入西安交大少年班,毕业后应聘阿里。23岁,成为阿里最年轻的高级技术专家。32岁,被评选为2017年度全球35位35岁以下的青年科技创新人才(TR35)。网上有许多关于他的猜测,然而,他始终保持低调,专注于自己热爱的事业。2014年之后,他几乎不再写文章;但在今天,他有话想说,关于自己,关于科技,关于未来,说给你听,说给世界听。 不得不说的话在过去的18个月里,我拒绝了所有的采访,投入了全部的精力专心在做一件事情。所以我想先借着这篇文章澄清一下18个月以来网上的所有关于我的新闻、抖音视频等,都是好事者编撰的我的段子,用来吸取流量的假新闻。这些假新闻让我很苦恼,因为这些新闻将我描绘成为了我最不想成为的人,里面的我是一个符号,而不是真实的我。我为此专门给今日头条写过信,要求审核并过滤这类不实传播,但只清净了一个月。我想再进一步只有向监管部门反馈,以及继续保留法律追责的权利。 这些未经我许可的新闻和视频,将我描绘成了一个无所不能的人,连带着马老师也受到了牵连。我想有没有我,马老师都睡得很安稳。阿里的安全是上千名工程师共同努力的结果,我一个人的力量在其中的贡献极其微薄。我也从没有黑过阿里的网站,只是以前因为工作性质在授权的情况下对阿里的业务系统做过很多的安全测试。我们不应该捧吹以破坏为目的的黑客,那是犯罪,是我最不想成为的人。我过去的工作是对抗黑客攻击,打击网络犯罪,因此以破坏系统的黑客来描述曾经的我,是对我最大的羞辱。真正的黑客精神是挑战权威,追求开放、自由,而并非入侵计算机系统。我想是时候终止这些不正确的传播了。 至于我过去取得的一点不足为人道的成就,我想99%的读者都没搞明白我为什么会在2017年被评为 MIT TR35,大家只是在看个热闹,鼓鼓掌。但我不需要这样的掌声,我不需要大家为我个人鼓掌,我希望大家是为我的作品鼓掌。这也是为什么在2014年以后我几乎不再写文章的原因。我希望大家记住的是我的作品,我对社会的贡献,而非我个人的成长轨迹。从这个角度来看,我对自己还非常不满意,人们关注我的经历多过我的作品,所以我还得加倍努力。 就我个人来说,从2017年下半年开始,我离开了网络安全领域,进入到了今天大家所说的人工智能领域。我带领团队在浙江,在上海,在重庆建设了很多关键的基础设施系统。尤其是2018年在上海做的事情,倾注了我的所有心血,我从来没有如此认真地做过一件事情,结果也很好。只是这些事情并不曾对外宣传,故不为外人所知。这18个月来关于我个人的假新闻满天飞,让我哭笑不得,因为这些段子手连我最引以为豪的事情都没搞清楚。 所以我今天决定写一篇文章,作为一名工程师,我想把我对未来的判断写下来,也许可以帮助一些人少走一点弯路。只代表个人的看法,不代表公司的观点。 科技的进步是为了解放生产力我将生产力的进步分为五个阶段:体力劳动,机械化,电气化,信息化,智能化。其中每一次科技的进步,都会带来生产力的解放,对社会的改变是巨大的。 在140年前发生的第二次科技革命,让电力深入到各行各业。自从中央发电站和交流电变压器等关键技术构建的电力基础设施成型后,获取电力的成本逐渐降低,各种各样的电气应用开始涌现,人们获取到了新的、稳定的能源。 我们现在知道电力最早是应用在电话、电报、电灯上的,也正是电气照明这一需求,拉动了电力基础设施的发展。因为在当时电力的用途比较单调,并没有今天这么琳琅满目的电器。在100年前爱迪生通用电气与威斯汀豪斯之间的主要竞争就是聚焦在电气照明领域。我们很难说在这个过程中,到底是电灯泡更重要,还是发电站更重要。我曾经比喻说当前云计算面临的窘境,就是「中央发电站」已经造出来了,我们有单集群上万台服务器规模的算力基础设施,但是「电灯泡」在哪里却没有找到。我们用「中央发电站」在点「煤气灯」,今天托管在云计算上的业务,大多数依然是「信息化系统」。而理想中的会消耗大量算力的应用,应当是「智能化系统」。我们一直在苦苦追寻云计算的「电灯泡应用」,却求之不得。 这里需要讲清楚「信息化系统」和「智能化系统」的区别。我认为「信息化系统」的本质是编辑数据库,一个业务系统如果存在大量人工交互,依赖于人提交表单来完成业务,那么就是一个信息化系统。而我理想中的「智能化系统」,应该是以自动完成任务为目的,以任务作为输入,以完成的结果作为输出,中间的过程应该是机器高度自动化完成的。以其完成任务的复杂度,来评价其智能程度的高低。 从这个角度看,「智能手机」并不智能,依然是个「信息化系统」。市面上形形色色的智能系统也都只是冠上了智能的名号在鱼目混珠。我并不是说「信息化系统」没有价值,信息化系统很有价值,但不是下个时代的东西。自从计算机技术发展以来,产生的各色各样的信息化系统极大地改变了世界,完成了从「电气化」到「信息化」转型升级的重要一步。这就是我们看到各色各样的计算机系统开始应用在各个领域,帮助人们更加高效的管理工作和提供服务。 互联网在这一过程中扮演了放大作用。我认为互联网本身并不是生产力,互联网只是连接了成千上万个信息化系统,从而具备了规模效应。互联网是规模经济,能让一个系统的价值实现上千倍、上万倍的放大,但是生产力是信息化系统本身提供的。能够接收互联网连接服务的终端,是浏览器,是 iOS 和 Android,这些端的演进本身是重要的。百度通过互联网连接了人和信息,腾讯通过互联网连接人和人,阿里通过互联网连接了人和信息化服务。但是这些都不是下一个时代的东西。 下一个时代会发生的事情,首先是出现智能化系统对信息化系统的升级换代,然后会出现通过互联网连接所有智能化系统的公司。智能化对信息化的升级换代,是一次巨大的生产力进步,处于社会变革中的商业公司的结局是适者生存。从历史来看,在信息化时代的PC操作系统升级换代到移动操作系统,其过程就是天翻地覆的。苹果的iPhone 发布之后,所有的开发者都不再给微软的 Windows 写软件,而转去给 iOS 写软件,对微软带来了强烈的冲击,如果不是微软后来又抓住了云计算的机遇,就很可能会从此一蹶不振。从商业发展的角度看类似事件一定会发生,在信息化时代的庞然大物很可能随着一次生产力的变革就变得无足轻重。那么现在所有的问题在于,未来世界需要的智能系统到底是什么? 让机器获得智能,一直是计算机科学家孜孜以求的事情。在过去简单的专家系统,依靠经验和规则,也能处理简单的任务。但有一个弊病是对于专家经验未覆盖的异常情况,机器就不知道怎么处理了。所以后来出现了数据驱动诞生的智能。 我们看到当机器具备一定的智能后,就能处理相对简单的任务,从而部分地解放人的生产力,此时增加机器规模就等同于增加人力的规模。而机器智能和人的智能又各有所长,机器运算量大且不知疲倦,因此对于很多工作都有可能做到精细化管理。这往往能带来成本的节约。 比如在过去公交车的排班是按照经验,在一个线路里设置好公交车的数量,但是如果市民的出行情况发生波动时,公交车的供需关系之间一定会存在差异,有的线路会繁忙,有的线路则会空闲,从而出现资源的浪费。要解决这一问题需要先统计清楚每辆公交车每一趟的精确载客人数,再依靠机器智能精细化的调度公交车到不同的线路,就能在同等资源下实现效率最优。因此使用机器智能的好处是显而易见的。 五年前做不出大规模的机器智能系统我们看到在生产力发展的过程中,从信息化到智能化的这一转型升级正在到来,已经到了爆发的前夜。这得益于四项技术的成熟:云计算、大数据、IoT、网络连接技术。 我们知道机器智能当前的发展是得益于对脑科学的研究,以及算力的进步,让神经网络进化到了深度学习,从而在视觉、语音等领域有了重大突破。算力的重要性毋庸置疑,但是光有算力依然难以在实际的应用中取得成功,还需要其他几项技术的成熟。在当前的技术环境来说,云计算为智能提供了足够的算力,是算力基础设施;大数据技术提供了数据处理的方法论和工具,是数据基础设施(当前还没有垄断性的数据基础设施,碎片化严重);IoT 技术将智能设备的成本降到了足够低,为部署丰富的神经元感知设备提供了基础;网络连接技术,从4G到5G,为数据的高速传输提供了重要基础。 如果有科技树这种说法的话,那么机器智能的大规模应用,就需要先点亮前四个技术,这是基础。在五年以前,这几项技术的成本是制约我们将智能技术大规模应用的主要瓶颈。到今天已经逐渐成熟了。 在一项新技术刚出现的时候,我们往往会遇到两个问题。 第一个问题是人才的稀缺性问题。我们知道一个懂深度学习或其他机器智能技术的博士生刚毕业的年薪可能比得上一个工作了十年的程序员。业界各处都需要机器智能,供不应求。 第二个问题是技术的成本问题。新技术刚出来的成本一定是昂贵的,就像云计算刚出来的时候也是先解决能力问题,再解决效率问题。我前些时看一个报告,AWS 的 EC2 推出到现在连续降价了57次。我们熟知的摩尔定律,计算的性能每18个月翻一倍,也就意味着同等算力的硬件每18个月会降一半的成本。机器智能作为新技术也有同样的规律,在一开始我们不要指望它的成本会足够便宜到能进入千家万户,新技术的普及需要时间。只是我们往往迫不及待。 这两个问题决定了机器智能在一开始的时候,应该首先被应用在对社会效率撬动最大的那个点上。从商业上我们要找到这样的场景,来让这项技术脱离实验室,走向社会,通过商业来源源不断的滋养这项技术的迅速成长。 世界需要什么样的机器智能系统这两个问题随着时间的推移很快就能解决。但今天产业界真正碰到的问题我认为是搞偏了方向。这体现在两个方面。 第一个问题是未来不应该存在一个「人工智能」的产业,我们今天的分类就分错了。就像自电力基础设施诞生以来,各行各业都需要用电,因此电力成为了一个关键生产要素。我认为未来智能也是一个关键生产要素,每个行业都需要,因此不需要单独划分一个人工智能产业。单独搞了一个人工智能产业,反倒不知道这些公司在干什么了,这些公司自己也产生了困惑。最终应该像今天的零售业一样,每个做零售的都有个电商部门,会通过互联网来做营销和销售。未来每个企业也应该有一个部门,就是负责他们的智能系统的建设与训练。要像训练宠物一样训练智能系统,使他具备智能。这不是某一家人工智能公司要做的事情,而是每家公司都要自己做的事情。 第二个问题和机器智能技术的发展有关。因为最近这次机器智能的热点是从深度学习开始,在视觉、语音等领域有了巨大突破,因此产业化后的企业往往都是在做视觉、语音、自然语言处理等工作。但是我们千万别忘了完整的人脑智能是从「感知」到「行动」,并通过不断的反馈完成高频率的协同,最终诞生了智能。 只做「感知」是一个巨大的误区,从技术上讲没有问题,但是从商业上讲创造的社会价值就很有限了,因为其解放的生产力相对是有限的。 从生产力发展的角度来讲,评判一个智能系统的社会价值,应该以它解放生产力的多少来衡量。只做「感知」就是只能看,但是做了这么多大型项目后,我发现所有的价值创造都是在于「处置」环节。因此只做感知,很难讲清楚投入产出是否值得,但是一旦开始进入到「行动」环节,就会开始解放生产力,价值是可被量化的。这里的行动,是机器智能实现了对人力或其他设备的调度。 实际上从技术发展的角度看,我们早就拥有了让机器智能做决策的能力。搜索引擎和个性化推荐,就是典型的通过机器智能做决策。通过每天处理海量的数据,最终实现精细化的匹配。 所以我认为一个完整的「智能系统」,是包含了「感知」与「行动」,其中支撑行动的是决策和调度的技术。而衡量这个智能系统是否有价值的标准,是看其解放的生产力的多少。 遗憾的是,到今天为止我认为业界并不存在一个理想的「智能系统」。业界当前的状态我称之为「有智能,没系统」。很多人工智能的创业公司拥有局部的智能能力,比如视觉、语音、NLP、知识图谱、搜索、推荐等中的一项或多项技术,但是很少有公司有完整的技术栈。而像 BAT 等公司具备完整的技术栈,但是却并没有将所有的技术整合成为「感知」+「行动」的一个完整系统,而是各项技术以碎片化的形式存在。尤其是将所有技术应用到某一个具体场景中解决某一个具体问题的,更是寥寥无几,而这正是催生出这一智能系统的关键所在。所以这是一个工程化的问题,工程化的挑战在于整合所有智能技术,实现完整的「感知」+「行动」能力,并有效的控制成本,实现对开发者友好的接口。 在智能技术的角度来看,「自动驾驶」和「智能音箱」是两个完整的从「感知」到「行动」闭环的场景。我认为这两个场景可以用来打磨机器智能技术,但是当前在商业上比较难成功。「自动驾驶」解放了所有的驾驶员,对解放生产力的价值非常明显,但是因为受制于今天城市的道路基础设施,因此对老城市的意义不大。今天城市的道路不是为自动驾驶设计的,也很难容纳下自动驾驶的汽车。因此自动驾驶更适合航空、航海、物流等领域,商业范围一下小了很多。「智能音箱」综合了多项机器智能技术,其核心技术「对话机器人」被称为人工智能领域的圣杯,想要做好难度相当之大。但是「智能音箱」当前的阶段对家庭中各种任务的生产力解放极其有限,价值很难讲清楚,最后沦为玩物的可能性比较大。尽管如此,随着时间的推移,随着基础设施的更新换代,这两项技术也会逐渐焕发出他们的生命力。 如果用航空业来比喻的话,今天的智能技术,就好比造飞机,市面上已经有了很多零件和引擎,但是所有的厂商都拿着零件当飞机卖,客户以为他买了一架飞机,其实只是买了个零件(因为生产力并没有得到多大的解放)。而今天真正的难点在于飞机设计图纸都还没有。 所以我打算先画一张,造架飞机玩玩。 构建智能时代飞机想要真正飞上天,还需要几个东西。 首先是飞行员。飞行员不一定要懂得怎么造飞机,造飞机是个门槛很高的活。但是飞行员要懂得怎么开飞机,最后还要让人人都能坐飞机。我认为飞行员就是未来各个企业里智能部门的员工,他们负责训练买来的智能系统,让智能系统真正具备智能。由于各个企业拥有的数据的不同,以及「飞行员」技能的高低和责任心,最后的各个企业的智能系统的聪明程度也会出现差异。世界是丰富多彩的。 其次是航道。我认为航道依然是基础设施提供商的,包括运营商、云计算厂商等。 最后是机场。机场需要负责所有航班的调度和协同,为所有的飞机提供服务。这是最有意思的地方。我认为「机场」是最后真正的商业模式,就像苹果的 AppStore一样。 我认为在智能时代的「机场」,最重要的工作是给机器智能系统提供服务,而并非给人提供服务。 想象一下未来互联网里,70%-80%的人口是机器智能,他们处理了未来世界的绝大多数工作,而每一个机器智能又是有一个主人的。其主人可以是个人,也可以是组织,但都是有主权的。每一个机器智能存在的目标都是为了完成某个或多个任务。那么为所有的机器智能提供服务,就会是一个巨大的商业模式。 机器智能系统的自动协同是通往未来的关键路径 同时我也认为当前的机器智能产业,过于重视人与机器的交互,而忽视了机器与机器的交互。而后者才是更重要的事情。因为人与机器的交互依然是回到了信息化系统的老路上去,而机器与机器的自动协同,则是在进一步将智能系统的价值实现规模放大。 因此未来有必要给所有的机器智能定义一套语言,他们之间的交流可以像人一样拥有自己的语言,实现简单的逻辑。而所有机器智能之间的交互与协同,是不需要人工干预的,就像你家的孩子与邻居家的孩子自己会去玩耍一样,你不需要干预到他们的交流之中,他们自己会各取所需地完成各自的任务。 以「一网通办」的业务举例。在当前一网通办的主流实现办法是将政府各委办局的数据实现全量汇聚后,进行数据治理,并梳理流程,重塑业务。这种大数据应用的思路依然是停留在信息化建设的老路上,其弊端是想推动新技术落地的前提是流程先改革,同时各个不同地区的高度定制化导致很难在全国实现规模化的产品。但其实也可以有另外一种智能化的建设思路,让每个委办局自己建一个机器智能系统,其任务就是代替公务员处理各自的窗口业务。当市民来提交一个申请时,经过认证后,该委办局的机器智能系统就根据所需材料,自行向其他委办局的机器智能系统发出协同请求,经过几轮机器智能之间的交流和协同之后,市民很快就得到了他想要的结果。这种多个机器智能系统之间自动协同的机制,对流程的冲击明显会小很多。 机器智能之间的交互与协同需要通过网络连接到一起,但安全性是可控的,因为是业务之间的协同,而并非数据本身发生了交换。因为每一个机器智能都有自己的主人,所有的训练过程也都发生在其主体内部,因此数据并不需要被拿出来交换共享。主人可以设定机器智能什么能说,什么不能说,所有的安全控制都发生在智能系统内部,而一旦连接到互联网要与其他机器智能协同或使用「机场」提供的服务,就会转为「默认不信任」模式。 至于机器智能系统到底部署在公共云还是专有云,这并不是一个重要的问题,主人爱部署在哪里就部署在哪里。所以时至今日,云计算依然有被管道化的危险,就像运营商被互联网内容提供商管道化一样,未来云计算厂商也可能会被智能厂商管道化。因为云计算和大数据都不是智能。 A组也因此,为了以上这些构想,我受命在阿里云成立「A组」。「A组」成立的使命就是为了构建出这一机器智能系统,让智能时代更快的到来。 我认为这是一件需要整个社会共同努力三十到五十年的事情,就像在过去的三十到五十年我们在信息化建设上付出的所有努力一样。 ...

July 15, 2019 · 1 min · jiezi

996-盛行的年代互联网人如何平衡工作和生活

文章作者:黄小斜 今天我们来谈谈一个很多程序员都关心的话题,可能不仅仅是程序员,而是包括绝大部分的互联网人。 在高速发展,快速迭代的互联网公司里,如何平衡自己的工作和生活,让自己在工作和生活的平衡中,找到一丝生活的感觉。 这对于很多互联网来人来说都是一个迫在眉睫的问题,很多人被工作压的喘不过气,难以找到这个平衡点,所以他们也无法达到自己想要的一个生活状态。 有些人在这样的过程中逐渐迷失了自我,失去了对生活原本的追求。轻则失去斗志,逐渐沉沦,重则可能完全被工作压垮,成为了工作的奴隶。 当然了,并不是对所有的互联网人来说都会有这样的压力,还是有一些少数的互联网公司可以让你追求真正的工作生活平衡,比如在google,亚马逊,微软等一系列外企,他们就有这样的特点。 西方人更加注重生活和平衡,他们更加重视家庭生活,工作只是他们的一小部分,其实对于中国人来说,何尝又不是这样呢,但是中国的公司文化不一样,特别是互联网公司的文化,逐渐的养成了一种加班文化。 从一开始还有一些人在抗拒,到后来慢慢形成一种传统,不正常的事情也变成了正常的事情,于是不加班反而会让人觉得奇怪,可能这是一种时代的倒退吧。 但是,我们还是要说,既来之则安之,如果你无法习惯国内的互联网环境,那可能只有去一些比较稳定安逸的企业才能让你找到最初的工作与生活的平衡的,当然也有很多人选择出国,或者去一些外企,去达到这样的一个状态。 其实我是非常羡慕这些。能够得到工作和生活平衡的人。毕竟对于他们来说。可以更好的享受生活。而不是整天为工作疲于奔命。 当然,我也不是说国内的互联网公司的文化就一无是处,其实根本的原因,还是在于,国内互联网公司的发展速度是非常快的,他们需要不断创新,不断迭代去适应新产品新环境,新时代。 而在国外这种压力,其实会相对比较小。所以说,每个互联网公司都希望通过让员工加班来加快效率,虽然本质上还是老板的意思,但时间一久员工自己也形成了一种认识,加班充就是电、生活和工作没办法平衡。 特别是像 BAT 这样的企业,真的很少有人奢望工作和生活的平衡,这确实很悲哀,但是对于我们这些深陷其中的人来说,除了皆叹这个世道为何如此,还得去想想,如何去应对这样的现状。 在阿里,我体验到了前所未有的工作压力,这是在我之前两段实习经历中都无法体验到的工作压力,996的生活都已经算是轻松的,有时候加班一多可能就是9107或者是9106,这样的一个节奏,怎么说呢?虽然确实成长很快,但是这样的节奏确实会让人喘不过气来。 那当你面对重压时,应该如何去调整自己呢?其实能进到大厂的人来说,他们大部分都是很优秀的,他们也知道自己一路走来不容易,他们的每一段路程可能都不容易,所以进入大公司后,对于他们来说,只是又一次新的考验。可能很快他们就能习惯能适应,毕竟优秀的人身上总会有这样的一些闪光点。 那对于我来说,优秀可能并不是特别适合我的一个词,因为我觉得我是需要不断在强化自己的,我仍然有很多不足,需要去弥补的,所以来这里我更加感到了前所未有的压力。除了工作上的责任之外,必须去了解自己的短板去弥补自己的弱势。 而这也是在工作之外,我必须去思考的问题。所谓的生活和工作的平衡对于我来说,就是如何安排自己的时间,安排自己的生活。按照平时九点半点下班来算,我大概12点就要入睡,这两个小时是我一整天中唯一的放松时间我是如何安排的呢? 其实最初的一个月我也没想通,我可能就每天看看电视,打打游戏也就过去了,后来发现,工作任务也多,这些时间可能不能这样随意挥霍?于是我开始利用这些时间锻炼身体,或者看看课程、写写文章。 可能就是我每天晚上能做的一些稍微有意义的事情了。可能很多人无法理解,这样两个小时的放松时间也能叫生活吗?其实我也希望有那么多的时间去自己安排,但是现实是,你又想要熊掌又想要轻松,既想要要快速地改变自己,同时又想在舒适区里一直呆着,显然是不太现实的。 于是我们就必须要走出去。去面对更多的挑战,去探索自己身上的可能性,于是我把这些时间用来做相对更有意义的事情。 每当到了周末我又是另外一种状态,周末往往是更加需要规划的,这一段时间的周末我还会选择去游泳,去外面转转去跟朋友聚一聚,或者去参加一些户外活动。 当然,如果没有的话,我会选择在家里写写文章,然后发表一些作品,或者利用这些时间充充电,然后做一些自己想做的事情。 曾经刚入职那段时间周末还有时间打打游戏,现在基本上是没有这种时间了,只能忙里偷闲,听听听听广播看看电视剧,这对我来说就已经很满足了。 当然,周末的时候我也希望能够有更多的时间可以去支配,比如我利用周末去整理房间,然后然后去制定下周的计划,把每到周末我也会制定一个简短的计划,比如这周末我要写几天文章,要发表多少作品么,怎么去规划公众号的接下来的发展。 除此之外,我还要去看一下这周我的投资理财情况如何,然后可能就趁着周末可以比较晚睡觉,然后去听一些比较感兴趣的课程。所以基本上现在的我是一个满负荷运载的状态,休息的时间就是每天晚上的下班时间到睡觉的时间。 说了这么多,要做到工作和生活平衡,我总结以下几点 第一点:安排好自己的工作。尽量把你的工作在一周内做好一个计划,按照优先级排开,然后真的清楚自己一周内需要做哪些事情,然后能自己把控,这样你就会更加合理的规划自己的工作,避免他它们会占用你太多的时间。 第二点:想想想清楚自己想要平衡的那部分生活是什么?真的有意义吗?等到的职场上其实你要的生活无非就是放松一下自己,或者是提高一下自己,然后放松自己,不一定要单纯的是去玩游戏,或者是看剧之类的,你也可以采取更加柔和的一些方式,比如说你可以去。运动去锻炼,然后去让自己的身体变得更好。 第三点:当你的工作严重的侵蚀到你的生活时,要考虑清楚自己真的想要这样的生活吗,是不是放弃这份工作会更好?其实很多人都会深陷工作泥潭,然后就会丢失掉自己的生活。然后可能会慢慢的身体承受不住,或者是心理上变得非常脆弱,然后让自己整个人都处于一个不健康的状态。如果遇到这种情况,一定要找一段时间去想一下,你可能去请个年假出去玩一,看看这个世界,也许你就会放下。 第四点:如果你的生活也会让你也会给你带来,不低于工作的压力时,你一定要学会分分分配自己的精力,可能家庭这方面你需要话费多少时间和工作,这方面必须要学会去平衡,家庭的事真的比工作的事情重要的太多了。千万不要拿工作上的事情去成为你忽略家庭责任的一个借口。 以上四点就是我总结的,关于互联网人如何平衡自己工作和生活的建议,希望这些还不如早点离开这个工作岗位算了,希望这些内容能够帮到你们,不管如何,至少一定要让自己每天都过得开开心心的。

July 11, 2019 · 1 min · jiezi

区块链应用落地不是狼来了而是老虎来了

蔡维德、何娟 (中国亚洲经济发展协会区块链产业专业委员会) 1.我们必须要证实消息正确后才行动1970年美国和日本合作拍了一部电影叫做《虎!虎!虎!》,其中上半段讲到日本偷袭珍珠港的故事。日本偷袭珍珠港,美国几乎没有预料到,但是电影上却给了一个不同的故事。 夏威夷美国军官虽然没有得到上级消息认为日军要攻击珍珠港,可是却有许多情报信息送到指挥官表示日军即将来袭。尽管如此,夏威夷的指挥官却一再认为,“等到攻击的消息确实之后,我们才行动”。 就这样,指挥官一直等到确实的攻击消息来了之后才采取行动。结果不言而喻,当指挥官赶到了指挥基地的时候,珍珠港已经被炸的乱七八糟,像下面的图片一样,大部分的飞机都没有起飞,而在地面上被炸毁。看到这情形这军官嘴巴都合不起来,看呆了。 图 1:“虎虎虎”电影中,美国指挥官到达基地的时候,许多飞机已经在地面被日军炸毁 2.三只老虎,跑的快从2015年起笔者就一直在谈论区块链,认为这是500年来的一次巨大的金融创新[3]。在2016年2次拜访英国,和英国央行和伦敦城金融专家讨论区块链在金融的巨大创新。而这里谈的和数字代币没有任何关系,这里谈的都是国外合法合规的金融创新技术。 可是在中国当笔者谈这一话题的时候,有人回答说,“区块链在中国在2016年不会被使用,在2017年也不会被使用,10年后也不会被使用,而且以后永远不会被使用。”还有人说让国外去胡搞,几年之后就可以看到国外胡搞后的笑话。当笔者谈到这是500年最大的金融创新的时候,许多听着都忍不住哈哈大笑。 现在,4年过去了,我们看到的是怎样的国外笑话呢?是不是像夏威夷美军指挥官一样的笑话?不是电影的三只老虎,现在已经是多只老虎 [4,5,6]。而且以后新老虎还会不断出现,并且加速出现。 从2015到2018年7月之前笔者的论调是“狼来了”, 表示这会是将来;但是2018年7月之后,不再是狼来了,而是老虎来了,因为已经来临。 从2018年7月开始,IBM公司推出稳定币计划,这是被美国政府FDIC所支持的稳定币,意味着区块链的金融革命正式来临[8]。在这以前没有国家支持的稳定币发行,而且IBM在2018年8月就直接表明他们发行的是“数字法币”(CBDC)或是“数字美元”。 2019年2月,摩根大通银行也发行稳定币。巧合的是,IBM和摩根大通两个都做跨境支付。没有多久,脸书也公开开始做稳定币,也做跨境支付。分析师预测脸书市值会大增, 而且其支付系统预备进入中国市场虽然社交网站没有进入。 2019年6月5号,由14家银行也推出做稳定币,做结算用 (Utility Settlement Coins USC)。这14家银行包括瑞士、加拿大、美国、英国、日本、西班牙银行,一起推出数字加拿大币、欧元、英镑、日元、美元(聪明的读者,那个世界重要货币没有参与?)。 几天后,VISA也推出了VISA Connect——以区块链为基础的一个跨境支付系统。而且大家都做跨境支付! 读者可以想想如果这些项目都成功,以后跨境支持市场会是什么情况? 众所周知,这些都是世界著名的公司。例如摩根大通是美国最大的银行,脸书是世界上最出名的社交媒体,VISA是世界上最大的信用卡系统。当他们都采用区块链的时候,难道不是一件惊人的事情? 2019年5月国际货币基金会(IMF)也出报告[12],认为这些稳定币就是数字法币(CBDC),等于认同IBM在2018年8月宣告他们的稳定币项目就是数字美元。国际货币基金会也列举数字法币的优势。这些优势英国央行也列举过,而且英国央行还认为数字法币是国家货币政策的一个新工具,也是监管利器。因此这些稳定币的出现,不能只是当作新的金融产品的出现,这些还带来市场结构性的变化。这些稳定币不是世界政府不喜悦的数字代币,而是国外政府支持和鼓励的合法合规金融产品。例如IBM出的稳定币由美国政府FDIC担保支持,同时间美国监管单位一直在限制没有合法的数字代币。 如果国际货币基金会观点正确,14家银行发行稳定币是不是代表世界将很快会有数字加元、数字日元、数字欧元、数字美元、数字英镑? 我们是不是像美军夏威夷指挥官一样,认为必定要等到国外证实启动区块链项目才开始?现在国外项目已经如洪水一般的来了。事实上,这并不是现在才蜂拥而上。这现象早在2018年7月就开始,只是现在速度加快。 最近有知情人透露这次是一次巨大的商业竞争,国外的区块链项目由财团支持,预备在将来世界金融产业上居领导地位。 3.区块链布局区块链布局需要三方面:技术,资源,战略。 ·技术:中兴通讯的故事告诉我们,技术必须是自己的。如果中国继续使用国外技术例如超级账本,技术都在别人手中,以后产业很可能会有严重问题。 ·资源:国外这一次是多家重量级单位,例如14家银行,摩根大通和170家国际银行,IBM公司和40家银行合作。 ·战略:美国是兵分三路,从货币、市场、到监管法规,三管齐下。 中国首先就不重视自己开发区块链技术,认为使用开源的伪链就可以,主动放弃在区块链技术上领导。没有自己的技术,在国际上没有地位。 中国金融资源丰富,如果有资源给中国区块链产业,现在大部分都给了国外的伪链。 在主流金融市场,中国还没有成熟的区块链战略思想。 4.ViSA 的区块链系统历史VISA本来是使用Chain 的链,而且投资3千万美元成为Chain的股东。这公司是2015年3大区块链初创公司之一(另外两家是R3 CEV 和DAH)。但是这家Chain公司的链一直有问题。笔者在2016年就认为其共识机制有问题,在2108年在台湾参加一次国际区块链会议,美国教授也公开认为有问题。终于VISA公司放弃自己投资的公司的产品。 ViSA的区块链支付项目起于于2016年10月。ViSA B2B Connect在2017年11月首次在试点阶段推出,以测试银行对银行的连接。现在已经在30个市场推出,计划在2019年底前扩展至90多个地区。这会挑战了SWIFT跨境支付的市场。 图2: VISA系统的架构 VISA原来对区块链的态度事实上是:公开赞同,实际上怀疑或是反对 [2]。人们对区块链态度一直可以分3种: 公开赞同,事实也支持;公开赞同,私下反对,还可能是强烈反对;公开反对。这次VISA从公开赞同私下反对,到公开赞同还开张做生意,这表示已经从第2种看法演变成第一种看法。 读者可以想想,到底我们自己单位是持守那个态度? 5.VISA区块链系统特性如果我们看图2 VISA公司的系统,会发现它不是一个传统的数字代币系统。它更像是一个区块链的记账系统,有下面特性: 没有经过SWIFT,而让银行和其他银行直接对接,这挑战SWIFT的历史地位。所以参与的银行系统必须事先通过批准,但是商家并不接这链,而是经过银行。例如商家C先得到银行A的批示,让后银行A、VISA、银行B在区块链上交易,让后银行B和商家D交易完成。所以主要是一种银行和银行之间的交易系统。这样架构其实和SWIFT系统很类似。这样的系统SWIFT在2018年也实验过[6],结果是超级账本不能处理34家银行,因为超级账本的“通道”技术不能支持超过这数目的银行参与。VISA系统和SWIFT非常像,也使用超级账本,能够支持多少银行参与?另外商家也不能上链,区块链保护的主要是银行和VISA而已,商家和银行之间的包含还是要使用传统机制。这会是支付系统,而支付系统的一个特性就是必须低延迟,这是公链不能做到的。6.SWIFT的悲哀SWIFT一直是世界金融中心的中心,主导世界跨境支付多年。但是今天出现的这些老虎项目,那个把SWIFT放在他们系统里面?IBM有吗?VISA有吗?IBM不但没有,还公开宣传以后不需要SWIFT。只有在SWIFT的实验报告里面看到使用区块链在跨境支付需要SWIFT系统。这不代表世界金融结构要大变? 7.国外也认为超级账本是伪链根据国外报道[1],超级账本根本不是区块链,IBM公司也收到许多批评。IBM公司在2018年公开承认超级账本的共识机制是“Kafka共识”,一个中心化的共识机制。 这是笔者在2017年7月在深圳演讲的时候提出的问题,笔者的质疑国外后来也引用。其实这事在2017年6月1日,笔者已经把这问题告诉从纽约来北京拜访的IBM全球副总裁,也表示我们可以帮忙解决这技术问题。所以这问题IBM至少两年前就知道这问题。 今天认定超级账本不是区块链已经不是中国的专利,美国媒体公开怀疑。大家问为什么把区块链系统的分布式拜占庭将军协议改换成中心化的Kafka共识协议?2019年4月笔者在美国硅谷参加IEEE国际会议多人也在谈论这问题。 8.解决方法VISA系统还是有许多问题。例如现在VISA系统有15000家金融机构,20亿客户。这个需求和34家银行就不能支持的性能差距非常远 (441倍和5800万倍)。 超级账本不是区块链,扩展性也有限。但这VISA系统可以使用中国推出的熊猫区块链互联网模型[7,11]来解决。每个银行可以有自己的账户区块链,经过这种区块链再经过VISA公司的区块链可以形成一个区块链互联网[9,10],如图3。这种情形,增加交易链可以支持更多的银行参与。 图3:区块链互联网解决VISA系统的问题,增加交易链,许多银行可以加入 而原来VISA系统商家不能进入,只能保护VISA和银行,但是这问题也可以解决。每家商家可以有自己的账户区块链,经过交易链和银行接。这样每个参与单位都可以上链。 图4:商家和银行都可以上链 这样, VISA系统可以有 ...

July 11, 2019 · 1 min · jiezi

阿里AI再出神器你是什么垃圾一拍便知

“干垃圾,还是湿垃圾?你是什么垃圾?” 相信魔都的小伙伴已经要被垃圾分类逼疯了,还要面临垃圾桶前,志愿者们的灵魂一问:“你是什么垃圾?” 更糟糕的是,垃圾分类,还要“自学成才”,没人可问。 想人之所想,急人之所急,阿里AI懂你。 经过48小时紧急开发,阿里志愿者紧急开发了AI智能识别垃圾功能(测试版)在手机淘宝上线,这款功能通过阿里云搭建。 直接进入拍立淘,点击“戳我识别垃圾分类”的按钮,即可进入垃圾识别功能。 或者,打开手机淘宝搜索“你是什么垃圾”,系统可以通过阿里云异构计算能力进行快速智能识别,直接进入垃圾识别功能。 对于AI难以识别的垃圾,公众可以手动输入垃圾信息,与阿里AI共建垃圾分类数据库,而数据库也将上传至云端,并不断自我训练以AI提升识别能力。 事情源于最近大热的垃圾分类话题,阿里多个部门的同学中也在自发的讨论。 基于手淘在图像识别方面的技术积累以及阿里云云原生的开发环境,志愿者们在48小时内快速开发出了这款AI识别垃圾功能。 为了更准确实现AI识别,阿里工程师志愿者们还与公益环保组织合作,紧急搭建了首个互联网垃圾分类数据库。 阿里巴巴产品专家说“他们的初衷是让分类垃圾不再苦恼,变得更有趣、方便一些”。更完善的新版本预计7月底上线。 他们能这么快将想法实现 背后离不开强大的阿里AI技术功底 前不久,阿里AI在第三届图像识别竞赛WebVision中,击败了全世界150多支参赛队伍,获得冠军。 目前,阿里AI不仅能够以超级速度对海量图片进行分类,还能识别超过100万种物理实体,例如5万种植物、1万种鸟、1千种不同型号的车……阿里AI正在帮助人类在线上世界里构建出一双全知全能的“上帝之眼”。 技术无止境,阿里云将实现“AI+5G+云”的深度融合,未来还有更大的想象空间。例如,探索更前沿的AI算法,机器能够自我学习,并具备语音、视觉等多模态交互和感知能力,更精准的识别物体;基于5G,可以充分发挥云边端的协同优势,公共基础设施也具备识别及信息传输能力,实现万物智能。 有温度的AI不止能拿奖 更能解决社会问题 他们不止一次这么做 去年7月,长春长生疫苗事件发生,阿里健康员工自发紧急成立了“疫苗快查”项目组,在20个小时内上线了疫苗快查工具,帮助父母更快排查问题疫苗。 2015年,阿里工程师用业余时间自愿支持研发了互联网打拐的“团圆”系统,三年来,“团圆”系统找回了3901个失踪的孩子,找回率达到98%。 此外,支付宝、天猫精灵、盒马等也推出了不同的垃圾识别功能。 阿里巴巴3小时公益平台将在上海市多个社区开展志愿服务活动,志愿者们将帮助社区阿姨学习使用智能AI进行垃圾分类。网友通过拍立淘识别、分享垃圾分类还可以获得0.1公益时,成为“3小时公益”参与者。 本文作者:阿里云App阅读原文 本文为云栖社区原创内容,未经允许不得转载。

July 9, 2019 · 1 min · jiezi

蚂蚁金服王旭开源的意义是把社区往前推进一步

互联网技术发展速度之快是所有从业者甚至非从业者都能感受到的。尤记得在世纪之交时,那时候互联网刚刚在中国开始向民用普及,不说支撑大规模的网站访问量的相关技术,就连 Linux、负载均衡甚至都没有被普遍使用。而在二十年之后,云计算已经大行其道,当今的技术人员已经言必称虚拟化、容器和 Serverless,就连刚刚准备入行互联网运维行业的新人们都已经从最初觉得考个 Linux 认证就够了到开始问询 Kubernetes 培训哪家强了。 从一届届 LC3、DockerCon 到 KubeCon,蓬勃发展的云计算与容器化似乎已经称霸了互联网领域。这次我带队参加了 6 月 24 ~ 26 日的 KubeCon 大会,对此感受尤为深刻。事实上,这次在上海举办的 KubeCon 2019 距离上次在同一地点举办的同一会议才仅仅过去半年,但是我们依旧在这次大会上看到了层出不穷的大量新技术、新动态。 云与容器的结合,引爆了这一切。作为容器领域的资深专家,让我们来看看王旭是如何看待容器和云原生领域当前的发展态势的,以及作为这个领域的一家初创技术企业的创始人,他是如何投身到这个领域的,开源又在其间起到了什么作用。 创立于 2015 年的 runV 项目已于 2017 年和另外一个来自英特尔的 Clear 容器项目合并为 Kata 容器项目,并由 OpenStack 基金会(OSF)进行管理,它与来自谷歌的 gVisor 项目并称为目前两大安全容器技术。 开源与初创要么就去加强容器,要不就是引入别的安全技术来让它像容器一样。临近 2015 年,Docker 逐渐被业界主流所接受,互联网技术已经有一个比较明显的发展趋势:第一是云,第二是容器。而云加上容器一定会产生隔离性的需求,这应该说是王旭和他的联合创始人赵鹏做安全容器最早的一个思路:要么就去加强容器,要不就是引入别的安全技术来让它像容器一样。这就是 runV 这个项目想法的起源。 runV 发布的同一个星期,英特尔Clear 容器也发布了。2016 年 8 月份,在西雅图的 LinuxCon 上,王旭和 Clear 团队见面交流,双方在一些细节上面展开合作。在 2017 年 9 月份一个会议上,英特尔软件副总裁、开源技术中心总经理 Imad Sousou 提出项目合并,然后放到基金会里管理。当时大家都觉得这是很好的一个思路。 对于 runV 和 Clear 来说,避免了重复开发以及花费精力在如何说明两者的不同上,同时合并之后可以共同推动发展一个社区,一起去寻找更多的用户。同时,两者合并还有更多的意义。 ...

July 8, 2019 · 1 min · jiezi

互联网医疗的前世今生与未来

一、互联网医疗的这20年从20世纪90年代到现在,我们经历了PC时代、移动时代以及正在进入的物联时代,互联网医疗1.0也伴随着“大智云物移”行业的发展与相关政策的开放正式进入到2.0时代。笔者很荣幸作为一名行业大军中的参与者,一路伴随互联网医疗从萌芽期至今,也亲眼见证了互联网医疗行业从市场参与者、产品形态、社会影响力、政府政策等各方面的发展变化。例如:互联网医疗政策方面,从最开始禁止的态度,到现在的鼓励甚至强制要求;市场产品方面,从最开始的挂号预约APP到现在的贯穿诊前、诊中、诊后的互联网医疗应用;社会影响力方面,从最开始的无所适从到现在的无人不用。医疗是一个极其特别的行业,它关乎每个人的生命健康、关乎国计民生,它更显学术与严谨,是伴随人类从一颗受精卵到一把灰的特殊行业,因此医疗是一个值得认真探讨的课题。本篇文章将会从中国医疗的现状说起,深入讨论互联网与医疗的碰撞以及互联网医疗的未来。 二、中国医疗的现状与特点1.中国的患者、医院与医生因工作原因,去过全国很多医院,每次走进医院最大的感触就是:诸多行业中还是医院的“生意”好!尽管医生不爱笑,尽管医院很拥挤,不做营销不接受讲价,但大家生了病都会积极的过来聆听医生的“教诲”。中国的患者中有两类人:一类是“小病百度、大病手术”,病久了直接就得被转去三甲医院。另一类患者是感冒发烧都要跑到三甲医院挂个专家号看看。这两类患者都会导致三甲医院人满为患、基层医院医疗资源不能充分利用。另一方面,由于中国医疗体系、晋升体制等多重原因,导致优秀医学生、优质医生都聚集在大城市大医院,久而久之患者会觉得只有到三甲医院才能找到好医生,而基层医生太“水”容易耽搁病情。这种非良性循环会导致基层只能越来越“基层”。医院作为“市场”中罕见的“卖方”比“买方”强势的服务机构,一直是高高在上。中国的医院共细分为7个层级,分级的作用是满足不同层次、不同患者的需要。然而患者的求医心理以及其他多重因素,致使分级反而固化和扩大了这种差距,使得患者都往省会城市和直辖市的大医院走,患者就医导向混乱,最终造成患者流量分布不均,出现大医院和基层医院发展极其不均衡的现象。此外,由于医院科室多、流程多,且很多流程和制度陈旧、效率低,往往是“医生动动嘴、患者跑断腿”,这也是百姓对医院怨声载道主要来由。在相当长一段时期内,几乎所有医院均是“以药养医”,医生的价值体现、收入高低依赖于药品器械的使用量,医生所学多年的医学专业知识的价值被低估。长此以往导致现在很多患者无论看中医还是西医如果医生开的药太少,患者就会没有安全感,会觉得这医生是不是太“水”,这点儿药能不能把病吃好。2.中美医疗对比没有对比就没有伤害,为了更客观和具象的认识中国的医疗状况,我们随便感受几组中美医疗的扎心对比(以下数据来源于多方渠道,有兴趣的同学可以自行了解详细信息与数据):这些看似简单粗暴的数据,每一项都值得我们深入思考其背后的形成原因。表格中数据同时反应了发展中国家与发达国家很多方面的巨大差别,包括经济水平、医疗服务质量、标准化的临床水平、医疗科研水平、教育模式、医护收入与社会地位等方面。之所以拿中美医疗相关数据做对比,因为按照联合国定义,美国属于标准的发达国家,在各方面都领跑世界,而中国是高速发展中国家,很多方面急需改善和提升,需要向发达国家学习和看齐。3.中国医疗当下最根本矛盾结合中国医疗现状分析以及上面粗暴的数据对比不难发现:中国医疗目前最根本矛盾,是医疗各种资源总体供给短缺与人民群众日益增长的健康需求,通俗点来讲就是各种不足:医生不足、护士不足、医疗资源投入不足、人均可支配医疗费用不足等总体上的不足。当前的医疗资源总体供给与人民群众日益增长的健康需求不成正比,这是医疗体制、医患关系中存在的根本矛盾。因为这个最根本矛盾,引发了我们所看到的种种医疗问题和现象。 三、互联网与医疗的极端碰撞我们都说互联网波及到哪个行业,哪个行业就会被颠覆,已经颠覆的比如金融、零售、餐饮、制造、出行、通信等行业;正在颠覆的比如我们今天所谈的医疗行业。互联网只是一种网络,一种传输信息与数据的载体,最关键的是我们利用这张网来做什么事情。从某个角度来说,互联网和医疗是两个属性相反的极端行业,互联网是非常前沿、开放、共享、智能、重体验的代表,而医疗则是非常滞后、保守、严谨、封闭、伦理性的传统行业,这两个冰与火的极端行业将会碰撞出怎样的火花?1.看衰和看好的两拨人从互联网+医疗的萌芽期到今天,一直都有各种行业专家和资深从业者发表看衰或看好的见解与看法。笔者本人是看好的,但也不否认那些看衰的观点,哲学中讲世间万物都是对立统一的,凡事物都有其两面性。不同的人,不同的经历和背景,不同的认知过程,则看法不同。比如作为大城市的人很难看到现在一些偏远山路地区是如何用大屏视频做党建的,比如身处三甲医院聚集的一线城市很难知道多少农村的医疗条件是有多么的落后。在观点不同的两派人中,其中看衰派认为:互联网医疗喊了那么多年一直未见起色,泡沫较大,医疗相关参与者的利益链极其复杂很难被撼动,互联网医疗一直在医疗边缘游走无法深入核心地带,服务方、支付方、患者方的商业结构与地位也一直没有变化,所有的高潮呐喊与尝试都将是徒劳,互联网医疗最多只能是大医院扩张的工具。而看好派认为:受制于多种因素,不同时代发展速度不尽相同,比如不同工业时代所经历的时长并不相同,但不代表它没有在往前发展甚至可能已经悄然而至到下一个时代了。近些年随着“大智云物移”的蓬勃发展与互联网政策的逐渐明朗清晰,互联网医疗不再像以前那样始终只能游走于高墙之外,而是逐渐进入医院、进入体制。传统医疗的诸多诟病相信一定能通过互联网的方式来进行解决和改善,尤其当我们清晰的看到政府对互联网医疗的态度从懵逼到禁止、从观望到鼓励、直到现在很多省市区域已经开始实行强制性医疗互联网化建设考核指标这一现象。笔者对看衰派想表达的是,很多事情,因为我们时时刻刻身处在它的变化之中,所以你几乎感受不到它在变化,但并不代表它没有变化,推动这么一个古老陈旧的行业往前走实非易事也非一日之功。2.互联网如何切入并改善/解决医疗矛盾过去,车马慢,书信远。现如今,天涯咫尺。互联网从来不是去真正的“颠覆”医疗行业,它不会改变那些需要发生的关键行为,互联网是作为一种缩小空间与时间、改变方式方法、提升效率的工具出现,比如医生与病人的交流从必须面对面到现在可以通过互联网技术发展到远程视频通话与诊断。互联网医疗方式它使得多年的医疗诟病与根本矛盾得以改善。图-1是笔者对当下医疗根本矛盾与解决思路的粗浅分析,3种思路简单总结就是:合适的人做合适的事、增加资源总量、最大化“压榨”现有医疗资源。已经落地的分级诊疗、医联体、远程医疗、互联网医院等政策,基本就是这样的思路和目标。 图-1思路1中的分级诊疗策略,其关键点在于强制性和引导性的改变患者就医习惯,就是“小病去社区、大病去医院、康复回社区、慢病在社区”,合适的资源用到合适的位置。那么问题来了,短期内,在现有的基层医疗服务能力和患者对基层的信任度不足的情况下,如何过渡,确定小病还是大病或者说疑难杂症的判断与筛查,这时候就需要上下级医院之间充分的互动与信息数据共享,上级来协助基层将经验和理论知识下沉到基层,提升和强化基层的医疗服务能力,逐步帮扶基层起到真正的分流作用。这时候就需要借助互联网这个工具,除了需要医疗数据、患者病历等信息的共享,其他核心能力比如单方音视频通话、多方音视频通话、远程图文交流、远程彩超、远程心电等一系列远程医疗系统平台的搭建。可以想象,未来如果在家门口的社区诊所或药店就能找到好医生,还有多少人愿意舍近求远去拥挤不堪的大医院呢?思路2中,加快新晋医学生和年轻医生的成长速度,通过互联网有效、灵活的方式进行被动和主动式学习,在单位时间内快速增加可用的医生护士资源,从而解决医疗资源短缺的问题。例如目前在北京、上海、杭州已经有很多三甲医院通过内部视频直播、外部视频直播的方式进行临床经验的分享与交流,专家教授的医学讲座与手术示教直播让学生来观摩,建立了有效的经验分享、医学生学习渠道。中国护理杂志通过制作视频点播内容上传后供相关医生护士进行医学知识的学习,通过互联网的多重渠道与方式,有效的加速了医学知识与临床经验的分享与传播。思路3, 随着政策对大医院的控制和对基层的扶植日益加强,大医院的虹吸能力受限,但由于基层医院对病人的吸引力并不强,双方此时都到了比较尴尬的境地。医联体的出现就刚好满足了双方的发展需求:大医院帮助基层提升医疗服务能力,基层医院作为大医院的“延长触角”,可以在替大医院分流的情况下还能为大医院带来更多的患者流量,可谓一箭双雕、皆大欢喜。另外,由于互联网医院禁止线上出诊,这对于将医联体做大后大兴医院来说,可以拥有很多联合体内的下级医院对“自己”的患者进行出诊,病人只需要在基层医院挂号初诊后即可合法使用互联网医院服务。医联体模式中除了需要分级诊疗中那些互联网化的工具与系统,更加核心的需求是协同,它要求上级医疗机构、基层卫生服务机构、疾控机构、卫生管理机构等在信息化发展的基础上,探求信息的互联互通、业务紧密协同的智慧医疗服务。而协同的关键点在于信息数据的实时互通与共享,各医疗系统和流程的对接打通,例如医联体牵头医院通过搭建IM即时通讯与视频服务大平台,对接各兄弟医院的现有账号体系,在满足内部医患护沟通协作、医学交流的同时,进行兄弟医院的跨域互通、学术交流与联合会诊。在搭建过程中,国内一些云服务厂商例如网易云信,可以直接提供即时通讯能力,大大提高医院间的协同效率。武汉协和医院就是基于网易云信的平台搭建了多方联合会诊系统,进行日常的医疗协作与远程联合会诊,有效推动医联体策略的落地与实施,提升了武汉协和医院的服务效率与影响范围,最大化发挥现有资源的价值。2018年发布的《新规》对互联网医疗、互联网医院和远程医疗都做了明确的规范和指引,在政府政策鼓励、市场大趋势、以及互联网势不可挡的优势下,很多大型医院已经开始建设互联网医院,比如在线挂号预约、诊前咨询、自我诊断、电子报告、电子处方、诊间扫码支付、视频问诊、在院患者线上管理、医患互动、院后随访、患者教育与管理、远程家庭医生服务等等。互联网医院拥有更加人性化、更加注重患者体验的“基因”,且能有效的减轻医院人工工作量、提升医院工作效率、节省医院运营成本。通过互联网智慧医疗服务模式,借助互联网技术,构建线上客户服务体系,放大与提升医院的服务能力。 四、任重道远医疗行业的特殊性与现有市场结构,再加上多年的体制影响下,互联网医疗一定不会是靠着追风口的那三分钟热度与冲动就能做大做好的事情,也不是一年半载就能摸透或者轻易进去捞一笔钱的行业,它需要各方参与者以及社会全体共同努力与长期耕耘才能完成的大事。互联网医疗的发展一定会受到很多利益相关者的阻挠与怠慢,但历史的车轮从来不会因为任何人的消极缓慢而停止。积一时之跬步,臻千里之遥程,参与者只有从现在开始潜心沉淀,才能在未来的几万亿市场中获得重大的自我突破。 想要阅读更多技术干货、行业洞察,欢迎关注网易云信博客。了解网易云信,来自网易核心架构的通信与视频云服务。 网易云信(NeteaseYunXin)是集网易18年IM以及音视频技术打造的PaaS服务产品,来自网易核心技术架构的通信与视频云服务,稳定易用且功能全面,致力于提供全球领先的技术能力和场景化解决方案。开发者通过集成客户端SDK和云端OPEN API,即可快速实现包含IM、音视频通话、直播、点播、互动白板、短信等功能。

July 2, 2019 · 1 min · jiezi

支付宝的商业与技术创新双轮驱动-创造数字时代普惠金融奇迹

2019年6月28日,在中国国际软件博览会上,蚂蚁金服金融科技产品技术总监杨冰发表主题演讲,分享了蚂蚁金服在过去的十多年里,是如何通过商业创新与技术创新的双轮驱动,创造出数字时代的普惠金融“奇迹”。 十多年以前,大概很难有人能想象到如今我们习以为常的生活场景:只要带上手机就可以放心出门,从购物到餐饮,从打车到住宿,甚至理财和贷款,都只需轻点几下屏幕。 十多年以前,大概也很难有人能想象到金融业会发生如此深刻的变革:人满为患的实体网点、冗长的申请表单和繁复的审批流程都逐渐成为过去时;传统金融行业因成本和风控问题而难以触达的用户,比如小微企业和个人,也日渐成为银行的目标用户群体。 越便捷的服务,需要越强大的技术蚂蚁金服为金融业的变革做了些什么? 在过去的十五年中,它通过技术重塑了支付服务小微贷款服务,让普惠金融服务对于每一个普通的中国人来说,都变得触手可及。 基于互联网和移动互联网,蚂蚁金服的产品为用户带来了前所未有的轻松和便捷:转账无需再去银行排队,在只需在手机上轻点几下;消费无需现金,二维码支付已经遍布中国的大街小巷;即使没有信用卡,只要开通花呗即可先付后还;余额宝可以让用户通过手机就能实现理财,而如果一名小微企业主想要贷款,只需要花3分钟在网上填写申报材料,1秒钟就能实现贷款到账,整个过程中零人工干预。 但是,用户对于快捷和便利的要求不断增长,也给金融机构带来的全新的挑战。在挑战面前,唯有技术的创新和发展才是最有力的武器。 通过智能手机,用户可以随时随地发起交易,线上交易流量远非传统银行柜台业务可比。在类似“双十一”的大促活动中,每秒的交易峰值可达数十万笔,在这样巨大的流量面前,如何保持交易系统的稳定、安全、高可用,保证数据没有任何丢失和偏差,这是互联网时代的“新型银行”必须面对的难题。 金融交易技术中,最关键的是分布式数据库能力。随着蚂蚁金服的业务量突飞猛进,依靠开源的分布式系统已经不足以解决问题。2009 年,蚂蚁金服自主研发金融级分布式关系数据库 OceanBase,这是一个专长于高可用、一致性的分布式数据库,结合蚂蚁自研的金融级分布式中间件,整个系统具备百万级每秒的伸缩支付能力,成功经受住了“双十一”交易量每年翻三倍的考验。 金融交易的另一个关键点是风控,这关系到金融业务的生命线。传统金融机构用严格的审核来控制风险,但在互联网时代,为了用户体验及时流畅,消费、信贷、保险等交易的审核都必须在尽可能短的时间内完成。 对于金融机构而言,这可谓压力山大:交易是否违规?是否虚假交易?是否合谋套现?如何在不借助担保材料的情况下来判断借款者是否可靠?如何甄别诈骗和洗钱?如何避免坏账和资金损失?这一系列复杂的问题,都要在毫秒级的时间中里找到正确答案。 传统金融机构依靠人力来审核的做法显然是行不通的,不但成本高企,时间也不允许,因此必须要有一套数据和算法构筑的庞大、复杂而精密的平台,依靠海量的计算来做出精准的决策。 这不是一件简单的事,因为每一笔交易都关系到真金白银,出错就会带来资损,金融级对于精确和稳定的要求非常高,尤其在延时性要求也非常苛刻的情况下,对技术是很大的考验。举例而言,如果要甄别一个花呗账号是否有套现嫌疑,既要做实时的特征计算,还要用图计算去查看与这个账号关联的资金情况。如果在多种计算模式之间来回切换,不仅会增加成本,还会带来延时,影响用户体验。 蚂蚁金服:不是取代者,而是支持者强大的技术支持,让蚂蚁金服实现了快、稳、准,许多本来难以享受金融服务的企业和个人,如今也可以享受到普惠金融带来的便利。在传统金融机构看来,像这样的新型科技金融机构是强有力的竞争者,发达国家的许多银行家担心,新兴科技公司的崛起将挤压他们的份额。 但在蚂蚁金服看来,这种担心是多余的:蚂蚁金服不会取代传统机构,而是扮演支持者的角色,通过技术开放帮助机构提升服务效率和质量。 自研技术的基础上,蚂蚁金服还一直在扮演着推动技术开放,为传统金融业赋能的角色。因为蚂蚁金服定义中的普惠金融,不仅是自身要服务大量的用户,让原本难以享受到便捷金融服务的用户受益;还要通过技术的开放,让更多的金融机构具备更好地服务大量用户的能力。 在金融业变革的大势之中,许多传统金融机构都走上了数字化转型的道路。转型之中,他们不约而同地遇到了相似的门槛:如何快速搭建线上业务?如何利用互联网获客、扩大业务规模和覆盖范围?如何基于互联网用户群体的特性开发新的产品? 蚂蚁将自己沉淀下来的技术和经验开放出来,让传统金融机构在面对这类问题时,手握更具效率的工具,也少走了很多弯路。 三大PaaS产品都是蚂蚁金服技术开放的结晶:mPaaS(mobile PaaS)能够快速帮助这些机构开发移动APP;bPaaS(business PaaS)是凝结了蚂蚁金服多年来积累的分布式金融核心能力的套件,能帮助这些机构在最短三个月内快速“复制支付宝的能力”;dPaaS作为一个数据智能平台,借助强大的底层数据引擎,通过海量的计算,能帮助这些机构获得基于大数据的业务分析洞察能力和实时智能决策能力。 mPaaS自2017年下半年开始推广以来,已经帮助多家股份制银行和城市商业银行完成互联网金融升级,如广发银行,华夏银行,苏州银行等。mPaaS团队仅用了不到三个月的时间,就帮助铁路售票系统12306 App完成重构,极大提升了性能和效率。此外,mPaaS还和上海地铁深入合作,推出了“Metro大都会 App”,实现扫码进站,为日均客流量超过1100万人次的上海地铁解决了排队买票的问题。 bPaaS的面世,为传统金融机构的转型提供的现成的平台,让他们不必再从零开始摸索和开发自己的分布式业务系统,节约大量时间的同时,也极大减少了分布式技术在核心业务中的落地难度。bPaaS中整合的是蚂蚁金服十几年来在金融业务实践中经过无数次验证的技术和解决方案,在保持银行传统核心稳定的前提下,bPaaS可以根据不同银行差异化的业务场景,快速定制新业务场景。随着bPaaS的开放,金融机构在最短三个月内“复制蚂蚁金服的核心技术能力”,完全可能成为现实。 dPaaS则针对传统金融机构转型中使用数据门槛过高的痛点,主要提供“三合一”的数据智能能力:处理海量数据的工具,收集和存储数据的标准,使用数据的方法论。在风控和营销场景之中,dPaaS都有突出的表现,在dPaaS的帮助之下,传统金融机构能够更为顺畅地使用数据来提升业务,将手中的数据资产切实有效地转化为业务能力,实现数据的价值。 《经济学人》特别指出,技术对金融业的意义深远。科技创新可以孕育更灵活、便利、开放的金融系统,而智能手机和数字技术在金融业的广泛应用将成为推动社会经济发展和普惠的最佳途径之一。在运用数据和数据技术规避风险、降低成本、促进业务成长、推动普惠金融等方面,以蚂蚁金服为代表的中国金融科技公司已经走出了一条自己的道路,同时,也在不断将技术进步的趋势推广到全世界。 本文作者:华蒙阅读原文 本文为云栖社区原创内容,未经允许不得转载。

July 1, 2019 · 1 min · jiezi

最近出现的几大疑似漏洞大家需要了解下

随着大数据时代的发展,互联网的技术更是突飞猛进。同时也给了网络犯罪分子带来了有利条件,他们会通过各种方式去给企业造成不同程度的威胁。而我们最常见的就是他们通过程序系统漏洞或者源码漏洞等方式。今天小编关注到CNVD即(国家信息安全漏洞共享平台)统计发布了近期出现的几大疑似漏洞,做为网络运维的我们需要了解下。 1、Sequelize SQL注入漏洞 ,是一款用于Node.js的数据库ORM(对象关系映射)工具。漏洞描述:Sequelize 5.8.11之前版本中存在SQL注入漏洞。该漏洞源于基于数据库的应用缺少对外部输入SQL语句的验证。攻击者可利用该漏洞执行非法SQL命令。 2、Mozilla Thunderbird类型混淆漏洞,是美国Mozilla基金会的一套从Mozilla Application Suite独立出来的电子邮件客户端软件。该软件支持IMAP、POP邮件协议以及HTML邮件格式。漏洞描述:Mozilla Thunderbird 60.7.1 之前版本中的icalproperty.c文件存在类型混淆漏洞。攻击者可通过诱使用户打开特制的邮件利用该漏洞造成应用程序崩溃。3、歪酷CMS存在文件上传漏洞,是一套内容管理系统。漏洞描述:歪酷CMS存在文件上传漏洞,攻击者利用该漏洞获取网站服务器控制权。4、TPshop开源商城系统Ap*.php文件存在SQL注入漏洞,TPshop一套多商家模式的商城系统。漏洞描述:TPshop开源商城系统Ap*.php文件存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。5、致远A8+协同管理软件存在远程Getshell漏洞,是一款协同管理软件及云服务的供应商,专注专注在协同管理软件领域。漏洞扫描:致远A8+协同管理软件存在远程Getshell漏洞。攻击者通过上传精心构造的后门文件即可Getshell,获得目标服务器的权限。6、IBM Security Access Manager Appliance开放重定向漏洞,是美国IBM公司的一款基于网络设备的安全解决方案。该产品主要用于访问控制和基于Web的威胁防护,提供系统性能监控、日志分析和诊断等功能。漏洞描述:IBM ISAM Appliance中存在安全漏洞。攻击者可通过诱使用户访问特制的网站利用该漏洞伪造URL,将用户重定向到恶意的网站,获取敏感信息或实施其他攻击。7、Mozilla Firefox和Firefox ESR安全绕过漏洞(CNVD-2019-19289),两款都是美国Mozilla基金会的产品。Mozilla Firefox是一款开源Web浏览器。Mozilla Firefox ESR是Firefox(Web浏览器)的一个延长支持版本。漏洞扫描:Mozilla Firefox 67.0.4之前版本和Firefox ESR 60.7.2之前版本中存在安全漏洞。攻击者可通过诱使用户访问特制的网站利用该漏洞绕过安全限制。8、RDK WebUI组件访问控制错误漏洞和RDK CcspWifiAgent模块命令执行漏洞,是RDK Management社区的两套模块化、可移植、可定制的开源物联网软件解决方案。CcspWifiAgent是其中的一个支持WiFi功能的模块。漏洞扫描:RDK RDKB-20181217-1版本中的WebUI组件的actionHandlerUtility.php文件存在访问控制错误漏洞。攻击者可通过向PHP后端发送HTTP POST请求利用该漏洞控制DDNS、QoS、RIP和其他的特权配置。漏洞描述:RDK RDKB-20181217-1版本中的CcspWifiAgent模块的cosa_wifi_apis.c文件存在安全漏洞。攻击者可通过将Wi-Fi网络密码更改成包含有特制转义字符的密码利用该漏洞执行任意的shell命令。 针对以上疑似漏洞的程序,墨者安全建议去相对应的官方网站下载最新的补丁程序进行更新;对待开源商城模式的漏洞、电子邮件的混淆漏洞等重点排查,账号密码更改;做一些临时缓解的措施,配置URL访问控制策略;采用专业的查杀工具进行查杀处理,重点扫描;找专业的安全技术人员帮忙协助做深入的排查等。(注:漏洞信息转载于CNVD即国家信息安全漏洞共享平台)

June 27, 2019 · 1 min · jiezi

技术详解实现互动直播全过程

本文主要整理互动直播中各端的逻辑,重点是与前端相关的教师端IM的部分和Web/Wap学生端。希望通过这份整理,对于前端在维护时可以尽快的理解互动直播的流程,提高项目的可维护性;对于客户端和教师端来说,可以了解到前端提供的接口和消息的实现。也能提高对整个请麦过程的理解,便于联调和后期的定位问题。 相关阅读推荐《连麦互动直播方案全实践1:什么是连麦互动直播?》《连麦互动直播方案全实践2:网易云信连麦互动直播方案的演变过程》《连麦互动直播方案全实践3:网易云信连麦互动的实现方案》 概 况互动直播涉及到服务端,教师客户端,iOS/Android学生端,Web/Wap学生端。本文重点介绍的是请麦的交互流程,前端请麦模块的设计,前端互动和聊天组件的设计。对于聊天室本身的聊天功能的实现,因为接入云信IM SDK,主要是通过Api调用封装实现的,就不细说了。在设计系统之前,首先需要考虑以下几个问题:• 各端的需求定义以及功能划分,各端如何交互• 各端之间的协议• 客户端请麦与教师端接收• 客户端进入互动直播房间后互动信息的同步带着以上几个问题,我们先整理一下可以依赖的的服务,通过网易云提供的以下服务如下图所示,结合自有系统的需求设计,让我们能迅速集成IM和互动直播的功能。• 云信IM服务提供了一整套即时通讯基础能力,可以将即时通讯、实时网络能力快速集成至企业自身应用中。• 云信的互动直播功能,支持主播和观众实时连麦互动。 架 构我们的基本需求主要是以下三部分: 学生在App客户端进入聊天室,可以发起请麦;在教师端可以对学生的请麦进行同意或拒绝的处理;在教师同意某位学生的请麦后,这位学生可以进入直播间进行互动。结合需求整理出以下的基本请麦,连麦,互动的流程, 如下图,不同样式的数据流向代表不同的协议。 这里有几个概念补充介绍一下:1、客户端云信IM的SDK,客户端通过云信IM发送P2P消息到教师端2、客户端互动直播SDK,客户端接入互动直播3、教师端云信SDK,接受p2p消息4、教师端互动直播SDK,与客户端直播互动5、Web端云信IM的SDK,发送接收消息6、自定义消息,各端发送信息的数据结构 设计与实现实现这节主要介绍上一节概述中提到的教师客户端 ,Web/Wap学生端的实现。主要包括以下几部分:流程细化、教师IM模块、Web学生端模块、配置、优势、存在的问题。 流程细化 先来介绍一下教师端的实现,按照下图中的标号顺序,对其中的一些细节做补充说明。教师端主要有两部分,一部分是native,本文中称为教师端native,另一部分是Web页面,本文中称为教师IM。教师端native和教师IM通过jsbridge以及自定义消息进行通信。首先,整理一下教师端native与教师IM通信的jsbridge如下: notifyQueueChangenotifyVolumenotifyCustomMsgcheckUpdatenotifyLiveStatus结合以上的流程图,再对流程进行一下细化说明:1、客户端初始化各端通过请求服务端获取统一的聊天室地址2、教师端初始化教师IM,在初始化后,通过服务端请求(getPresenterLiveInfo),获取聊天室地址,取得聊天室单例,通知教师端native聊天室就绪,获取互动直播数据。3、请麦的过程• 客户端发送p2p消息到教师端native,教师端native通过jsbridge, 调用教师IM的notifyCustomMsg,教师IM更新自身维护的请麦请求等待队列。• 教师IM点击同意或拒绝,通过消息通知教师端native,教师端native通过P2P通知请麦的客户端• 客户端通过互动直播SDK,连麦进入直播间,通过互动直播SDK发送消息给教师端native• 教师端native调用notifyQueueChange方法,更新教师IM中各列表• 教师IM,异步请求(informServer)更新服务端上下麦队列,发送自定义消息(im-sdk),广播通知各客户端。 教师IM模块结合流程图以及上面的流程细化说明,对前端的模块进行设计和拆分,如下图。 这里的LivePcChat是Tab中的聊天组件,LiveInteractivePresenter是处理互动操作的组件,XXcache是封装对应数据层操作的组件。具体的组件实例,调用,数据请求和处理的过程,如下图所示的时序图: Web学生端模块对于Web/Wap学生端,因为Web/Wap学生端本身还未开发请麦的功能。这里以Web学生端为例介绍一下Web/Wap学生端在互动列表和聊天互动中的实现。本身聊天室部分与教师端的聊天室是复用聊天组件的,因而这里也先把模块划分一下。可以参考教师端的组件划分,对比一下教师端和学生端复用的部分组件,下图是web学生端的组件拆分。 从下表的对比可以看到,除了请麦相关的处理逻辑,教师端IM和Web学生端在IM的其他功能是可以复用的。 配置互动直播是在原来的直播基础上做的迭代,所以这里要保证互动直播在教育各产品线的可配置性。这里所说的配置与教育公共组件池其他的模块和组件接入的配置类似,也是依赖于教育通用组件cache-base,通过在直播页面或者工程单页加载时(机构后台),读取config中的配置,一键配置。 优劣分析采用这套设计的优点是1、所有的服务端请求都是通过web页面发送,减少教师端维护的成本;2、模块的可配置性,在不同的业务线,可以通过配置来决定是否接入互动直播;3、组件颗粒化,在不同的模块中,教师端可以接入聊天组件和互动组件,请麦组件,学生端可以只接入互动列表组件;4、最大程度的依赖了现有的云信sdk实现的功能,能在较短的时间实现需求。 存在的问题1、请麦的流程比较复杂,因为涉及到多端,各端调试比较浪费时间,这也是整理此文的目的。在打通对各端流程的认识后,各端在调试中都能首先定位到出问题的端,然后才能有的放矢的在某一个环节中发现问题。2、因为是在原来的迭代基础上进行的,很多组件没有封装成教育规范的组件,不过逻辑清晰的前提下,可以在后面的迭代中优化掉。3、优化前端实现的方法。 总 结通过本文整理一下互动直播中各端的逻辑,便于后期接入对互动直播流程的理解。对客户端和教师端来说,可以了解到前端提供的接口和消息的实现。如果在后续另外的工程中,需要接入互动直播模块,能够快速的接入和调试,同时可以就以上提出来的存在的问题做进一步优化。 另外,想要获取更多产品干货、技术干货,记得关注网易云信博客。

June 26, 2019 · 1 min · jiezi

视频编解码的理论和实践2Ffmpeg视频编解码

近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术。因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术。 相关阅读推荐《视频直播关键技术:流畅、拥塞和延时追赶》《视频直播技术详解:直播的推流调度》《音视频通话:小议音频处理与压缩技术》《视频编解码的理论和实践1:基础知识介绍》 1、Ffmpeg介绍《视频编解码的理论和实践1:基础知识介绍》介绍了视频编码的基础知识,本篇文章,我们一起看看实际应用中的视频编码是如何操作的。在实际工程项目中,ffmpeg是应用最多的多媒体处理框架,它提供了音视频采集、编解码、图像处理,格式转换等功能,并且拥有很强的扩展能力,通过ffmpeg可以很容易集成第三方库(例如:x264、openh264等),通过这种能力,它可以实现更强大的功能。Ffmpeg由下面几个部分构成:Libavformat:音视频格式处理Libavcodec:音视频编解码Libavfilter:音视频滤镜Libavdevice:音视频设备采集Libswscale:图像缩放、转换Libswresample:音频重采样Ffmpeg:一个命令行的转码工具Ffplay:一个命令行播放器Ffprobe:简单的媒体格式分析工具 2、Ffmpeg视频编码视频编码是ffmpeg提供的基本功能之一,通过ffmpeg可以很容易实现视频编码操作。使用ffmpeg进行视频编码之前需要把x264、openh264等第三方编解码库集成到ffmpeg中才能使用。编码步骤如下:(1) 注册编码器(2) 根据名字或者ID查找你想使用的编码器(例如x264、x265、openh264等)(3) 创建一个编码器上下文对象(4) 在编码器上下文对象中设置编码器参数(5) 打开编码器(6) 读取一帧图像进行编码,一直重复该过程,直到处理结束(7) 关闭编码器示例代码如下:avcodec_register_all(); // 注册所有可用的编码器codec = avcodec_find_encoder_by_name(“libx264”); // 查找编码器ctx = avcodec_alloc_context3(codec); // 创建编码器上下文ctx->width = 1280; // 设置编码器参数ctx->height = 720;// ….其他的参数设置avcodec_open2(ctx, codec, NULL); // 打开编码器while(read_frame(frame)){ AVPacket pkt; // 存放编码之后的数据int got_output = 0; // 是否成功编码得到一个图像avcodec_encode_video2(ctx, &pkt, frame, &got_output); // 编码if(got_output){ // 得到编码后的数据,进行后续操作}}avcodec_free_context(&ctx); // 关闭编码器 可以看到,ffmpeg隐藏了大部分的编码细节,调用者不需要了解预测、变换、量化、熵编码等细节,这些细节都已经被ffmpeg封装好了,开发者只要把编码参数设置好,然后调用相关的接口函数,即可实现视频编码功能。当然,这知识最基本的编码功能,要想在画面质量和压缩率之间取得平衡,必须了解视频编码的细节,然后设置相应的参数。 3、Ffmpeg视频解码Ffmpeg自带了H264的视频解码器,开发者可选择直接使用ffmpeg自带的H264解码器或者第三方的解码库进行视频解码。和视频编码一样,解码操作的大部分细节都已经被ffmpeg隐藏起来了,开发者只需要设置好相关的解码参数,然后调用接口函数就可以实现解码功了。解码流程如下:(1) 注册解码器(2) 查找解码器(3) 创建解码器上下文对象(4) 设置解码参数(5) 打开解码器 (6) 读取数据进行解码,直到结束(7) 关闭解码器代码示例如下:avcodec_register_all(); //注册解码器codec = avcodec_find_decoder_by_name(“h264”); // 查找解码器ctx = avcodec_alloc_context3(codec); // 创建解码器上下文对象//…设置解码参数avcodec_open2(ctx, codec, NULL); // 打开解码器while(read_packet(pkt)){ ...

June 26, 2019 · 1 min · jiezi

视频编解码的理论和实践1基础知识介绍

近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术。因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术。 相关阅读推荐《视频直播关键技术:流畅、拥塞和延时追赶》《视频直播技术详解:直播的推流调度》《音视频通话:小议音频处理与压缩技术》 1、视频介绍视频的本质是图像序列,根据视觉暂留的原理,每秒播放20~25张图像,就会形成连续平滑的视觉效果,人眼将无法区分其中单幅的图像,就这样连续的画面叫做视频。每秒播放的图像数量叫作帧率。图像是由像素构成的,在彩色图像中,每个像素由R、G、B三个分量构成,每个分量用一个字节存储。分辨率用于描述图像的尺寸,例如分辨率1280x720就表示图像宽度是1280个像素、高度是720个像素。 2、压缩视频的原因为什么要对视频进行压缩?假如有一段时长为60秒视频,它的分辨率是1280x720,帧率是25,那么这段视频的大小等于:60 x 25 x 1280 x 720 x 3 = 4147200000字节,大约是3955MB,如此庞大的数据,如果不进行压缩,那么磁盘空间将会很快被占满。多媒体数据占了互联网数据量的80%以上,其中大部分都是图像视频数据,未压缩之前的视频非常庞大,不利于存储和传输,因此很有必要对视频进行压缩,视频压缩也叫作视频编码,它利用视频中存在的空间冗余和时间冗余,剔除人眼不敏感的信息,达到数据压缩的目的。3、视频压缩的依据视频能够进行压缩的根本原因是信息冗余,视频中存在两种冗余信息:(1) 空间冗余。对于视频的每一帧图像,在一定尺度范围内,像素的变化是非常平缓的,像素之间非常相似,这就是空间冗余。(2) 时间冗余。视频是由连续变化的图像构成的,在一个很短的时间内,相邻图像之间的变化很小,因此相邻图像很相似,这就是时间冗余。 4、视频编码的原理和细节由于视频中存在大量的信息冗余,想要对视频进行压缩,就必须找到去除冗余信息的方法,标准的视频编码过程包含下面几个步骤:(1) 预测编码。所谓预测就是利用前面像素值来推算当前的像素值。根据前面的知识我们知道,在空间或者时间上相邻的像素是很相似,因此只要预测方法合适,预测值和实际值会很接近,假设当前像素的实际值是X,预测值是P,那么X和P之间的残差A=X-P。如果我们只对残差数据进行编码,那么将会大大压缩数据量。这就是预测编码的原理。预测编码可以分为空间预测(帧内预测)和时间预测(帧间预测)两种。预测编码可以分为下面几个步骤:i. 利用前面已经编码并重构像素块预测当前像素块的值ii. 求当前像素和预测像素的差值iii. 对像素差值进行编码iv. 把编码后的数据传输到解码端,在解码端按照同样的方法对像素值进行预测,再加上残差,就可以重构得到原始图像了。为了得到最佳的预测值,编码器通常需要使用不同预测方法进行预测,然后根据某个评判标准(一般是SAD、STAD、RDO等)得到最优的预测值(注意不是预测值越接近实际值就越优,所谓最优是计算复杂度、失真和码率之间的综合考量),特别对于帧间预测来说,在预测的时候要在参考帧中找到当前块的匹配块,需要大量的计算,因此预测模块一般是编码器中计算量最大的模块,而预测方法的好坏也直接决定了视频的压缩率。(2) 变换编码。变化编码本身不会对数据进行压缩,变换的目的是把空域信息转换为频域信息,去除了信息之间的相关性,在接下来的编码操作中可以得到更高的压缩比,变化编码是为下一步的量化编码做准备的。在视频编码中常见的变换方法是DCT变换和哈达玛变换。(3) 量化编码。量化是视频产生失真的根本原因。经过预测编码、变换编码之后得到的数据被称为变换系数,虽然变换系数相对于原始数据数来说已经很小了,但是系数值的变化范围仍然很大,利用量化把变换系数的连续取值转换成有限的离散值,这样可大大提高压缩率。假设有这样一组数据[16,96,100,600,50],量化参数是25,那么量化之后数据是round([16 / 25, 96 / 25, 100 / 24, 600 / 25, 50 / 25]) = [0,4,4,24,2],可以看到,量化之前的数据范围是16~600,需要大量的比特数才能表示,量化之后的数据范围是0~24,只需要少量比特数就可以表示,实现了压缩数据的目的。编码是一个不可逆的操作,它是失真产生的根本原因。(4) 环路滤波。环路滤波和压缩没有很大关系,却和视频的画面质量有很大关系。视频编码是以块为单位进行的,在经过量化模块时,可能每个块选择的量化系数不同,导致每个块产生的失真不一样,造成像素块的边界不连续,因此人眼观看视频的时会有方块效应(也就是有很多马赛克现象)。为了提高视频质量,有必要对方块效应进行消除,这就是环路滤波模块的功能。经过量化操作之后的数据块,再经过反量化、反变换,然后进行重构,接着进入去方块滤波进行去方块操作,得到的像素块就可以作为参考像素块给预测模块使用。环路滤波是一个可选模块。(5) 熵编码。熵编码的目的是去除统计冗余,实现数据的进一步压缩。这么说可能有点抽象,举个例子,假设有这样一组数据[0,4,4,24,2],如果使用定长编码来进行编码,这段数据可以表示为[00000,00100,00100,11000,00010],每个数据需要5 bit来表示,这段数据的总长度是5 bit x 5=25 bit;如果我们使用哈夫曼来编码,这个数组中每个元素概率值分别如下:数值0的概率是20%,数值4的概率是40%,数值24的概率是20%,数值2的概率是20%,即[20%,40%,20%,20%],根据每个元素的概率构造哈夫曼树(节点中括号内的是数组元素值),如下图所示,因此这段数据可以表示为[0,10,110,111],数据的总长度是11 bit。 由此可见使用哈夫曼编码可以去除统计冗余,实现数据压缩的目的,哈夫曼编码就是一种熵编码方法,但是由于哈夫曼编码对错误非常敏感,不适合实际应用,因此实际应用中通常使用变长编码(CAVLC)和算术编码(CABAC)作为熵编码算法。算术编码利用一个0到1之间的浮点数来描述一个信号序列,然后用这个浮点数来表示这个信号序列,极大的压缩了数据。算术编码可以使用一个简单的例子说明,假设有一个二进制串“10101110”,符号0和1的概率值都是50%,算术编码的过程如下:(1) 设置定一个区间,通常这个区间我们设定为[0,1),然后使用low指向区间的下界,用high指向区间的上界,现在low指向0,rhigh指向1.(2) 输入每一个符号,按照符号的不同对low和high进行调整,调整方法如下面公式所示,最后把low指向的浮点数作为这个符号串的码字,表示这个二进制串,可以看到算术编码的压缩效率比哈夫曼编码高很多,在x264中使用CABAC(上下文自适应的二进制算数编码)作为熵编码算法。 以上就是编解码技术的基础知识介绍,该系列第二篇文章将会介绍视频编解码技术的实践。更多即时通讯、音视频技术的干货文章,请关注网易云信博客。

June 26, 2019 · 1 min · jiezi

带你了解僵尸网络是怎样组成的

在流量攻击中,攻击者通常利用大批量僵尸网络和大量肉鸡发送恶意访问请求,因此有些人就会想说僵尸网络是什么?对于不懂网络得人肯定是存有疑问的,所以也经常会在网络安全防护中遇到用户问到僵尸网络是什么?它来自哪里呢?那么,此篇文章带你了解僵尸网络是什么,怎么样组成的. 现实中,多么庞大的系统也都是由很多个微小的元素组成的,比如一粒灰尘也是由多种物质微粒组成的混合物,所以僵尸网络也不例外。那么组成这些系统的元素是如何联系起来的呢?因此墨者安全主要分享下关于僵尸网络的节点。僵尸网络由多个大量功能节点共同组成,这些节点可能是PC端、服务器或者移动设备。 大部分人认为DDoS攻击是来自PC端的僵尸网络,其实并非一定全是。随着技术的进步,服务提供商对带宽的提升以及高性能处理器的提升,使传统PC端的僵尸网络发展变得缓慢,因为PC端的带宽资源有限,可以利用的时间不确定,导致了黑客攻击会选择高性能的处理器方式。 1、普通PC节点组建的僵尸网络是由大量安全性能差的个人计算机通过长时间的发展组成的。组建的步骤是僵尸程序及其他的蠕虫、木马等恶意程序对那些防护措施弱的普通PC传播感染进而变为僵尸网络中的一员。当僵尸程序在受害主机上执行后就会进行一系列的复制,自启以及隐藏等行为。而且病毒查杀等方式是检测清除不掉的,长此以往,僵尸程序就会潜伏在受害主机上通过解析内置域名和端口进行通信,构建了僵尸网络的通道,会发送搜集被感染主机的信息。接入僵尸网络的僵尸程序将会被预先设置指令,给目标发起攻击。不发指令的情况下, Wireshark会捕获大量数据包,等待指令的下达。通过上面的步骤,一台普通PC就变成了任人宰割的僵尸主机(又称“肉鸡)。成为了黑客攻击的有利工具。普通PC是基本的僵尸网络节点.现阶段普通PC的感染和控制技术很成熟,所以许多攻击者可以很快速的利用PC节点组建僵尸网络对用户展开攻击。2、高性能,大带宽服务器对于黑客攻击作为僵尸网络节点更具有优势,一台高性能的服务器可以抵上百台PC的性能,所以利用服务器僵尸主机的高性能和高并发性,可以快速地构造并发出大量的复杂请求,所以黑客会利用服务器僵尸主机进行极大的攻击流量。服务器的安全性比PC高,一般会利用Web服务器组件的安全漏洞进行入侵,或者是利用内容管理系统等漏洞上传脚本后门程序控制服务器成为僵尸网络。以此应用不同的方式对用户进行攻击。 3、随着互联网和物联网的崛起,其黑客也将与时俱进,利用更多的移动设备节点作为组建的僵尸网络对用户造成威胁。现阶段主流的移动设备CPU达到了双核的1GHZ以上的运算速度。容量也是足够大的。而且安全防范更差,更容易变为僵尸网络。目前移动设备主要有Android和iOS两大系统平台,由于系统和生态环境的开放性等原因,更容易被植入恶意代码或者僵尸程序,经常我们通过第三方应用市场下载软件时被提示应用捆绑或者诱骗安装,这时候更容易变成僵尸网络,因此移动设备逐渐要超越普通PC,同时移动设备与服务器类似,组建的僵尸网络也有一定的优势,而且现在移动设备数量众多,还在高速增长,而且移动设备在线时间更长,基本都是维持在网络连接状态,很少进行关机或者重启操作。因此攻击者利用移动设备组成的僵尸网络随时进行持续不间断的发起DDoS攻击。 主要的僵尸网络节点组成部分是通过以上几种方式,个人观点,不喜勿喷。也欢迎大家有不同的意见可以多多交流沟通学习。对自己的要求是在网络安全技术知识方面每天进步一点点。

June 25, 2019 · 1 min · jiezi

DDoS诞生于二十世纪末你知道吗

针对从事于网络安全运维的我们来说,每天都会听到关于DDOS的话题,那所有“一切对存在的追问都以历史性为待征”来阐述,DDoS攻击(Denial of Service)即分布式拒绝服务,起源于20世纪的最后几年中,它横空出世后,在网络中发生的几次DDOS时间,使企业的网络运维安全人员变得心惊胆战,因此也成为了世界关注的焦点。在当时,即使对信息安全不了解的人也听过。 当一种新的技术诞生时,直接或间接应用的技术都有发展的=历程存在,也是有一定的规律而言,可分为四个阶段:1、探索期:新技术出现不久,有一些技术兴趣爱好者,出于好奇心不断探索尝试,利用系统中存在的漏洞和缺陷来达到内心的成就感。起初分布式拒绝服务是不存在一些利益等目的,只是因为有一些对计算机或高科技产品有兴趣的人,只是为了验证下该攻击手法,把它当做一种挑战,然后再向别人炫耀。所以最初针对攻击的行业是没有范围的,个人或者组织都是可能涉及。2、工具化:技术的应用方式开始定型,所以有人想到了此工具成为了实用性的攻击工具.可以变成强有力的牟取利益的工具。最早期利用这一工具的就是勒索组织,他们利用僵尸网络或者针对性的开发工具,通过对一些互联网盈利的企业,比如在线支付,游戏或者博彩网站等。也会有些小企业中招,这种情况一般都是恶意竞争者,通过犯罪组织在企业业务流量高峰期时攻击对方,造成对方信用以及名誉损失来降低对方的客户群体。这类攻击没有直接的证据,而且也很难溯源,但行为模式非常清晰。 3、武器化:跟随着互联网的发展,一些新的技术被当武器来使用,比如分布式拒绝服务就会发生在网络战中。网络战争可以对我们的生活、工作由此瘫痪等等。 4、普及化:根据DDOS防护技术的提升,DDOS攻击技术也在不断的增强,而且网络的便利使得该工具的范围以及维护的成本也在降低。在生活中也处处可以听到某某网站,某某公司收到了DDOS攻击,或者是某企业的数据被删除,加密等等。目前通常攻击者会利用DDOS来掩护安装隐性的一些木马,病毒等手段。 面对互联网的环境,墨者安全觉得针对网络需要做好必要的安全措施,不可以放任不管, DDOS攻击会越来越频繁,为了避免让攻击者有机可乘,应定期进行排查,做好最基础的防护。

June 24, 2019 · 1 min · jiezi

如果有人问你如何转行互联网

➢ 绕不开 如果想转行互联网,就要考虑是自学还是培训班。 如果入行了互联网,仍然考虑第一份工作是不是选择外包? 如果工作有了一定年限,可以考虑升级管理层和自行创业。 引路人 隔行如隔山,需找引路人。 不推荐培训班也不建议纯粹的自学。 自学很容易走入误区 学一些过时的无用的而不自知。 培训班是资本产物 只会教一些基本的内容,营造一种积极可靠的氛围 最后套路了你我他。 最靠谱的做法是找到正在圈子里的人 让其适时指引,保持同步,剩下的自己努力。 ➢ 开发者 无论你是互联网小白,还是资深工程师。 有一个前提一定要知道。 政策和平台两大巨头之下,个人的行为十分有限。 一些特殊的功能 需要企业认证和认证费审核周期1-3个月不等基本门槛的资金和数据企业特权 为什么谈到学习开发要提到引路人? 因为拥有开发能力和胜任开发工作是两个完全不同的概念。 功能上的增删查改衍生到商业上的权限、数据和支付。 普通员工很少拥有管理层的心态和视角。 个人开发也不再拥有登录和支付等特殊权限。 管理层心态你可以试试假设,试着转换角度去思考。 毕竟生活有很多共通处。 企业权限,你无法假设,无法调试,无法获得。 甚至在你的控制面板中,根本就不存在对应的选项。 你连了解和知晓的渠道都没有。 ➢ 自由职业 自由职业!==财务自由 近期陆陆续续有些大V宣称开始自由职业了 最终看起来似乎都有些殊途同归: 参加或者是推广写作课/小班录制或者推广付费编程课程公众号狂接第三方营销软文知识付费 自由职业真的自由吗? 不过是换一种方式去工作。 因为关注的是程序员转自由职业。 所以这里的知识付费属性很明显。 离开了公司,才真正了解自己能力所在。 自由的生活,图穷匕见。 ➢ 共同点 互联网寒冬下,开发岗位仍然有着足够多的需求。 以前的特点是: 新手过于饱和,高级过于稀缺,中间断层。 现在的特点是: 面试早已不是造的不是火箭,而是宇宙飞船。 隐性的特点是: 为什么大多数公司必须要求全日制本科? 为什么公司宁愿裁掉老员工更愿意招新人? 现在你应该明白 为什么很多公司不要培训机构出来的程序员?

June 22, 2019 · 1 min · jiezi

为什么说优秀架构师往往是一个悲观主义者

阿里妹导读:18年前,200家企业由于在事故中信息系统遭到严重破坏而永远地关闭了。这样的事故引发了后人深思,对于工程师而言,不仅要求设计的系统足够强壮,还需要具备考虑失败的能力,当失败场景悉数被考虑周全、并且结合充分的演练,一切会不会不一样?我们熟知面向对象设计和面向程序设计,阿里巴巴资深技术专家游骥洞悉行业现状,抛出了一个新模式——面向失败设计。今天,听他娓娓道来,如何在一开始的系统设计阶段就考虑到各种失败场景,把面向失败当成是系统设计的一部分,准备好从失败中恢复的策略。引言一个优秀的架构师通常都是一个悲观主义者,除了设计好能够支撑业务持续发展的优雅架构,另一个容易被忽略的重要能力在于充分考虑失败场景。如果对失败场景考虑不够充分,轻则出现业务不可用,影响用户体验和企业声誉;重则导致数据永久丢失、业务再无恢复可能。 2001 年 9 月 11 日,美国世贸中心双子大厦遭受了谁也无法预料的恐怖打击,灾难发生前约有 350 家企业在世贸大厦中工作,事故发生一年后,重返世贸大厦的企业变成了 150 家,有200 家企业由于重要信息系统的破坏,关键数据的丢失而永远关闭、消失了,其中的一家公司声称自己要恢复到灾难前的状态需要 50 年的时间。 “Everything fails, all the time”,无论是在传统软件时代还是在互联网、云时代,系统终究会在某个时间点失败,面向失败的设计理念数十年来并没有多大的变化,不同的是在分布式、云架构的互联网时代:失败将由小概率偶发事件变成常态,同时应对和处理失败的具体实现方式也大相径庭。 无所不在的失败场景单个技术点在绝大部分时间都能按照设想正常工作,但是当规模和复杂度到达一定程度,失败其实无所不在。当你的业务场景从服务企业内部的几百号员工变成面向上亿的外部用户,你不确定你的用户群会有些什么样的角色,也不知道他们会在你的系统平台上创造出什么样的业务行为;当你的技术框架从单机、一体机演进到分布式的多层、多组件架构,原本5个以内的技术组件可能变成了今天的500个,并且为了用较低的成本保持服务能力的扩展能力,你可能放弃了稳定性更好但也昂贵的商业技术、转而用开源自建来替代。 互联网业务快速发展不仅直接带来了流量、安全等不确定性,同时促使了技术架构的快速演进,使架构变得越来越复杂,这些因素都将导致失败发生的概率大幅提升。当人类的工作、生活越来越依赖互联网,一旦出现失败,造成的影响和损失将是空前巨大的。在远古时代,人类没有自来水也没有电,一切都很好;今天如果停电停水一段时间,相信很多人都会无法适应,而互联网正在逐步演变成跟水和电一样的基础设施。失败的原因多种多样,抽象来看可以分为以下几类: 硬件问题 首先,硬件是有生命周期的,它一定会老化,并且你不知道它会在什么时候坏;其次,硬件是一个实体,它存在于客观环境当中,它的状态会受外部环境干扰,比如火灾、地震等外力因素都可能导致硬件损坏;最后,所有硬件都会存在残次品,你很可能就是那个不幸者。通常情况下单个硬件出问题的概率不高,但是当有几十万的硬件设备,硬件的失败问题每天都会发生。 软件bug 即便是最优秀程序员写出来的程序,经过最优秀测试同学的严格测试后的代码,上线依然无法做到完全没有bug。互联网业务迭代往往讲究一个“快”字,以往几个月或者几年升级一次的软件程序,现在一周就需要升级一次或者多次,这大幅提升了软件出错的可能性。 配置变更错误 系统运行态的日常运维过程当中,难免会因为疏忽或者考虑不周全导致灾难。当上万名技术同学跟上百个变更系统做笛卡尔积,哪怕是6个9的可靠性,依旧无法做到万无一失。全局的流量入口、权限与安全验证体系、统一网关与接口平台等技术环节是可能促发全站不可用的重要风险点,对于影响面大的配置的变更需要尤为谨慎。 系统恶化 原本工作得很好的程序随着时间的推移可能有一天不再正常工作,举几个常见的例子:自增变量运行了很长一段时间后出现越界、缓存随着数据量的逐渐变大而出现空间不足、数据库连接池随着机器的扩容而不够用等等。千万不要认为运行良好的系统是不会出问题的,它的代码里面可能藏了定时炸弹,只是你不知道会在什么时间点爆炸。 超预期流量 某一天你的系统可能突然会承受远超过预期的每秒请求数,特别是在“中国特色”的互联网场景之下,你很难精确预估系统各个时间点的业务访问量。 外部攻击 你需要考虑各种攻击行为,包含流量攻击和安全攻击。你的系统可能随时会面临着DDOS和CC类攻击,你传输的数据可能会被盗取或者篡改。 依赖库问题 你的系统很可能会用大量的二方库或者三方库,它们对你来说是黑盒子,你不了解它们存在哪些风险,并且你无法掌控。这些库可能会存在漏洞、可能会有bug,可能会大量消耗你的系统资源,总之不要太信任它们。 依赖服务问题 你依赖的服务也一定不会100%可用,它们可能会超时,可能会失败。当依赖服务超时的时候,如果你没有很好地处理,可能会导致你自己的系统无法工作,在分布式场景下,这种失败状态会持续辐射,最终导致大面积的不可用。 如何面向失败设计作为一个悲观主义者,你需要在一开始的系统设计阶段就考虑到以上各种失败场景,把面向失败当成系统设计的一部分,并且准备好从失败中恢复的策略,这有助于更好地提升整个系统的可用性。只有你意识到事情会随着时间的推移而失败,并将这种思想融入到体系结构中,那么在失败发生的时候你才能完全不受影响或者将失败损失降到最低。面向失败的设计理念数十年来并没有多大的变化,一些好的经典原则在今天依旧被广泛运用。 冗余设计避免单点故障 硬件和软件都不可靠,环境和人都存在极大的不确定性,虽然无法避免失败场景的发生,但是可以通过冗余设计来规避局部失败对系统的影响。冗余设计避免单点故障这一策略在互联网技术架构中处处可见,比如重要的服务通常都会部署多个、数据库的主备结构、服务调用的重试机制、存储的多副本等概念都属于这一范畴。 面向失败的宏观多活架构 除了局部失败场景,你的系统可能还面临着大范围的失败场景。大范围的原因有两个:天灾,比如火灾、地震、台风、雷电等大的自然灾害可能导致大面积的基础设备被毁坏;人祸:人的失误或者刻意破坏行为有时候也会酿成大祸,如操作错误、破坏、植入有害代码和恐怖袭击。“面向失败的宏观多活架构”从宏观架构的高可用层面来解决系统的整体可用性问题,随着技术的演进,冷备、热备、两地三中心、异地多活等应对大范围失败场景的技术体系这些年频频被提起。 服务能力与依赖调用自我保护 如何来衡量一个软件系统的设计是否优良?一条很重要的衡量标准——在任何情况之下你的软件系统都应该工作在当前环境的最优状态。每个人都知道机翼是飞机的重要部件,一旦机翼出现问题,飞机很可能就会坠落。然而在二战当中,许多战斗机即便机翼千疮百孔了,依然保持着最佳战斗能力;甚至还有更夸张的情况:1983年的一次战斗机演习当中,一架飞机由于事故损失了一个机翼,这架缺少一个机翼的飞机依然保持了飞行能力、最终完成安全着陆。 软件系统由两部分构成:系统自身的代码和依赖的库以及服务。“服务能力与依赖调用自我保护”需要从这两块分别切入构建系统在任意情况都始终工作在最佳状态的能力。服务限流、系统负载保护、给依赖的服务设置超时或者资源限制等都是相应的应对策略。 为一切不可预料的情况备好预案 能够抵抗失败和从失败中快速恢复是面向失败设计的核心思想,然而即便已经做了万全的设计,也并非所有的失败场景都是系统能够自动抵御的。你需要考虑到所有的失败场景,并准备好相应的应对预案。为一切不可预料的情况备好预案才能在失败场景真正发生时做到有条不紊。做好预案需要对失败场景有全面的考虑:会发生哪些失败?失败会带来什么问题?应对策略是什么?预期的恢复时间多久?恢复后的影响面有多大?需要通知到哪些角色?等这一系列的因子构成了一个完整的预案体系。 自动化运维管控 大量的系统故障是因为人的失误造成的,即便让一个优秀的运维工程师进行一万次同样的运维操作也难免不出错。唯一的解决办法便是在运维过程当中尽可能降低人为操作的比重。系统化、白屏化是第一个阶段——将人为的操作步骤固化成系统程序,避免操作失误;自动化以及智能化是第二个阶段——将正确的决策过程也固化成智能程序,避免决策失误。同时所有的运维动作都需要遵循灰度原则,做到可灰度、可监测、可回滚,即便出现了失误也能控制好爆炸半径,并且做到快速恢复。 精细化的监控体系 面向失败设计不仅要求你的系统足够健壮,同时要求你能够在第一时间感知到失败的发生。无论是自动化的系统恢复,还是人为介入,如果你压根都不知道是哪里出问题了,一切都将束手无策。精细化的监控体系一方面能够在出现问题的时候以最快的速度将最准确的信息传递到人或者运维系统,同时它还能够展现趋势、进行提前预警。AI技术的结合使得监控领域在近几年得到了新的发展驱动力:智能监控报警、根因定位、智能预测、智能决策等能力都是学术界和工程界非常热衷的课题。 故障与攻防演练锤炼容灾应急能力 最后,即便以上工作都做好了,你也不能高枕无忧去等待失败到来。你的设计、系统、流程、技术人员等需要通过不断演练,来保障能力和进化升级。对于代价非常巨大的事件,做好前期的充分演练是非常有必要的,比如军事演练、消防演练等都属于这一范畴。而系统不可用的代价对于企业来讲很可能是无法承受的,因此需要在平时做好充分的演练:通过故障与攻防演练锤炼容灾应急能力,对面向失败的设计做好充分验证。只有当所有的失败场景都被提前演练过,当失败真正来临时才能做到胸有成竹。 本文作者: 游骥阅读原文 本文来自云栖社区合作伙伴“阿里技术”,如需转载请联系原作者。

June 18, 2019 · 1 min · jiezi

消息点击率翻倍的背后闲鱼无侵入可扩展IFTTT系统

一、面临问题在闲鱼生态里,用户之间会有很多种关系。其中大部分关系是由买家触发,联系到卖家,比如买家通过搜索、收藏、聊天等动作与卖家产生联系;另外一部分是平台与用户之间的关系。对这些关系分析之后我们发现这些关系中存在两个问题: 用户产生关系的层次不够丰富;现有系统只维护了一部分用户关系,包括收藏、点赞等,用户关系的层次还不够丰富。用户之间关系是单向且不够实时;在现有的玩法中,买家可以通过多种行为与卖家产生联系,但卖家不能主动与买家发生关系和互动;而且平台计算的关系都是离线的,对用户的吸引力不足。上面提到的场景经过抽象归纳之后都是同一个范式:当某个条件被满足之后,就会触发相对应的动作。这个范式是IFTTT的基本理念,而闲鱼IFTTT就是对这些问题的解决方案。 二、IFTTT概念IFTTT是一个被称为 “网络自动化神器” 的创新型互联网服务理念,它很实用而且概念很简单。IFTTT全称是 If this then that,意思是如果满足“this”条件,则触发执行“that”动作。IFTTT由三部分构成,分别为Trigger、Action和Recipe。 可以看出IFTTT本身概念并不复杂,它的真正魔力在于“由简单组成的复杂”,也就是由众多简单的IFTTT流程相互衔接成跨越整个互联网、跨越多平台、跨越多设备的状态机。 2.1、闲鱼IFTTT闲鱼IFTTT是基于闲鱼的业务场景与IFTTT理念结合后产生的,提供IFTTT标准协议封装,对业务无侵入可扩展的服务编排系统。 闲鱼IFTTT的两个特性对应上述两个问题,分别是: 多维用户关系感知多维指的是覆盖面,闲鱼IFTTT通过更多维度的挖掘,抽象并维护了更丰富的用户关系。基于用户关系数据,我们可以产出用户画像,并通过更有效的方式触达用户。 实时用户双向互动闲鱼IFTTT底层具有对用户关系大数据的高效存储和处理能力,以支持上层业务中用户关系实时处理;闲鱼IFTTT不仅支持买家到卖家关系,而且通过设计天生支持卖家到买家关系。 闲鱼IFTTT把之前平台与用户的互动、买家到卖家的联系,切换称闲鱼用户之间天然的关系互动,对用户骚扰更少且激活拉回的效果更好,我们基于这个场景设计闲鱼IFTTT的技术方案。 三、技术方案 首先按照IFTTT规范对业务进行建模,分为Channel、Trigger和Action层,其中Channel层是数据底层,将Trigger和Action关联后组成标准Recipe。 ChannelChannel层在闲鱼IFTTT的作用是保存和管理用户关系数据,Channel层定义了用户关系的元数据结构,包括关系类型、源账户和目标账户。Channel层是闲鱼IFTTT的基石,Trigger和Action均基于用户关系数据进一步抽象业务逻辑。TriggerTrigger是业务上自定义的触发事件,与业务息息相关,可能是关注的人上新、浏览宝贝降价或者是参加的百币夺宝活动开奖等。当Trigger触发后,闲鱼IFTTT会根据Trigger类型和配置的关系类型计算用户名单,并调用Action层进行处理。ActionAction层处理对象是Trigger触发后计算的用户名单,可以给名单里的用户发Push,发权益或者其他定制逻辑。Action本身是标准化、可插拔的组件,业务上可以利用Action组件对用户名单做AB测试,快速实验不同Action策略。接下来我们说一下闲鱼IFTTT详细技术方案,方案如下: 整体技术方案按照业务建模的结构图细化,补充依赖的技术组件。整体流程不再细述,针对流程中重点模块详细说明。 3.1、场景快速接入设计场景快速接入的目的是让业务对接入闲鱼IFTTT无感知,因为在最开始的设计中,场景接入是准备通过在业务逻辑里增加AOP切面,将业务数据和场景上报。但因为这种方式对业务本身有一定侵入,增加业务执行的RT而且不够灵活,最终被否决。 而现在的场景快速接入方案解决了这些问题,通过SLS接入所有应用的海量网络请求日志,记录请求的URL、参数和响应;将SLS作为Blink流计算任务的数据源;根据diamond动态下发的规则实时筛选网络请求URL和参数,把数据按照指定格式组装后上报给Channel层。 场景快速接入方案将业务逻辑与场景接入解耦,支持快速接入,灵活变更且延迟低,是针对大数据场景接入的高性能解决方案。 3.2、计算用户名单计算用户名单模块采用责任链模式设计,因为在不同Trigger场景中,业务对用户名单的计算和筛选逻辑都是不同的。通过责任链模式,将主流程与业务筛选逻辑解耦,并支持各业务灵活定制筛选逻辑,互不干扰。 3.3、PushActionAction层是闲鱼IFTTT中最重要的一环,会直接触达到用户,Action的逻辑会直接影响用户对平台的直观感受和活跃率。消息Push是Action中最常见的逻辑,更要防止用户被骚扰,PushAction逻辑如下: 敏感人群过滤;疲劳度校验;对发送人群进行AB实验;组装消息;将Action各节点日志同步到SLS,方便检索和排查问题;统计消息发送数据及点击数据,为业务后续决策提供依据;3.3.1、疲劳度疲劳度是防止用户被骚扰的关键,我们针对疲劳度进行了分层设计,分为三层,第一层为用户级别疲劳度,控制一个用户在一个周期内收到消息数量;第二层是业务维度,控制用户在一个周期内收到某个业务的消息数量;第三层是目标级别,控制用户在一个周期内收到同一个发送者消息数量。 在业务维度层面,支持灵活控制多个业务联合疲劳度,保证用户不会被消息过度骚扰。 3.4、用户关系存储用户关系数据是闲鱼IFTTT的基石,它的特点是存储量级大,达到TB级别;而且对存储和查询的性能要求高,TPS和QPS的峰值都在一万以上。经过调研,我们发现集团内部开发的Lindorm可以满足需求。 Lindorm是阿里内部基于Hbase自研的高性能KV存储数据库,对Hbase的性能和稳定性均有一定优化。闲鱼IFTTT采用Lindorm作为用户关系数据存储,经性能测试验证数据读取QPS达到7万,数据存储TPS在10万以上。Lindorm本身性能优异,为闲鱼IFTTT高性能奠定基础。 四、效果验证闲鱼IFTTT自上线以来,已支持关注上新、浏览宝贝降价和租房小区上新等多个业务场景,提供买卖双方实时双向互动能力,平均每天处理关系数据数亿条,处理Trigger量达到上千万,处理Action量达到亿级别,消息点击率较离线push提高1倍以上。 闲鱼IFTTT目前支持的是用户互动场景,后续我们将结合闲鱼自身业务特点,对IFTTT进行更高维度抽象,封装标准Recipe接口,将闲鱼IFTTT打造成提供流程编排、管理能力的服务平台。 在我看来,IFTTT从2010年推出以来,在国外有很大的热度,在互联网和物联网领域都有专门的公司和团队在研发,IFTTT的概念虽然简单,却通过标准化协议满足用户的强需求-让各种互联网产品为用户服务。这其实也给我们互联网从业者一些思考:在新机遇面前,究竟是快速投入比较重要还是抽象标准协议解决一类问题更加有效? 五、名词注解SLS:https://cn.aliyun.com/product/slsDiamond:阿里内部研发的持久配置管理中间件;Blink:https://data.aliyun.com/product/sc?spm=5176.10695662.1131226.1.bf495006EWuVABMetaQ:阿里内部研发的分布式、队列模型的消息中间件;Lindorm:阿里内部基于HBase研发的新一代分布式NoSQL数据库,阿里云类似产品:https://www.aliyun.com/product/ots?spm=a2c4g.11174283.cwnn_jpze.59.2f5a15c3NH30me;Tair:阿里内部研发的高性能、分布式、可扩展、高可靠的Key-Value结构存储系统; 本文作者:闲鱼技术-剑辛阅读原文 本文为云栖社区原创内容,未经允许不得转载。

June 17, 2019 · 1 min · jiezi

消息点击率翻倍的背后闲鱼无侵入可扩展IFTTT系统

一、面临问题在闲鱼生态里,用户之间会有很多种关系。其中大部分关系是由买家触发,联系到卖家,比如买家通过搜索、收藏、聊天等动作与卖家产生联系;另外一部分是平台与用户之间的关系。对这些关系分析之后我们发现这些关系中存在两个问题: 用户产生关系的层次不够丰富;现有系统只维护了一部分用户关系,包括收藏、点赞等,用户关系的层次还不够丰富。用户之间关系是单向且不够实时;在现有的玩法中,买家可以通过多种行为与卖家产生联系,但卖家不能主动与买家发生关系和互动;而且平台计算的关系都是离线的,对用户的吸引力不足。上面提到的场景经过抽象归纳之后都是同一个范式:当某个条件被满足之后,就会触发相对应的动作。这个范式是IFTTT的基本理念,而闲鱼IFTTT就是对这些问题的解决方案。 二、IFTTT概念IFTTT是一个被称为 “网络自动化神器” 的创新型互联网服务理念,它很实用而且概念很简单。IFTTT全称是 If this then that ,意思是如果满足“this”条件,则触发执行“that”动作。IFTTT由三部分构成,分别为Trigger、Action和Recipe。 可以看出IFTTT本身概念并不复杂,它的真正魔力在于“由简单组成的复杂”,也就是由众多简单的IFTTT流程相互衔接成跨越整个互联网、跨越多平台、跨越多设备的状态机。 2.1、闲鱼IFTTT闲鱼IFTTT是基于闲鱼的业务场景与IFTTT理念结合后产生的,提供IFTTT标准协议封装,对业务无侵入可扩展的服务编排系统。 闲鱼IFTTT的两个特性对应上述两个问题,分别是: 多维用户关系感知多维指的是覆盖面,闲鱼IFTTT通过更多维度的挖掘,抽象并维护了更丰富的用户关系。基于用户关系数据,我们可以产出用户画像,并通过更有效的方式触达用户。 实时用户双向互动闲鱼IFTTT底层具有对用户关系大数据的高效存储和处理能力,以支持上层业务中用户关系实时处理;闲鱼IFTTT不仅支持买家到卖家关系,而且通过设计天生支持卖家到买家关系。 闲鱼IFTTT把之前平台与用户的互动、买家到卖家的联系,切换称闲鱼用户之间天然的关系互动,对用户骚扰更少且激活拉回的效果更好,我们基于这个场景设计闲鱼IFTTT的技术方案。 三、技术方案 首先按照IFTTT规范对业务进行建模,分为Channel、Trigger和Action层,其中Channel层是数据底层,将Trigger和Action关联后组成标准Recipe。 ChannelChannel层在闲鱼IFTTT的作用是保存和管理用户关系数据,Channel层定义了用户关系的元数据结构,包括关系类型、源账户和目标账户。Channel层是闲鱼IFTTT的基石,Trigger和Action均基于用户关系数据进一步抽象业务逻辑。TriggerTrigger是业务上自定义的触发事件,与业务息息相关,可能是关注的人上新、浏览宝贝降价或者是参加的百币夺宝活动开奖等。当Trigger触发后,闲鱼IFTTT会根据Trigger类型和配置的关系类型计算用户名单,并调用Action层进行处理。ActionAction层处理对象是Trigger触发后计算的用户名单,可以给名单里的用户发Push,发权益或者其他定制逻辑。Action本身是标准化、可插拔的组件,业务上可以利用Action组件对用户名单做AB测试,快速实验不同Action策略。接下来我们说一下闲鱼IFTTT详细技术方案,方案如下: 整体技术方案按照业务建模的结构图细化,补充依赖的技术组件。整体流程不再细述,针对流程中重点模块详细说明。 3.1、场景快速接入设计场景快速接入的目的是让业务对接入闲鱼IFTTT无感知,因为在最开始的设计中,场景接入是准备通过在业务逻辑里增加AOP切面,将业务数据和场景上报。但因为这种方式对业务本身有一定侵入,增加业务执行的RT而且不够灵活,最终被否决。 而现在的场景快速接入方案解决了这些问题,通过SLS接入所有应用的海量网络请求日志,记录请求的URL、参数和响应;将SLS作为Blink流计算任务的数据源;根据diamond动态下发的规则实时筛选网络请求URL和参数,把数据按照指定格式组装后上报给Channel层。 场景快速接入方案将业务逻辑与场景接入解耦,支持快速接入,灵活变更且延迟低,是针对大数据场景接入的高性能解决方案。 3.2、计算用户名单计算用户名单模块采用责任链模式设计,因为在不同Trigger场景中,业务对用户名单的计算和筛选逻辑都是不同的。通过责任链模式,将主流程与业务筛选逻辑解耦,并支持各业务灵活定制筛选逻辑,互不干扰。 3.3、PushActionAction层是闲鱼IFTTT中最重要的一环,会直接触达到用户,Action的逻辑会直接影响用户对平台的直观感受和活跃率。消息Push是Action中最常见的逻辑,更要防止用户被骚扰,PushAction逻辑如下: 敏感人群过滤;疲劳度校验;对发送人群进行AB实验;组装消息;将Action各节点日志同步到SLS,方便检索和排查问题;统计消息发送数据及点击数据,为业务后续决策提供依据;3.3.1、疲劳度疲劳度是防止用户被骚扰的关键,我们针对疲劳度进行了分层设计,分为三层,第一层为用户级别疲劳度,控制一个用户在一个周期内收到消息数量;第二层是业务维度,控制用户在一个周期内收到某个业务的消息数量;第三层是目标级别,控制用户在一个周期内收到同一个发送者消息数量。 在业务维度层面,支持灵活控制多个业务联合疲劳度,保证用户不会被消息过度骚扰。 3.4、用户关系存储用户关系数据是闲鱼IFTTT的基石,它的特点是存储量级大,达到TB级别;而且对存储和查询的性能要求高,TPS和QPS的峰值都在一万以上。经过调研,我们发现集团内部开发的Lindorm可以满足需求。 Lindorm是阿里内部基于Hbase自研的高性能KV存储数据库,对Hbase的性能和稳定性均有一定优化。闲鱼IFTTT采用Lindorm作为用户关系数据存储,经性能测试验证数据读取QPS达到7万,数据存储TPS在10万以上。Lindorm本身性能优异,为闲鱼IFTTT高性能奠定基础。 四、效果验证闲鱼IFTTT自上线以来,已支持关注上新、浏览宝贝降价和租房小区上新等多个业务场景,提供买卖双方实时双向互动能力,平均每天处理关系数据数亿条,处理Trigger量达到上千万,处理Action量达到亿级别,消息点击率较离线push提高1倍以上。 闲鱼IFTTT目前支持的是用户互动场景,后续我们将结合闲鱼自身业务特点,对IFTTT进行更高维度抽象,封装标准Recipe接口,将闲鱼IFTTT打造成提供流程编排、管理能力的服务平台。 在我看来,IFTTT从2010年推出以来,在国外有很大的热度,在互联网和物联网领域都有专门的公司和团队在研发,IFTTT的概念虽然简单,却通过标准化协议满足用户的强需求-让各种互联网产品为用户服务。这其实也给我们互联网从业者一些思考:在新机遇面前,究竟是快速投入比较重要还是抽象标准协议解决一类问题更加有效? 五、名词注解SLS:https://cn.aliyun.com/product/slsDiamond:阿里内部研发的持久配置管理中间件;Blink:https://data.aliyun.com/product/sc?spm=5176.10695662.1131226.1.bf495006EWuVABMetaQ:阿里内部研发的分布式、队列模型的消息中间件;Lindorm:阿里内部基于HBase研发的新一代分布式NoSQL数据库,阿里云类似产品:https://www.aliyun.com/product/ots?spm=a2c4g.11174283.cwnn_jpze.59.2f5a15c3NH30me;Tair:阿里内部研发的高性能、分布式、可扩展、高可靠的Key-Value结构存储系统; 本文作者:闲鱼技术-剑辛原文链接 本文为云栖社区原创内容,未经允许不得转载。

June 14, 2019 · 1 min · jiezi

StarGAN生成你的明星脸

StarGAN——生成你的明星脸 1 GAN 介绍GAN,叫做生成对抗网络 (Generative Adversarial Network) 。其基本原理是生成器网络 G(Generator) 和判别器网络 D(Discriminator) 相互博弈。生成器网络 G 的主要作用是生成图片,在输入一个随机编码 (random code) z后,自动的生成假样本 G(z) 。判别器网络 D 的主要作用是判断输入是否为真实样本并提供反馈机制,真样本则输出 1 ,反之为 0 。在两个网络相互博弈的过程中,两个网络的能力都越来越高:G 生成的图片越来越像真样本,D 也越来越会判断图片的真假,然后我们在最大化 D 的前提下,最小化 D 对 G 的判断能力,这实际上就是最小最大值问题,或者说二人零和博弈,其目标函数表达式:其中表达式中的第一项 D(G(z)) 处理的是假图像 G(z) ,我们尽量降低评分 D(G(z)) ;第二项处理的是真图像 x ,此时评分要高。但是 GAN 并不是完美的,也有自己的局限性。比如说没有用户控制的能力和低分辨率与低质量的问题。 为了提高 GAN 的用户控制能力,人类进行了一些列的探索研究。比如 Pix2Pix 模型采用有条件的使用用户输入,使用成对的数据 (paired data) 进行训练; CycleGAN 模型使用不成对的数据 (unpaired data) 的就能训练 。但无论是 Pix2Pix 还是 CycleGAN ,都是解决了从一个领域到另一个领域的图像转换问题。当有很多领域需要转换时,对于每一个领域转换,都需要重新训练一个模型去解决。目前,存在的模型处理多领域图像生成任务时,学习 k 个领域之间所有映射就必须训练 k * (k-1) 个生成器。如果训练一对一的图像多领域生成任务时,主要会导致两个问题: 训练低效,每次训练耗时很大。训练效果有限,因为一个领域转换单独训练的话就不能利用其它领域的数据来增大泛化能力。 ...

June 1, 2019 · 2 min · jiezi

AMD-7nm服务器处理器带来的市场破局

2019年服务器市场迎来了新的变局,AMD发布了7nm服务器处理器二代霄龙,这将是服务器处理器市场的一次大变动,根据最新的数据表现,64核、128线程的AMD第二代霄龙,对比Intel至强铂金8180,28核56线程,单路的霄龙击败了Intel双路铂金8180,性能领先20%,关键是价格比双路便宜不是一点。 这只是一个数据表现,一旦大量的AMD相同7nm处理器布局市场,那就代表着服务器购买成本降低,各个idc厂家就会降低租赁价格,市场一旦好起来,那将是软件技术和互联网产品突飞的时候,所有的市场表明一旦主观因素解决了,连带的环境就会变化. 现在大战就要到来,对于拥有多台服务器,多个服务器在不同的idc厂商里,管理控制相对于难点,这时候需要的不光是完善的解决方案,而是整套服务器批量化、集群化处理的方式。 对于服务器集群化管理,现在云端管理的方式比较科学,旗鱼云梯在服务器集群上的能力是国内比较突出的,能够实现批量化多厂商多地域空间的管理,适合个人和企业的需求。 对于将来企业需求的批量化运作,AI、大数据、人工智能等领域,旗鱼云梯能够实现简单的批量运维接管,也可以实现单独服务器建站的能力,代替现在但计划管理服务器的各种弊端。

May 28, 2019 · 1 min · jiezi

CODING-受邀参加腾讯全球数字生态大会

近日,腾讯全年最重要的一场活动——《腾讯全球数字生态大会》于昆明滇池国际会展中心正式举办。此次全球数字生态大会是腾讯战略升级后,整合互联网+数字经济峰会、云+未来峰会、腾讯全球合作伙伴三大行业大会,全新升级打造的行业创新大会。大会围绕产业智慧升级,洞察数字经济发展趋势,分享产业创新的发展成果。 自去年 9 月以来,腾讯完成了第三次组织架构调整,成立云与智慧产业事业群(CSIG),整合了腾讯的云服务、位置服务、安全、大数据等基础能力,深耕企业服务、医疗、出行、教育、零售、政务等垂直行业,全面拥抱产业互联网,立志于为不同规模的企业提供从毛胚房到精装房的各种行业解决方案。本次大会上,腾讯产业互联网各业务负责人集体出动,联袂发布腾讯数字生态业务战略,展示腾讯历经整合与升级后在产业互联网中的最新业务进展。 正如腾讯公司高级执行副总裁、云与智慧产业事业群总裁汤道生在大会演讲中强调的,腾讯的目标是要成为产业的“数字化助手”,提供工具、做好连接、建设生态。CODING 作为腾讯云的合作伙伴和国内领先的企业研发管理解决方案供应商,也将一起探索产业互联网的道路,共建数字生态,共享发展红利。 CODING 在腾讯全球数字生态大会进行产品演示 企业数字化转型离不开专业的工具支持CODING 基于硅谷先进方法与中国团队多年实践共同打造一站式开发体验,涵盖了软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度,完美契合企业的数字化转型,免去自行搭建工具的烦恼。 精细的项目管理模块 从用户故事和产品需求构想开始,即可在 CODING 中进行全过程精细化的项目管理,一步一步从构思开始制定迭代计划,细化需求和任务,对每次迭代下的相关任务进行多维度的管理,可以对需求任务进行分解、关联、预估工时、讨论等,直至需求开发完成落地,整个项目计划和迭代进度清晰可见。团队成员还可通过团队 Wiki、文件共享等工具进行文档协作、分享,完成团队的每一次产品创意。 研发流程全周期覆盖 CODING 研发管理系统将全套研发流程整合到一个平台,从需求管理、代码仓库、代码评审、测试管理、缺陷管理、持续集成(CI/CD)、持续部署到数据分析、文件管理,全部在一个平台打通,全功能高度整合,提高代码协作效率,保障代码质量,提高交付质量。 研发大数据和可视化报告 CODING 的研发大数据覆盖了需求管理、迭代管理、研发管理、测试管理、缺陷管理等所有模块。自动产出多种可视化报告。通过多种图表形态,多维度衡量项目进度与质量,让工时统计更简单,绩效评定更科学,工作环境更透明。避免填写各种报表导致资源浪费的同时,用数据驱动研发效能提升。 企业级的安全保障CODING 已经为超过 80 万个人开发者和近 4000 家企业提供值得信赖的研发管理系统。解决了金融、保险、地产、互联网和教育等多个领域的软件研发需求。安全更是 CODING 研发管理系统的基石,基于完善的整体规划机构,通过多数据库集群、数据快照、异地备份等多种技术手段和两步认证、用户锁定、操作日志、密码规则设定等功能对用户数据实现了全方面的保护,提升用户数据的安全性。 未来,云服务和基于云实现的各种企业服务都将成为产业互联网的标配,CODING 将协助腾讯云一起,助力各行各业的数字化转型升级,推进技术创新。 点击即可开启企业数字化转型之旅现在五人以下团队可免费使用 CODING

May 24, 2019 · 1 min · jiezi

对话亲历者鲁肃我在支付宝拧螺丝的日子

对话亲历者:他是支付宝技术平台的奠基人之一,但是他总说“这还不是我心中最完美的架构”;他行事低调但却有着“此时此地,非我莫属”的豪气;他曾无数次充当救火大队长,但自评只是“没有掉队的那个人”。在2009-2019 互联网技术十年发展的波澜壮阔中,他是亲历者之一。 查看视频,点击此处:▵7分52秒,听支付宝技术人鲁肃讲故事 他叫程立,花名鲁肃,蚂蚁金服首席技术官。2005 年加入支付宝,是支付宝技术平台的奠基人之一,在支付宝与蚂蚁金服期间,主持支付宝各代技术架构的规划与基础技术平台的建设。2018 年,程立开始担任蚂蚁金服国际事业群首席运营官。 今天我们的主题是“十年”:希望能站在互联网技术发展的时间线上梳理出来几个重要的时间节点,如果用“2009 年到 2019 年是互联网技术 __ 的十年”来造句,希望听听您的讲述! 鲁肃:过去十年,面向整个数字时代的关键技术一个接一个的出现,从被人们接受,到开始步入应用。2009-2010 年是云计算,2011-2012 年是移动,2013-2014 年是大数据,2015-2016 年是人工智能,2017-2018 年是区块链。在蚂蚁金服,我们把区块链、AI、安全、IoT、计算这几大关键技术称为”BASIC“。这五个关键词在过去的十年里面接踵而至,而且得到了所有人的理解。所以我觉得回首来看的话,过去十年是技术革命非常关键的十年:一次技术革命去改变一个真正的行业,完成所有技术的准备。 您提到“革命”这个词,是不是可以这么说:过去十年是互联网技术革命的十年,是互联网技术改变所有人生活的十年? 鲁肃:我们认为过去十年技术正在改变,但是你说它已经完成这个改变了吗?它才刚开始。 听说您小时候一直想做一个数学家,然后某一天忽然发现自己应该做一个程序员? 鲁肃:我读书读到硕士都是以做数学家作为梦想。读博士之后,我的导师他是一个做实践、做工程的老师,所以在他的熏陶下,他让我解决很多工程的问题。那个时候我做了一个选择:不是完全根据自己的兴趣去做一件事情,而是结合自己的兴趣和擅长。那时候我基本上就把注意力转到工程上了。 说到做工程的精神,其实小时候我印象比较深的就是我的父亲每个周末到实验室加班,就把我带到实验室。他会让我看非常大的激光器,一个激光器像一个房子一样大,要把它上面一个盖子盖上,要把螺丝拧上,拧上之后要严丝合缝,确保没有任何漏气。我就是负责拧螺丝的。一圈有几十个螺丝,要一个一个去拧,而且你不能够一次把一个螺丝拧死,要一圈一圈拧。那时候我爸说我拧螺丝拧的特别好。 我的父亲是个物理学家,他做了很多拧螺丝的事情。我读硕士期间做数学研究,数学必须非常缜密,从提出一个定理,到证明它对不对,可能过程很长。我们现在做一个大的系统,写一个没有 bug 的程序,也是很相似的。所以说,我做了很多”拧螺丝“的事情。 您之前介绍过支付宝开发初期的一次重要转折,您经历过非常重要的一夜。可以再跟我们分享一下吗? 鲁肃:2004 年,当时淘宝要改造。这个项目是当时整个阿里巴巴最重要的一个项目,要用新的架构做面向未来的淘宝网。2005 年我加入支付宝以后,很自然的想要向团队证明自己。当时我的主管特别信任我,任命我做当时非常重要项目的主架构师。 这是我第一个做的项目,所以一开始做项目架构师的时候,我把我能想到的最好的架构、当时我懂的和我不懂的技术全部用上去。我想既然是这么重要的一个项目,它应该用最好的技术、最好的架构来做。 当项目进行到一个半月的时候,功能差不多开发到一半,有一天晚上加班以后一起吃饭。当时一个同事坐在我的边上,对着我主管说:你们设计的那个架构可能有问题,项目开发到现在,我们在里面加很多功能越来越难了,越来越容易出错。当时我的主管跟他说,鲁肃是这个项目的架构师,这个项目的技术他说了算,不要再有任何的怀疑,这个事就过去了。 那天晚上回去之后,我仔细想了想,认为他说的这个问题确实存在。而且,在这么重要的一个项目里面用了这么多新的技术,这是一件真正可靠的事情吗?差不多在凌晨一两点的时候,我开始正视这个问题:我认为这个架构确实是有问题。不但有同事说的问题,而且我们不应该用从未经过验证的技术去支持这么重要的一个系统。 所以接下来我也需要做决定:现在怎么办? 在凌晨三四点的时候,我决定要用新的架构。我快速搭了一个原型,用我最擅长的、最有把握的技术,做了一个演示系统。 早上八点到公司,我第一时间和主管说:马上叫齐项目组,我们开个重要的会议。会上我就说,之前这个架构有问题,我建议我们项目要改架构,改成一个更朴实的架构,用更可信赖的技术支撑,我根据这个架构做了一个 demo。会议开的非常高效,最后的结果是:第一,所有人支持用新的架构。第二,所有人会把他们自己之前的工作移到这个新的架构。这个会开完之后我特别感动。大家快速用新的架构完成了这个项目,在五月份把支付宝推到线上。 这个事情影响了我做架构的风格:我会偏实用主义,能够确保每个系统上线一定是最成功的方式。现在回想 2005 年如果当时做错一个决策的话,我的职业生涯也许可能是完全不同的道路,这个项目极大的可能会失败,对支付宝会有什么样的影响也不好说。这个事情也改变了我做决策的风格:做任何决策之前,先把“我”抛开。 感觉您和支付宝是互相成就的关系。至少,您是一个做好准备的人? 鲁肃:应该说是支付宝成就了我。整个支付宝发展的过程中发生过非常多重要的事情,我只在个别事件中起到关键作用。 我只是支付宝发展的过程中没有掉队的人。我觉得支付宝的发展永远比我想象的快,必须全力以赴才能够不掉队,你永远保持你的胜任和担当,其实这就是你的成长。 我觉得是一种担当。从加入支付宝第一天起,我就感觉支付宝这个系统扛在我的肩膀上了。那时候系统非常的原始,特别在早期一两年,基本上三天两头出问题,而且很多时候出现在夜里,任何的问题都是你的问题。这个责任感早期建立起来,一直到后来都没有改变。 您有座右铭吗? 鲁肃:我自己本人其实并没有什么座右铭,但是阿里巴巴有很多土话,这些土话对我的影响非常大。有一句话土话叫“此时此刻,非我莫属”,这个我觉得体现出整个阿里担当的精神,这种精神我个人觉得在我身上是有的,第一时间我会站出来。 在支付宝的发展当中还有没有其他印象深刻的事情? 鲁肃:2010 年,我印象是 1 月份开年会。当时支付宝的总裁讲完话之后,整个晚会的会场就黑了,突然一个声音响起,是我们一个客户的声音,客户在电话里面报怨我们的服务怎么不好,有什么问题。 那个时候我觉得特别震撼:那是我第一次听到一个真正的客户的声音!而且提出我们产品的问题。这些问题过去我们都知道,但我们不觉得它对客户有那么大的影响,但是那个时候听了这个,触动非常大。 然后灯亮了,马云先生走到台上说了一句话:“支付宝你做的太烂了,非常烂!” 这是阿里的风格,非常直接。说完,然后彭蕾上台说:“我会成为支付宝新的总裁。” 我印象她做了一篇演讲,她说:“我是一个女人,我有三个特点:第一个特点是爱做梦,第二个特点是小心眼,第三个特点是不讲理。”然后跟我们提了目标。当时用户在线支付要从支付宝网站跳到银行的网站上,这个成功率只有不到 70%。她说我要求大家把今年支付的成功率从 70% 做到 90% 以上。你们技术人员不要跟我讲做不到,我是不讲理的,你们一定要做到这个事。 年会开完,那年我们全公司就一个目标,就是怎么把这个数据从 70% 做到 90%,而不是非常宏大的做一个业务战略架构。在这个目标的驱动下,我们做了一个非常重要的创新:现在每天支付用的快捷支付,就是那时候创新出来的。由于快捷支付的出现,把它从 70% 不到变成 95% 以上,让移动支付成为可能。 ...

May 23, 2019 · 1 min · jiezi

Java设计模式11享元模式

一、适用场景 内存属于稀缺资源,不能随意浪费。如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存即可,不必每个都去实例化对象,从而节省内存空间。 二、模式核心 享元模式以共享的方式高效的支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。 内部状态:可以共享,不会随环境改变而改变。外部状态:不可以共享,会随环境改变而改变。 围棋例子: 每一个围棋棋子都是一个对象,并都有如下属性: 三、享元模式结构 UM类图: FlyWeight抽象享元类:通常是一个接口或抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态。 UnsharedConcreteFlyWeight非共享享元类:不能被共享的子类可以设计为非共享享元类。 ConcreteFlyWeight具体享元类:为内部状态提供成员变量进行存储。 FlyWeightFactory享元工厂类:创建并管理享元对象,享元池一般设计为键值对。 围棋代码示例: FlyWeight抽象享元类: public interface ChessFlyWeight { String getColor();//获取颜色,内部状态 void display(Coordinate c);//展示位置,外部状态} UnSharedConcreteFlyweight 非共享享元类: /** * 外部状态:棋子坐标位置 */public class Coordinate { private int x,y; public Coordinate(int x, int y) { super(); this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; }}ConcreteFlyWeight具体享元类: ...

May 12, 2019 · 1 min · jiezi

第一家关店的盒马鲜生大数据眼光看新零售的转型之路

4月30日,盒马鲜生宣布昆山新城吾悦广场店,将于2019年5月31日起停止营业。从2016年初开出第一家店一年半的时间盒马鲜生全球门店64家,覆盖14个城市。据华商韬略的分析称“随着模式的日益成熟,盒马新店实现盈利的周期也大幅缩短,广州开的门店当月就实现了盈利。按照年底前增加到100家店的计划,盒马将进入全面规模化盈利期。” 很多人都无比看好盒马式的新零售,认为这一模式通过大数据把台前幕后的系统融合在一起,把“人“”货“”场“联系到一起,能够精准掌握消费者需求,反向驱动商品采购、加工、配送的闭环形成。 那么被诸多媒体和零售同行关注,被各种看好的盒马鲜生为什么会关店?是新零售的模式出现问题?拥有“无限可能”的新零售面临着什么样的难题呢?不妨追本溯源回到大数据营销的初始目标上。 大数据营销,本质上是在海量数据的基础之上,通过深挖数据、广积数据,通过统计分析敏锐的抓住用户的所思所想,知道用户最想要的是什么,最需要的是什么。再锁定目标用户为他们量身打造营销策略,通过不同的途径,对不同的用户发送不同的内容。然后实时观察回流数据,不断优化营销策略,提升用户转化,并和第一步的用户洞察形成完整的高效循环。 在整个过程中,大数据营销最强调的一个特征,也是它的优势,就是“全流程定制化”。正因为有海量的数据做支撑,才使深度洞察用户成为可能,而不是单纯靠销量、靠主观臆断、靠个人喜好。传统模式下,无论是效率的提升,还是产品的差异化、供应链的优化,都很难迅速改变,大数据就是让传统零售像新零售转变的快速车道。 以第三方全景数据服务平台MobSmart的“全景大数据+场景小数据”理念来看,真正的大数据其实并不仅仅是关注数据的数量,更要关注数据的质量、深度、适应度。数量只是基础和起点,大数据的核心意义是在于帮助更多的企业行业进行定制化升级,为更多用户量身打造属于每一个人的智能化生活。新零售只是其中的一个领域而已。最直观的变化是,有了大数据的支持,新零售的配送能力得到显著提升,也更加符合年轻用户的生活习惯。 回头来看这次的盒马关店,盒马方面表示,“做零售没有百分之百的事情,尤其门店规模上去了,好的要更好,差的也要及时调整,这样才能保持健康的体魄”并声称未来将在苏州和昆山开出更多门店。 毋庸置疑的是第4次零售革命会继续以不可思议的速度席卷旧世界,而在高速的疯狂扩张中尤为重要的是保持冷静不被冲昏头脑,时刻停下来反省自身在这条转型之路上是否坚守初心,认认真真做好产品,踏踏实实稳步前进。

May 7, 2019 · 1 min · jiezi

Java-Web基础ActionService-Dao三层的功能划分

Action/Service/DAO简介:      Action是管理业务(Service)调度和管理跳转的。       Service是管理具体的功能的。       Action只负责管理,而Service负责实施。       DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊、动态、子查询都可以。但是无论多么复杂的查询,dao只是封装增删改查。至于增删查改如何去实现一个功能,dao是不管的。       总结这三者,通过例子来解释:       Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;       Service是厨师,action送来的菜单上的菜全是ta做的;       Dao是厨房的小工,和原材料打交道的事情全是ta管。       相互关系是,小工(dao)的工作是要满足厨师(service)的要求,厨师要满足服务员(action)转达的客户(页面用户)的要求,服务员自然就是为客户服务喽。       现在最基本的分层方式,结合了SSH架构。Model层就是对应的数据库表的实体类。Dao层是使用了Hibernate连接数据库、操作数据库(增删改查)。Service层:引用对应的Dao数据库操作。Action层:引用对应的Service层,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理。       以上的Hibernate, Struts,都需要注入到Spring的配置文件中,Spring把这些联系起来,成为一个整体。 三大框架Struts/Hibernate/Spring      简单地说:      Struts——控制用的;      Hibernate——操作数据库的;      Spring——解耦用的。      详细地说:       Struts在SSH框架中起控制的作用,其核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,主要控制逻辑关系的处理。       Hibernate是数据持久化层,是一种新的对象、关系的映射工具,提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制,大大减少数据访问的复杂度。把对数据库的直接操作,转换为对持久对象的操作。 ...

May 4, 2019 · 1 min · jiezi

实例详解Spring-MVC入门使用

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller).通过分层使开发的软件结构更清晰,从而达到开发效率的提高,可维护性和扩展性得到提高.Spring提供的MVC框架是在J2EE Web开发中对MVC模式的一个实现,本文通过实例讲解一下Spring MVC 的使用. 先来看一个HTTP request在Spring的MVC框架是怎么被处理的:(图片来源于Spring in Action) 1,DispatcherServlet是Spring MVC的核心,它的本质是一个实现了J2EE标准中定义的HttpServlet,通过在web.xml配置<servlet-mapping>,来实现对request的监听. <servlet> <servlet-name>springTestServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springTestServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>** 以.do结尾的request都会由springTestServlet来处理.2,3,当接受到request的时候,DispatcherServlet根据HandlerMapping的配置(HandlerMapping的配置文件默认根据<servlet-name>的值来决定,这里会读取springTestServlet-servlet.xml来获得HandlerMapping的配置信息),调用相应的Controller来对request进行业务处理. <bean id="simpleUrlMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/login.do">loginController</prop> </props> </property> </bean> <bean id="loginController"class="com.test.spring.mvc.contoller.LoginController"> <propertyname="sessionForm"> <value>true</value> </property> <propertyname="commandName"> <value>loginCommand</value> </property> <property name="commandClass"> <value>com.test.spring.mvc.commands.LoginCommand</value> </property> <property name="authenticationService"> <refbean="authenticationService"/> </property> <propertyname="formView"> <value>login</value> </property> <propertyname="successView"> <value>loginDetail</value> </property> </bean>** 以login.do结尾的request由loginController来处理.<property name="formView">配置的是Controller接收到HTTP GET请求的时候需要显示的逻辑视图名,本例是显示login.jsp,<property name="successView">配置的是在接收到HTTP POST请求的时候需要显示的逻辑视图名,在本例中即login.jsp提交的时候需要显示名为loginDetail的逻辑视图.4,Controller进行业务处理之后,返回一个ModelAndView对象.return new ModelAndView(getSuccessView(),"loginDetail",loginDetail);5,6,DispatcherServlet根据ViewResolver的配置(本例是在springTestServlet-servlet.xml文件中配置)将逻辑view转换到真正要显示的View,如JSP等. <bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.JstlView</value> </property> <property name="prefix"> <value>/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean>**其作用是将Controller中返回的ModleAndView解析到具体的资源(JSP文件),如上例中的return new ModelAndView(getSuccessView();按照上面ViewResolver配置,会解析成/jsp/loginDetail.jsp.规则为prefix+ModelAndView的第二个参数+suffix.示例的完整代码如下: ...

April 29, 2019 · 2 min · jiezi

测试工程师必备这7个手机测试技能

移动应用安全近几年越来越被重视,目前针对移动端的应用也越来越多,每天有大量的数据从移动端发出,部分数据在移动端进行处理,移动应用安全在今天显得尤为重要,那么如何能及时发掘移动APP的潜在漏洞,以免被攻击者利用造成破坏呢,渗透测试是目前发掘漏洞的有效方法。一、交叉测试 又叫事件或冲突测试,是指一个功能正在执行过程中,同时另外一个事件或操作对该过程进行干扰的测试。 例如通话过程中接收到短信或闹铃触发,应用软件运行过程中插拔充电器等。执行干扰的冲突事件不能导致应用软件异常、手机死机或花屏等严重问题。另外,还需要注意各交叉事件的优先级别,检验系统是否能依据各事件的优先级别依次进行处理。不能因执行优先级别高的事件而导致优先级较低的事件吊死。 交叉事件测试非常重要,一般能发现应用软件中一些潜在的问题。另外有中英文模式切换的手机要注意中英文模式切换后的功能实现存在的问题(这个主要针对手机应用软件支持语言自适应功能),这一点通常会被测试人员忽略。 二、易用性/用户体验测试 易用性(Useability)/用户体验是指在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力,是交互的适应性、功能性和有效性的集中体现。 手机操作主要依赖拇指,所以交互过程中不能设计的太复杂,交互步骤不能太多,应该尽量设计多点快捷方式,易用是对终端软件(推而广之是交互类软件)最基本、最重要的要求。 不好用的软件很难吸引用户,更别提提升用户对软件的忠诚度了。 易用性体现在:所见即所得、一用便知、一学就会,方便快捷的完成预期功能。易用的软件能让一个新用户快速学习、使用我们的软件,并在使用软件过程中体现我们的贴心服务,超出用户预期的体现是我们追求的目标。 三、功能测试 首先应分析功能模块的功能项,测试每个功能项是否能够实现对应的功能。一般根据测试用例(Test Case)或软件本身的流程就可以完成基本功能测试(相对简单,故障也较容易发现、解决)。 **获取最新测试相关资料,视频,工具等你来领百度云获取资料点他????链接: 提取码: esyd** 四 、压力测试又叫边界值容错测试或极限负载测试。即测试过程中,已经达到某一软件功能的最大容量、边界值或最大的承载极限,仍然对其进行相关操作。例如连续进行短信的接收和发送,超过收件箱和SIM卡所能存储的最大条数,仍然进行短消息的接收或发送,以此来检测软件在超常态条件下的表现,进而评估用户能否接受。 对手机可以施加的压力测试类型主要有: 1)存储压力由于手机采用的是栈式存储,所以当一个存储块满了之后,如果程序员不做相应处理或者处理不好的话,很容易造成其他存储区被擦除,从而在UI上出现问题(比如其他功能无法正常使用,出现异常)。 2)边界压力边界处理一直是程序员最容易忽略的地方。 3)响应能力压力有时候某个操作可能处理的时间很长,在处理期间如果测试者再不断地进行其他操作的话,很容易出现问题。 4)网络流量压力执行较大数据流量的功能的同时,再进行其他功能操作,使得网络流量始终处于很高的状态(如视频通话时再进行短信等其他功能操作),验证各功能是否依然能正常工作,是否存在因网络流量瓶颈而引起某功能异常。 压力测试用手工测试可能很繁锁,可以考虑自动化测试。遗憾的是,目前还没有较为大量使用的工具,一般都是由开发人员配合开发出的工具,或者高级的测试人员编写出的脚本。 五、兼容性测试也就是不同品牌、款型的手机(针对目前我们产品来说,主要是针对不同品牌、款型的手机上的测试),不同网络,不同品牌和不同容量大小的SIM卡之间的互相兼容的测试。不同型号的手机支持的图片格式、声音格式、动画格式不一样,需要选择尽可能通用的格式,或者针对不同的型号进行配置选择。以短消息为例:中国电信的小灵通接收到从中国移动或中国联通GSM发来的短消息,需要验证显示和回复功能是否正常等。再比如,应用软件分别在OPPO R7、OPPO A3手机上运行,各功能是否均能正常使用,界面是否均显示正常等。**获取最新测试相关资料,视频,工具等你来领百度云获取资料点他????链接: 提取码: esyd** 六、暴力测试断电,重启,断网等意外情况发生时,处理是否正确 七、容量测试即存储空间已满时的测试,包括手机用户可用内存和SIM卡的所有空间被完全使用的测试。此时再对可编辑的模块进行和存储空间有关的任何操作测试,如果软件在极限容量状态下处理不好,有可能导致死机或严重的花屏等问题的出现。 以上建议仅供参考!【乐搏软件测试】【乐搏学院】如有侵权请联系,立即删除

April 28, 2019 · 1 min · jiezi

优秀自动化测试工程师的学习方法和逻辑经历分享

结合了工作经验,写出了这篇文章,是从功能测试转向自动化测试的学习过程。用您5分钟时间阅读完,希望能对您有帮助! 什么是自动化测试? 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。 为什么做测试自动化? 1)对个人来说随着时代科技的进步,越来越多的工作偏向于了自动化,软件测试当然也不例外。从发展的趋势来说,只有不断的提升自己,面对各种变化,才可以追上科技的进步。手动测试虽然是基础,但是企业不会在乎你的过程。只有高效率的工作才会让企业觉得你更有价值。自动化测试是软件测试的主流,也是软件测试的高薪专场! 2)对企业来说为什么企业做自动化测试,从现在的情况来看,互联网需求迭代非常快,人员流动性非常大,所以工作时间比较紧迫,要在规定时间内提高工作效率,所以一个需求从提出到上线时间比较紧急,同时对于其影响的范围也可能不太清楚,在上线之前必须对原有功能进行回归测试。不管是接口还是从客户端,都需要大量的测试工作,而且在大数据时代,测试用例量也是非常庞大的,如此繁复单调的工作让人工来测试的话,根本不能保证效率和质量,所以必须要借助于非人工手段来实现。 怎么才能算合格的测试工程师呢? 自动化测试工程师细分可以有UI自动化测试工程师,APP自动化测试工程师、接口自动化测试工程师等等。 首先,掌握一门编程语言,应该以Java或者python为主,虽然什么语言都可以用来做自动化测试,但毕竟这个两个是最流行的,如果想成为自动化测试工程师里,最主流的测试工程师,还是强烈推荐大家选择这两门语言。 然后,掌握主流的框架,如:selenium,appium,monkey,monkeyrunner之类的,基本上掌握了这个几个APP和UI自动化都可以玩的转了。 自动化测试工具有好多种,分享给大家这些,希望对你能有帮助! **获取最新测试相关资料,视频,工具等你来领百度云获取工具点他????链接: 提取码: esyd** 1、SoapUI-接口测试 SoapUI是一个非常流行的用于SOAP和REST的开源API测试自动化框架。它还支持功能测试、性能测试、数据驱动测试和测试报告。 2、QTP-WebUI自动化测试 QTP是一种自动测试工具。使用 QTP 的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。QTP针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。它可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。其中包括:创建测试、插入检查点、检验数据、增强测试、运行测试、分析结果和维护测试等方面。 3、Postman-接口测试 Postman 提供功能强大的Web API和HTTP请求的调试,它能够发送任何类型的HTTP请求 (GET, POST, PUT, DELETE…),并且能附带任何数量的参数和Headers。不仅如此,它还提供测试数据和环境配置数据的导入导出,付费的Post Cloud用户还能够创建自己的 Team Library用来团队协作式的测试,并能够将自己的测试收藏夹和用例数据分享给团队。**获取最新测试相关资料,视频,工具等你来领百度云获取工具点他????链接: 提取码: esyd** 4、Monkey-稳定性测试 软件附带在sdk中,适用于android和ios,通过adb shell,生成用户或系统的伪随机事件。压力测试结果:崩溃crash,无响应anr,基本命令:adb shell monkey 1000。 5、Jmeter-接口测试,性能测试 Apache JMeter是一个开源的Java桌面应用程序,主要用于web应用程序的负载测试。它还支持单元测试和有限的功能测试。它有很多好的特性,比如动态报告、可移植性、强大的测试IDE等,并且支持不同类型的应用程序、协议、shell脚本、Java对象和数据库。 6、Robot Framework-WebUI自动化测试,接口测试 Robot Framework是一个开源自动化框架,它实现了用于验收测试和验收测试驱动开发(ATDD)的关键字驱动方法。Robot Framework为不同的测试自动化需求提供框架。但是,通过使用Python和Java实现其他测试库,可以进一步扩展其测试功能。Selenium WebDriver是Robot Framework中常用的外部库。测试工程师可以利用Robot Framework作为自动化框架,不仅可以进行Web测试,还可以用于Android和iOS测试自动化。对于熟悉关键字驱动测试的测试人员,可以轻松学习Robot Framework。 7、LoadRunner-性能测试 LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。 以上建议仅供参考!【乐搏软件测试】【乐搏学院】如有侵权请联系删除

April 26, 2019 · 1 min · jiezi

云原生的新思考为什么容器已经无处不在了

4月24日,中国信息通信研究院主办的首届云原生产业大会在北京举行,在《云原生数字引领未来》的主题演讲中,阿里云容器服务总监易立表示:“云原生不但可以很好的支持互联网应用,也在深刻影响着新的计算架构、新的智能数据应用。以容器、服务网格、微服务、Serverless为代表的云原生技术,带来一种全新的方式来构建应用。”本文根据易立演讲内容整理而成。 拥抱云原生技术,解耦系统复杂度如今,大多数企业开始全面拥抱云计算,在All-in-Cloud全面到来的时代,三个重要转变:基础设施的云化、核心技术的互联网化、业务的数据化和智能化。在各行各业中,都有很多业务应用从诞生之初就生长在云端,各个企业也因此越来越像互联网公司,而技术能力被视为不可或缺的核心竞争力。在2019阿里云峰会·北京站上,阿里云智能总裁张建锋在谈及‘核心技术的互联网化’时,也提到了大力投资云原生。 为什么要拥抱云原生?一方面,云计算已经重塑了软件的整个生命周期,从架构设计到开发,再到构建、交付和运维等所有环节;另一方面,企业IT架构也随之发生巨大变化,而业务又深度依赖IT能力。这带来了一定程度的复杂性和挑战性。 正如人类社会发展伴随着技术革命与社会大分工一样,云原生技术的出现解耦了很多复杂性,这是IT技术的进步。 首先,Docker实现了应用与运行环境的解耦,众多业务应用负载都可以被容器化,而且应用容器化满足了敏捷、可迁移、标准化的诉求;其次,Kubernetes的出现让资源编排调度与底层基础设施解耦,应用和资源的管控也开始得心应手,容器编排实现资源编排、高效调度;随后,Istio为代表的服务网格技术解耦了服务实现与服务治理能力。此外,阿里云还提供了Open API、SDK等丰富的开发工具,实现第三方被集成,为云的生态伙伴提供广阔的可能性。这样的技术分层推动了社会分工,极大促进了技术和业务创新。 在阿里云看来,云原生首先可以支持互联网规模应用,可以更加快速地创新、和低成本试错;其次,屏蔽了底层基础架构的差异和复杂性;同时,服务网格、无服务计算等新的计算范型的不断涌现,给整体IT架构能力带来了极致弹性,从而更好地服务于业务。用户可以基于阿里云容器服务构建面向领域的云原生框架,如面向机器学习的Kubeflow,和面向无服务器的Knative等等。 方兴未艾,容器应用的新思考容器已经无处不在了, 作为容器服务的提供者,我们认为容器技术会继续发展,被应用于“新的计算形态”,“新的应用负载”和“新的物理边界”,在此将相关观察和新思考分享给大家。 1 新的计算形态:云原生的Serverless Runtime已来 云原生技术理念,是使企业用户及开发者只关注应用开发,无需关注基础设施及基础服务。与之相似的Serverless计算,将应用服务资源化并以API接口的方式提供出来,使用者只需从客户端发起调用请求即可,更重要的是,pay as you go 能够真正为用户节省成本。 Serverless Runtime 分为面向基础架构容器的实现,面向应用服务封装的实现,和事件驱动面向函数计算的实现。 云原生Serverless Runtime形态包含多种方式。业界各个厂商也相应地设计出了不同服务解决方案: 面向函数的Function as a Service(FaaS) - 比如AWS Lambda,阿里云的函数计算,提供了事件驱动的编程方式,用户只需提供函数实现响应触发实践,开发效率很高。阿里云函数计算按照调用量计费,可以根据业务流量平滑调整计算资源,在典型场景下,会有10%~90%的成本下降。客户码隆科技做模型预测,利用函数计算降低了40%的计算成本。面向应用 - 比如Google App Engine、新发布的Cloud Run和阿里云EDAS Serverless,用户只需提供应用实现而平台负责应用弹性、自动化运维,这主要面向互联网类型应用。相比于FaaS,面向应用的Serverless形态无需改造现有应用,阿里云EDAS Serverless为流行的开源微服务框架提供了无服务器应用托管平台,支持Spring Cloud,Apache Dubbo,或者阿里云HSF框架。面向容器 – 比如AWS fargate,或者是阿里云的Serverless Kubernetes 应用的载体是容器镜像,灵活性很好,配合调度系统可以支持各种类型应用,而无需管理底层基础架构。针对容器化应用,阿里云在去年5月推出了Serverless Kubernetes容器服务,无需节点管理和容量规划,按应用所需资源付费,弹性扩容。针对阿里云基础能力优化,安全,高效。极大降低了管理Kubernetes集群的。Serverless Kubernetes的底层是构建在阿里云针对容器优化的轻量虚拟化弹性容器实例之上,提供了轻量、高效、安全的容器应用执行环境。Serverless Kubernetes无需修改即可部署容器类型应用。 2 新的应用负载:容器正被用于越来越多类型应用 最早容器被认为不适合传统的已有应用,但是现在状况已大为改观。容器已经开启了对Windows生态的支持,新发布的1.14版本中Kubernetes 的Pod,Service,应用编排,CNI 网络等绝大多数核心能力都已经在 Windows 节点上得到了支持。当今Windows系统依然占有60%的份额,比如企业的ERP软件、基于ASP的应用、大量的Windows的数据库等,这些传统的基于虚拟化的应用,都可以在代码不用重写的情况下实现容器化。 基于容器技术构建的新架构,会催生新的应用业务价值。云原生AI是非常重要的应用场景,快速搭建AI环境,高效利用底层资源,无缝配合深度学习的全生命周期。对于AI工程,云原生系统可以在四个维度上为提效: 优化异构资源调度弹性、高效、细粒度(支持GPU共享)简化异构资源管理复杂性,提升可观测性和使用效率可移植、可组装、可重现的AI流程以深度学习分布式训练为例,通过阿里云容器服务可以获得三重加强。资源优化:统一调度CPU/GPU等异构资源,使用VPC/RDMA网络加速;性能提升:GPU 64卡P100,加速比提升90%,相比原生Tensorflow有45%提升;算法优化:MPI代替gRPC通信、ring-allreduce环形通信、计算和通信重叠、梯度融合等。 还有其他高性能计算的场景,以基因数据处理为例,阿里云某用户在5小时内完成WGS 100GB数据处理,支持5000+步骤的复杂流程, 90秒实现500节点扩容充分发挥容器极致弹性。 3 新的物理边界:云-边-端,容器不止运行在IDC服务器中 容器最被熟知的基础环境是数据中心,在业务流量高峰与低谷之时,凭借容器极致弹性可以实现应用与资源伸缩,有效地保证高利用率与高性价比。 随着5G和物联网时代的到来,传统云计算中心集中存储、计算的模式已经无法满足终端设备对于时效、容量、算力的需求。将云计算的能力下沉到边缘侧、设备侧,并通过中心进行统一交付、运维、管控,将是云计算的重要发展趋势。以Kubernetes为基础的云原生技术,在任何基础设施上提供与云一致的功能和体验,实现云-边-端一体化的应用分发, 支持不同系统架构和网络状况下,应用的分发和生命周期管理,并且针对边缘及设备进行如访问协议、同步机制、安全机制的种种优化。 如前所述,应用容器化实现了标准化的可移植性,促成了敏捷弹性的云原生应用架构。不仅大大简化了多云/混合云的部署,而且优化成本,同时提供更多的选择,比如满足安全合规的要求、提升业务敏捷性、提升地域覆盖性等等。 容器可以适用于多种基础环境,比如数据中心、边缘云、和多云/混合云,使得开发者关注回归到应用本身。 写在最后云原生时代,是开发者最好的时代。 云原生不但可以很好的支持互联网应用,也在深刻影响着新的计算架构、新的智能数据应用。以容器、服务网格、微服务、Serverless为代表的云原生技术,带来一种全新的方式来构建应用。此外,云原生也在拓展云计算的边界,一方面是多云、混合云推动无边界云计算,一方面云边端的协同。 ...

April 26, 2019 · 1 min · jiezi

揭秘白盒与黑盒测试之间的秘密干货整理

结合了工作经验,写出了这篇文章,全是干货和经验分享。用您5分钟时间阅读完,希望能对您有帮助! 白盒测试 白盒测试(White-box Testing,又称逻辑驱动测试,结构测试),它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。 对开发语言的支持:白盒测试工具是对源代码进行的测试,测试的主要内容包括词法分析与语法分析、静态错误分析、动态检测等。目前测试工具主要支持的开发语言包括:标准C、C++、Visual C++、Java、Visual J++等。 白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。 软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查: 1、对程序模块的所有独立的执行路径至少测试一遍。2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。3、在循环的边界和运行的界限内执行循环体。4、测试内部数据结构的有效性,等等。 黑盒测试定义:黑盒测试法把程序看成一个黑盒子,完全不考虑程序内部结构和处理过程; 黑盒测试是在程序外部进行测试,他只是检查程序功能是否按照规格说明书的规定正常使用。黑盒测试又称功能测试。 软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:1、是否有不正确或遗漏的功能?2、在接口上,输入是否能正确的接受?能否输出正确的结果?3、是否有数据结构错误或外部信息(例如数据文件)访问错误?4、性能上是否能够满足要求?5、是否有初始化或终止性错误?0G海量软件测试相关资料,视频,工具等你来领 百度云获取资料点他????链接: 提取码: esyd 白盒与黑盒的区别任何工程产品都可以使用以下两种方法之一进行测试。 黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。 白盒与黑盒的用处初始测试集中在每个模块上,保证源代码的正确性,该阶段成为单元测试,主要用白盒测试方法。接下来是模块集成和集成以便组成完整的软件包。集成测试集中在证实和程序构成问题上,主要采用黑盒测试方法,辅之以白盒测试方法。 静态测试 通过运行程序测试软件称为动态测试。通过评审文档、阅读代码等方式测试软件称为静态测试。在动态测试中,通常使用白盒测试和黑盒测试从不同的角度设计测试用例,查找软件代码中的错误。静态测试方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。 回归测试 是在程序有修改的情况下,保证原有功能正常的一种测试策略和方法。大白话就是,我们测试人员在对程序进行测试时发现bug,然后返还程序员修改,程序员修改后发布新的软件包或新的软件补丁包给我们测试人员,我们就要重新对这个程序测试,已保证程序在修正了以前bug的情况下,正常运行,且不会带来新的错误的这样一个过程。 一般情况下是不需要全面测试的,而是根据修改的情况进行有效的测试。百度云获取资料点他????链接: 提取码: esyd 软件的缺陷等级应如何划分? 1.致命错误,可能导致本模块以及其他相关模块异常,死机等问题;2.严重错误,问题局限在本模块,导致模块功能失效或异常退出;3.一般错误,模块功能部分失效;4.建议问题,由问题提出人对测试对象的改进意见. 软件测试的阶段 一般来说可分为单元测试,集成测试,系统测试,验收测试; 单元测试 是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试,测试重点是系统的模块,包括子程序的正确性验证等。 集成测试 是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。测试重点是模块间的衔接以及参数的传递等。 系统测试 是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。测试重点是整个系统的运行以及与其他软件的兼容性。集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非一项简单的任务,它被称为测试的“先知者问题”。 验收测试 是在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试数据的子集。 以上建议仅供参考!【乐搏软件测试】【乐搏学院】如有侵权请联系删除

April 25, 2019 · 1 min · jiezi

APP测试中工程师应注意哪些事项干货分享

结合了工作经验,写出了这篇文章,全是干货和经验分享。用您5分钟时间阅读完,希望能对您有帮助! 一、安装、卸载测试 1、安装 1.软件在不同操作系统(Palm OS、Symbian、Linux、Android、iOS、Black Berry OS 6.0、Windows Phone 7)下安装是否正常;2.软件安装后的是否能够正常运行,安装后的文件夹及文件是否写到了指定的目录里;3.软件安装各个选项的组合是否符合概要设计说明;4.软件安装向导的UI测试;5.软件安装过程是否可以取消,点击取消后,写入的文件是否如概要设计说明处理;6.软件安装过程中意外情况的处理是否符合需求(如死机,重启,断电);7.安装空间不足时是否有相应提示;8.安装后没有生成多余的目录结构和文件;9.对于需要通过网络验证之类的安装,在断网情况下尝试一下;10.还需要对安装手册进行测试,依照安装手册是否能顺利安装; 2、卸载 1.直接删除安装文件夹卸载是否有提示信息;2.测试系统直接卸载程序是否有提示信息;3.测试卸载后文件是否全部删除所有的安装文件夹;4.卸载过程中出现的意外情况的测试(如死机、断电、重启);5.卸载是否支持取消功能,单击取消后软件卸载的情况 ;6.系统直接卸载UI测试,是否有卸载状态进度条提示 ; 二、UI测试 测试用户界面(如菜单、对话框、窗口和其它可规控件)布局、风格是否满足客户要求、文字是否正确、页面是否美观、文字、图片组合是否完美、操作是否友好等。UI测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏觅功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操作性测试。 1、导航测试 1.按钮、对话框、列表和窗口等;或在不同的连接页面之间需要导航;2.是否易于导航,导航是否直观;3.是否需要搜索引擎;4.导航帮助是否准确直观;5.导航与页面结构、菜单、连接页面的风格是否一致; 2、图形测试 1.横向比较。各控件操作方式统一;2.自适应界面设计,内容根据窗口大小自适应;3.页面标签风格是否统一;4.页面是否美观;5.页面的图片应有其实际意义而要求整体有序美观;6.图片质量要高且图片尺寸在设计符合要求的情况下应尽量小;7.界面整体使用的颜色不宜过多; 3、内容测试1.输入框说明文字的内容与系统功能是否一致;2.文字长度是否加以限制;3.文字内容是否表意不明;4.是否有错别字;5.信息是否为中文显示;6.是否有敏感性词汇、关键词;7.是否有敏感性图片,如:涉及版权、专利、隐私等图片; 10G海量软件测试相关资料,视频,工具等你来领 **百度云获取资料点他????链接 提取码: esyd 三、升级、更新测试** 新版版发布后,配合不同网络环境的自劢更新提示及下载、安装、更新、启劢、运行的验证测试 1.测试升级后的功能是否与需求说明一样;2.测试与升级模块相关的模块的功能是否与需求一致;3.升级安装意外情况的测试(如死机、断电、重启);4.升级界面的UI测试;5.不同操作系统间的升级测试; 四、户体验测试 以主观的普通消费者的角度去感知产品或服务的舒适、有用、易用、友好亲切程度。 通过不同个体、独立空间和非经验的统计复用方式去有效评价产品的体验特性提出修改意见提升产品的潜在客户满意度。 1.是否有空数据界面设计,引导用户去执行操作;2.是否滥用用户引导。3.是否有不可点击的效果,如:你的按钮此时处于不可用状态,那么一定要灰掉,或者拿掉按钮,否则会给用户误导;4.菜单层次是否太深;5.交互流程分支是否太多;6.相关的选项是否离得很远;7.一次是否载入太多的数据;8.界面中按钮可点击范围是否适中;9.标签页是否跟内容没有从属关系,当切换标签的时候,内容跟着切换;10.操作应该有主次从属关系;11.是否定义Back的逻辑。涉及软硬件交互时,Back键应具体定义;12.是否有横屏模式的设计,应用一般需要支持横屏模式,即自适应设计; 以上建议仅供参考!【乐搏软件测试】【乐搏学院】如有侵权请联系删除

April 24, 2019 · 1 min · jiezi

web测试流程及注意事项经验干货整理分享

结合了工作经验,写出了这篇文章,全是干货和经验分享。用您5分钟时间阅读完,希望能对您有帮助!相信很多人都喜欢用浏览器看网页,虽然网民不是专业人员,但是对界面效果的印象是很重要的。如果你注重这方面的测试,那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分,但是恰恰相反界面对不懂技术的客户来说那相当关键,慢慢体会就会明白的。 Web界面设计中,对各种元素(如按钮、单选框、复选框、列表框、超连接、输入框等等)的设计是非常重要的。一、搜索功能 若查询条件为输入框,则参考输入框对应类型的测试方法 1、功能实现: (1)如果支持模糊查询,搜索名称中任意一个字符是否能搜索到 (2)比较长的名称是否能查到 (3)输入系统中不存在的与之匹配的条件 (4)用户进行查询操作时,一般情况是不进行查询条件的清空,除非需求特殊说明。 2、组合测试: (1)不同查询条件之间来回选择,是否出现页面错误(单选框和多选框最容易出错) (2)测试多个查询条件时,要注意查询条件的组合测试,可能不同组合的测试会报错。 二、添加、修改功能 1、特殊键:(1)是否支持Tab键 (2)是否支持回车键 2、提示信息: 不符合要求的地方是否有错误提示 3、唯一性: 字段唯一的,是否可以重复添加,添加后是否能修改为已存在的字段(字段包括区分大小写以及在输入的内容前后输入空格,保存后,数据是否真的插入到数据库中,注意保存后数据的正确性) 4、数据 正确性: (1)对编辑页的每个编辑项进行修改,点击保存,是否可以保存成功,检查想关联的数据是否得到更新。 (2)进行必填项检查(即是否给出提示以及提示后是否依然把数据存到数据库中;是否提示后出现页码错乱等) (3)是否能够连续添加(针对特殊情况) (4)在编辑的时候,注意编辑项的长度限制,有时在添加的时候有,在编辑的时候却没(注意要添加和修改规则是否一致) (5)对于有图片上传功能的编辑框,若不上传图片,查看编辑页面时是否显示有默认的图片,若上传图片,查看是否显示为上传图片 (6)修改后增加数据后,特别要注意查询页面的数据是否及时更新,特别是在首页时要注意数据的更新。 (7)提交数据时,连续多次点击,查看系统会不会连续增加几条相同的数据或报错。 (8)若结果列表中没有记录或者没选择某条记录,点击修改按钮,系统会抛异常。 三、删除功能 1、特殊键:(1)是否支持Tab键 (2)是否支持回车键2、提示信息:(1)不选择任何信息,直接点击删除按钮,是否有提示(2)删除某条信息时,应该有确认提示3、数据 实现:(1)是否能连续删除多个产品(2)当只有一条数据时,是否可以删除成功 (3)删除一条数据后,是否可以添加相同的数据(4)如系统支持批量删除,注意删除的信息是否正确 (5)如有全选,注意是否把所有的数据删除(6)删除数据时,要注意相应查询页面的数据是否及时更新 (7)如删除的数据与其他业务数据关联,要注意其关联性(如删除部门信息时,部门下游员工,则应该给出提示)(8)如果结果列表中没有记录或没有选择任何一条记录,点击删除按钮系统会报错。 四、输入框 1、字符型输入框 (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。 (2)长度检查:最小长度、最大长度、最小长度-1、最大长度+1、输入超工字符比如把整个文章拷贝过去。 (3)空格检查:输入的字符间有空格、字符前有空格、字符后有空格、字符前后有空格 (4)多行文本框输入:允许回车换行、保存后再显示能够保存输入的格式、仅输入回车换行,检查能否正确保存(若能,检查保存结果,若不能,查看是否有正常提示) (5)安全性检查:输入特殊字符串(null,NULL, ,javascript,<script>,</script>,<title>,<html>,<td>)输入脚本函数(<script>alert("abc")</script>)、doucment.write("abc")、hello) 2、数值型输入框 (1)边界值:最大值、最小值、最大值+1、最小值-1 (2)位数:最小位数、最大位数、最小位数-1最大位数+1、输入超长值、输入整数 (3)异常值、特殊字符:输入空白(NULL)、空格或"~!@#$%^&*()_+{}|[]:"<>?;',./?;:'-=等可能导致系统错误的字符、禁止直接输入特殊字符时,尝试使用粘贴拷贝查看是否能正常提交、word中的特殊功能,通过剪贴板拷贝到输入框,分页符,分节符类似公式的上下标等、数值的特殊符号如∑,㏒,㏑,∏,+,-等。输入负整数、负小数、分数、输入字母或汉字、小数(小数前0点舍去的情况,多个小数点的情况)、首位为0的数字如01、02、科学计数法是否支持1.0E2、全角数字与半角数字,数字与字母混合、16进制,8进制数值、货币型输入(允许小数点后面几位)。 (4)安全性检查:不能直接输入就copy 3、日期型输入框: (1)合法性检查:(输入0日、1日、32日)、月输入[1、3、5、7、8、10、12]、日输入[31]、月输入[4、6、9、11]、日输入30、输入非闰年,月输入[2],日期输入[28、29]、输入闰年,月输入[2]、日期输入[29、30]、月输入[0、1、12、13] (2)异常值、特殊字符:输入空白或NULL、输入~!@#¥%……&*(){}[]等可能导致系统错误的字符 (3)安全性检查:不能直接输入,就copy,是否数据检验出错? 4、信息重复在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理. 10G海量软件测试相关资料,视频,工具等你来领 百度云点他????链接 提取码: esyd 五、Web测试注意事项都有哪些!1.页面提示信息 主要是对页面操作结果成功或失败的提示信息,还有用户在做一些关键操作或者是涉及敏感操作时系统是否会有提醒。 2.页面功能部分 (1)页面初始数据是否显示正确 (2)页面数据处理功能是否被正确执行并返回正确结果 (3)对模块的功能测试时可以列出该模块的所有实现功能进行排列组合,比如页面基本的增删改查功能: 增加-->增加-->增加(连续增加测试);增加-->删除-->增加(之前删除内容);修改-->增加(修改之前内容) 3.页面中元素显示 ...

April 23, 2019 · 1 min · jiezi

蚂蚁金服高级研究员阳振坤:为什么我们要选择自研数据库这条艰难之路

“如果大家当时能看见原来十年后OceanBase能长成这样,可能十年前OceanBase得到的支持会好很多。但是这种如果是不存在的,很多时候你要先证明自己。” 根据工信部数据显示,1998年,中国软件企业5000家,市场规模325亿;到了2018年底,中国软件企业3.78万家,收入规模超过6.3万亿元,营收增长了193.8倍。可在最核心的基础设施三大件芯片、操作系统和数据库上,过去我们并未取得商用意义上的重大突破。不过,相比芯片和操作系统,国内数据库领域的局面要略微乐观一些。除了传统的数据库厂商、数据服务商,互联网巨头、云计算厂商、硬件厂商、新兴的创业公司也越来越多地投入到数据库的研发中。而谈及国产自研数据库,就不得不提OceanBase。OceanBase是完全由阿里巴巴和蚂蚁金服自主研发、全球首个应用于金融核心业务的分布式关系数据库。OceanBase的研发始于2010年6月,因为选择从零开始,研发之路从一开始就磨难重重,中途因为找不到愿意使用的业务,团队曾经濒临解散。最终OceanBase还是跨越了死亡之谷,在蚂蚁金服实现了全面替代Oracle,成功支撑了过去5年“双11”蚂蚁金服全部核心业务的重压,创造了25.6万笔/秒支付峰值和4200万笔/秒请求数处理峰值这一业内全新的纪录。自2017年开始,OceanBase开始走向外部商用,目前已经在数十家商业银行落地,其中包括南京银行、浙商银行、苏州银行、人保健康险等。OceanBase帮助南京银行共同打造“鑫云+”互金开放平台,实现贷款交易处理能力10倍提升,轻资产模式显著降低成本,从原有的3050元/账户降低到上线后的4元/账户。日处理百万笔放款,平均处理时间小于1 秒,让老百姓借钱更方便,真正实现了普惠金融。站在现在这个时间点上顾盼今昔,蚂蚁金服高级研究员、OceanBase创始人阳振坤认为,OceanBase的成功其实有行业和时代的必然性。这是最坏的时代,也是最好的时代2009年开始,大量新的非关系型数据库如雨后春笋般涌出,在整个数据库行业掀起了一场空前盛大的NoSQL革命。这时候的关系数据库早已过了而立之年,在此期间虽然曾短暂爆发过一些所谓终结关系数据库的革命,但丝毫没有动摇到关系数据库的主导地位。但这一次似乎与以往不同,火热发展的云计算带来了对更大规模数据库的需求,而关系数据库的缺点则相应地被越来越多人诟病:不能够扩展、容量小、处理能力不够、成本又非常高。在当时的很多人看来,关系数据库的末日是真的要来了。那时阳振坤已经做了两年多的自研分布式系统,他十分看好云计算系统的发展机会。同一年,阳振坤加入阿里巴巴,开始了分布式关系数据库OceanBase的研发。数据库从诞生起已经有几十年的时间了,但基本上它的市场格局就没有多少变化,最早起来的几家厂商今天还是占据着统治地位。因为数据库非常难被替换,它处在整个产品或者产业链最底层的位置,替换风险很大,但收益相比起来却小得多。这也是为什么像IBM、微软这样的后来者也无法取代Oracle。这就导致了数据库变成了一个门槛极高、强者恒强的领域,后来者很难居上。前有Oracle挡道、后有NoSQL数据库追赶,在大部分人看来,那时候怎么也不会是自研关系数据库的好时机,但阳振坤却不这么想。加入阿里之后,阳振坤发现无论对淘宝还是支付宝,关系数据库都扮演着十分关键的角色,在使用上根本不可能摆脱。但已有的数据库,无论是商业数据库还是开源数据库,都有非常多的局限,远远无法满足如淘宝、支付宝这样的互联网和金融业务对高扩展、高并发、高可用和低成本的需求。单机数据库已经走到了尽头,下一步只能走向分布式,而分布式恰好是阳振坤所擅长的。如果能将分布式技术揉到数据库里面,解决单机数据库存在的各种问题,对当时整个互联网的基础设施都会是一个巨大的帮助和进步。阳振坤认为他们赶上了一个“天时地利人和”的好机会。“天时”指的是互联网的爆发式增长对数据库的高并发、大数据量提出了很大的需求,有了需求去推动就会容易得多;“地利”指的是阿里内部从淘宝到蚂蚁金服拥有大量需要使用数据库的场景,OceanBase可以从不是特别重要的应用场景开始尝试,一步步地将数据库做成关键系统;“人和”指的是当时单机数据库已经走到了尽头,下一步一定是走向分布式,而当时团队成员大多是研究分布式出身,做的就是自己最擅长的工作。用阳振坤的原话就是:“这是千载难逢的机会,我们一定要做,而且一定能做成。”一个不断“破格”的人“一个不断破格的人”,这是早前某次采访中记者对阳振坤的评价。1984年阳振坤考入北京大学数学系,硕士师从本系的张恭庆院士,后又转向计算机领域,博士师从计算机系的王选院士。需要强调的是,他修完大学课程只用了3年,硕士只用了一年多,成为王选院士博士生的时候他只有24岁。1995年其所在团队研究成果获国家科技进步一等奖(排名第四),1997年也就是他32岁那年被破格晋升为教授。在他人或许都安于现状之时,他却毅然选择了离校。个中原因也不复杂,他的工作更偏于工程,而在工业界有更多的机会,也能发挥更大的作用。2002年离开北大/方正的时候,阳振坤内心很清楚自己必须要做点不一样的事情。他先是加入联想研究院担任首席研究员,负责无线通信领域的研究;后来接触到分布式系统并看好其前景,在微软亚洲研究院、百度所从事的工作都属于分布式这个范畴,前者侧重研究,后者偏重工程实践。回想在北大的那些年,阳振坤觉得特别感激的是,学数学让他有了一个很好的数学基础,后来转到计算机系以后,碰到了王选老师,又打下了一个比较牢靠的计算机基础,这才有了他后来的今天。作为对阳振坤影响最大的人,恩师王选有两点让他至今受益:一是如何判断一件事情是否有价值,二是“顶天立地”的技术理念,“顶天”就是技术上要不断追求新突破,“立地”就是要把技术做成通用产品,让整个社会都能普遍使用。其实2010年去淘宝的时候,阳振坤根本不知道自己会做什么事情。加入淘宝之后,摆在他面前的有两个选择,一个是加入正在快速发展的淘宝业务团队,去主管技术,这是一条已经能看到很大的发展机会、相对轻松的道路;另一条是阳振坤后来自己选的,从头组建团队做一个技术平台,也就是今天我们看到的OceanBase数据库。从加入淘宝到选择做自研数据库,一共只花了两个星期的时间。这不是一个容易的选择,但阳振坤相信自己的判断:“2010年选这个项目的时候,我是觉得这件事情需要做。当时互联网迅速发展带来了对大数据量、高并发的需求,大家对传统单机数据库有很大的抱怨,觉得它既没有扩展能力,又没有高并发的能力,成本还非常高,但是互联网根本就离不开关系数据库。这件事情怎么看都是一件应该要做、需要做的事情。”阳振坤没有说出来的是,这件事到底有多难。那时候阿里巴巴刚开始要“去IOE”,几乎没人想着说要自己从头做一个数据库。传统关系数据库都是通过外部硬件来保证可用性,用便宜的PC机替换高端服务器之后,硬件更容易出故障了,如何保证数据库高可用?高可用和数据一致性如何同时保证?分布式系统怎么同时实现CAP的要求?几十年来这么多做数据库的厂商,国内国外基本没有人成功过。而且从公司的业务发展的角度,也不可能等你几年把数据库做出来,再去发展业务,更可行的做法是基于开源做出一些东西,让业务先往前走。因此OceanBase立项之初,除了阳振坤和他当时的直属领导,其他人对这个项目要么不关心,要么不赞成。从零开始自研分布式关系数据库并全面替换Oracle,在当时有多少人会相信这真的能做成呢?当时整个淘宝一共只有两三千人,而Oracle有十几万人,就算整个淘宝的人全部去做数据库,跟Oracle比起来也只是很小很小的一个比例。在阳振坤看来,如果一件事情几乎所有的人都认为它很重要、需要做,这件事情就已经不是创新了。当所有人都认为这件事情要做的时候,其实做这件事情的时机已经过去了一大半。作为最底层的基础软件设施,数据库需要很长时间的积累,不可能今年做,明年就能真正大规模地用起来。 虽然在2010年选择做数据库的时候,没有太多人看重和支持,对于团队来说这可能反而是一件好事。无人关注,反倒给了团队几年积累发展的时间。阳振坤不只要自研,还要把OceanBase定位成恩师王选所说的“顶天立地”的技术产品——走标准化的路,做一个通用的关系数据库产品,而不是一个仅仅在公司内部使用的产品。每个公司使用任何产品其实都只用了其中很小的一部分功能,如果只做满足公司自用需求的数据库,可能只需要投入十分之一、五分之一的人力物力时间。而要做成通用产品就意味着必须实现所有功能,这要困难得多,团队的投入、花费的精力和时间也要大好多倍。但也因为阳振坤最初的坚持,今天的OceanBase才得以走出蚂蚁金服,走进众多银行系统。不过这都是后话了。做数据库就像在黑暗中前行,守得住寂寞、担得了压力,甚至要有近乎偏执的性格才可能跨越死亡之谷,到达最终目的地。阳振坤团队中一位新人曾经向他表达过自己的困惑,当时这位新人入职三个月了,因为有太多东西要学,什么也没做出来,而跟他同时入职天猫的新员工才来了一个月,做的系统就已经在线上使用了。阳振坤当时给新人讲了一个故事,他说:“你过三年再看,没有人还记得那个同学三年前在天猫上把网页做了什么改版,可是三年以后你今天做的东西还会在生产系统中使用。”十年蛰伏,一飞冲天OceanBase的第一个客户来自淘宝收藏夹。当时的淘宝收藏夹正处于业务高速发展期,数据库的访问量飞快增长,面临着第二年服务器数量需要翻一倍甚至几倍的局面。业务方忙于寻找解决方案的时候,阳振坤主动找上门去提出了可以用OceanBase帮他们解决问题,把服务器数量降低一个数量级。四个月出Demo,八个月出试用版,一年后系统正式上线,淘宝收藏夹就这样成了第一个吃OceanBase螃蟹的业务,新数据库取得了非常好的效果。这时候是2011年,收藏夹项目成为了OceanBase第一个小小的里程碑。但在后续一年多的时间里,OceanBase团队一直在寻找更多业务,也确实有一些业务用了,却再也没有找到像淘宝收藏夹效果这么显著的业务。做数据库难度大、周期长,前几年的投入也许有那么一点点产出,但其实跟投入比几乎微不足道,团队面临的压力可想而知。数据库少不了人力投入,OceanBase团队从最早只有阳振坤一个人,后来发展到2012年已经有30多个人了。占了这么多人头,但在公司里却没有足够多、足够重要的业务,没能产生足够大的价值和效益。团队陷入了一个比较困难的时期,甚至数度濒临解散。当被问及“中间有没有想过这事如果没做成,怎么办?”,阳振坤回答得云淡风轻:“不是每件事都能做成,那太难了。如果每件事在做之前都想着它能不能做成,那最后做成的事就会很少。”在最困难也最危险的时候,团队迎来了一丝转机。2012年底,公司把OceanBase整个团队调到了支付宝。支付宝属于金融领域,面临的数据库挑战会比其他业务更大,这相当于给了OceanBase团队一次从头开始的机会。2013年夏天,支付宝也开始启动“去IOE”,并希望能够把Oracle数据库替换掉。阳振坤又一次主动出击,向当时的主管、也是现在蚂蚁金服的CTO程立自荐了OceanBase的解决方案。金融行业数据库,最怕的就是突发故障导致数据丢失,涉及到钱的事,多了少了都是不可接受的。为了解决高可用与主备库数据一致的矛盾,OceanBase将可用性做到了数据库系统内部,用一主两备或一主多备代替一主一备。主库到备库同步的时候不要求同步到每个备库,而是同步到包括主库在内的多数库(超过半数),也就是说总共三个库中如果有两个成功了,这个事务就成功了。如果任何一台机器出了问题,这个系统的可用性和数据一致性都是可以保证的。程立认可了阳振坤提出的方案,OceanBase团队开始埋头开发,第一个要攻克的目标是支付宝交易库。2014年双11,OceanBase迎来了第一次大考。大促开始前的凌晨,各个团队都在自己的作战室里热火朝天地准备。当时任蚂蚁金服董事长的彭蕾去了OceanBase团队的作战室,问大家:“有没有信心?”阳振坤跟彭蕾开了个玩笑说:“你看我们窗子都已经打开了,如果等会出问题,我们就准备从这跳下去。”在一开始的计划里,双11交易流量的1%会切给OceanBase,但因为当时的Oracle数据库系统支撑不了汹涌而来的巨大流量,最后OceanBase成功支撑了2014年双11中10%的交易流量。经过了双11的考验之后,OceanBase得到了更多的认可和支持。后来OceanBase团队获得了2015年蚂蚁金服的CEO大奖,这也是第一次由技术团队拿到这个奖。彭蕾希望借这个奖鼓励那些能够沉下心来、扎扎实实地把一项技术做好做扎实的技术人们。2015年春夏,支付宝交易库和支付库都换成了OceanBase;2016年,支付宝账务系统上线,这也标记着OceanBase真正在金融系统最核心最关键的领域站住了脚。从2017年开始,OceanBase开始走出支付宝、走出蚂蚁金服,在商业银行推广使用,最早的两家客户是浙商银行和南京银行。仅仅用了两年多的时间,OceanBase已经在人保健康险、常熟农商行、苏州银行、广东农信等数十家商业银行和保险机构上线。2017年10月,南京银行“鑫云+”互金开放平台正式发布,这是阿里云、蚂蚁金服合作整体输出的第一次尝试,通过“鑫云”+平台的建设,南京银行互金核心系统在交易处理能力、成本控制和对接效率都得到了极大的提升。南京银行传统的线下消费金融业务开展10年,余额100亿,而与互联网平台合作开展线上业务仅一年时间业务量已达到100亿。南京银行“鑫云+”平台上线后,业务快速增长,贷款交易处理能力全面升级,从原有的10万笔/天到上线后实现100万笔/天,对普惠金融起到了更有利的支撑。轻资产模式使得单账户管理成本约为传统IOE架构的1/5至1/10,从原有的3050元/账户降到了上线后的4元/账户。“鑫云+”平台的维护人员较传统银行业务系统约为1/5左右。以往合作时银行需要分别与各个互联网平台进行对接,自项目上线后,只需对接鑫云+一家平台即可实现多家互联网平台的对接,大大减少了重复建设,提高对接效率,同时也降低了中小银行以及互联网平台的对接成本。从濒临解散到浴火重生,OceanBase已经走了快十年,但在自研关系数据库这条漫漫长路上,OceanBase才仅仅走出了一小步。在阳振坤看来,OceanBase现在“开了很大的一朵花,但是结了很小的一个果”,虽然它已经向所有人证明了通用的分布式关系数据库是能够做成的,而且能真正应用在生产系统中,但今天OceanBase的应用还很有限,远远没有充分发挥它的价值。阳振坤告诉我们,OceanBase当初没有选择基于开源或已有的技术思路开发,而是选择走分布式自研这条路,虽然走得艰难,但做成之后就会成为不可替代的优势。过去这十来年正好是分布式系统发展的十来年,转型到分布式已经成为所有人都认可的一个选择。如今,以蚂蚁金服的OceanBase为代表的分布式关系数据库,不仅解决了关系数据库的扩展性问题,也极大地降低了关系数据库的成本,还提升了可用性。现在,兼容Oracle的工作是OceanBase的重中之重。OceanBase团队的目标是,用两年时间做到Oracle业务的平滑迁移,不需要修改一行代码、不需要业务做任何调整就能够将数据库迁移过来。在阳振坤看来,能够把最早的一些想法一些创新变成产品,真的是非常艰难甚至说过程中充满痛苦的一条道路。但是OceanBase做的所有事情其实还是从业务、从客户中出发,只有技术真的能够落到生产中去,落到用户中去才是真正有价值的,否则做得再好也只是一个空中楼阁。相信未来,OceanBase还会走得更快、更远。本文作者:华蒙阅读原文本文为云栖社区原创内容,未经允许不得转载。

April 17, 2019 · 1 min · jiezi

在阿里做了五年技术主管,我有话想说

阿里妹导读:在历史文章《如何成为优秀的技术主管?》中,阿里巴巴高级技术专家云狄从开发规范、开发流程、技术规划与管理三个角度,分享对技术 TL 的理解与思考。今天的文章,他将继续深入探讨这一话题,从管理的角度分享技术TL的核心职责,主要包括团队建设、团队管理、团队文化、沟通与辅导、招聘与解雇等,希望与大家共同探讨、交流。背景互联网公司的技术团队管理通常分为2个方向:技术管理和团队管理,互联网公司的技术TL与传统软件公司的PM还是有很大的区别,传统软件公司的PM更多注重于对项目的管理包括项目任务拆解、项目进度以及风险等。对于多数互联网公司而言,技术TL更多的职责不再局限于项目角度,而是对业务与技术都要有深入的了解,就像黑夜里的灯塔,能够引导和修正团队成员前进的航向。综合技术和业务角度去深度思考问题,具备一定的前瞻性,并在技术领域投入持续的学习热情,向团队成员传道,补齐短板,提高整个团队的战斗力。技术TL职责不仅需要制定日常规范,包括开发规范、流程规范等,推动规范的落地,以公有的强制约定来避免不必要的内耗,另外一多半的时间可能花在了开发任务分解分配、开发实践、技术架构评审、代码审核和风险识别上,剩余的时间则花在为了保障系统按时交付所需的各种计划、协作、沟通、管理上。管理大师彼得·德鲁克说:“组织的目的,就是让平凡的人做出不平凡的事。”然而,不是任何一群平凡的人聚集到一起,都能做出不平凡的事。甚至一群优秀的人聚集到一起,也可能只是一个平庸的组织。大到一个国家,小到一个团队,任何一个卓越的组织,都必须有一个卓越的领导者。领导者是一个组织的灵魂,领导者在很大程度上决定了组织所能达到的高度。阿里有句土话“平凡人、非凡事”,技术团队同样如此,管理者的战略眼光、管理方法、人格魅力等,都会给团队的工作结果带来决定性的影响。其实每个公司、每个团队的背景不太一样,从管理学的角度探讨一些问题,没有统一标准的答案,本文中一些观点仅是个人观点,更多从我个人成长为技术TL一些观点理念,同时我也是吸取了前辈们一些优秀的管理理念,包括我最为尊敬的通用电气CEO杰克·韦尔奇、苹果CEO乔布斯、Intel CEO格鲁夫,国内我最推崇的技术管理者robbin(丁香园的技术副总裁)。团队建设从2014年开始带这块业务技术团队,至今有5个年头。回想起来,团队管理中所有能遇上的问题都遇到过了,其中的磕磕绊绊数不胜数,完全是在实践当中吸取教训,团队建设这块在这里和大家简单分享一下,当然这里面也有做得不够好的地方。在阿里每个人都能感受到拥抱变化,基本上每年组织架构都会调整,甚至有些团队每半年都会调整一次。14年我也算是被分配到这个团队负责这块业务,这块业务是集团收购一家子公司的业务,整个团队文化和技术体系与阿里有很大的差异化。一般来说新官上任三把火,新的技术TL空降之后往往会大肆招人,快速推进改革,而且有些技术TL喜欢把原来的一些旧将搬进来。当时我没有急于这么去做,没有招过一个新员工,而是立足于稳定现有的团队,主要基于以下原因:团队和业务了解不够深:对于目前的团队的人员以及业务,我不够了解,不清楚这里面有哪些坑和陷阱,一旦初战不利,领导的信任度被透支,在公司恐怕难有立足之地,更不用谈论改造团队,发挥自己的才能了。流程与制度:针对团队现状存在的一些问题,我初步判断并不是人的问题,很多问题是一些组织、流程、制度上的问题。我认为只有好的制度才能造就好的团队,在没有解决现有团队的痼疾之前招聘新人,不但不会带来新的生产力,反而会造成团队的混乱,应该先打下一个好的根基,再招人,才能事半功倍。团队安全感:不想让团队现有的成员感觉一朝天子一朝臣,担心自己在团队中会被边缘化,成为弃儿。另外一方面能够让现有团队心理比较安全,可以安心地好好工作,不至于发生更多的动荡。经过了几个月的摸底了解,大概清楚当时团队存在的一些问题和原因:业务配合不规范:产品、运营、研发部门之间配合没有建立合理的工作流程,比如对于产品需求的PRD评审没有标准,对于运营需求没有量化指标,大家都是疲于奔命做需求,导致大家的积极性不够高。跨团队协作混乱:跨部门之间的工作配合毫无规范可言,部门之间相互推诿,随便什么业务人员都会随时给研发人员下命令,长此以往,伤害了研发团队的积极性。针对以上问题,我主要把协作流程规范梳理了一番,制定了相对合理、规范的产品合作流程,同产品同学约法三章,明确了PRD输出的标准和规范,运营的业务需求也统一由产品输出,杜绝一句话需求。同产品、前端、UED、QA团队的协作统一标准流程,下游对上游依赖方输出的工作必须有明确的标准规范,口头说的统统无效,拒绝合作。针对跨团队协作乱的情况,我特别想说明一下,由于研发部门不是直接创造收入的业务部门,而是承担业务部门的服务者角色。作为一个服务者,往往站在一个被动和弱势的位置上,很容易被业务人员举着收入的大棒指挥你无条件的服从。业务部门人员随便指派任务,随意变更需求,团队同学无所适从。这样一来,部门内部无论怎样合理的计划都会被外部的力量轻易打破,让团队同学无所适从,导致大家的工作积极性不高,喜欢互相推卸责任。久而久之,员工就产生了自我保护意识,凡工作尽量往后退,凡责任尽量往别处推,不求有功但求无过。为打破员工养成的这种自我封闭的保护意识,鼓励员工更加积极主动做事情,我能够做的就是把这些责任都扛在自己身上,亲自去协调每项工作,让团队成员没有后顾之忧,让团队同学相信我可以搞定他们担心的事情,出了任何问题我可以来背锅,给自己的团队创造一个相对宽松和自由的工作空间,保护团队不被外部的各种杂事伤害到。团队管理人往往会高估自己而低估别人,很多管理者都会觉得手下交上来的工作做得不够完美,这里考虑不周那里做的啰嗦,但很多时候你只是看到了他人不擅长的地方,或者只是对方和你的出发点不同给出了不同的解决方案而已。很多时候,我们并不如自己想象的那么强。管理者在充分理解一些管理的理念之后,不断地在实际的管理工作中去实践并收集反馈和迭代,这样才能够形成自己的管理风格,并找到最适合当前团队的管理方法。作为一个团队的管理者,通常会有两种风格管理策略,简要概括为集权式的管理风格、放权式的管理风格。集权式管理:管理者的风格是偏细节的,定义清晰的工作目标,并且把工作目标分解得非常细致,让手下的团队能按照整个计划步步为营往前推进,这是一种风格,相对来讲比较集权。可以说我带这个团队的第一年是这种风格,我甚至会参加每一次需求评审,无论需求大小,会和研发同学一起去写代码,对研发团队我会做详细的code review,亲自带领研发团队做技术交流和分享,参与技术讨论确认架构方案,这样以来和大家建立起了充分的信任。放权式管理:定义大的目标,把握大的方向,做关键性的决策。但是并不深入每个细节去管控手下团队的执行细节,以结果为导向。我到这个团队一年后,业务流程已经清晰的建立起来了,骨干员工在业务上能够完全领会并且达到我的要求,这个时候放权可以充分调动团队的自主性和创造性,多数技术人员他们喜欢被领导,不喜欢被管理。以上这两类管理风格没有对错之分,究竟哪种方式更适合完全取决于团队的状况。其实这里我更想说一下关于放权式的管理风格,对于一个制度刚刚建立,流程还没有跑顺畅,团队残缺,骨干员工业务能力不及格的团队,采用放权式管理是错误的。你必须事无巨细,从第一线的业务细节抓起,手把手的带员工,教会他们怎么正确的做事情,怎样达到你的要求,手把手的培养业务骨干,搭建团队核心架构。这些年我看到过太多的案例,管理层自己从不真正深入业务,也缺乏对业务的深刻理解,没有找到问题的本质原因。总是寄希望于招人来解决问题,结果换了一茬又一茬人,问题永远解决不了,而且从来不深刻反思自己是否亲自尝试解决业务问题。很多时候架构反应出来的问题,其实是组织、流程的问题。总之,作为管理层,如果自己没有深入一线去发现问题,自己动手去解决问题的决心和勇气的话,那这个团队很难有新的突破和成功。团队文化在我刚参加工作的前几年,就听过一些关于团队文化和企业文化的一些概念,并没有特别深刻的印象。尤其我读了《基业长青》这本书后,让我感受到对于一个企业而言,决定短期的是技巧,决定中期的是战略,决定长期的是文化。企业文化对一家公司来说真的很重要,同样团队文化对于一个团队来说也很重要,我在带团队之初也曾经忽视了团队文化的冲击。在带领这个团队之初,我私下找一些团队同学做1on1沟通,我发现这里面的问题还是比较严重的,很多人为了避免故障遭受惩罚,不敢去重构优化代码,把自己封闭到一个很小的圈子,也没有过多的追求和理想,以前也没有末位淘汰机制,大家觉得可以继续吃大锅饭。当时部门都是工作多年的老人,老的风气和习惯已经形成了很顽固的不良文化,工作情绪受到很大的影响。老的不良的文化包括:做事情没有积极性;永远不承认自己的错误,永远找借口推卸责任,永远都是别人的问题;不求有功但求无过;责任心差,对待工作自我要求低;对工作安排喜欢讨价还价;在一个不好的文化氛围下,优秀的员工会被排挤,团队没有向心力,也很难留住好的人才,员工流失率会非常高。我认为衡量一个团队文化氛围是否有吸引力,有一个很重要的指标,新员工的流失率:如果一个团队氛围非常好,新员工入职以后往往能够快速融入进来,流失率很低;如果团队氛围差,新员工入职以后比较茫然难以融入,往往会很快离职,流失率非常高,实际上留不住新员工远远比留不住老员工更可怕。接下来我希望给团队树立的文化是:坦诚,公开,透明;平等相处,消除等级感;工作气氛轻松,团队关系和谐;敢于担当,主动承担责任;成就他人,乐于分享。关于团队文化这个话题其实很泛,可以单独写一篇文章出来的。这里我主要基于团队文化以上几点,谈一下我的一些个人的看法。坦诚的力量首先,我觉得坦诚无论对于一个 TL 还是团队成员来说,坦诚也是一种价值观,对于一个团队的发展来说是非常重要的。作为一个 TL,带领一支团队,我觉得最重要的是 TL 本人必须做到坦诚的态度,只有对团队坦诚,才能和团队之间形成信任,只有和团队形成了信任,才能成为一支默契的团队。通用电气 CEO 杰克·韦尔奇说过:什么是信任?当一个领导真诚、坦率、言出必行的时候,信任就出现了,事情就是这么简单。为什么坦诚精神能行得通?很简单,因为坦诚有化繁为简的力量!坦诚的性格是管理者最基本的要求,只有管理者坦诚,才能获得团队的信任,作秀式的演讲和奖励并不能够真正获得团队的心,还是需要在工作中脚踏实地一点一滴去做好最平凡普通的事情。坦诚能够让你直面自身的缺陷,有针对性地改变自己,解决团队的问题,造就一个互相信任的团队氛围。我见过一个比较典型的案例,日常工作中主管对于下属不够坦诚,下属与主管的平时一些工作沟通中,下属做的不够好的地方,主管不及时进行沟通与辅导,结果最后KPI 考核被打了低绩效。换位思考一下,这个被打低绩效的人是我,我也会不服气,有问题你为啥不提前告诉我,让我提前去改正。对待下属要有勇气,敢于指出他们的问题,对于表现不好的员工要敢于批评和管理,例如为什么解雇你。这些谈话和冲突往往让人感到不舒服,我也承认每次谈低绩效是硬着头皮的,但是你必须有这样的勇气,坦诚不仅仅要对那些表现良好的人,还要对那些表现糟糕的人。苹果创始人乔布斯是一个对自己、对别人坦诚得可怕的人,坦诚的残酷,直面事情最真实的一面。的确坦诚的态度在很多时候会让别人感觉不舒服,乔布斯粗暴的坦诚态度也备受争议,但我觉得,如果你是一个结果导向的人,还是应该尽量坚持坦诚的态度,否则最终的结果可能远远偏离你的目标。允许你的下属challenge你其次,我再聊一下关于平等相处,消除等级感,这点我觉得最重要的让大家感受到你的亲和力,不是一个高高在上的领导。比如很多时候团队一些技术方案的决策不是你一个人来决定,有时候还是要善于倾听一下团队成员的意见,要允许团队成员challenge你。其实,国内外要求下属服从的企业文化很普遍,这不一定是坏事,特别是公司如果有想法的人太多,想法又无法统一起来,公司的整体战略呈现精神分裂状态,那基本上就离死不远了。所以管理层统一公司战略,一线员工强调使命必达。国内的外企格外强调下属的服从性,把这一点作为员工的基本职业素养来培训,常用来讲解的故事就是《把信送给加西亚》,强调上司安排一项工作以后,下属不允许谈任何条件,不允许challenge上司,必须无条件服从,克服一切困难也要完成工作任务,以解领导之忧。这种执行力让上司感觉很舒服,而且公司管理实施难度也比较低。多数管理者都喜欢比较听话的下属,认为顺从的下属更好用。心态上高人一等,不会放低心态倾听下属的意见,即使自己错了也不会承认错误,一方面害怕自己的权威被挑战,另外害怕向下属认错,觉得抹不开面子。我不是圣人,作为TL曾经也犯过一些错误,我也曾私下里和个别同学道过谦。放开心态,不需要过多的太在意别人的看法,这些我觉得都是无所谓的小事。从我个人自身的一些经历来看,其实一味地要求下属服从是有害的,要适当允许你的下属challenge你。如果一味地要求下属服从,不能进行任何反驳,长时间下来会导致团队的人缺乏思考,只是一味的按照 TL 的想法去执行,当下属内心并不认可工作本身,仅仅出于职业性完成工作,成绩最多是合格,很难达到卓越。同时会导致下属缺乏工作积极性主动性,容易养成下属逃避责任的习惯。相反我觉得作为 TL 一定要鼓励下属积极主动地思考,让下属能够自己设定成长目标,对工作拥有归属感和责任感;尽量给予下属更自由的空间,不要设置过多形式主义的约束;要允许下属去challenge你,参与你的决策,甚至质疑你的决策。用这种方式增加下属对工作的归属感,工作责任心更强,更积极主动,能够自我驱动。当你的决策错误的时候,下属可以帮你纠错,集体的智慧毕竟高于个人,俗话说“三个臭皮匠赛过诸葛亮”。owner 意识“Owner 意识”主要体现在两个层面:一是认真负责的态度,二是积极主动的精神。认真负责是工作的底线,积极主动是“Owner 意识”更高一级的要求。自私确实是人的天性,不是自己的东西,很难谈什么责任感,更不用说主动性了。因此,团队管理就是要努力地培养大家的责任感,主人翁意识,想做到这一点,就需要增强团队成员的参与感,让他们知晓并理解所做事情的价值、来龙去脉,不断地强化使命感。例如可以将系统、业务范围等根据团队成员的兴趣点、以往项目经历等多种因素划分给指定人负责,并明确赏罚机制。要清晰地传达一种思想,那就是:这块东西就是你的,干好了评优、升职、加薪等都会优先考虑;干不好,出事情了,你要负责,我也会负责。如果有一天你看到团队成员像呵护自己的孩子一样,去对待自己的工作,那么你的目的已经达到了,他已经完全具备 owner 意识了。建立学习型的组织最后一点我要谈的是建立学习型的组织,团队成员要尽可能地分享自己的知识和想法,大家互相学习,也通过分享能够总结自己学习过程中零散的知识点。如何建立人才梯队的,其实就是要建立学习型组织,让大家积极参与学习与分享。具体做法KPI里设置一项技术分享与团队贡献,团队内部轮流进行技术分享,一方面让大家去学习、研究一些前沿技术,尤其是团队可能会用到的一些技术储备,如果他真的能把这个技术给大家讲明白的话,那他就是真的掌握了,同时也让其他人开始了解并学习这项技术,同时还能够锻炼其演讲与口才。鼓励团队成员敢于去分享,乐于去分享,开放心态成就他人。把技术培训和分享坚持下去,形成这样一种学习型的文化以后,你就会发现整个研发团队的技术能力的提升速度是非常惊人的,并且不会再占用太多额外的时间。当你再招一个资历较浅的新员工时,他也在能在这种环境中快速提升,通常半年左右时间就能达到非常好的水平。当然,一开始的团队可能没有这样的意识,就需要你作为管理者强行去推动,把要求列入KPI,很认真地考核他,慢慢地,团队就会形成这样的氛围和文化。当然建立这种学习型的组织,也可以建立一些读书分享会,把读的一些书籍感受分享给大家,另外一点团队的wiki知识库一定要建立起来,让团队同学把一些日常的技术方案、项目总结、故障总结通过文档的形势积累起来。沟通与辅导根据美国普林斯顿大学的调查报告,在所有对工作产生影响的因素中,沟通占的比例高达 75%。而我们工作中出现的80%问题都是由沟通不当造成的,可见沟通的重要性。多数时候,我们只想着表达自己的观点,只关注自己想说什么,我们会尽量使用漂亮的PPT、华美的语言、一堆的数据、甚至引章据典,而不关心别人听懂没有,没有思考别人是否想听,别人是否听得懂。沟通在我们的工作中无处不在,你会发现尤其在技术这个圈子里,能够进行高效沟通的人占比会更少一些。沟通按照沟通对象类型通常分为向下沟通(同下属沟通)、横向沟通(跨团队沟通)、向上沟通(同老板沟通),接下来只讨论如何同下属进行沟通,最为有效沟通方式:一对一沟通。一对一沟通,又被称作一对一会议、One-on-one 等,是互联网公司常用的沟通方式。一对一沟通虽然被广泛使用,但是涉及的文章却很少,这里我给大家推荐本书《格鲁夫给经理人的第一课》、《创业维艰 : 如何完成比难更难的事》,这两本书有更多关于一对一沟通介绍。格鲁夫是 Intel 公司的总裁,成功带领 Intel 公司完成了从半导体存储器到微处理器的转型,也是我非常欣赏的一位CEO。《创业维艰》的作者本·霍洛维茨是硅谷的顶级VC,投资了Facebook、Twitter等公司。在《格鲁夫给经理人的第一课》一书中,格鲁夫对「一对一沟通」的介绍如下:在英特尔,一对一会议通常是由经理人召集他的部属召开的,这也是维系双方从属关系最主要的方法。一对一会议主要的目的在于互通信息以及彼此学习。经过对特定事项的讨论,上司可以将其技能以及经验传授给下属,并同时建议他切入问题的方式;而下属也能对工作中碰到的问题进行汇报。在我看来,技术研发同学多数比较内向,不轻易向别人表达自己内心的一些想法。一对一沟通的意义是可以使得信息从下而上地传递,同时可以把一些疑问、想法、意见、问题、规划等等和管理者做沟通,从而获得在其它渠道不易获得的信息,保证透明。1on1沟通聊什么在《创业维艰:如何完成比难更难的事》这本书中专门拿出了一节提到了一对一沟通(1on1),具体聊那些内容给了一些建议,作为TL我通常会与团队的人聊以下话题:你有没有认为自己的价值和能力被低估了吗?为什么?你觉得在工作中能学到东西吗?你最近学到了什么?你还希望在哪些领域进行学习?近期这段时间,对自己有哪些满意、不满意的地方?目前工作中,有哪些困惑?希望我如何去帮助你?对团队和我的一些期待和建议。在公司战略和目标方面,你最不清楚的是什么?以上这些内容,除了在一对一沟通中交流之外,很难找到别的渠道来有效解决。通过这些1on1的沟通,真的可以得到很多反馈信息,甚至得到的一些信息令我感到吃惊,原来还有这些细节问题我没有做好。一对一沟通构造了一个渠道,这个渠道自下而上,使得以上这些内容都能够被倾听,从而被解决。1on1沟通的一些注意点找个私密的环境找个空会议室或者别人听不到谈话的角落,不要在工位或嘈杂的环境中进行,因为私密的环境才能降低沟通中某些话被他人听到的心理压力,才能更轻松和真实的表达自己。最好提前告知1on1的团队成员一般需要提前1周把1on1沟通的话题、具体时间通知到团队成员,这样的好处是团队成员可以提前准备下聊的内容,因为临时性的沟通很容易出现因为人类记忆力的问题,导致一些想聊的问题在当时没想到。定期进行在《创业维艰》一书中,本·霍洛维茨认为一对一沟通需要保证至少一个月一次。而格鲁夫认为,需要根据部属对工作的熟悉度,而进行不同程度的掌控。另外,格鲁夫还认为,事情变化的速度也是影响一对一沟通频率的因素。作为技术研发部门,我通常会1-2月进行一次1on1沟通。用心倾听并行动沟通要有效,用心倾听、保持真诚是必要的前提,否则员工不可能将心中的问题提出来。保持真诚需要不敷衍任何团队同学提出的问题,不管这个问题有多尖锐。如果你也不知道如何解决这个问题,不妨和团队同学一起讨论讨论,看看大家能不能一起寻找可行的办法。切忌不要讲空话和套话,一旦团队同学发现这是一个无效的沟通渠道之后,「自下而上」的通道就被关闭了。适当引导并不是每一个员工都懂得一对一沟通的重要性,也不是每一个员工都能主动倾述问题,寻求帮助。很多程序员的性格都是比较内向的,有一些甚至不善于表达自己。所以,虽然员工是一对一沟通的「主角」,但是上司也是需要进行适当的引导。对于上司已经发现的员工工作中的困难,可以适当的主动提出来,以便于更好地讨论,这也会让员工感到很体贴。招聘与解雇对于一个团队来说,人才是最核心、关键的。招聘和解雇尤其对于一个新上任的技术TL,都是一个很大的挑战,接下来我们重点讨论这两个话题。招聘招聘很多时候取决于公司在什么发展时期,需要招聘什么样的人。在初创时期,本不太可能招聘到清一色的专家人才,这个时候活下来比啥都重要,态度和味道是重点看的。在高速发展之后,可能需要引进能带来新思路的一些人才,这取决于业务、技术、组织三者的对齐。那么这个时候,就是既要高技能,又要好的做事态度、习惯。在搭建技术团队招聘前,要先明确所搭团队的类型,一般来说有三种不同类型的技术团队,即项目驱动型、业务驱动型和技术驱动型,不同类型的技术团队在招聘时也有很大的不同,比如技术驱动型团队你可能需要一个在中间件、语言功底非常深厚、有大局观的人,业务驱动型的团队可能需要有业务sense,并且具备良好技术和业务架构能力的人。在招聘这条路上,我也走过弯路,一开始我对候选人的背景、语言功底、架构能力以及运维、数据库方面比较关注,希望能招到全栈的技术人才,后来发现我忽视了一个很重要的点沟通与协作能力、态度。后来导致新人来到团队后,虽然技术牛B,但喜欢闭门造车,不喜欢和别人沟通,团队协作能力不够好,整体产出和效率不高。所以在招聘新人的过程中,不能够只盯着候选人有什么经验,会什么框架等技术面,也需要着重考量他们的综合素质,一个领导力好的候选人,能够非常快速地融入团队,也能够非常快的学习一些知识。招聘步骤:1.根据搭建团队的目标,做好招聘计划根据团队自身的定位,招聘合适的人才。有几点需要TL特别关注的,作为TL要对候选人的成长负责,切忌因人设岗、因单独项目而招人,比如前端团队招聘一些后端开发,工程团队招聘算法,这样以来可能会导致候选人进来后很难融入到团队,没有存在感,长时间下来会导致新人离职。2.确定招聘需求(定岗定责):列出每个岗位的职责、需要具备的技能及其他要求。招聘需求归根结底是需要什么样的人,与据整体业务和组织发展匹配。3.合理利用人才招聘渠道从我自身的经历来看,人才招聘渠道多数通过互联网招聘渠道以及朋友推荐更可靠一些,对于高级别的人才可以采用猎头定向挖人。人才筛选:作为技术面试官,对于人才的筛选也是非常重要关键的一个环节,要根据自己团队的目标来选取合适的人才,设定完成的时间期限,将面试的重点放在专业技能、管理能力、价值观(公司认同)等方面,一般要求如下:和岗位需要的专业技能高度匹配:专业技术技能面试过关,定岗定责;沟通力强:理解公司的业务,知晓管理层,了解公司的发展方向;责任心:凡事有交代,件件有着落,事事有回音;靠谱并自带正能量:不抱怨,主动解决问题,懂得纪律的重要性,一诺千金;价值观认同:认同公司,有目标有理想、有激情有冲劲;背景调查:非常有用的一个办法,可以大幅度降低选人风险,不用怕麻烦,这个工作的付出永远都是值得的。另外,我想说的对于技术面试官需要有一定甄别人才的能力,同时有意识地提高这方面的能力,我提供以下几点建议给技术面试官:如果对候选人有些犹豫和纠结,请你放弃这个候选人,你最担心的问题往往很大概率上会发生。明确我们招聘的候选人标准,比如后端JAVA研发:JAVA基础和分布式领域知识技能考察是必须的,少问记忆性问题和太理论性问题,更多地从候选人的一些实践经历中,提取出对这个候选人的更有价值的判断。一面非常重要,要保证客观、公平,后面的交叉和终面往往参考前面的评价反馈,我们今天不仅是为我们的团队选拔人才,更是为公司选拔人才,还是要高标准的要求。从心理学角度讲,必须要交叉面试,而且交叉面试官的给出的反馈往往是比较客观、中肯的,而且要以交叉面试官的评价为主。面试官切忌拿自己擅长的东西去考察候选人,需要认真的看候选人的简历,从候选人的经历中去考察这个人的综合能力。一个团队的健康发展,最重要的是核心技术人,所以招聘工作必须谨慎,一旦有人加入就等于在上了一艘船,其中的纠结、痛苦、欢喜都要一起面对。招募一个不合适人员的成本不仅仅是薪资那么简单。所以请一定要放过那些经验不错、资质不错但是很犹豫匹配度、落地融入堪忧的面试者,其结局大部分都是彼此痛苦。作为技术TL最成功的是招到比你更优秀的人,你不需要担心自己会不会被取代,一是成就个人和成就团队,作为TL应该抱着如何成就团队的发展思路,不能让自己成为天花板,本身技术就不应该是你最擅长的事情!二是兼容并蓄,发展多样性。刘邦善用汉初三杰,单项能力不如韩信、张良。TL不要已自己的长短来衡量招聘的人,而是看团队技能视图的缺口和发展项。解雇解雇员工通常更多的是针对触犯公司文化、原则红线,或者持续无法跟上公司节奏的员工进行的处理。在阿里也有这么一句土话:“如果你没有开除或解雇过一位员工,算不上真正合格的管理者”,大多数技术管理者性格比较随和,不喜欢开除员工。但是出现触犯红线的员工或者跟不上节奏的员工,尤其是不认可团队价值观的同学,会把一些负面情绪、行为影响到团队其他同学,因此需要杀伐决断,当机立断采用合适的方法让员工离开。当然,如果只是能力跟不上的员工,你也可以推荐给其他公司适合的岗位,让和自己一起奋战过的兄弟有一个好归宿,也会让在职的员工会感觉温暖。整体上“慈不掌兵”,在开人这件事情上,高级管理者不要过于犹豫,为了一两个人最后影响整体团队的士气反而得不偿失。多数互联网公司对于技术人员都有相应的KPI考核,对于达不到预期的人员会进行淘汰。解雇尤其对于新上任的技术主管还是有一定挑战的,我相信人的本性还是善良的,作为技术TL不想让团队成员面对这一难题,包括我自己在内。一家公司在成长,组织肯定要升级,人员的新老交替也是正常的。如果团队成员的表现达不到预期,不通过 KPI 考核机制告诉他,也许他不会意识到自身的一些问题,他永远不会成长起来,相对短期这些经济回报而言,个人的成长更为关键重要。在阿里有这么一句土话“不经历3.25的人生,不是完美的阿里之旅”,当你处于发展的低谷时,经历一次末位考核结果也许能够让他彻底清醒,认识到自己的不足,彻底激发自己的潜能,能够触底反弹。心理学上有个著名的邓宁-克鲁格效应,又称达克效应。大意是,人很容易对自我产生认知偏差,最简单来说,就是会过于高估自己。达克效应的曲线图:上面的图片上反映出,大部分人其实都处于愚昧之巅。人能够成长为智者和大师要先从愚昧之巅,掉到绝望之谷,然后辛苦攀爬,积累知识和经验,成为智者和大师。有担当的管理者的一个重要责任,就是把下属从愚昧之巅推向绝望之谷,至于能否爬上开悟之坡,看个人造化。一个合格的技术TL必须要给团队成员塑造一个绝望山谷,同时还要让他看到一个开悟之坡,这样员工会不断突破自我。作为一个有担当的管理者,我们不应该是一个老好人的角色,也要有冷酷无情的一面,阿里也有一句土话“心要仁慈,刀要快”,当团队中出现一些达不到团队要求的人,管理者应该主动去拉他一把,如果多次尝试,最终达不到预期,应该请他离开。因为到了中途,再被残酷淘汰,无论对组织,还是对个人,损失都更大。本文作者: 云狄 阅读原文本文来自云栖社区合作伙伴“ 阿里技术”,如需转载请联系原作者。

April 17, 2019 · 1 min · jiezi

一次开发、多端分发,阿里巴巴发布AliOS车载小程序

4月16日上海国际车展首日,阿里巴巴小程序有了新动态:正在研发基于AliOS的车载小程序。作为阿里巴巴小程序在车载场景的重要延伸,AliOS车载小程序和支付宝、高德等小程序一样,将采用统一的开发框架和开放标准,依托于小程序云的一站式云服务,可进行统一的应用发布、资源管理和数据管理,大幅降低小程序开发者的运营和维护成本。基于算法和庞大的生态服务体系,AliOS车载小程序自带场景智能感知的基因。得到车主授权后,车载小程序可以围绕行车场景,实现上车前、行车中、下车后自然串联的智能化场景服务。譬如,你可以在车上通过触控、语音、手势等多模态交互方式,咨询附近的推荐餐厅,小程序会基于你的喜好作出推荐,还可以预约排号;到达餐厅附近,系统会自动唤醒小程序,为你找到停车场;下车后,车载小程序会无缝连接到手机小程序端,你可以在手机上查看预约餐厅的楼层位置、出示预约信息等。此前在2019阿里云峰会·北京上,阿里云、支付宝、淘宝、钉钉、高德等联合发布“阿里巴巴小程序繁星计划”,用20亿元补贴扶持200万以上小程序开发者、100万以上商家。此次AliOS车载小程序的发布,将为阿里巴巴小程序再增车载新场景。打造一个以用户为中心的小程序生态服务体系,实现支付宝、淘宝、高德、UC、AliOS等多端服务场景的打通,一次开发、多端分发,为用户提供从出行到生活的一站式服务。此次车展上,AliOS还展出AI HUD、AI驾驶舱等最新技术。作为国内最大的互联网汽车操作系统,AliOS正在构建一个可持续发展的整合平台,通过对新交互、新科技的探索,创造具有便捷、愉悦、个性的互联网汽车产品。更多关于阿里巴巴小程序繁星计划的内容请访问专题页:https://yq.aliyun.com/activity/820本文作者:阿里云头条阅读原文本文为云栖社区原创内容,未经允许不得转载。

April 16, 2019 · 1 min · jiezi

蚂蚁金服CTO程立:做工程要有“拧螺丝”的精神

摘要: “做工程要有‘拧螺丝’的精神,其实在工作中,我们也做了很多‘拧螺丝’的事情,包括在搭建每一个架构、每一个系统的过程中。”“一台机器可能有无数颗螺丝,需要一个一个地拧,而且需要一圈一圈地拧,才能让系统间严丝合缝,顺利工作。代码的世界里,一个项目到底成功与否,也是取决于几个模型的关键特殊设置,就像拧螺丝一样。”蚂蚁金服CTO程立说道,“做工程就需要这种奋力的精神。”近日,蚂蚁金服CTO程立接受了科技媒体infoQ专访,过程中,程立谈到了过去十年中国互联网技术的发展,与此同时,作为架构师出身,程立也谈到了做工程的心得。程立表示,“做工程要有‘拧螺丝’的精神,其实在工作中,我们也做了很多‘拧螺丝’的事情,包括在搭建每一个架构、每一个系统的过程中。”比如,程立回忆说,在十年的“双11”大促中,蚂蚁金服技术团队护航支付宝,只在2012年出过一次“问题”。据介绍,那时问题就出在一个“螺丝”上——一个类似软件“保险丝”的设计,即某两个系统之间,可以想象有一根“线”作为连接。简单而言,当时技术团队设计,“保险丝”在压力过大时熔断,来保护后面的系统不会崩溃。而在开始的时候,支付交易出现了不稳定的情况。后来发现,其实是“保险丝”设定的容量不对,于是把“保险丝”换成“铜丝”,让它不要起到保险丝的作用,就顺利过去了。“可以看到,大促前我们做了非常多的准备,但成败就在于一个关键的环节。”针对一个问题咬住不放松的奋力,贯穿了支付宝技术的研发实践当中。比如,在2010年,整个支付宝技术团队的目标只有一个:将支付宝支付成功率提升到极致。程立介绍,在这个目标驱动下, 2010年,支付宝不仅实现了支付成功率的提升,还实现了现在每天都会使用——快捷支付的创新,让移动支付成为可能。这个过程中,既有技术浪潮下对云支付架构的升级,也有对无数技术细节的打磨。拧过无数颗螺丝,包括从2010年第三代技术架构调整后到今天,支付宝金融科技技术让移动支付、实时风控与新型信用等成为可能,并且让技术真正成为金融业务创新的驱动力,解决了过去难以解决的金融业务问题,如“310”小微企业贷款、实时反欺诈等等。脚踏实地是因为对未来有更深的期待。蚂蚁金服CTO程立表示,过去十年是信息技术、互联网技术从量变到质变的过程,我们用技术改变了每个人的生活,改变社会的经济,但是,真正的技术革命才刚刚开始。“中国对创新的拥抱,是技术发展的最好土壤。在这片孕育创新的土壤上,未来中国互联网依然可以领先世界,生长出来更多原创的技术创新,做更多事情。我们还可以预见,图灵奖得主真正在中国土壤上生长出现。”本文作者:华蒙阅读原文本文为云栖社区原创内容,未经允许不得转载。

April 11, 2019 · 1 min · jiezi

一个简单混合协议通讯列子,物联网和互联网通讯。

这个列子主要讨论Tcp,WebSocket和http之间的通讯。长连接和长连接通讯,长连接和短连接通讯。其他协议同理可得Tcp: 代表硬件设备WebSocket: 代表客户端 http: 代表网页 本列子是基于one框架 (https://github.com/lizhichao/one) 开发.配置协议 监听端口由于swoole的模型 WebSocket server 包含 http server , http server 包含 tcp server 。所以我们配置主服务为 WebSocket server ,添加两个http 和 tcp 监听。配置文件如下:return [ ‘server’ => [ ‘server_type’ => \One\Swoole\OneServer::SWOOLE_WEBSOCKET_SERVER, ‘port’ => 8082, ‘action’ => \App\Test\MixPro\Ws::class, ‘mode’ => SWOOLE_PROCESS, ‘sock_type’ => SWOOLE_SOCK_TCP, ‘ip’ => ‘0.0.0.0’, ‘set’ => [ ‘worker_num’ => 5 ] ], ‘add_listener’ => [ // http 监听 [ ‘port’ => 8081, ‘action’ => \App\Server\AppHttpPort::class, ’type’ => SWOOLE_SOCK_TCP, ‘ip’ => ‘0.0.0.0’, ‘set’ => [ ‘open_http_protocol’ => true, ‘open_websocket_protocol’ => false ] ], // tcp 监听 [ ‘port’ => 8083, ‘pack_protocol’ => \One\Protocol\Text::class, // tcp 打包,解包协议,方便在终端调试 我们使用 text 协议. 换行符 表示一个包的结束 ‘action’ => \App\Test\MixPro\TcpPort::class, ’type’ => SWOOLE_SOCK_TCP, ‘ip’ => ‘0.0.0.0’, ‘set’ => [ ‘open_http_protocol’ => false, ‘open_websocket_protocol’ => false ] ] ]];接下来去 \App\Test\MixPro\Ws 和 \App\Test\MixPro\TcpPort 实现各种事件处理。\App\Server\AppHttpPort 是框架内置的,通过路由处理http请求的,配置路由即可。配置路由// 首页Router::get(’/mix’, [ ‘use’ => HttpController::class . ‘@index’, ‘middle’ => [\App\Test\MixPro\TestMiddle::class . ‘@isLogin’] // 中间件 如果用户登录了 直接跳转到相应的页面]);Router::group([ ‘middle’ => [\App\Test\MixPro\TestMiddle::class . ‘@checkSession’] // 中间件 让用户登录后 才能进入聊天页面 http websocket 都能获取到这个 session ], function () { // websocket 页面 Router::get(’/mix/ws’, HttpController::class . ‘@ws’); // http 页面 Router::get(’/mix/http’, HttpController::class . ‘@http’); // http 轮训消息接口 Router::post(’/mix/http/loop’, HttpController::class . ‘@httpLoop’); // http 发送消息接口 Router::post(’/mix/http/send’, HttpController::class . ‘@httpSend’);});配置的都是 http 协议路由。 websocket和tpc我们直接在回调action处理。如果你的项目复杂也可以配置相应的路由。one框架的路由支持任何协议,使用方法也是统一的。处理tcp协议其中__construct,onConnect,onClose 不是必须的。 如果你想在服务器运行开始时最一些事情就写到 __construct里面。 onConnect 当有客户端连接时触发,每个客户端触发一次 onClose 当有客户端连接断开时触发,每个客户端触发一次class TcpPort extends Tcp{ use Funs; private $users = []; /** * @var Ws / protected $server; /* * @var Client / protected $global_data; public function __construct($server, $conf) { parent::__construct($server, $conf); $this->global_data = $this->server->global_data; } // 终端连接上服务器时 public function onConnect(\swoole_server $server, $fd, $reactor_id) { $name = uuid(); $this->users[$fd] = $name; $this->sendTo(‘all’, json_encode([‘v’ => 1, ’n’ => $name])); $this->sendToTcp($fd, json_encode([‘v’ => 4, ’n’ => $this->getAllName()])); $this->global_data->bindId($fd, $name); $this->send($fd, “你的名字是:” . $name); } // 消息处理 像某个name 发送消息 public function onReceive(\swoole_server $server, $fd, $reactor_id, $data) { $arr = explode(’ ‘, $data); if (count($arr) !== 3 || $arr[0] !== ‘send’) { $this->send($fd, “格式不正确”); return false; } $n = $arr[1]; $d = $arr[2]; $this->sendTo($n, json_encode([‘v’ => 3, ’n’ => $d])); } // 下线 通知所有其他终端,解除与fd的关系绑定。 public function onClose(\swoole_server $server, $fd, $reactor_id) { echo “tcp close {$fd} \n”; $this->global_data->unBindFd($fd); $this->sendTo(‘all’, json_encode([‘v’ => 2, ’n’ => $this->users[$fd]])); unset($this->users[$fd]); }}定义了一个公共的traitFuns主要实现两个方法,获取所有的终端(tcp,ws,http),和向某个用户发送消息 。在ws、http都会用到这个 在构造函数我们初始化了一个 global_data 用来保存,名称和fd的关系。你也可以使用方式储存。因为fd没次连接都不同。global_data是one框架内置的。 终端连接上服务器时触发事件 onConnect ,我们给这个终端取个名字,并把关系保存在 global_data。 通知所有终端有个新终端加入,并告诉刚加入的终端当前有哪些终端在线。处理 websocket 协议其中__construct,onHandShake,onOpen,onClose 不是必须的。onHandShake,onOpen 是配合使用的,如果onOpen返回false服务器会拒绝连接。在 onOpen,onMessage,onClose可以拿到当前用户的session信息和http是相通的。class Ws extends WsServer{ use Funs; private $users = []; /* * @var Client / public $global_data = null; public function __construct(\swoole_server $server, array $conf) { parent::__construct($server, $conf); $this->global_data = new Client(); } // 初始化session public function onHandShake(\swoole_http_request $request, \swoole_http_response $response) { return parent::onHandShake($request, $response); } // ws 发送消息 public function onMessage(\swoole_websocket_server $server, \swoole_websocket_frame $frame) { $data = $frame->data; $arr = json_decode($data, true); $n = $arr[’n’]; $d = $arr[’d’]; $this->sendTo($n, json_encode([‘v’ => 3, ’n’ => $d])); } // 判断用户是否登录 如果没有登录拒绝连接 public function onOpen(\swoole_websocket_server $server, \swoole_http_request $request) { $name = $this->session[$request->fd]->get(’name’); if ($name) { $this->users[$request->fd] = $name; $this->sendTo(‘all’, json_encode([‘v’ => 1, ’n’ => $name])); $this->global_data->bindId($request->fd, $name); return true; } else { return false; } } // ws 断开清除信息 public function onClose(\swoole_server $server, $fd, $reactor_id) { echo “ws close {$fd} \n”; $this->global_data->unBindFd($fd); $this->sendTo(‘all’, json_encode([‘v’ => 2, ’n’ => $this->users[$fd]])); unset($this->users[$fd]); }}处理 http 协议主要是 httpLoop 方法,轮训获取消息。因为http是短连接,发给http的信息我们是先存放在$global_data,然后直接这里读取。防止连接间隙丢信息。class HttpController extends Controller{ use Funs; /* * @var Ws / protected $server; /* * @var Client / protected $global_data; public function __construct($request, $response, $server = null) { parent::__construct($request, $response, $server); $this->global_data = $this->server->global_data; } /* * 首页 / public function index() { $code = sha1(uuid()); $this->session()->set(‘code’, $code); return $this->display(‘index’, [‘code’ => $code]); } /* * ws页面 / public function ws() { $name = $this->session()->get(’name’); if (!$name) { $name = uuid(); $this->session()->set(’name’, $name); } return $this->display(‘ws’,[‘users’ => $this->getAllName(),’name’ => $name]); } /* * http 页面 / public function http() { $name = $this->session()->get(’name’); if (!$name) { $name = uuid(); $this->session()->set(’name’, $name); } $this->global_data->set(“http.{$name}”, 1, time() + 60); $this->sendTo(‘all’, json_encode([‘v’ => 1, ’n’ => $name])); return $this->display(‘http’, [’list’ => $this->getAllName(), ’name’ => $name]); } /* * http轮训 / public function httpLoop() { $name = $this->session()->get(’name’); $this->global_data->set(“http.{$name}”, 1, time() + 60); $i = 0; do { $data = $this->global_data->getAndDel(“data.{$name}”); $i++; \co::sleep(0.1); } while ($data === null && $i < 300); if ($data) { foreach ($data as &$v) { $v = json_decode($v, true); } } else { $data = []; } return $this->json($data); } /* * http发送消息 */ public function httpSend() { $n = $this->request->post(’n’); $d = $this->request->post(’d’); if ($n && $d) { $this->sendTo($n, json_encode([‘v’ => 3, ’n’ => $d])); return ‘1’; } return ‘0’; } public function __destruct() { } public function __call($name, $arguments) { return $this->server->$name(…$arguments); }}到此基本就完成了。你可以去看完整的代码 : 点这里 其他的一些列子 : https://github.com/lizhichao/… ...

April 10, 2019 · 4 min · jiezi

信用算力基于 RocketMQ 实现金融级数据服务的实践

导读:微服务架构已成为了互联网的热门话题之一,而这也是互联网技术发展的必然阶段。然而,微服务概念的提出者 Martin Fowler 却强调:分布式调用的第一原则就是不要分布式。纵观微服务实施过程中的弊端,可以推断出作者的意图,就是希望系统架构者能够谨慎地对待分布式调用,这是分布式系统自身存在的缺陷所致。但无论是 RPC 框架,还是 REST 框架,都因为驻留在不同进程空间的分布式组件,而引入了额外的复杂度。因而可能对系统的效率、可靠性、可预测性等诸多方面带来负面影响。信用算力自2016年开始实施微服务改造,通过消息队列(Message Queue),后文简称MQ,来规避微服务存在的缺陷,实现金融级数据服务。以下是一些使用场景和心得。为什么需要 MQ一、案例介绍先来看一个当前的真实业务场景。对于通过信息流获客的企业而言,当用户注册时,因业务需求会调用用户服务,然后执行一系列操作,注册 -> 初始化账户信息 -> 邀友奖励发放 -> 发放优惠券 -> … -> 信息流数据上报。用户服务的开发人员压力非常大,因为需要调用非常多的服务,业务耦合严重。如果当时账户服务正在执行发版操作,那么初始化账户动作会失败。然而平台经过不断的迭代更新,后续又新增了一个签到业务,新注册用户默认签到一次。这就需要修改用户服务,增加调用签到服务的接口。每当遇到此种情况,开发用户服务的同学就非常不爽了,为什么总是我?新增签到业务和用户服务又有什么关系?为解决此类重度依赖的问题,我们在架构层面引入了 MQ,用来规避微服务之间重度耦合调用的弊端。新架构如下图:用户完成注册动作后,只需要往 MQ 发送一个用户注册的通知消息,下游业务如需要依赖注册相关的数据,订阅注册消息的 topic 即可,从而实现了业务的解耦。看完上述真实的案例后,大家可能产生疑惑,到底什么是 MQ,使用 MQ 又有什么好处?适合使用 MQ 的场景和不适合使用 MQ 的场景有哪些不同?二、什么是 MQ?简单来说,MQ(MessageQueue)是一种跨进程的通信机制,用于上下游传递消息。适合使用 MQ 的场景有:1、上游不关心下游执行结果,例如上述案例中用户注册后,我们并不关心账户是否初始化,是否上报了信息流等;2、异步返回执行时间长:例如上述案例中,当邀友奖励发放,需要经历很多风控规则,执行时间比较长,但是用户并不关注奖励何时发放。不适合使用MQ场景调用方实时关注执行结果,例如用户发起注册动作后,需要立刻知道,注册结果是成功还是失败,这种需要实时知道最终执行结果的场景,就不适合使用MQ。三、使用MQ的好处:1、解耦2、可靠投递3、广播4、最终一致性5、流量削峰6、消息投递保证7、异步通信(支持同步)8、提高系统吞吐、健壮性MQ 的技术选型目前业内比较主流的 MQ 包括 RocketMQ、ActiveMQ、RabbitMQ、Kafka等,关于性能、存储、社区活跃度等各方面的技术对比已经很多,本文不再重复。但我们发现通过简单的选型对比,很难抉择到底选择哪款MQ产品。因为金融行业对于数据一致性以及服务可用性的要求非常高,所以任何关于技术的选项都显得尤为重要。经调研,如微众银行、民生银行、平安银行等国内知名的互联网银行和直销银行代表,都在使用 RocketMQ,且 RocketMQ 出生在阿里系,经受过各种生产压力的考验,非常稳定。并且,目前此项技术已经捐增给 Apache 社区,社区活跃度非常高。另外 RocketMQ 开发语言是Java,开发同学遇到解决不了的问题点,或者不清楚的概念,可以直接 Debug 源码。经过多方面的比较,我们选择 RocketMQ 作为规避微服务弊端的利器。MQ 在微服务下的使用场景MQ 是一种跨进程的通信机制,用于上下游传递消息,目前信用算力将 RocketMQ 应用于解耦、流量削峰、分布式事务的处理等几个场景。一、解耦通常解耦的做法是生产者发送消息到 MQ,下游订阅 MQ 的特定 topic,当下游接收到消息后开始处理业务逻辑。那么,消息发送方到底应该是由谁来承担?是服务提供者在处理完RPC请求后,根据业务需求开始发送消息吗?但此刻开发人员就会抱怨为什么总是我?为什么处理完业务后需要发送 MQ?为此,在解耦的过程中通过订阅数据库的 BinLog 日志,开发了一套 BinLog 日志解析模块,专门解析日志,然后生成 JSON 字符串后发送消息到 MQ,下游订阅 MQ 即可。流程如下:目前所有需要依赖下游服务的业务线,其数据变动都采用此方案。方案优缺点:优点:1、服务之间依赖完全解耦,任何基于注册行为的业务变更,都无需依赖上游,只需订阅MQ即可;2、系统的稳定性和吞吐量增加了,用户注册的响应时间缩短了;缺点:1、引入MQ后系统复杂性增加,维护成本增加;2、从注册开始到全部数据初始化结束的整体时间增加了;二、流量削峰每逢遇到会员日的时候,平台会发送大量的会员福利活动通知,以短信、站内信、PUSH 消息的方式通知注册用户。所有的消息会在很短的时间全部推送到消息中心,同时正常的业务通知任然有大量业务消息推送到消息中心。为保障平台的稳定性和可靠性,在消息中心前置了多种 topic,如短信、推送、站内提醒。消息中心接收到消息后会全部写入不同 topic 的 MQ,多个消费者来消费并把信息推送给终端用户。三、分布式事务用户在平台上支付他订购某种业务的时候,需要涉及到支付服务、账户服务、优惠券服务、积分服务,在单体模式下这种业务非常容易实现,通过事务即可完成,伪代码如下:然而,在微服务的情况下,原本通过简单事务处理的却变得非常复杂,若引入两阶段提交(2PC)或者补偿事务(TCC)方案,则系统的复杂程度会增加。信用算力的做法是通过本地事务 + MQ 消息的方式来解决, 虽然 RocketMQ 也支持事务消息,但是其他主流 MQ 并没有此项功能,所以综合考虑采用如下方案:消息上游:需要额外建一个tc_message表,并记录消息发送状态。消息表和业务数据在同一个数据库里面,而且要在一个事务里提交。然后消息会经过MQ发送到消息的消费方。如果消息发送失败,会进行重试发送;消息上游:开启定时任务扫描tc_message表,如果超过设置的时间内状态没有变更,会再次发送消息到MQ,如重试次数达到上限则发起告警操作;消息下游:需要处理这个消息,并完成自己的业务逻辑。此时如果本地事务处理成功,表明已经处理完成了,需要发起业务回调通知业务方;方案优缺点:优点:1、用最小的代价实现分布式事物,以达到数据最终一致性;2、方案非常灵活,任何环节都可以人为控制;缺点:1、复杂性增加了,业务操作的时候需要写入 tc_message 表以及发送 MQ,同时还需要考虑状态超时未变更的补发机制以及告警处理机制;2、用户看到的数据,存在有短暂不一致的情况;心得体会使用 RocketMQ 3年多了,总体来说运行的非常稳定,基本上没有发生过生产事故,下面说说这几年使用下来的心得体会:1、一个应用尽可能用一个 Topic,消息子类型用 tags 来标识。Topic 名称和 Tags 名称可以自行设置。Producer,Consumer都需要规范,要做到见名知意。发送消息时候必须携带 Tags,消费方在订阅消息时,才可以利用 Tags 在 Broker 做消息过滤。2、每条消息在业务层面有唯一标识码,方便在系统出现异常的情况,可以通过业务维度查询。举个栗子,当用户在平台注册成功后,会以 Topic 和 UserID 作为唯一标识码(topic_user_10011),服务器会为每个消息创建索引,该消息会持久化入库,以防将来定位消息丢失等问题。下游收到消息后会以 Topic+Key 方式来记录消费行为,包括消息日期、当前机器IP地址、处理结果等;也可以通过 Topic+Key 的方式来查询这条消息内容,包括消息被谁消费,以及这条 MQ 在每个环节的处理状态。3、消息发送成功或者失败,都需要记录 log 日志,且必须打印 sendresult、MsgID、唯一标识码。4、由于上游会做消息重试机制,所以下游消息必须要做幂等处理。5、需要封装 MQ 的 API 在封装后,API 需屏蔽底层 MQ 的特性,开发人员无需关注到底是用的哪个 MQ 来支持本地分布式事物、MQ 消息自动入库、自动打印日志,减少开发人员操作成本。总的来说,MQ 是一个互联网架构中常见的解耦利器,在这3年中,信用算力在微服务中一直使用 MQ 来为金融客户提供高质量的数据服务。虽然 MQ 不是唯一方案,但是从目前阶段来看,的确是一种非常不错的解决方案。本文作者:潘志伟(信用算力技术总监,QCon 演讲嘉宾,十多年 Java 从业经验,精通微服务架构,精通大数据。拥有亿级用户平台架构经验,万级并发的API网关经验。)本文作者:中间件小哥阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

March 29, 2019 · 1 min · jiezi

真的有人在偷听我们讲话么?

阅读本文大概需要 3 分钟。作为互联网的忠实用户,我们在生活中已经很难离开它,随之而然也出现很多相关的问题,其中最让人头疼就是隐私问题。前有 12306 数据贩卖,今有传闻美团饿了么在偷听我们讲话,显然大家已经被以前各种隐私暴露的事情吓怕了。 前几天,就有这么一档子事儿,一些媒体进行跟风报道: 通过模拟使用场景,对安卓手机、iPhone 和 iPad 上的饿了么和美团外卖进行多轮测试后发现,谈话提及某种食物后,出现相关推荐的概率高达 60% 到 70%。还有的用户说,在刚谈到想吃什么后,打开外卖 App 就可见到对相关店铺的推荐,疑似出现 App 麦克风「偷听」。 不少用户看到这种新闻,都会一下子惊到,纷纷说他们自己也碰到过类似情况。 更有甚者是这么说的:我有一次想买一本书,都没跟别人说过,后来突然淘宝就给他推荐了那本书。 还有个妹子是这么说的:我和男朋友分手两个月,打开淘宝,竟然给我推荐了 ziweiqi !难道以前我跟男朋友晚上那个,淘宝也偷听了!细思极恐! 类似的非常之多,大体上就是前面刚跟朋友说想吃什么,后脚点外卖发现外卖上就推荐了这家;前面刚说想买什么东西,后脚淘宝就给你推荐了这个商品。这档子事还直接排到了热搜,并在热搜榜待了很久。 不过,说美团、饿了么等 App 监听聊天内容,是实话太扯了,冒着那么大的风险分析用户语音聊天信息,就为了给用户推荐一份二三十块钱的外卖?我都要感动哭了(前两天简历大数据公司被端的消息还热乎着呢)。 虽然逻辑上不太对,但是网友并不都从逻辑的角度出发去考虑问题,他们大多数人并不懂技术,但也有人是懂一些技术的,比如,有的人就会拿安全专家的话来证明:安全专家说,这种技术现在是可以实现的。 既然,可以实现,美团饿了么们就有可能会用,公司都是以利益驱动的。 安全专家都说可以了,那美团、饿了么这一类的外卖软件、淘宝这一类购物软件会放过这么好的机会?绝逼 24 小时监听自己手机发出的声音,然后进行分析,然后给他们做推荐。 你过去一段时间每天吃什么他们都知道,再通过监听你说话的声音,为什么这个推荐准确率才不到 70%?这技术不太合格啊。要是给我一个人连续几个月的外卖点单记录,不用那么高深的技术,通过一些常规的推荐方法,也有把握对一大部分用户命中 80% 以上。 美团、饿了么们既然都掌握了用户的餐饮记录与习惯,只需要不断优化自己的算法就行了,再分析语音记录有什么意思呢? 有些杠精可能还不服气,那从技术角度来思考下: 1. 技术上能实现麦克风监控,当我自己安装这类软件的时候也不许使用麦克风的权限吧,一般涉及到语音输入这块才会向你发出申请,你还可以不授权,那么没权限,它还怎么监控呢?Android,iOS可不是摆设。 2. 光做监控还不行,语音这东西电脑是不认识的,那么就还需要把这些监控到的语音进行处理,将其转换为文字,再从文字里面提取有效信息。这语音识别的复杂度不低吧,毕竟百度、阿里、讯飞这些东西挤破头的进来搞。还会涉及到识别准确率,网上是说能有94%-98%,这还是在实验环境,生产环境不得而知,不过不可能比实验环境要高。 3. 我去查了一下,中国有 10 亿多的 4G 用户;美团外卖月活 2千万+,饿了外卖月活 7千万+,按照这个月活,注册用户肯定是上亿的。那么监控的设备数,以及收集的数据量是海量的,先不说平台方面,就说用户方面。手机正常使用的是接近 CD 音质,128kbps , 1.0 MB/分钟 。1 小时为 60 分钟,那么录音 1 小时,就是占用60MB容量,24 小时就是 1440MB,它怎么在不被你发现的同时,将这 1 个多 G 的数据上传至平台呢? 说了这么多把他推翻了,那到底上面别人说的那种情况是怎么产生的啊,毕竟热搜榜也不是那么好上的。 第一个就是巧合了,根据你的点餐习惯,给你推荐一些类似的,很正常。第二个就是外部信息,平台从其他途径拿到你的相关信息,在根据推荐算法给你推荐,估计 ZFB 连你祖宗八代都能分析出来。最后一个就是个性推荐,在大数据的环境下,分析出来的结果,能准确戳中你这个群体的喜好。 监控这件事情实际上存在巨大的法律风险,而且从现在技术来看,整个一套流程实现起来还是很困难的。所以暂时没必要担心这些软件监听你的事情,如果真的担心,在下载安装软件的时候,把麦克风权限关掉就好了。 ·END·程序员的成长之路路虽远,行则必至本文原发于 同名微信公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。微信ID:cxydczzl往期精彩回顾程序员接私活的7大平台利器Java程序员的成长之路白话TCP为什么需要进行三次握手Java性能优化的50个细节(珍藏版) 设计电商平台优惠券系统一个对话让你明白架构师是做什么的? 教你一招用 IDE 编程提升效率的骚操作!送给程序员们的经典电子书大礼包 ...

March 27, 2019 · 1 min · jiezi

十年再出发!阿里云智能总裁张建锋演讲全记录

3月21日,“十年再出发”阿里云峰会于国家会议中心正式召开。阿里云智能总裁张建锋(行癫)携核心管理团队首次悉数亮相,并对阿里云做了全面的战略解读。以下是演讲全文。张建锋:今天是我们阿里云智能升级之后第一次和大家见面,所以我们给大家讲一讲阿里云智能,对云智能的一些思考,对生态合作伙伴的思考。阿里云到今天做了十年,大家看到我们这次主题叫“十年再出发”。在十年前,阿里云也是一件非常小众的事情,那时候做电子商务觉得是一件非常小众的事情,当时我们一直关注电子商务到底会对未来产生什么样的变化,包括2005年我加入淘宝网的第二年,马老师突然有一天说,我们还要做一个支付宝,让全国以后都要用支付宝付钱,大家也是觉得不可思议,到2009年马老师说“没有云就没有未来”,那个时候是觉得非常不可思议的事情,但是阿里巴巴就这样一点一点走到今天,也走到了阿里云第十年。在十年前,很多人在问一个问题,云是什么?第二个问题我为什么要上云?十年后,大家在讨论的问题是“我为什么不上云?”所以十年间发生太多的变化。我们看过去的十年,阿里云到底做了什么样的事情?第一、开创了中国的云时代。这是09年阿里巴巴、阿里云真正第一次在中国开创了这个云时代,在此之前在中国是没有一个公司把云作为一个业务、作为一个技术的未来在看待。09年之前,阿里巴巴做淘宝,我们前六年都是处于亏损的状态,我们也不知道商业模式是什么,但是我们发现电子商务的渗透率在逐年提升,我记得到很长一段时间才慢慢提升到10%左右,也花了十年才有40%的人才用了这个电子商务。现在应该大家知道各行各业基本上都跟这个电子商务挂上了钩。现在是新零售,线上线下的一体化的融合。那今天我们十年之后再来看这个云,德意志银行分析报告,中国现在有84%的企业是有意愿要上云,他们觉得云是未来,所以我们对云在中国的普及开了一个非常非常重要的一个头。第二,研发了中国的云操作系统和城市AI平台。阿里云跟别的云不一样,别的云叫云,阿里云就叫阿里云,为什么阿里云叫阿里云?因为阿里云的云从第一行代码开始是完全我们从头开始书写的,并不是我们拿了一个东西包装一下作为一个云产品在售卖,所以这个是我们跟别的云最大的不一样。2017年获得了电子学会的科技进步特等奖的是飞天操作系统,就是我们云的一个主要的操作系统,是电子学会15年历史上第一个颁出去的特等奖。我们对云之上的应用做出了一些关键性的探索,特别是基于AI为数据、AI为核心能力的产业化的应用作出了非常大的一些努力跟探索,这里面有非常多的一些代表,我觉得有一个非常代表性的就是这个城市大脑,阿里云在三年前就提出了城市大脑这个概念,并且在杭州取得了非常好的一个效果,这也是数据智能在一些传统产业里面大规模的一个探索,因为原来的智能都是跟互联网数据、互联网业务相关系,这是我们在产业化上的一个巨大突破。城市大脑也是国家人工智能开放创新平台之一。这些我们在努力做,从杭州走到了上海,走到了重庆,走到了更多的一些城市。第三,阿里云今天已经有数百万的客户,各行各业都从云的发展中,获得了发展的新动力。传统行业跟互联网、云产生了密切的连接,中间发生了非常多的化学反应,包括我们现在有工业大脑,有农业大脑,都是通过云及之上的一些数据智能的服务跟各行业的连接,产生了一些新的变化。云从技术角度来讲,它跟以前第二次工业革命的电是一样的,今天没有一个公司一定要去建自己的电厂,因为云它就是这么一个基础性的公共服务,但是跟原来的行业产生连接之后,发生了非常非常多的创新跟变化。基于云基于数据基于智能的结合,肯定会对这个行业带来新的变革,这个也是技术革命带来最大的进步。在中国,我们通过十年的努力,受到了非常多客户的认同,市场份额超过第二到八名的总和。感谢大家对阿里云的信任和支持。从云变成云智能意味着什么?阿里巴巴的云跟别的云有什么不一样?我们跟AWS不一样,跟微软的云也不一样,我们跟其他中国各式各样的云也不一样。阿里巴巴的云是个怎么样的云? 我觉得有三个关键点。第一,我们在讲的是IT基础设施的云化。我们原来要做一项工作就必须要自己去建或者租一个IDC,自己去维护去购买设备,这对任何一家公司来说都是一个额外的开销。我们大部分企业的核心能力并不是去建一个基础设施,它只是要用好这个基础设施。我们回想之前做电子商务,为什么像淘宝网这种新的商业模式获得巨大的一个成功,因为原来你要在自己做一个零售,你要开一家店,那你一定得租个门面对吧?第二你要去进货,第三要去搞装修,去运营这家店铺。这样一套下来,没有5万块钱或者没有10万块钱,是没办法启动一家店铺的,你没办法再在现实的地方开一家店,而且你的客流量还受地域环境的影响。电子商务第一个突破就是今天你不用花一分钱就可以在网上开一家店,你一分钱都没有花的时候你就开了一家店,你还能连接供应链和消费者,只要做好你自己的服务、对消费者的认识、跟商品的认识就可以了。那云对绝大部分的传统产业来说,对数字化来说,它起的就是这么一个关键作用,今天你不用花大量的投资,每个月可能花几千块钱,或者甚至几百块钱,甚至几十块钱,你就能拥有一个跟阿里巴巴一样先进的基础设施。这个是IT基础设施云化带来的一个最大的价值,使得数字化门槛大幅度降低。第一天开始你可能只要五台服务器,你第二天可能要十台服务器,你以前是很难规划的,你一定得为你最大的那个负载做规划,比如说你今天要搞个活动,你要50台机器,你就必须要按照50台机器去配置,那事实上你可能平常都只要10台服务器。那阿里巴巴第一次走上去IOE的道路也完全是这样一个逻辑,我们当初发现要扩容的话,一定要一倍一倍地扩容,每增加一倍我们的投资是几千万,但你扩容的那一刻到你容量用完的那一刻,中间的时间是非常长的,可能有50%的时间一直是处于容量不足的这个情况,所以是巨大的浪费。基础设施云化之后,它可以非常平滑地进行过渡。第二,核心技术的互联网化。基础设施的云化,它不是简单的云化,它带来了一个新的技术体系。原来传统IT领域的体系都是像小型机,像高端存储,传统数据库这么一套体系,但今天云化之后,它有一套新的体系,它是比较廉价的PC机,通过大规模分布式的一些调度,把一些廉价的PC机变成可以跟原来这套体系一样、甚至优于原来这套体系的能力,这是基础设施云化后一个最大的变化。从一个传统的体系变成新的体系,是需要一套新的系统去运营它的。这里包括一些大规模的调度、消息的处理、分布式的数据库、负载均衡,都是原来基于硬件大型设备的,现在都需要基于互联网技术来进行改造,所以我认为这是云之后第二个核心的能力,是用互联网的技术来构建整套IT系统。今天大多数的传统IT产业,它最大的问题第一是基础设施是老的,第二技术体系还是老的体系。今天来看,云为什么说一定是个趋势?因为所有面向下一代的技术,它一定是构建在互联网技术、构建在云化基础设施上的。若干年后,如果还是老的那套体系,我觉得可能会招不到合适的工程师。因为所有的工程师慢慢地都向新的体系迁移,开源生态,所有的云,它都是构建在这么一套新的体系之上。阿里巴巴是这条道路上一个坚定的实践者,也是一个探索者。我们运营了全球最大的零售平台,也运营着全球最大的支付平台,我们通过这么多年的努力,把自己一整套的系统用互联网技术来构建的过程中,积累了丰富的经验和最佳实践,这都是经过双11、双12反复考验的一套系统,证明这套技术体系是可行的,也是一个未来。今天我们谈新零售谈新技术,这个“新”最关键的就是对未来的看法。新技术的未来到底是什么?商业的未来到底是什么?今天我们可以很明确地说,它一定是在云化的基础设施之上,也一定是“一个互联网技术武装起来的云”。第三,阿里云跟别的云有一个非常大的不一样,我们的云上做了数据化跟智能化这两大比较关键的基础设施,这也是我们今天从IaaS层走向智能化最大的不同。传统IT设施基本上是硬件为主,信息系统基本上是以流程控制为主,但今天我们还在看所有成功的互联网公司都是数据驱动的,智能驱动,没有一家公司例外。只是说互联网公司它获取数据处理数据这个过程更为自然,理念也更为先进,所以它走到了前面,但我们并不是说传统的企业、业务没有数据。它有很多数据,只是没有去处理这个数据,数据这个东西是越处理越多的。今天阿里云智能最关键的两大能力,一个是数据,第二个是智能。那我们怎么来理解这个数据?很多人理解数据就是能源。数据其实是一个企业的血液,不仅是个简单的能源问题,只有把这个数据完全利用好了,才能做一个智能化的判断跟决策,才能把原来纯粹基于流程的公司改造成基于智能的公司。以阿里巴巴自己为例,电子商务有20亿的商品,1100万个卖家,每天大概有3亿人访问,每天会产生大量的数据。那怎么利用好数据?手机淘宝今天能做到每个人看到的每一个页面都是不一样的,每一次点击之后,会根据点击实时生成后续页面。这里边有两个概念,第一怎么样处理海量的数据?第二个你怎么样实时地处理数据。这是两个关键能力。实时更难。实时不是说一分钟就叫做实时,是用户觉得没有体感才叫实时,都是秒级的,每秒都要处理这么多的数据,为每个人处理不同的数据,所以是一个非常非常关键的能力。我们需要真正能够支撑大数据智能化的关键基础设施,从数据的收集、处理、存储,要构建一整套技术。首先是智能。今天处理数据绝大部分都不是单纯靠算力,算力是基础,而主要是靠上面的智能化的算法,算法跟各行各业的业务有密切相关,所以阿里巴巴通过与各行各业合作,沉淀了一个完整的智能化平台。我们认为在基础设施的云化、核心技术的互联网化以及在之上叠加大数据+智能化的平台和能力,完整地组成了阿里云智能的整体能力框架。这是我们核心的能力。我们再看一下「云上的阿里巴巴」。当阿里巴巴要运营这么大的经济体,每天要售卖出上百亿,却只有几百个运营人员。对比一下传统公司与互联网平台公司的巨大的差别就在这里。因为阿里巴巴电商大量地用好了数据,用好了智能做出的决策。反过来说,但凡企业复杂到一定程度,任何一位CEO其实很难做出科学客观的决策。但有了数据之后,任何一位普通员工,其实在他自己的岗位上都可以跟CEO一样做出一个正确的决策。数据是个非常客观的指导意见。阿里巴巴的客服小二是凭什么作出客观的决策? 因为客户打电话进来的那一刻,系统就在后台有一个数据上的智能分析,给到客服小二,帮助他做出比较客观的评价,这样才会大幅度地提高决策的公平性跟效率。当客户打电话进来的那一刻,系统可以推理出大概要问什么问题,这跟很多因素有关。这就是从智能来改变业务流程,一个非常典型的这个例子。阿里巴巴自身几乎所有的流程里面都有数据、智能的作用。整个阿里巴巴今天大概有60~70%的流量是跑在公共云上,我们接下去花1到2年的努力,将阿里巴巴100%的业务跑在公共云上。第二,云智能升级之后,把阿里巴巴的技术跟阿里云的技术完全拉通,以后阿里巴巴用的技术跟阿里云上的产品是完全一样的。大家第一时间用也是跟阿里巴巴用的一模一样的底层。阿里巴巴集团的整个技术都变成一个云上的技术。所有的技术的输出,产品的输出,对to B的服务都必须通过阿里云智能这个平台,包括我们的金融云,包括我们像钉钉这样的协同办公系统,包括新零售的核心技术和新产品。三年前成立了达摩院,我们在持续加大投入。在量子计算、机器智能、嵌入式芯片、数据库进行了广泛投入。在芯片端我们在IoT端嵌入式芯片发展非常快,去年销售约2亿片芯片,下半年自己研发的第一款阿里巴巴NPU将会正式发布,这个性能在这个同等芯片里面都是非常非常领先的,它不是领先一倍两倍的问题,是领先十倍以上的。2013年,我们第一次的大的突破是把5000台计算机作为一个整体来做计算。今天阿里巴巴的计算平台总共有7万台计算机在做大数据的处理,我们每天要处理超过一百个P的数据,我们双11当天处理了超过1300P的数据。我前两天跟央视的人聊,央视60年积累的影像资料是80P。我们在双11当天就能够处理超过1000P以上的数据,每天都处理超过100P的数据。刚才我讲了,第一是海量,第二是实时,这是对我们系统一个非常大的考验。所以我们从达摩院开始,就下决心从基础技术上开始突破。我们从芯片到操作系统到网络,到我们的神龙服务器,一层一层,在逐步构建我们端到端的核心技术能力。对于战略性的行业,阿里巴巴有太多的产品可以输出,可以去赋能这个行业。一个是零售,大家知道对新零售阿里巴巴一直在持续投入和探索,我们有大量的产品可以输出,可以被我们的客户所使用。第二个是金融,大家知道我们蚂蚁金服在金融上用互联网的技术、用智能,和金融行业结合,做出了非常多的创新,例如余额宝、芝麻信用。像余额宝这样划时代的产品,几乎是每一个消费者都知道了。还有一个是思路的转变。这是互联网的技术和传统的产业结合的一个非常典型的例子。金融行业从基础设施基于oracle、EMC和IBM这套体系到新的体系,到怎么样利用互联网的技术,利用大数据、智能化的能力,以及最重要的是新理念跟思路去服务消费者,都有巨大的一个空间,所以这方面我们会持续持续加大投入。第三是数字政府。从浙江开始,从浙江的最多跑一次开始,全国有很多地方开始利用了互联网技术和智能,让我们的老百姓真正得到了实惠。从原来基于部门的系统到今天变成基于用户、基于数据的系统。第一是理念发生了巨大的转变。 第二,支撑这个理念的技术,转变是因为有了新的技术。在各地政府的实践中,取得了非常好的效果。刚才我讲了阿里云要做什么,做好自己最核心的能力。第一是怎么样把基础设施更好地云化。第二,怎么样迅速地加强加厚我们的互联网技术。第三,我们做好大数据、智能化的平台。但是我们知道从基础设施到中间件,一直到这个智能化数据化在上面,才是真正的各行各业自己的应用,这里面的应用非常非常广阔,非常非常多,所以这方面阿里云会跟所有的合作伙伴建立深度的关系。我们帮助他们换完成三个转型:帮助他们把基础设施云化,帮助他们把核心技术互联网化,帮助他们把应用系统从原来的流程化为主,变成流程、数据智能并重的系统。我们也希望合作伙伴跟阿里云一起更多去探索这个行业的未来。今天我们提出一个口号叫“被集成”,我们希望阿里云的产品技术变成他们解决方案的一部分。这是我们非常认真思考做出的一个重要转变,我们会跟整个行业一起去探索。我们希望这个行业的解决方案,行业的实施,行业的复制,要交给我们的合作伙伴去做。阿里云只做最擅长的部分——基于技术的创新和突破。我们今天提出一个理念:阿里云自己不做SaaS,让大家来做更好的SaaS。刚才我讲了阿里云的核心能力就在于三个能力,所以我们要把SaaS交给各行各业的合作伙伴来做。SaaS意味着什么?SaaS意味着要进入客户的业务流程,这里有太多各行各业自己独特的知识跟价值,需要客户和合作伙伴自己去发掘。SaaS意味着什么?SaaS意味着要做咨询,要去帮助客户去做咨询,但这个咨询不等同于传统的咨询,传统的咨询完全是基于流程的。我们要把我们的数字化的理念变成咨询方案里面的一部分。所以在这个前提下,我们跟德勤、埃森哲、毕马威等建立更广泛的合作。帮助他们,他们也帮助阿里。为什么叫相互帮助?因为帮助他们把数据化的理念、智能化的理念变成他们解决方案的一部分。第二,他们把自己的解决方案里面的核心产品,带上阿里巴巴的核心能力,共同去赋能客户,这是我们的理念。各行各业的合作伙伴,基于云、基于数据、基于智能、基于互联网技术,去完成系统升级改造。云化、智能化、数据化一定是未来,所以我们希望共同去拓展广阔的行业,从制造业到流通到零售等等,我们都希望是以这个思路去拓展,所以今天我们提出来,阿里云要被集成。当然,被集成对阿里云提出了更高的要求、更大的挑战。很多人都会问我,阿里云凭什么会被集成?这是我们要解决的核心问题,也是我们的信心和能力所在。我们一定有信心和核心能力,因为我们不仅有技术,而且有理念,最重要的是有在阿里云、在阿里巴巴体系里面的云上最佳实践。总结一下,阿里巴巴云智能的四个关键点:第一、技术,达摩院加持的云。整个阿里巴巴的技术变成阿里云的一部分,我们有达摩院的先进技术,作为云智能的一个基础部分。第二、产品,数据智能的云。我们产品一定是基于数据智能的、非常稳定可靠的云。第三、商业,最佳实践的云。我们和绝大多数云服务商不一样,我们是自带最佳实践的云。我们运营了最大的电子商务平台,也运营了最大的支付平台。我们有非常多的技术实践、产品实践和商业实践,阿里云是一个最佳实践的云。第四、生态,被集成的云。我们会跟合作伙伴建立更紧密的关系,我们的合作伙伴成功了,我们的客户成功了,才说明阿里云这个云智能模式、这个系统、这个产品、这个技术是成功的。今天是阿里云第一次明确说我们是一个被集成的、生态化的云。今天我的演讲就到这里,谢谢大家。本文作者: 十年再出发阅读原文本文来自云栖社区合作伙伴“ 阿里技术”,如需转载请联系原作者。

March 25, 2019 · 1 min · jiezi

找了几天工作,发现好难,难道只想骂,草泥马的比

这些公司招人也不用脑袋想想,草泥马的3到五年都能成高级工程师,你麻痹的满大街都是高级工程师了,你们整天招人招人面试面试,草泥马的你们不用脑袋瓜子想一下能找到你这样要求的人才吗,三到五年能做到高级工程师的那他妈的要天天做项目而且是不重复的做,才有可能达到这个高级的水平,全中国这样的人才都很少……码农何必为难码农啊,更有公司狂到写代码不了看百度的,你他妈的逼的狂啥呀

March 19, 2019 · 1 min · jiezi

从国企到互联网,一个六年程序员的「得」与「失」

程序员,六年,四段工作经历,这也许是一份会被很多 HR 刷掉的简历。从学生时代至今,我经历了两次大的方向转型和一次大的技术转型:从偏理论推导的数学科学到重工程实践的计算机学科,从「安稳固化」的国企到「活跃求变」的互联网;从「人人为我」的客户端到「我为人人」的服务端技术转型。回看自己的经历,在方向选择上,我是后知后觉的。在 PC 时代即将谢幕时入场,完美地错过移动互联网时代的红利期/窗口期;技术选型上,我是「愚钝」的。一头扎进学习曲线最为漫长的 C++,又投入 Windows 封闭生态环境的怀抱,转型服务端之初「逆趋势」地被选择了「世界上最好的语言」(PHP)。然而从硬币的另一面来说,我是幸运的。丰富的经历自不必多说,在这个过程中,我也初步丰富和完善了知识结构。虽不健壮,却也雁过留痕。年岁渐长,我愈发感受到总结的必要性和重要性。这篇文章远谈不上什么感悟或是经验分享,只是想把曾经那些曾令我兴奋的、失落的、沮丧的故事说一说,也算是回看自己略显「折腾」的几年中那些「得」与「失」。瞒着父母,我从国企辞职作为一个从农村走出来的孩子,211 院校硕士毕业,在国企实习后顺利转正,是一件让我父母脸上颇为有光的事情。但是只不到两年,我在没告诉他们的情况下选择了离开。我第一次经历了系统且完整的软件开发全过程,使用被时间证明足够稳定(过时)的 MFC 技术,开发和维护 OP 工具软件,实现私有的应用层通信协议。大家对于国企的第一印象,可能都是「工作稳定、福利待遇完善、竞争压力小」。但对于刚出校门的毛头小子来说,要把之前书本中学到的理论知识转化为生产力,挑战总是有的。而且在国企环境下,对系统稳定性、信息安全性都有很高的要求。同事们严谨的工作方式,也帮助我养成了编程规范和及时留存技术文档的习惯。工作之外,我享有充足的时间读书学习。技术类书籍当然看得最多,历史、社会和文学也都没落下,以至于让我一直有种未曾离校的错觉。即便如此,我却并不感觉自由。正值国企改革,组织要逐步减少对母体的依赖,形成并完善自身的造血能力,但在彼时相对封闭的环境、较为传统的管理方式和复杂的内部流程下,即便是我也能感受到领导在推动新技术变革时的束缚和阻碍。年轻的我还是希望能快速在技术成长上有所突破,接受更多挑战,于是告别了温馨的团队和相处融洽的同事。初入互联网,我的热情有了安放之处重新找工作的过程并不像第一次那么顺利。虽然也有「大厂」向我招手,但可能是上一段工作的缘故,让我格外向往更有活力、有朝气、有更多机会和挑战的工作环境。最终,我选择了一家正在快速发展的互联网创业公司。收到 Offer 的兴奋感只持续不到一天的时间,巨大的危机意识便开始滋生。虽然我还是机缘巧合地成了公司很长一段时间内的唯一的 Windows 开发者,但对比我上一份工作输出的原始且粗糙的单文档/多文档应用,这款 ToC 产品面向的女性用户群体、舒服的粉红色主题,以及素级挑剔的 Boss,都是我之前没经历过的。入职后我就接到了新产品的开发任务。一个月内,我每天的工作时间几乎是之前的两倍,甚至周末都来不及喘息,逐个击破 IM、DirectUI、WebUI、WebSocket、Http、Wke、libCef 等这些之前从未接触过技术,和团队的十几位伙伴如期推出第一个内测版本,然后持续优化和改进。我们把这个项目当成自己的孩子,在生长的过程中难免有这样那样的问题(长链接保活、多端登录、消息的即时性、有序性和可靠性等),也会调皮和闯祸,但我和我的小团队从基础通信功能切入到初具规模,实现了从 0 到 1。这是技术长进最快的时光,我不知疲惫地持续探索、反复试错。但是后来的种种因素没能让它继续成长壮大,也许是资本,也许是机遇。虽然很惋惜,但至少让我感到充实。这一次,也点燃了我的热情,让我看到了自己创业的可能性。于是毅然切换赛道,开始一段新的未知旅程。创过业才知道,原来这么难受万众创新,大众创业的鼓舞,在某个机遇下,我受邀加入一个背景出色的初创团队,开始一段热血征程。创业项目是基于情绪模型开发网络情报监测与智能分析大数据平台,通过对国内外主流社交媒体海量数据的收集、清洗、处理、存储、分析,就当下发生的热点事件,及时生成可视化的图表及舆情分析报告,为政府和企事业单位提供决策参考依据。能近距离地与业界的营销高手、舆情专家、大律师等牛人共事,着实令我心血澎湃、干劲十足。对比成熟型创业公司,我们面临着机遇、团队和资源的所有匮乏,我个人也接受着身兼产品、技术、运维、市场等数职的挑战。在创业初期,我们学习并践行「先僵化,后优化,再固化」的企业管理三步曲,虚心学习国外同类优秀产品,诚心向成功的前辈取经探讨,细心地打磨产品每个细节,用心地解答种子用户提出的或需求或产品本身的各类问题,也会为每个肯定或进步而欢欣鼓舞,会为每次质疑或否定而知耻后勇。但屡次在小作坊式持续迭代与集团式快速布局的「无谓抗争」中妥协,也认清了自身无论心智、思维还是能力都与合格创业者的标准相距甚远的现实,且内心对技术变现的「执念」。而这一年,我的技术水平毫无进展,与我预设的成长速度极不匹配。我开始思考自己是不是偏离了轨道。最终,我还是决定带着祝愿和遗憾离场。回归初心 —— 精进技术这次出发,我的目标更加清晰,希望加入到一个技术导向型并且具有一定规模的团队。很幸运来到了马蜂窝。我清空之前所有的优越感和不良习性,以空杯心态去接受一个未知但精彩的新领域,重新激活了对四周任何事物充满无限好奇与试探的欲望,虽有涟漪,却也静好。在快速发展的过程中,组织架构和业务调整在所难免,我又面临着是坚持 PHP 还是拥抱 JAVA 的选择问题。这次我的选择是在较长的一段时间内做好辅助的角色,去支持各个业务线的顺利开展。不得不说,难免沮丧,但也有过顿悟。直到新的业务和交易系统迁移接近尾声,与领导的一次长时间谈话及往后的深思,我决定再次拥抱变化,以一种无知无畏的姿态面对挑战。在再次转型后的一段时间内,我投入到 JAVA 技术栈的学习,渗透服务化改造的思想,训练工程化和系统化思维,迷失渐少,多有裨益,更有勇气和信心地直面挑战。一个中年程序员的碎碎念在每一次转型过程中,也会有一种清零不被认可的情绪让我挫败。或许是跨度太大造成匹配度不高的错觉,但更多的原因应归咎于自身的内功不足。时至今日,一路磕磕绊绊地走来,经历资本的疯狂与寒冬,经历心智的稚嫩与初步成熟,经历从零到一的兴奋与从一到百的困惑,也分享几点感悟:第一份要工作慎重选择,它会直接或间接地影响后续的职业发展;危机可以拆分为危险和机遇,抓住机遇并化解危险方能成长;技术人同样需要培养成本意识、风险管控和团队管理能力;唯有变化是唯一确定的变量,保持开放的心态,积极拥抱变化,加强学习和强化自身,才有机会在持续的变化中立于不败之地。人到中年,我们无法避免焦虑感。尽管如此,我仍然非常反对「技术是吃青春饭」的观点。最后,我想和大家分享几点,我在这些不算成功的转型中的几点体会。1. 扎实的基本功非常重要很多面临职业转型期的技术人,都会纠结于是要先加强技术的深度还是广度。在我看来,程序员想要有好的发展,操作系统、网络协议、编程语言、算法等都非常重要。工程化思维通过项目实践来积累,新技术虽然层出不穷,但万变不离其宗。比如掌握了 C++这种学习路线陡峭的语言,在面对新语言时你会很快上手。2. 提前规划,重视积累和沉淀回头来看,我不后悔做出的每个选择。但如果重来一次,我一定会重视对职业路径的规划,让自己有更多积淀。以后该如何发展?继续精进技术?转型产品经理?还是技术负责人?提前规划,少走弯路,并且利用好你的技术优势,形成思维方法和知识体系。3. 不要只关注代码,也要经营身边的人关注你的家人、朋友、同事,学习经营每一份关系,因为只有稳定的家庭和更多的朋友,你才会踏实地在技术这条路上探索,并且得到更多的资源。而不是像我,在离开多年后,才知道原来身边的人有如此实力。4. 努力活成一个有趣的自己关于程序员的标签,我们都有所耳闻。其实技术只是手段或工具,比技术更重要、更有价值的东西比比皆是,比如独立之人格、自由之思想,健康之体魄等。建议大家可以多读书、多旅游,也许在某个不经意间,你会惊喜于发现自己刷新了世界观。以上这些也许并不足以为各位提供实质的指导,但感谢你的阅读。关注马蜂窝技术,找到更多你想要的内容

March 15, 2019 · 1 min · jiezi

AI 安全在阿里业务中的实践,你了解吗?

我们知道,AI 技术将在很长一段时间占据互联网技术时代的风口。但是,有代码的地方就有缺陷,提到技术很难不讲安全,那么AI会不会碰到安全问题呢?AI安全试想一下,未来的某个早晨,当你像往常一样打开无人驾驶的汽车车门,报出目的地,然后坐在后座上舒舒服服地浏览推送给你的各种新闻,汽车突然失控,在本该停止的红灯前飞驰而过撞向了正在过马路的行人,那将是怎样一场灾难。人工智能技术给生活带来便利的同时,其自身的安全问题(AI安全)也不容忽视,AI安全问题可以归纳为内外2方面原因:自身缺陷导致的模型出错:例如,模型结构本身存在缺陷、或者训练数据和真实场景数据之间的偏差,都可能导致模型预测错误。外部攻击导致的模型风险:例如,来自外部的对抗样本攻击可诱使算法识别出现误判漏判,输出错误结果。本文,我们会针对第2点的对抗样本技术结合其在阿里巴巴安全领域中的实际应用给大家做展开介绍。对抗样本技术对抗样本由 ChristianSzegedy[1]等人提出,他们发现通过深度神经网络训练得到的模型,在输入与输出之间的映射往往不是线性的。这样就存在一个问题: 在输入数据中通过故意添加肉眼不易察觉的细微扰动,可以生成对抗样本,导致AI模型以高置信度给出一个错误的输出。如下图所示:目前的对抗样本根据是否需要指定攻击的类目可以分为无目标攻击(non-targeted attack)和目标攻击(targeted attack)。前者不指定具体类目,只要让AI识别错误即可。后者不仅需要使AI识别错误,还需要使AI识别到指定的类别。生成对抗样本,最直接的方法是在给定扰动量的范围内修改样本,使得修改后的样本在AI模型上的损失函数最大化(非定向攻击)或最小化(定向攻击),这样就可以把生成对抗样本的问题归纳为空间搜索的优化问题。基于不同的优化算法,学术界提出了很多对抗样本生成算法,有兴趣的朋友可以自行检索,此处不具体展开。对抗样本应用场景对抗样本技术提出后引发了学术界和工业界对于深度学习模型在安全方面的广泛关注,成为目前深度学习领域最火热的研究课题之一,新的对抗攻击方法不断涌现,应用场景从图像分类扩展到目标检测等。阿里安全一直以来致力于用技术解决社会问题。为了保障整个生态圈中7亿多消费者和千万商家的信息安全,AI技术很早就被应用到了阿里安全体系建设中。安全领域一个重要的特点就是存在很强的对抗性,日常防控中,黑灰产会尝试使用各种对抗样本攻击我们部署的AI防控大坝。对此,一方面,阿里安全图灵实验室的算法专家们提出了若干种提升模型安全性能的方法,强化自身堡垒;另一方面,算法专家们也会以战养战,开展针对对抗样本的攻防研究,利用对抗技术去防御攻击者的模型。下面我们结合实际业务,介绍两种对抗样本的应用场景:1.人脸识别人脸识别技术已经在生活的各个场景普遍应用,手机解锁要靠脸、移动支付要靠脸,机场安检要靠脸……一脸走天下的时代逐渐到来。然而,Bose 和 Aarabi[2]发现通过在原始图像中加入人眼不可区分的微量干扰对人脸识别算法进行攻击后,能够使人脸无法被检测算法定位到。如下图所示,左列为原始图像,检测算法可以准确定位,右列为对抗样本,已经成功绕开了人脸检测算法,而在我们肉眼看来两幅图画基本没有差别。更进一步,采用对抗样本攻击人脸识别系统,还可以使算法把人脸识别成指定的错误类别[3]。下图第一列为目标类别,第2和第4列为原始样本,对其加入干扰生成的对抗样本在第3和第5列,它们均被算法错误识别为第一列目标类别。2.对抗验证码如同网络通信的基础安全设施——防火墙,互联网业务安全也有其基础安全设施——图片验证码和短信验证码。互联网业务广泛使用图形验证码用于区分人类和机器的操作行为,使用短信验证码过滤黑灰产批量账号及提供二次校验功能。现在随着深度学习的门槛越来越低,黑灰产会利用深度学习技术构建模型自动识别验证码,突破算法模型设置的人机识别防线。下图的文本验证码基本都可以被AI模型轻松识别。针对文本验证码面临的挑战,阿里安全图灵实验室的算法专家们将原始验证码替换成增加扰动后的对抗验证码。为了增加对抗验证码的识别难度,又不影响正常用户的体验,算法专家们又在图像区域和生成方式上进行了组合扩展,最终生成的对抗样验证码有效抵御了黑灰产的批量破解,成为阿里业务安全的一道铜墙铁壁。采用该组合扩展生成的对抗验证码如下图所示:针对点击式的图文验证与行为辅助验证码,阿里安全图灵实验室的算法专家们首先在验证码中结合了NLP的问答技术,再将全部问答转换成图片,最后利用对抗技术生成对抗问答图片。使用商业的OCR引擎进行对此类对抗问答图片样本进行识别测试,和原始样本的识别率相比,对抗样本的识别率大幅降低,且并没有对用户的体验带来很大的影响,由此可见AI结合安全能为业务带来巨大的价值。本文作者:安全第一阅读原文本文来自云栖社区合作伙伴“ 阿里技术”,如需转载请联系原作者。

March 12, 2019 · 1 min · jiezi

传统软件行业与互联网行业对比

由于在传统软件行业与互联网行业都待过,所以在面试和做介绍时经常听到有人问到这两者之间有何差异,现在不妨总结一下。先来背景介绍:我所在传统软件行业主要从事军工方向信息系统设计及研发工作,在大型型号项目中作为总体或主要研发单位;互联网行业即在百度做网页搜索相关工作。互联网行业较之传统软件行业来说,1、技术氛围更加开放,更多的技术探讨和交流,思维更加活跃。在百度有各种串讲、分享、讲座和培训,大家乐意探讨技术问题,公司也鼓励transfer,这一方面应该也和百度技术人员的整体素质和水平较高有关。2、产品迭代周期快。信息系统、办公软件的发版一般都在半年以上,尤其军工系统的型号项目,经常论证设计一年、开发一年、测试保障好几年,这在互联网企业是不可想象的。互联网的发展脚步根本不可能等得了这么漫长的功能迭代和新产品研发,所以,在互联网企业业务模块基本每天都有上线,子项目的研发周期经常就是2-3天(包括开发+上线中间的所有过程)。3、技术特点上,一方面,由于所在研究所面向军工,以项目为驱动,基础构件和服务的复用程度较低,伴随大量重复开发导致效率较低,稳定性难以保证;而尤其像百度这样的大型互联网企业,深耕多年,内部技术积累深厚,各种基础库在高并发、高流量的框架内使用多年,稳定性能够得到较好的保证。另一方面,互联网企业更多的应用开源方案解决问题,创新实力和对新技术的跟踪做的也很优秀,而传统软件行业并不热衷新技术,对开源也没有多少热情。最后,大型互联网企业内部的研发流程自动化水平极高,开发、测试、运维方面有各种自动化工具辅助工作,大大提高了研发效率和线上稳定性。综上所述,其实我想说的是,开放的心态才能促使我们愿意沟通,与同事沟通,与上级沟通。开放的环境促使我们需要更加主动的推动事情的开展,同时也能够更加迅速的接收新鲜事物。不管环境是否有所变化,积极进取的心态,不断学习的要求,正确的做事方法,都是我们能够在职业道路上不断前进的保证和基石。

February 27, 2019 · 1 min · jiezi

市场变冷,不要灰心。更应该延长你的黄金岁月

十八岁到不因工作而烦恼之间就是我认为每个人比较普遍的黄金岁月,你对生活的环境有了比较全面的认识,却还不需要负重前行前言从2018年下半年开始陆续的传出来各大公司裁员的消息,各种勒紧裤腰带抵御寒冬,不要轻易瞎折腾的文章层出不穷,前俩天又传出来了滴滴裁员百分之15的消息,可谓是人心惶惶。我写这篇文章是想给患得患失的你一颗定心丸,困难的环境更应该奋起,延长你的黄金岁月。人才是带引号的人才互联网作为仅次于金融的第二大高薪行业吸引了无数的“人才”纷纷进入,这里的人才是带引号的,为什么带引号呢?因为大部分人都是奔着高薪才加入的,后来有一部分人在工作中找到了自己的价值爱上了这一行这一部分人是非常幸运的的也有这么一部分人把这一行当成了以前的传统行业一样以为掌握了目前的技能就能够一直干到退休,低估了这一行的革新速度,像温水煮青蛙一样被慢慢淘汰确浑然不知,等到上有老下有小,每个月还需要还房贷,突然被辞职的时候已经晚了也有这么一部分人压根就不爱这一行,甚至反感。可是换行的成本太高,需要接受经济上好几千的落差,从之前一个人住的单间搬到了好几户合租的小房子,从每天打车到地铁变成了骑自行车到地铁,从之前顿顿外卖到不舍得定外卖开始自己做饭。这不是每一个人都愿意接受的,而且换行也存在失败的风险。所以说是带引号的人才。环境变了,你却没变十年前,乃至于二十年前这一行处处充满了机遇,经历了台式机从无到有,智能手机从无到有的阶段,这些都是革命性的。人们获取信息的方式,娱乐的方式有了根本的改变。无数有眼光的资本家看到了机会,将大把大把的钱投入进来,这一行焕发了勃勃的生机,人才不像钱一样能够腾空而降,人才需要培养,需要一个过程。于是会有人才紧缺的这么一个阶段,但是一年一年过去台式机饱和了,智能手机饱和了。改变人们方式的APP已经独霸天下了,剩下的红利远低于风险程度。像猩便利,共享单车的失败更是给人们敲响了警钟,资本家开始束手束脚,不在豪迈。而且还赶上了中美贸易战,对实体经济的冲击是前所未有的,物联网投资的钱是从哪里来的呢?就是这些实体经济来的啊。于是公司融不到钱,发不起工资就开源节流,各种裁员新闻就开始了。这个时候人才市场还没反应过来,入行的新人还是层出不穷。势必就造成了企业的口味变得更加刁钻。所以这是环境变了,而你还没有意识到,你还没有变化正因这样,更应该艰苦奋斗从个人来看,一生很长,但是黄金岁月很短暂。何为黄金岁月呢?一岁到十八岁不行,这个时候要么是不懂事,要么是封闭在学校里。对社会产生价值的可能性比较低十八岁到不因没了工作而烦恼之间就是我认为每个人比较普遍的黄金岁月,你对生活的环境有了比较全面的认识,却还不需要负重而行每个人的黄金岁月的长短是不相同的,但是大部分人的黄金岁月时间又是差不多的,可能从结婚生娃那天你就害怕辞职了,可能从有房贷那天你也就变得害怕辞职了。你怕辞职了下一份工资不如这一份高,不能让孩子上更好地学校输在起跑线上,怕还不起房贷,生生把父母的十几年积蓄付之一炬。再也不能说走就走,所以没有人不希望黄金岁月贯穿自己的一生。市场是变得不好了,可是处于其中的你可能都没有发现自己比平时变得更加勤奋了,原本敲完了代码就开始玩手机,现在可能会拿出更多的时间逛逛github,读读源码。不知不觉间自己已经跟之前的轨迹不一样了,早已经变得越来越优秀而浑然不知。总是会有一批后知后觉的人还没有体验到大环境带来的变化而后知后觉的你希望你看到这篇文章的时候能够感受到我字里行间的寒冷而清醒过来,不在做那温水里面的青蛙。尽早的规划好未来的走,走在大部分人前面总是会有一批心存幻想的人还在心存幻想的你也请你不要在心存幻想了,寒冬终会过去,但是来年的春天已经跟往年不一样了。如果把互联网比作一片沃土,把人比作种在沃土里面的树苗,好的工作比作太阳那么之前沃土里面的树苗是稀疏的,不需要太多的竞争就能沐浴到阳光。而现在整片沃土不在稀疏而是到处都载满了树苗,只有踏实扎根长高,才能够不被遮挡沐浴阳光致读者我希望我的读者不管现在怎么样,以后的路都能够迎难而上,尽早拜托工作束缚,不断延长自己的黄金岁月。大家觉得不错,可以关注我的公众号,以获取更多优质文章

February 22, 2019 · 1 min · jiezi

目前可用的微博秀的嵌入方法大全(亲测2019年2月仍有效)

当今最全面可用的微博分享组件嵌入方法(亲测2019年2月仍有效)最近一直在找一种目前可用的微博分享组件的使用方法,发现有3个大坑:向网页嵌入微博秀时,需要的uid简单,但需要的verifier值有点难获取,原因在于原生成微博秀页面的 url 及其子链接均会被强制从http重定向跳转到https,此外其response中部分css引用失败导致页面无法完整显示;https页面是没法调用http下的js和css的;微博秀是需要用iframe来嵌入的,博客园默认不支持iframe标签,可通过构造字符串的方式添加iframe来解决,也可以直接用embed标签替换掉iframe。对于微博第5版(weibo v5),其相应的微博组件的网址为: https://open.weibo.com/widgets ,及其具体使用方法为: 微博秀-新浪微博JSSDK官方网站,而对于微博第4版(weibo v4),相应的微博组件的网址为: http://app.weibo.com/tool ,相比之下第5版的组件中丢失了第4版中很重要的"微博秀"组件.下面来介绍我解决向博客园中成功嵌入微博秀且在http/https下均能显示的方法:1.获取微博秀的参数uid和verifier使用Chrome打开微博登录页面 https://weibo.com, 然后打开微博秀页面 https://app.weibo.com/tool/we… ,接下来按F12,点击开发者工具导航栏中的Source。选择灰色的那个点开,就可以看到相应的html代码:然后另存为weiboshow.html放在本地,最后修改代码中光标处的https为http,接着使用Chrome浏览器打开本地的weiboshow.html,此时在左下角的框框中已出现uid和verifier。事实上不保存为本地的html文件也行,在第2张图对应的html代码中分别搜索"$uid", “$CONFIG.$checkKey”,取出=右边的值,即可知uid=‘2606405674’和verifier=‘d5cf5ffc’。2.对于第2个问题,为使得微博秀既能在http 和https形式(分别对应于https://www.cnblogs.com/enjoy233 和 http://www.cnblogs.com/enjoy2…,方法也很简单。将从网页左下角复制到的代码中的src=“http://” 改为src="//" 即可。3.解决问题3目前已知如下3种方法(以上述截图上微博的uid=2606405674&verifier=d5cf5ffc为例):a.复制左下角的代码,在其基础上 将iframe改为embed,删除 frameborder=“0”,贴进公告即可,相应代码为:<embed width=“100%” height=“550” class=“share_self” scrolling=“no” src="//widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2606405674&verifier=d5cf5ffc&dpc=1"></embed>b.使用html5的另一个标签object.<object data="//widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=1763628267&verifier=a1171a80&dpc=1" width=“100%” height=“550” type=“text/html”> Embedded data failed to be displayed.</object>目前本人博客正是使用这种方法,在移动端也能正常显示c.使用JavaScript去动态拼接iframe,相应代码为:<div id=“weiboshow”><script type=“text/javascript”>var weibocode = ‘<if’weibocode += ‘rame width=“100%” height=“550” class=“share_self” frameborder=“0” scrolling=“no” src="//widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2606405674&verifier=d5cf5ffc&dpc=1"></iframe>’;document.getElementById(‘weiboshow’).innerHTML = weibocode;</script></div>将其贴进公告即可。d.将微博v5的版本应用到微博秀上,直接使用微博官方提供的wb.js来解决,该方法微博v5的组件接口中"赞同"就是类似的(参看网页 https://open.weibo.com/widget… 末尾)。<html xmlns:wb="//open.weibo.com/wb"><script src="//tjs.sjs.sinajs.cn/open/api/js/wb.js" type=“text/javascript” charset=“utf-8”></script><wb:show uid=“2606405674” width=“850” verifier=“d5cf5ffc”></wb:show>最后一步还是将其贴进公告。亲测可知,后面这种官方推荐的方法在移动端也能正常显示,但iframe有些浏览器(比如: iPhone自带的Safari就不显示)不支持。ps: 点赞按钮的相应代码为:<html xmlns:wb="//open.weibo.com/wb"><script src="//tjs.sjs.sinajs.cn/open/api/js/wb.js" type=“text/javascript” charset=“utf-8”></script><div> <wb:follow-button uid=“1763628267” type=“red_3” width=“100%” height=“90”></wb:follow-button></div>对于上述几种方法,读者只需将uid=2606405674&verifier=d5cf5ffc换为自己微博的相应值即可。如果偶尔出现如下问题,是正常的,刷新一下就可以解决,原因是微博官方的API有时会出故障。好啦,此时所以的问题都解决了,希望对君有用。至于豆瓣秀就很简单了,打开豆瓣收藏秀 https://www.douban.com/servic…,将相应的js贴到公告中即可(同样需要src=“http://” 改为src="//")。关于微博API,今天还学到一招 - 微博未登陆时重定向提醒用户登录:https://passport.weibo.cn/sig…手机版passport.weibo.cn与PC版passport.weibo.com共用cookie喔原创不易,记得支持一下喔~<br/>本文首发于本人博客园博客:https://www.cnblogs.com/enjoy….

February 13, 2019 · 1 min · jiezi

前端小白也能快速学会的博客园博客美化全攻略

前端小白也能快速学会的博客园博客美化全攻略<font size=6>A呦V,博客园er的自我修养是什么?第一条,别只顾收藏和偷师呀,记得点"推荐"或关注本人喔~ </font>美化方法论简介一般而言,需要选一个默认的skin,然后在该基础上调整。官方介绍:博客皮肤模板 http://skintemplate.cnblogs.com/官方文档 - 【博客园skin开发文档 】:https://docs.qq.com/sheet/DZF…宽屏模版:SimpleMemoryMinyx2_LitelessIsMoreBlueSky博客园布局的组成及其对应关系(下方一图来自于网络):准备工作首先你得有个cnblogs博客申请js权限附该美化过程的github项目:yanglr/Beautify-cnblogs: Beautify-cnblogs欢迎fork或star本博客的所有代码在此github项目的src文件夹中源码使用步骤:打开 博客后台管理 → “设置”在博客皮肤选项卡中将博客皮肤设置为: LessIsMore将src文件夹下的页面定制.css 复制到 页面定制CSS代码 代码框内将同一文件夹下的 页首.html 复制到 页首Html代码 代码框内将同一文件夹下的 页尾.html 复制到 页脚Html代码 代码框内保存,即可见效。js权限申请登陆后依次点击“我的博客” → “管理” → “设置”,在下拉后找到“博客侧边栏公告”,后方有一个“申请js权限”。或者也可进博客园园子页面(https://home.cnblogs.com/feed…),发状态@博客园团队,申请开通js权限。也可发个邮件到contact@cnblogs.com申请js权限。申请时内容模板已为你备好:尊敬的博客园管理员:本人请求申请开通js权限,希望能够把博客修饰的漂亮点,点缀自定义js插件效果,希望管理员可以批准,多谢提交完申请,会弹出提示:JS权限申请已提交,待审核。剩下的就是耐心等待了,一般来说挺快就会通过。如果设置页面上公告栏标题右侧不存在“申请js权限”,说明已成功开通js权限。如何模仿一个博客园的自定义风格(样式css+动态效果js)?模仿一个cnblogs的全局css,只需打开Chrome浏览器,按下F12,找里面的skin css和custom css,例如:<link id=“MainCss” type=“text/css” rel=“stylesheet” href="/skins/LessIsMore/bundle-LessIsMore.css?…"><link type=“text/css” rel=“stylesheet” href="/blog/customcss/198996.css?v=…">补充完整前缀:http://www.cnblogs.com,使用ref将该两个css引用到自己的博客中,即可进行大概样子的模仿,其他部分需要细调。markdown样式自定义默认markdown状态下,代码中的字比较小。/* 文章标题样式(这个不是markdown里的标题) /#topics .postTitle a { / color: #169fe6; / font-family: Georgia,Times New Roman,Times,sans-serif, monospace; font-weight: bold;} / 普通文字样式 /#cnblogs_post_body p { margin: 18px auto; color: #000; font-family: Georgia,Times New Roman,Times,sans-serif, monospace; font-size: 16px; text-indent: 0;} / 标题样式 /#cnblogs_post_body h1 { font-family: Georgia,Times New Roman,Times,sans-serif, monospace; font-size: 32px; font-weight: bold; line-height: 1.5; margin: 10px 0;}#cnblogs_post_body h2 { font-family: Consolas, “Microsoft YaHei”, monospace; font-size: 26px; font-weight: bold; line-height: 1.5; margin: 20px 0;}#cnblogs_post_body h3 { font-family: Georgia,Times New Roman,Times,sans-serif, monospace; font-size: 20px; font-weight: bold; line-height: 1.5; margin: 10px 0;}#cnblogs_post_body h4 { font-family: Georgia,Times New Roman,Times,sans-serif, monospace; font-size: 18px; font-weight: bold; margin: 10px 0;}/ 标题样式设置结束 / / 去除双下划线斜体样式 /em { font-style: normal; color: #000;} / 无序列表 /#cnblogs_post_body ul li { font-family: Georgia,Times New Roman,Times,sans-serif, monospace; color: #000; font-size: 16px; list-style-type: disc;} / 有序列表 /#cnblogs_post_body ol li { font-family: Georgia,Times New Roman,Times,sans-serif, monospace; color: #000; font-size: 16px; list-style-type: decimal;} / 超链接 /#cnblogs_post_body a:link { text-decoration: none; color: #002C99;} / 引用背景 /#topics .postBody blockquote { background: #fff3d4; border: none; border-left: 5px solid #f6b73c; margin: 0; padding-left: 10px;} / 单行代码 /.cnblogs-markdown code { font-family: Consolas, “Microsoft YaHei”, monospace !important; font-size: 16px !important; line-height: 20px; background-color: #f5f5f5 !important; border: 1px solid #ccc !important; padding: 0 5px !important; border-radius: 3px !important; line-height: 1.8; margin: 1px 5px; vertical-align: middle; display: inline-block;} / 多行代码, 引用 */.cnblogs-markdown .hljs { font-family: Consolas, “Microsoft YaHei”, monospace !important; font-size: 16px !important; line-height: 1.5 !important; padding: 5px !important;}如果希望使用Sublime那样的主题,可参考:如何自定义博客园代码高亮主题,同时分享自己使用的黑色主题 - 我是小茗同学 - 博客园 .在页面顶部添加"自定义搜索"功能css部分:<style type=“text/css”> #auto_div { display: none; width: 257px; border: 1px #74c0f9 solid; background: #FFF; position: absolute; top: 24px; left: 0; margin-top: 15px; color: #323232; /设置显示在当前页面的上一层/ z-index: 1; } .side_search { float: left; position: relative; height: 31px; margin-left: 25px; display: inline-block; } .side_search:hover { -webkit-box-shadow: 0 0 3px #999; -moz-box-shadow: 0 0 3px #999 } .search_input { width: 210px; vertical-align: middle; height: 30px; line-height: 30px; border: 1px solid #999; border-radius: 2px 0 0 2px; padding: 4px 7px; background-color: #fbfbfb; } .delete_btn { background: #fbfbfb; margin-left: -6px; border: 1px solid #fbfbfb; border-radius: 0 3px 3px 0; cursor: pointer; display: inline-block; vertical-align: middle; color: red; font-weight: bold; width: 38px; font-size: 25px; height: 38px; padding-bottom: inherit; } .search_btn { border-radius: 3px 3px 3px 3px; background: #4d90fe; margin-left: -7px; border: 1px solid #4d90fe; cursor: pointer; display: inline-block; vertical-align: middle; color: #f3f7fc; font-weight: bold; width: 100px; font-size: 18px; height: 41px; } .search_btn:hover { background: #1874CD } .search_btn2 { border-radius: 3px 3px 3px 3px; background: #F0CB85; border: 1px solid #F0CB85; cursor: pointer; display: inline-block; vertical-align: middle; color: #DC143C; font-weight: bold; width: 100px; font-size: 18px; height: 41px; } .search_btn2:hover { background: #DEB887 } input, button, textarea, select, optgroup, option { font-family: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; }</style>js部分:<script src=“https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js" type=“text/javascript”></script><script type=“text/javascript”> var availableTags = [ “C#”, “C++”, “算法”, “ASP”, “MySQL”, “Oracle”, “HTML”, “CSS”, “JavaScript”, “jQuery”, “AJAX”, “微软系列技术”, “Sublime”, “Git”, “Visual Studio Code”, “Eclipse”, “C#开发”, “C++开发”, “Java开发”, “PHP开发”, “Python开发”, “Web前端开发”, “Windows Forms”, “WPF”, “计算机数学”, “浏览器插件”, “软件推荐”, “算法实践”, “专业学习”, “Leetcode”, “知乎”, “Bravo Yeung”, “legege007”, “enjoy233”, “数学”, “内容太长,显示其中的一部分” ]; var old_value = “”; var highlightindex = -1; //高亮 //自动完成 function AutoComplete(auto, search, mylist) { if ($(”#" + search).val() != old_value || old_value == “”) { var autoNode = $("#" + auto); //缓存对象(弹出框) var carlist = new Array(); var n = 0; old_value = $("#" + search).val(); for (i in mylist) { if (mylist[i].indexOf(old_value) >= 0) { carlist[n++] = mylist[i]; } } if (carlist.length == 0) { autoNode.hide(); return; } autoNode.empty(); //清空上次的记录 for (i in carlist) { var wordNode = carlist[i]; //弹出框里的每一条内容 var newDivNode = $("<div>").attr(“id”, i); //设置每个节点的id值 newDivNode.attr(“style”, “font:14px/25px arial;height:25px;padding:0 8px;cursor: pointer;”); newDivNode.html(wordNode).appendTo(autoNode); //追加到弹出框 //鼠标移入高亮,移开不高亮 newDivNode.mouseover(function () { if (highlightindex != -1) { //原来高亮的节点要取消高亮(是-1就不需要了) autoNode.children(“div”).eq(highlightindex).css(“background-color”, “white”); } //记录新的高亮节点索引 highlightindex = $(this).attr(“id”); $(this).css(“background-color”, “#ebebeb”); }); newDivNode.mouseout(function () { $(this).css(“background-color”, “white”); }); //鼠标点击文字上屏 newDivNode.click(function () { //取出高亮节点的文本内容 var comText = autoNode.hide().children(“div”).eq(highlightindex).text(); highlightindex = -1; //文本框中的内容变成高亮节点的内容 $("#" + search).val(comText); }) if (carlist.length > 0) { //如果返回值有内容就显示出来 autoNode.show(); } else { //服务器端无内容返回 那么隐藏弹出框 autoNode.hide(); //弹出框隐藏的同时,高亮节点索引值也变成-1 highlightindex = -1; } } } //点击页面隐藏自动补全提示框 document.onclick = function (e) { var e = e ? e : window.event; var tar = e.srcElement || e.target; if (tar.id != search) { if ($("#" + auto).is(":visible")) { $("#" + auto).css(“display”, “none”) } } } } $(function () { old_value = $("#zzk_q").val(); $("#zzk_q").keyup(function () { AutoComplete(“auto_div”, “zzk_q”, availableTags); }); }); function quickdelete() { document.getElementById(“zzk_q”).value = “”; } function zzk_go() { var n = encodeURIComponent(document.getElementById(“zzk_q”).value); window.location = “http://zzk.cnblogs.com/s?w=blog%3AEnjoy233+" + n + “&t=” } function zzk_go2() { var n = encodeURIComponent(document.getElementById(“zzk_q”).value); window.location = “http://zzk.cnblogs.com/s?w=" + n } function zzk_go_enter(n) { if (n.keyCode == 13) return zzk_go(), !1 }</script>如果需要修改自动完成的下拉选项,修改变量availableTags的值即可见效。html部分:<h1 style=“margin-left: 570px;padding-top:15px;padding-bottom: 15px; color: #337ab7;font-size: 3em;font-weight: bold;font-style: italic;text-shadow: 1px 0px 0px #1E90FF;"> </h1><div class=“side_search”> <input type=“text” id=“zzk_q” class=“search_input” onkeydown=“return zzk_go_enter(event);” placeholder=“输入 回车搜索” tabindex=“1” autofocus x-webkit-speech> <div id=“auto_div”> </div>&nbsp; <input onclick=“quickdelete()” type=“button” class=“delete_btn” value="×” title=“清空”> <input onclick=“zzk_go()” type=“button” class=“search_btn” value=“本博搜索”> <input onclick=“zzk_go2()” type=“button” class=“search_btn2” value=“园内搜索”></div>效果图:在页面顶部添加"音乐播放器”(Flash)播放背景音乐先登录网易云音乐网页版,搜索到想要的音乐,然后点击"生成外链播放器"即可得到相应的html代码。表现形式一:单曲播放 (type = 1)<embed src=“http://music.163.com/outchain/player?type=0&amp;id=26237342&amp;auto=0&amp;height=430" width=“100%” height=“450” frameborder=“no” marginwidth=“0” marginheight=“0”></embed> 或<embed src=“https://music.163.com/style/swf/widget.swf?sid=26237342&type=2&auto=0&width=320&height=66" width=“340” height=“86” allowNetworking=“all” ></embed>参数说明:播放器可修改参数:width=100% #自适应宽度, 本博客使用了固定宽度320height=66 #根据自己需要来改sid=26237342 # 此数字是歌曲的ID http://music.163.com/#/song?i...auto=0 # 0表示不自动播放,1表示自动播放表现形式二:列表播放 (type = 0)<embed src=“https://music.163.com/outchain/player?type=0&amp;id=78413764&amp;auto=0&amp;height=430" width=“100%” height=“450” frameborder=“no” marginwidth=“0” marginheight=“0”></embed> 当然该url中的https:也可删掉。参数说明播放器可修改参数:width=100% # 自适应宽度height=450 # 根据自己的需要修改id=34238509 # 此数字是歌曲列表页的ID, 例如:http://music.163.com/#/playli…auto=0 # 0表示不自动播放,1表示自动播放将该代码贴进页首html即可见效(如果代码中含有iframe,需替换成embed)<div style=“display: table; text-align: center; width: 40%; height: 100%;"><embed src=“https://music.163.com/style/swf/widget.swf?sid=26237342&type=2&auto=0&width=320&height=66" width=“340” height=“86” allowNetworking=“all” ></embed></div>效果图: 在页面顶部添加"Fork me on Github"图标页首html需要添加<div><a href=“http://github.com/yanglr" target="_blank” style=“position: absolute;right: 0; top: 0; z-index: 100;"> <img src=“http://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_git-right-link.gif" alt=“Fork me on github”></a></div>效果见本页面右上角。如果想对该图标进行更多颜色或位置的设置,请参考:GitHub Ribbons - The GitHub Blog.为导航栏设置渐变背景色/* 头部 /#header { position: relative; height: 280px; margin: 0; background: #020031; background: -moz-linear-gradient(45deg,#020031 0,#6d3353 100%); background: -webkit-gradient(linear,left bottom,right top,color-stop(0%,#020031),color-stop(100%,#6d3353)); background: -webkit-linear-gradient(45deg,#020031 0,#6d3353 100%); background: -o-linear-gradient(45deg,#020031 0,#6d3353 100%); background: -ms-linear-gradient(45deg,#020031 0,#6d3353 100%); background: linear-gradient(45deg,#020031 0,#6d3353 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=’#020031’, endColorstr=’#6d3353’, GradientType=1); -webkit-box-shadow: inset 0 3px 7px rgba(0,0,0,.2),inset 0 -3px 7px rgba(0,0,0,.2); -moz-box-shadow: inset 0 3px 7px rgba(0,0,0,.2),inset 0 -3px 7px rgba(0,0,0,.2); box-shadow: inset 0 3px 7px rgba(0,0,0,.2),inset 0 -3px 7px rgba(0,0,0,.2);}在公告栏添加滚动文字使用marquee标签即能实现文字的滚动<marquee><a href=”#"><font color=“blue” size=“4”>You will make it!</marquee>效果图:在公告栏加入自己的社交网络账号 - 图片链接可以将自己不同社交网络的账号放在同一个span中,然后嵌入到div里,代码如下: <div nowrap align=center> <img src=“http://images.cnblogs.com/cnblogs_com/enjoy233/1389971/o_gzh.png" width=150 height=150> </div><br><div align=“center”> <a href=“http://stackoverflow.com/users/6075331/bravo-young" target="_blank” class=“mr5 “><strong>StackOverflow</strong></a><font style=“color:#BF7158”>(</font> <img src=“http://images.cnblogs.com/cnblogs_com/enjoy233/1389971/o_reputation-rp.png" class=“mr5”> <span style=“color:#BF7158” class=“mr10”>406 <font size=4 color=black>⬆</font>)</span></div><br><div class=“c-social” align=“center”><span> <a href=“https://github.com/yanglr" target="_blank”> <img src=“https://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_github.png" class=“mr5” width = 40 height=40> </a> <a href=“http://blog.csdn.net/lzuacm" target="_blank”> <img src=“http://images.cnblogs.com/cnblogs_com/enjoy233/1389971/o_csdn.png" class=“mr5” width = 40 height=40> </a> <a href=“https://www.zhihu.com/people/legege007" target="_blank”> <img src=“https://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_zhihu.png" class=“mr5” width = 40 height=40> </a> <a href=“http://weibo.com/546671991" target="_blank”> <img src=“https://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_weibo.png" class=“mr5” width = 40 height=40> </a></span>效果图:对于知乎,可以这样写更详细些:<div valign=“middle” align=“left” bgcolor=’#F6F8FA’> <span> <a href=“https://www.zhihu.com/people/legege007" title=“知乎撩我” target="_blank”> <img src=“http://images.cnblogs.com/cnblogs_com/enjoy233/1389971/o_zhihu-dog.jpg" height=‘22’> </a> </span> <span valign=‘middle’> <font>(</font> <img src=“https://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_vote.png" width=‘14’ height=‘14’ title=“赞同”> 42.8k <font color=black></font> <img src=“https://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_fav.png" width=‘14’ height=‘14’ title=“收藏”> 90.7k <font color=black></font> <img src=“https://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_thank.png" width=‘14’ height=‘14’ title=“感谢”> 21.7k <font color=black></font>) </span></div>而对于stackoverflow,官方在StackExchange页面提供了flair,比如我的是: User Bravo Yeung - Stack Exchange ,页面中提供了可嵌入的html代码:<a href=“https://stackexchange.com/users/4637854/bravo-yeung"><img src=“https://stackexchange.com/users/flair/4637854.png" width=“208” height=“58” alt=“profile for Bravo Yeung on Stack Exchange, a network of free, community-driven Q&amp;A sites” title=“profile for Bravo Yeung on Stack Exchange, a network of free, community-driven Q&amp;A sites” /></a>将其用div包起来,放进公告.html即可见效。在公告栏添加一个能旋转的rss图标先将相应的css放入页面定制css或公告栏的css中,然后在后面使用。#feed_icon { border: #000 solid 2px; display: block; margin: 50px auto; border-radius: 50%; transition: all 2.0s;}#feed_icon:hover { transform: rotate(360deg);}然后将如下代码贴进公告中~<div id=“feed”> <a href=“https://www.cnblogs.com/enjoy233/rss" title=“订阅Feed” target="_blank”> <img id=“feed_icon” src=“https://www.cnblogs.com/images/cnblogs_com/enjoy233/1389971/o_rss.png" alt=”” style=“border: 0pt none;” width = 60 height=60> </a></div>效果图:在公共栏添加"人体时钟”(Flash)此人体时钟的原作者: 日本flash达人 Chabudai,初发表于2008年9月(2008-09-23)。只需在公告中贴入如下代码:<embed wmode=“transparent” src=“https://files.cnblogs.com/files/enjoy233/honehone_clock_tr.swf" quality=“high” bgcolor="#FDF6E3” width=“200” height=“120” name=“honehoneclock” align=“middle” allowscriptaccess=“always"type=“application/x-shockwave-flash” pluginspage=“http://www.macromedia.com/go/getflashplayer">效果图: 参考:人体造型时钟hone clock设置、博客侧栏代码 - 曹杰峰的博客ps: iOS移动端用默认浏览器打开看不到效果很正常,这个是flash做的,苹果的产品基本上都不直接支持flash了,iOS上安装一个Chrome浏览器倒是可以正常打开的~在公共栏添加"站点统计"功能打开网站:http://www.flagcounter.com/ ,无需注册,点击黄色按钮"Get Your Flag Counter”,即可生成嵌入该插件的html代码。生成的html代码如下:<div><a href=“https://info.flagcounter.com/LCgi"><img src=“https://s04.flagcounter.com/count2/LCgi/bg_FFFFFF/txt_000000/border_CCCCCC/columns_2/maxflags_10/viewers_0/labels_1/pageviews_1/flags_0/percent_0/" alt=“Flag Counter” border=“0”></a><div>最后将该代码加入到公告栏的html代码中即能生效。在公告栏中加入"自定义搜索”(PopUp弹窗)实现的基本原理:onclick = “window.open()”, target = popUpWindow此功能的特色在于用户搜索之后,搜索结果页面并不会影响到原博客页面,而是在弹出的独立窗口显示,而且很容易扩展出很多其他站点的搜索功能。在公告html中贴入如下代码:<div id=“sidebar_search_new” class=“mySearch”><h3 class=“catListTitle”>自定义搜索(PopUp窗口)</h3> <input type=“text” id=“zzk_q1” class=“input_my_zzk_new” placeholder=“Bravo Yeung”> <span> <input type=“button” class=“btn_my_zzk” value=“本博搜索” onclick=“window.open(‘https://zzk.cnblogs.com/my/s/blogpost-p?Keywords=' + document.getElementById(‘zzk_q1’).value,‘popUpWindow’,‘height=750,width=1000,left=10,top=10,scrollbars=yes,menubar=no’); return false;” />&emsp;<input type=“button” class=“btn_my_zzk” value=“站内搜索” onclick=“window.open(‘https://zzk.cnblogs.com/s/blogpost?w=' + document.getElementById(‘zzk_q1’).value,‘popUpWindow’,‘height=750,width=1000,left=10,top=10,scrollbars=yes,menubar=no’); return false;” /></div><span><span> <input type=“button” class=“btn_my_zzk” value=“知乎搜索” onclick=“window.open(‘https://www.zhihu.com/search?type=content&q=' + document.getElementById(‘zzk_q1’).value,‘popUpWindow’,‘height=750,width=1000,left=10,top=10,scrollbars=yes,menubar=no’); return false;” />&emsp;<input type=“button” class=“btn_my_zzk” value=“CSDN搜索” onclick=“window.open(‘https://so.csdn.net/so/search/s.do?t=blog&u=yanglr2010&q=' + document.getElementById(‘zzk_q1’).value,‘popUpWindow’,‘height=750,width=1000,left=10,top=10,scrollbars=yes,menubar=no’); return false;” /></div>效果图:参考:Javascript - Open a given URL in a new tab by clicking a button - Stack OverflowJavaScript Popup Windows Javascript window.open, also fullscreen and centered popup window « JavaScript DHTML Tutorials页面底部添加"回到顶部” + “收藏” + “快速评论"功能html部分:<div class=“scrollBtn” id=“scrollBtn”> <ul class=“clearfix”> <li class=“sB-home”> <a href=“http://www.cnblogs.com/enjoy233" class=“ff-t” title=“首页”></a> </li> <li class=“sB-comment”> <a href="#blog-comments-placeholder” onclick="$(’#tbCommentBody’).focus();” class=“ff-t” title=“添加评论”></a> </li> <li class=“sB-share”><a onclick=“if(cb_entryId !=undefined){AddToWz(cb_entryId)}” href=“javascript:void(0);” title=“收藏”></a></li> <li class=“sB-goTop” id=“goTop” style=“display: list-item;"> <a href="#top” title=“回顶部”></a> </li> </ul></div>效果图:“自动移动的目录"功能页脚html引入css文件nav.my.css和nav.my.js。<link href=”//blog-static.cnblogs.com/files/enjoy233/nav.my.css” rel=“stylesheet”><script type=“text/javascript” src=”//files.cnblogs.com/files/enjoy233/nav.my.js”></script>然后将下方代码贴进页脚html.JS部分:<script language=“javascript” type=“text/javascript”>//生成目录索引列表function GenerateContentList(){ var jquery_h3_list = $(’#cnblogs_post_body h4’);//如果你的章节标题不是h4,只需要将这里的h4换掉即可 if(jquery_h3_list.length>0) { var content = ‘<a name="_labelTop”></a>’; content += ‘<div id=“navCategory”>’; content += ‘<p style=“font-size:18px”><b>阅读目录</b></p>’; content += ‘<ul>’; for(var i =0;i<jquery_h3_list.length;i++) { var go_to_top = ‘<div style=“text-align: right”><a href=”#_labelTop”>回到顶部</a><a name="_label’ + i + ‘"></a></div>’; $(jquery_h3_list[i]).before(go_to_top); var li_content = ‘<li><a href=”#_label’ + i + ‘">’ + $(jquery_h3_list[i]).text() + ‘</a></li>’; content += li_content; } content += ‘</ul>’; content += ‘</div>’; if($(’#cnblogs_post_body’).length != 0 ) { $($(’#cnblogs_post_body’)[0]).prepend(content); } } }GenerateContentList();</script>效果图: 改进评论的显示样式这里我索性改成了熟悉的微信聊天的样式。纯css实现: .blog_comment_body { background: #B2E866; float: left; border-radius: 5px; position: relative; overflow: visible; margin-left: 33px; max-width: 700px; } .feedbackListSubtitle a.layer { background: #B2E866; color: #414141 !important; padding: 2px 4px; border-radius: 2px; }将上面的代码贴紧页面css文本框即可见效果。效果图:在公告栏添加"友情链接"cnblogs博客后台提供了"链接"功能,这个就是用来添加友情链接的。设置方法(见下图):编辑分类 -> 添加链接,设置好后公告栏上会显示相关内容,不过可能会有延时,需要等一会。效果图:“博客签名"功能虽然cnblogs博客后台提供了"博客签名"功能,测试发现该该方法实现的博客签名在IE中打开时不显示,只好改为用跨浏览器的JQuery来实现了。<script type=“text/javascript”>$(document).ready(function(){ $("#cnblogs_post_body”).append(’<br/><hr/><div style=“border: 2px dotted #4d90fe; padding: 2px; background-color: lightgray”> 作者:<a href=“http://www.cnblogs.com/enjoy233/" target="_blank” title=“Enjoy233的博客” style=“color: brown”>Bravo Yeung</a><br> 出处:<a href=“http://www.cnblogs.com/Enjoy233/" target="_blank” title=“http://www.cnblogs.com/Enjoy233/" style=“color: blue”>http://www.cnblogs.com/Enjoy233/</a> <br>如果您觉得阅读本文对您有帮助,请点击一下右下方的<b style=“color: blue; font-size: 16px”>推荐</b>按钮,您的<b style=“color: blue; font-size: 16px”>推荐</b>将是我写作的最大动力! <br>版权声明:本文为博主原创或转载文章,欢迎转载,<b>但转载文章之后必须在文章页面明显位置注明出处</b>,否则保留追究法律责任的权利。</div>’);});</script>禁用页面的"选中复制"功能在css中进行相应的设置,只需将下方代码贴入"页面css"文本框即可。/ 禁止页面,选中 复制 /html,body { moz-user-select: -moz-none; -moz-user-select: none; -o-user-select: none; -khtml-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none;}综合考虑后,这种处理方式并不太友好,于是采用了后文中的"复制博客内容时自动加版权说明”。不显示底部广告在css中进行相应的设置,只需将下方代码贴入"页面css"文本框即可。#ad_t2,#cnblogs_c1,#under_post_news,#cnblogs_c2,#under_post_kb { display:none; !important}修改导航栏(修改部分链接的文字 + 增加下拉菜单)css部分:/ 定制自己导航栏的样式 /#shwtop ul { margin: 0; padding: 0; list-style-type: none; /去除li前的标注/ background-color: #333; overflow: hidden; /隐藏溢出的部分,保持一行/}#shwtop li { float: left; /左浮动/}#shwtop li a, .dropbtn { display: inline-block; /设置成块/ color: white; text-align: center; text-decoration: none; padding: 14px 16px;}/鼠标移上去,改变背景颜色/#shwtop li a:hover, .dropdown:hover .dropbtn { / 当然颜色你可以自己改成自己喜欢的,我还是挺喜欢蓝色的 / background-color: blue;}#shwtop .dropdown { / display:inline-block将对象呈递为内联对象, 但是对象的内容作为块对象呈递。 旁边的内联对象会被呈递在同一行内,允许空格。 */ display: inline-block;}#shwtop .dropdown-content { display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);}#shwtop .dropdown-content a { display: block; color: black; padding: 8px 10px; text-decoration:none;}#shwtop .dropdown-content a:hover { background-color: #a1a1a1;}#shwtop .dropdown:hover .dropdown-content{ display: block;}页脚html部分:<!– 更新导航栏的菜单–><script> $(function(){ $("#navigator”).append(’<div id=“shwtop” > <ul style=“margin-left:5px;margin-right: 5px;"> <div class=“dropdown”> <a href=”#” class=“dropbtn”>后台管理</a> <div class=“dropdown-content”> <!– <a class=“menu” href=“这里是你文章或随笔分类的链接地址,自己修改下面同理”> 这里更改下拉具体内容 </a> –> <a class=“menu” href=“http://i.cnblogs.com/Configure.aspx" target="_blank”>GUI配置</a> <a class=“menu” href=“http://i.cnblogs.com/posts" target="_blank”>博文列表</a> <a class=“menu” href=“http://wz.cnblogs.com/" target="_blank”>收藏</a> <a class=“menu” href=“http://i.cnblogs.com/Files.aspx" target="_blank”>文件</a> <a class=“menu” href=“https://i.cnblogs.com/EditGalleries.aspx" target="_blank”>相册</a> </div> </div> </ul></div>’); $("#navList”).append(’<li id=“nav_home”><a id=“enjoy233” rel=“nofollow” href=“https://ing.cnblogs.com/" target="_blank” title=“进入我的闪存”>闪存</a></li>’); $("#navList”).append(’<li id=“nav_follow”><a id=“enjoy233” rel=“nofollow” href=“http://home.cnblogs.com/followees/" target="_blank” title=“进入我的关注”>我关注</a></li>’); $(’#navList’)[0].children[“nav_contact”].innerHTML=’<a id=“nav_contact” class=“menu” rel=“nofollow” href=“https://msg.cnblogs.com/send/Enjoy233">私信</a>’; $(’#navList’)[0].children[“nav_rss”].innerHTML=’<a id=“nav_rss” class=“menu” rel=“nofollow” href=“https://www.cnblogs.com/enjoy233/rss">RSS订阅</a>’; //加载图片 var ponum1 = $(".postTitle”).length; var ponum2 = $(".entrylistPosttitle”).length; if(ponum1!=0) articleimg(ponum1); if(ponum2!=0) entrylistarticleimg(ponum2); });</script>效果图:如需调整请自行修改微博秀的嵌入(支持http/https访问)参看本人的另一篇文章 当今最全面可用的微博分享组件嵌入方法(亲测2019年2月仍有效) - Enjoy233 即可。效果图(见本博客左侧公告栏):分享组件的嵌入(支持http/https访问)由于官方的 Baidu Share 的ssl证书已过期,只好找到一个替代镜像 //static.dmzj.com/baidushare/static/js/shell_v2.js,使得通过https访问或http访问本博客都可以看到左下角的分享按钮在页脚.html中加入如下代码:<!– Baidu Share BEGIN –><div id=“bdshare” class=“bdshare_t bds_tools get-codes-bdshare”> <span class=“bds_more”>分享到:</span> <a href=”#” class=“bds_tsina” data-cmd=“tsina” title=“分享到新浪微博”></a><a href=”#” class=“bds_qzone” data-cmd=“qzone” title=“分享到QQ空间”></a><a href=”#” class=“bds_sqq” data-cmd=“sqq” title=“分享到QQ好友”></a><a href=”#” class=“bds_douban” data-cmd=“douban” title=“分享到豆瓣网”></a><a href=”#" class=“bds_youdao” data-cmd=“youdao” title=“分享到有道云笔记”></a><a href="#" class=“bds_renren” data-cmd=“renren” title=“分享到人人网”></a><a href="#" class=“bds_kaixin001” data-cmd=“kaixin001” title=“分享到开心网”></a><a href="#" class=“bds_mail” data-cmd=“mail” title=“分享到邮件分享”></a></div> <script type=“text/javascript” id=“bdshare_js” data=“type=tools&amp;uid=2883522” ></script> <script type=“text/javascript” id=“bdshell_js”></script> <script type=“text/javascript”> document.getElementById(“bdshell_js”).src = “//static.dmzj.com/baidushare/static/js/shell_v2.js?cdnversion=” + Math.ceil(new Date()/3600000) </script> <!– Baidu Share END –>官方demo:分享按钮-百度分享 (获取代码 -> 按向导操作,可查看网页侧边的动态使用效果,也可看到相应代码。)效果图:打赏功能本博客基于开源插件 tctip v1.0.3 来实现在页脚.html中插入如下代码即可:<!– tctip 支付赞赏/打赏 –><script type=“text/javascript” src="//files.cnblogs.com/files/enjoy233/tctip-1.0.3.min.js"></script> <!– js文件引入 –><script> new tctip({ top: ‘20%’, button: { id: 1, type: ‘zanzhu’, }, list: [ { type: ‘alipay’, qrImg: ‘https://files.cnblogs.com/files/enjoy233/Reward_Alipay_Charge.bmp’ //替换成自己的支付宝付款码 }, { type: ‘wechat’, qrImg: ‘https://files.cnblogs.com/files/enjoy233/Reward_WX_Charge.bmp’ //替换成自己的微信付款码 } ] }).init()</script>效果图:还看到过一个不错的方法,亲测有效:自制简易打赏功能 - EritPang .复制正文文字时自动加版权确保页面能成功引入JQuery.js后在页首html中加入如下代码:<script language=“javascript” type=“text/javascript”>jQuery(document).on(‘copy’, function(e){ var selected = window.getSelection(); var copyFooter = ‘<br>———————<br>著作权归作者所有。<br>’ + ‘商业转载请联系作者获得授权,非商业转载请注明出处。<br>’ + ‘作者:Bravo Yeung<br> 源地址:’ + document.location.href + ‘<br>来源:博客园cnblogs<br>© 版权声明:本文为博主原创文章,转载请附上博文链接!’; var copyHolder = $(’<div>’, {html: selected + copyFooter, style: {position: ‘absolute’, left: ‘-99999px’}}); $(‘body’).append(copyHolder); selected.selectAllChildren( copyHolder[0] ); window.setTimeout(function() { copyHolder.remove(); },0);});</script>当用户复制文中内容(ctrl+C或鼠标右击复制)时,会自动加上版权文字,csdn的代码复制功能以及知乎的内容复制都有此功能。效果图:对正文中的图片设置悬停放大不少平台有个关于图片的功能:当鼠标悬停在图片上时,图片会被放大。本人直接使用css来做了这件事情读者只需将下方代码贴进页面css即可~.post img { cursor: pointer; transition: all 0.5s;}.post img:hover { transform: scale(1.3);}隐藏博文右下角的"反对"按钮只需在页面css的文本框中加入如下代码:.buryit { display: none;}.comment_bury { display: none;}效果请见页面右下角。本文首发于本人的博客园: https://www.cnblogs.com/enjoy…. ...

February 12, 2019 · 9 min · jiezi

企业互联网应用高性能解决之道

本文介绍了企业互联网开发及运维的一些实践,深入剖析了互联网项目开发及上线过程中的各种痛点及解决之道。一个互联网项目的上线并不是那么容易,需要经过很多的环节:从服务器的准备开始,紧接着是业务系统的搭建,搭建的过程中涉及到操作系统、依赖中间件、应用部署、配置修改等众多事情;搭建完毕后,进行业务的线上验证及各种场景的演练,并进行高并发的压力模拟测试,找出性能瓶颈,并不断进行问题修正、架构调整;最后进行灾备的演练,整理好自动化脚本,然后挑选灾备环境的某一组进行上线试运行,迎接上线运行真实用户压力的考验。回想每次新项目上线的过程,每次都是一次痛苦的折磨。花费这么长时间,根源究竟是什么?答案就是这里面太多的环节都是依赖人工去处理。那么我们该如何缩短交付周期呢?回到大家手上的互联网项目,当项目上线后,是不是就万事大吉了呢?庆功后,更多的事情才慢慢到来,随着业务的开展,用户量渐渐增加,高并发的场景也开始凸显。由于只是关注了业务系统本身的上线,与之相关的外围支撑系统并没有建设,这种状况下,根本无法了解系统的内部运行状况。当前到底有多少用户在访问系统、每台服务器正承受多大的压力、当前的业务量到底是多少?我们可以思考下,淘宝做双11活动的时候,交易量是如何统计的?京东做618活动,实时流量又是如何统计的?我们应该建设哪些外围支撑,才能做到系统不是黑盒?当线上业务系统出错的时候,是不是经常遇到无从下手的情况?这是因为随着业务规模的不断扩大,线上系统变的错综复杂,就像图中的电线一样,稍有不慎,就会起火!可能是网络问题、环境问题、代码问题、第三方API的问题等等,想要定位问题需要各种不同的技术栈,调用链路的追踪,没有科学的依据,几乎不可能。当线上出现的问题排解的差不多了,业务也稳定了,新的问题又来了。用户的活跃带来了流量的井喷式暴增,稍有不慎就会导致系统崩塌。这个时候,需要进行及时的扩容,拯救系统。但往往事与愿违,机器准备不到位、环境部署不够快、业务扩容不及时,导致扩容的成本居高不下。或者采取了自认为“明智”的讨巧做法,借用其他业务线的机器进行了扩容,但是你的业务系统跟兄弟系统环境是不一致的。新业务的侵入,导致了其他业务线环境的改变,反而造成了别的业务线瘫痪,真是城门失火、殃及池鱼。我们急需一致化的环境进行扩容,Docker是我们的救兵。面对如此多的问题,可以想象团队的状况会是怎样的?团队整天忙于救火,压力非常大。很多时候为了救火而救火,拆了东墙补西墙,代码更是纯粹为了解决问题而堆上去的,代码管理混乱,技术积累缺乏……在这种技术积累的情况下,老板又要开启一条新业务线。由于没有统一的项目模板,导致每次项目启动都是底层代码都要重写一遍。模块封装不够,导致本可以公用的模块,每个团队都要重新封装一次,研发资源的重复投入,使得研发成本居高不下。为了使一切更规范起来,我们需要一个稳定的底层支撑平台,保证业务的快速发展。做到快速开发新提出的需求,不断的迭代小版本,开发的过程中有一些通用的模板和经过验证的技术组件直接套用。开发完成后,能够快速部署上线,小版本持续集成。上线以后服务不要挂掉,出现问题能够快速定位。流量暴增的时候,能够及时感知,并实现快速扩容。服务状态可以不断检测,挂掉的时候,最好能够自动重启……我们再来看使用平台的价值和收益,首先持续集成的过程更加顺畅,其次平台的自动化将使运维人员的成本降低,再次基于DevOps的理念,将使得开发和运维在日常工作中高度协同,自动化的流程,让一切变得规范,新版本的迭代更快更强,线上运行的更加稳定可靠。iuap平台支持DevOps全生命周期管理,并提供了对应工具支撑。提供了DevOps的最佳实践和工具使用说明,提供组件库对研发成果进行管理。保证编码、构建、测试、预发布、部署、监控等各个环节的持续进行。对于快速开发,提供了一系列的开发工具、框架与组件、后端示例代码、前端模板等。并通过官网文档,进行知识的传递和反馈交流,社区化的响应开发者的各种难题。想要解决系统黑盒的问题,我们通过收集浏览器端用户点击情况和收集Nginx日志的方式,以索引库的方式进行性能数据存储,最终对大数据进行分析,展示相应的业务报表,可视化的查看系统的各项运行指标。线上出错,我们通过收集服务器端应用性能数据的方式,实时展示应用的调用拓扑图,并根据出现异常的请求,进行下钻,定位出具体出现问题的代码。Docker的镜像一致性,将业务运行所需的操作系统、依赖环境、业务war包等都统一封装到了一起,应用部署的时候,直接拉取镜像即可。业务规模小的时候,只需启动少量容器,业务规模上来后,可以执行扩容操作,再次拉取镜像,以Docker的形态启动更多的应用容器实例。从此不再担心大流量来袭时的束手无措。

January 7, 2019 · 1 min · jiezi

阿里CEO逍遥子:学会“用人做事”,而不是“做事用人”

你们知道的,双11之后,我们做了一件晴天修屋顶的事儿,就是进行组织架构的调整——阿里云升级为阿里云智能;天猫升级为“大天猫”,形成天猫事业群、天猫超市事业群、天猫进出口事业部三大板块;加强技术、智能互联网的投入和建设。几天前,CEO逍遥子(张勇)在阿里的内网里,分享了自己在阿里青训营上,对组织架构升级的思考。今天橙子把内网上的逍遥子内部分享给你们搬过来啦!全都是干货哦~敲黑板,划重点◌ 学习“用人做事”,而不仅仅是“做事用人”;◌ 要善于从后排把人往前拔,Leader要有不拘一格降人才的心态;◌ 打仗不是协同,打仗是统一指挥;◌ 战略重要性业务,必须“升格建制”;◌ 真正完成创造性的工作,仅靠数字化的KPI肯定不行;◌“组织、人才”是业务一号位的首要工作,而不是HR;◌ 任何商业设计模式创新必须进行自上而下的组织设计;◌ 逍遥子每年问自己两个问题:第一,为集团找了哪几个人,关键是“找”,不是“招”;第二,为集团开辟了哪几个新赛道。↓ 以下是逍遥子分享的全文:“组织”一定是业务一把手的首要工作,而不是HR作为领导者,非常重要的一件事是排兵布阵。所谓“排兵布阵”在今天的具体场景里,就是怎么设计组织架构。组织设计不是HR的工作,而是业务一号位的首要工作。HR一号位配合业务一号位来完成组织设计和落地的执行。怎么样进行组织的设计、拆分、合并、目标设计,包括什么样的人在里面担任某个团队的Leader,充满了无穷的奥妙。如何“用人做事”,而不是“做事用人”2012年双11前夜,马老师送给我八个字。当时我们在万塘路口,华星时代广场上面,天猫大本营当时在那边,他说逍遥子,你现在是“做事用人”,但你要走向“用人做事”。“做事用人”就是你把事情怎么做想得清清楚楚,但越往后走,团队越来越大,组织越来越复杂,你要考虑整个组织每个板块结构怎么设计。什么叫从“做事用人”到“用人做事”?做事用人是事情已经想清楚了,找一个合适的人来干。相信很多人还在这个阶段。越往后走,会接触到“用人做事”,这事儿怎么干你也没搞清楚,你根本不是这方面的专家,但要找到最有可能把这个事情想清楚和做出来的人,让他来带一个合适的组织。我自己这几年的体会,用人做事和做事用人,跟组织设计是两件事,但高度相关。这两件事情都非常值得大家去体会。做事用人的核心,你把组织都想好,从上到下清清楚楚,你就可以排兵布阵,把人放到合适的位置上,按照既定策略做。另一种是事情没完全想清楚,但是你找到一个人,他能想清楚,或者他能把下面条分缕析地安排好,来设计组织,这就是用人做事。用人做事和做事用人,跟整个组织今天的状态、人的状态都有密切的关系。有时候过早地从做事用人到用人做事,是拔苗助长,因为经常你想不清楚的,你别指望另一个人能想清楚。在很多领域,人不可能是万宝书,人一定是在一方面有经验,另一方面经验相对缺乏,需要更有经验的人来做这个事情。组织调整不只是集团层面的调整,也不只是大的BG层面的调整,每个人都在运营一个组织,不同只是这个组织到底是由两万人组成、2000个人、200个人、还是20人组成。大家都面临排兵布阵的问题。仗怎么打,怎么样运筹帷幄、决胜千里,不仅要用策略,还要有排兵布阵,而排兵布阵就是从一个主管走向一个Leader最重要的变化。这个过程中非常重要的是,无论用人做事、做事用人,最终人从哪儿来。人分两种,一种是他本身执行力非常强,你只要给他清晰的策略,你非常自信这个策略会work,而且这个人适合做这个事情,这就是“做事用人”。另一种是,你相信他的策略,相信他的排兵布阵能力,你把这件事交给他展开,这个就是用人做事。但非常重要的是,大家一想,这对人的要求太高了,我找“做事用人”的人还容易找,我找“用人做事”的人,我哪儿去找。这就涉及到下面要讲的,如果这样,永远没有现成的人。领导者要善于“从后排把人往前拔”十年前,我从来不会想象我今天会跟大家讲这些,为什么?你经历了,从实战中学习,慢慢就有心得,就形成了自己的管理体系和方法论。只要每个人有学习能力,有悟性,愿意思考,都有可能。领导者有一些基因是天生的,但是大量训练是可以后天培养的,不然我也不可能从一个会计做成一个CEO。这个时候一定要考虑的就是,我们怎么样善于从后排把人往前拔。很容易发生的情况是,团队下面五个人,每个人干一件事情,干得很好,五年以后、三年以后、两年以后,这五个哥们还在干同样的事情。我把这个问题抛给大家,大家既是这个问题的对象,又是需要去思考这个问题的人。晋升、绩效体系、Review这些问题,从M3升到M4、M4升到M5、M5升到M6,他除了升了一级,干的事情、职责有没有不一样,我们有没有诚心栽培一个人。讲这句话,对一部分人有点早,对一部分人已经合适,但在我脑子里,没有合适不合适,今天所有人既是被栽培的对象,同时要想怎么栽培别人。你能培养出七段棋手,你就可以成为八段,你就有可能成为九段,不然业余初段一堆,但怎么样从业余初段长到业余四段,变成专业六段,靠的是实战。没有人天生是专业高段位选手。在这之中,第一,每个人要去想,我在每个调整当中,要达到的战略目标是什么。所有调整都是伴随战略目标设计来进行的。调整一定有目的。没有目的,就不需要做战略调整,没有战略目的,就不需要做组织调整。第二,组织跟人挂钩,人和事挂钩,到底“做事用人”还是“用人做事”。第三,人从哪儿来。这三个问题,你们都可以在这次调整当中找到各自的答案。为什么调整,每一块到底是用人做事还是做事用人,人从哪儿来。人不够,必须后排拔上来,不然永远只有这几个哥们在第一排站着,大家觉得很无趣,只能到墙外创业去了。这帮人在岗位上没干多久,也不算很老,但也不小了,上面还有五级,什么时候是个头。有不拘一格降人才的思考今天大家是“用人”当中的人。我们需要尽可能让新一代同事、年轻的同事、有潜力的同事,去承担更大职责,这时候需要一点“不拘一格降人才”的思考。但是这个思考只在集团顶部做是不够的。今天大家也要开始思考,你怎么去培养你下面的同事,如果你是M4,你怎么样让M3长起来,你多几个M3,多几个M4。一个M4能够管住四个M4,你不到M5才怪呢。当然这很难,比较接地气的说法,只要这个老板是M4,其他M4都不愿意来了,为什么?老板是M4,我没机会升了。但你能让别人来,还能让四个M4听你干,变成一个高效率的团队,说明你不是M4了,起码M5了。这次组织架构调整要点第一,打仗不是协同,打仗是统一指挥。今天只要我们面对一个突破性、开创性的业务,必须用统一指挥的思考,而不是用组织协同的方式来进行团队设计和生产关系设计。我们要避免用职能部门的协同,来完成开创性业务的进展,这是不可能的。什么叫做职能部门的协同?这个哥们管支付、那个哥们管物流、这个哥们管营销、这个哥们管运营,大家各自一个团队,你说你们协同吧,一起打一场仗,没有人当头,肯定不行。在几个必须突破性进行模式创新的业务当中,必须进行从商业到供应链,到物流的完整闭环设计,只有这样才能打穿,也只有这样打穿,才有机会去沉淀具体场景的平台。平台肯定不是从天上掉下来的,第一天想做平台的,没有一个做成的。平台都是不知不觉中了头彩,做了一个平台。如果我们今天“言必称平台”,基本上做不成,为什么?你沉淀的核心能力是什么,这非常重要。第二,作为战略重要性业务,必须“升格建制”。对于一些相对年轻的Leader来讲,因为这个领域的重要性,我们必须升格建制。说白了,师长找旅长,他最多想师长的事情,尽管还是一个师长,但是搞成军级单位,他的想法立马不一样了,他就变成军长思考了。任何商业设计模式创新,必须进行自上而下的组织设计今天只有在相对纯粹的用户领域的产品,有可能完成自下而上的突破。但在任何商业设计的模式创新上面,在0到0.5,0到1的基础上,完成最后1到100,必须进行组织设计。只有在用户产品侧,存在很多可能,我们要进行自下而上的创新。但在其它领域,非常重要的一点,从0到1要进行自下而上的创新。没有0到1的创新,那就是富二代创业。历史上发生过很多这样的例子,我们有个非常前沿的想法,觉得是未来方向。但不是坚信这个方向的人去做,我们只是安排了一个团队去做,到底是他信还是那个做的团队信。今天趁这个机会希望大家提醒自己,提醒你们的团队和周围的同事,真正完成一个创造性的工作,仅靠一个数字化的KPI肯定不行。我知道大家都关心KPI,我们团队也有KPI,大家都说结果导向、KPI导向,KPI导向本身没有问题,数字本身也是无罪的。关键是我们的心态,我们到底是为了去做到一个数字,做到一个DAU,一个转化率,一个装机率,还是给我们的客户创造价值,这是每个人都要去想的。我们很容易在一个具体的事情上想目标,比如有同学会说,我今年的KPI是DAU,我的目标是GMV,我们不惜一切代价搞到这个数字。但我们忘掉了这个数字背后的本源,为什么要设这么一个东西。组织要把它串起来讲,在整个目标设计上讲。第一,要取得突破性进展,要尽量避免团队协同,把职能部门完全变成一个战斗单元的组成部分,而不是一个外来协作。第二,云的战略,必须成为整个经济走向未来数字化经济的中台。阿里巴巴的云应该成为数字经济时代的云。我们的使命,是在数字经济时代,让天下没有难做的生意。怎么真正做到这点,靠的是广义的阿里巴巴云的体系。我们的云必须从大家现在熟悉的AAS层的物理基础设施,走向更丰富的产品矩阵,走向PAAS,在某些领域走向零售云。零售云是SAAS,是SAAS到PAAS到AAS的一体化方案、一体化服务。我们完全具备这样的机会,走向物流云、金融云、营销云。但是捕捉和实现这样的机会,不能只靠今天一个云BG的团队,要把整个阿里的技术中台力量沉淀、广告业务的沉淀,阿里妈妈的沉淀,通过这个平台进行输出。今天我们只完成了这里面的一步,就是让我们原来的技术中台跟我们的云能够结合。在这当中,怎么样能够真正增加云服务附加值,增加云服务的厚度,我们必须从智能上,必须从阿里其它服务的技术产品沉淀上找到机会,这就是今天把云和原来的技术中台合一的重要原因。当然技术团队都知道,今天我们云业务的集群,从规模、供应链管理,从跟供应商的关系来讲,已经成为整个集团的主导。如果是这样,我们当然应该把业务部门、支持部门,更好地跟最大的业务场景合在一起,让他们支持好集团的其它业务,这是对于整个云的思考。在整个变化中,菜鸟不能做成天猫的物流部,关键是继前几年的电子面单、智能物流这样的产品之后,菜鸟如何真正为物流产业提升效率、降低成本、带来价值,而这个服务是由数据和技术驱动的。整个变化中,真正能够把服务应用场景做成横向的赋能平台,这是我们的基本思考。IoT对我们非常重要,今天我们花了几年开始沉淀出一些初步的智能硬件能力、供应链能力、工业设计、产品定义能力。但是我们需要不断扩大这样的能力,在IoT时代,很可能软件、硬件、操作系统是一体的。不瞒大家说,作为集团CEO,我每年问自己两个问题,第一,今年我为集团找了哪几个人,记住关键词是“找”,不是“招”。第二,今年我为集团养了哪几个新业务,或者说开辟了哪几个新赛道。也许今年还很不起眼,还没法跟阿里妈妈、淘宝比,但可以看看有没有在鸡窝里开始孵几只小鸡。我们必须为未来准备新一代的领导者,为未来准备新业务。过年是自我总结的时间。我就琢磨,去年我干了一些啥,忙忙碌碌的,又是双11。还要想想,现在集团还需要哪方面的人,还有哪些重要赛道是空的,数万亿级别的赛道还是有很多的,关键这些赛道如何能在经济体里融为一体,形成一个真正的业务矩阵,而不是几个独立的山头。本文作者:学习橙阅读原文本文来自云栖社区合作伙伴“阿里味儿”,如需转载请联系原作者。

December 29, 2018 · 1 min · jiezi

离线批量数据通道Tunnel的最佳实践及常见问题

基本介绍及应用场景Tunnel是MaxCompute提供的离线批量数据通道服务,主要提供大批量离线数据上传和下载,仅提供每次批量大于等于64MB数据的场景,小批量流式数据场景请使用DataHub实时数据通道以获得更好的性能和体验。SDK上传最佳实践import java.io.IOException;import java.util.Date;import com.aliyun.odps.Column;import com.aliyun.odps.Odps;import com.aliyun.odps.PartitionSpec;import com.aliyun.odps.TableSchema;import com.aliyun.odps.account.Account;import com.aliyun.odps.account.AliyunAccount;import com.aliyun.odps.data.Record;import com.aliyun.odps.data.RecordWriter;import com.aliyun.odps.tunnel.TableTunnel;import com.aliyun.odps.tunnel.TunnelException;import com.aliyun.odps.tunnel.TableTunnel.UploadSession;public class UploadSample { private static String accessId = “<your access id>”; private static String accessKey = “<your access Key>”; private static String odpsUrl = “http://service.odps.aliyun.com/api";private static String project = “<your project>”; private static String table = “<your table name>”; private static String partition = “<your partition spec>";public static void main(String args[]) { // 准备工作,仅需做一次 Account account = new AliyunAccount(accessId, accessKey); Odps odps = new Odps(account); odps.setEndpoint(odpsUrl); odps.setDefaultProject(project); TableTunnel tunnel = new TableTunnel(odps);try { // 确定写入分区 PartitionSpec partitionSpec = new PartitionSpec(partition); // 在服务端创建一个在本表本分区上有效期24小时的session,24小时内该session可以共计上传20000个Block数据 // 创建Session的时耗为秒级,会在服务端使用部分资源、创建临时目录等,操作较重,因此强烈建议同一个分区数据尽可能复用Session上传。 UploadSession uploadSession = tunnel.createUploadSession(project, table, partitionSpec); System.out.println(“Session Status is : " + uploadSession.getStatus().toString()); TableSchema schema = uploadSession.getSchema(); // 准备数据后打开Writer开始写入数据,准备数据后写入一个Block,每个Block仅能成功上传一次,不可重复上传,CloseWriter成功代表该Block上传完成,失败可以重新上传该Block,同一个Session下最多允许20000个BlockId,即0-19999,若超出请CommitSession并且再创建一个新Session使用,以此类推。 // 单个Block内写入数据过少会产生大量小文件 严重影响计算性能, 强烈建议每次写入64MB以上数据(100GB以内数据均可写入同一Block) // 可通过数据的平均大小与记录数量大致计算总量即 64MB < 平均记录大小记录数 < 100GB // maxBlockID服务端限制为20000,用户可以根据自己业务需求,每个Session使用一定数量的block例如100个,但是建议每个Session内使用block越多越好,因为创建Session是一个很重的操作 // 如果创建一个Session后仅仅上传少量数据,不仅会造成小文件、空目录等问题,还会严重影响上传整体性能(创建Session花费秒级,真正上传可能仅仅用了十几毫秒) int maxBlockID = 20000; for (int blockId = 0; blockId < maxBlockID; blockId++) { // 准备好至少64MB以上数据,准备完成后方可写入 // 例如:读取若干文件或者从数据库中读取数据 try { // 在该Block上创建一个Writer,writer创建后任意一段时间内,若某连续2分钟没有写入4KB以上数据,则会超时断开连接 // 因此建议在创建writer前在内存中准备可以直接进行写入的数据 RecordWriter recordWriter = uploadSession.openRecordWriter(blockId); // 将读取到的所有数据转换为Tunnel Record格式并切入 int recordNumber = 1000000; for (int index = 0; i < recordNumber; i++) { // 将第index条原始数据转化为odps record Record record = uploadSession.newRecord(); for (int i = 0; i < schema.getColumns().size(); i++) { Column column = schema.getColumn(i); switch (column.getType()) { case BIGINT: record.setBigint(i, 1L); break; case BOOLEAN: record.setBoolean(i, true); break; case DATETIME: record.setDatetime(i, new Date()); break; case DOUBLE: record.setDouble(i, 0.0); break; case STRING: record.setString(i, “sample”); break; default: throw new RuntimeException(“Unknown column type: " + column.getType()); } } // Write本条数据至服务端,每写入4KB数据会进行一次网络传输 // 若120s没有网络传输服务端将会关闭连接,届时该Writer将不可用,需要重新写入 recordWriter.write(record); } // close成功即代表该block上传成功,但是在整个Session Commit前,这些数据是在odps 临时目录中不可见的 recordWriter.close(); } catch (TunnelException e) { // 建议重试一定次数 e.printStackTrace(); System.out.println(“write failed:” + e.getMessage()); } catch (IOException e) { // 建议重试一定次数 e.printStackTrace(); System.out.println(“write failed:” + e.getMessage()); } } // 提交所有Block,uploadSession.getBlockList()可以自行指定需要提交的Block,Commit成功后数据才会正式写入Odps分区,Commit失败建议重试10次 for (int retry = 0; retry < 10; ++retry) { try { // 秒级操作,正式提交数据 uploadSession.commit(uploadSession.getBlockList()); break; } catch (TunnelException e) { System.out.println(“uploadSession commit failed:” + e.getMessage()); } catch (IOException e) { System.out.println(“uploadSession commit failed:” + e.getMessage()); } } System.out.println(“upload success!”);} catch (TunnelException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();} }}构造器举例说明:PartitionSpec(String spec):通过字符串构造此类对象。参数:spec: 分区定义字符串,比如: pt=‘1’,ds=‘2’。因此程序中应该这样配置:private static String partition = “pt=‘XXX’,ds=‘XXX’";常见问题MaxCompute Tunnel是什么?Tunnel是MaxCompute的数据通道,用户可以通过Tunnel向MaxCompute中上传或者下载数据。目前Tunnel仅支持表(不包括视图View)数据的上传下载。BlockId是否可以重复?同一个UploadSession里的blockId不能重复。也就是说,对于同一个UploadSession,用一个blockId打开RecordWriter,写入一批数据后,调用close,然后再commit完成后,写入成功后不可以重新再用该blockId打开另一个RecordWriter写入数据。 Block默认最多20000个,即0-19999。Block大小是否存在限制?一个block大小上限 100GB,强烈建议大于64M的数据,每一个Block对应一个文件,小于64MB的文件统称为小文件,小文件过多将会影响使用性能。使用新版BufferedWriter可以更简单的进行上传功能避免小文件等问题 Tunnel-SDK-BufferedWriterSession是否可以共享使用,存在生命周期吗?每个Session在服务端的生命周期为24小时,创建后24小时内均可使用,也可以跨进程/线程共享使用,但是必须保证同一个BlockId没有重复使用,分布式上传可以按照如下步骤:创建Session->数据量估算->分配Block(例如线程1使用0-100,线程2使用100-200)->准备数据->上传数据->Commit所有写入成功的Block。Session创建后不使用是否对系统有消耗?每个Session在创建时会生成两个文件目录,如果大量创建而不使用,会导致临时目录增多,大量堆积时可能造成系统负担,请一定避免此类行为,尽量共享利用session。遇到Write/Read超时或IOException怎么处理?上传数据时,Writer每写入8KB数据会触发一次网络动作,如果120秒内没有网络动作,服务端将主动关闭连接,届时Writer将不可用,请重新打开一个新的Writer写入。建议使用 [Tunnel-SDK-BufferedWriter]接口上传数据,该接口对用户屏蔽了blockId的细节,并且内部带有数据缓存区,会自动进行失败重试。下载数据时,Reader也有类似机制,若长时间没有网络IO会被断开连接,建议Read过程连续进行中间不穿插其他系统的接口。MaxCompute Tunnel目前有哪些语言的SDK?MaxCompute Tunnel目前提供Java版的SDK。MaxCompute Tunnel 是否支持多个客户端同时上传同一张表?支持。MaxCompute Tunnel适合批量上传还是流式上传MaxCompute Tunnel用于批量上传,不适合流式上传,流式上传可以使用[DataHub高速流式数据通道],毫秒级延时写入。MaxCompute Tunnel上传数据时一定要先存在分区吗?是的,Tunnel不会自动创建分区。Dship 与 MaxCompute Tunnel的关系?dship是一个工具,通过MaxCompute Tunnel来上传下载。Tunnel upload数据的行为是追加还是覆盖?追加的模式。Tunnel路由功能是怎么回事?路由功能指的是Tunnel SDK通过设置MaxCompute获取Tunnel Endpoint的功能。因此,SDK可以只设置MaxCompute的endpoint来正常工作。用MaxCompute Tunnel上传数据时,一个block的数据量大小多大比较合适没有一个绝对最优的答案,要综合考虑网络情况,实时性要求,数据如何使用以及集群小文件等因素。一般,如果数量较大是持续上传的模式,可以在64M - 256M,如果是每天传一次的批量模式,可以设大一些到1G左右使用MaxCompute Tunnel 下载, 总是提示timeout一般是endpoint错误,请检查Endpoint配置,简单的判断方法是通过telnet等方法检测网络连通性。通过MaxCompute Tunnel下载,抛出You have NO privilege ‘odps:Select‘ on {acs:odps::projects/XXX/tables/XXX}. project ‘XXX‘ is protected的异常该project开启了数据保护功能,用户操作这是从一个项目的数据导向另一个项目,这需要该project的owner操作。Tunnel上传抛出异常ErrorCode=FlowExceeded, ErrorMessage=Your flow quota is exceeded.**Tunnel对请求的并发进行了控制,默认上传和下载的并发Quota为2000,任何相关的请求发出到结束过程中均会占用一个Quota单位。若出现类似错误,有如下几种建议的解决方案:1 sleep一下再重试;2 将project的tunnel并发quota调大,需要联系管理员评估流量压力;3 报告project owner调查谁占用了大量并发quota,控制一下。 ...

December 19, 2018 · 2 min · jiezi