分类目录:摩登3平台开户

摩登3测速登录地址_阿里巴巴股价暴跌,董事会加码回购公司股份

阿里巴巴股份回购计划增加至100亿美元。 今日早间,阿里巴巴发布公告称,阿里巴巴集团控股有限公司的董事会已授权增加本公司的股份回购计划总额,由60亿美元增加至100亿美元。 公告指出,该股份回购计划将持续至2022年,并已于本季度开始执行。 日前,阿里巴巴因涉嫌垄断经营被有关部门立案调查。受此影响,阿里巴巴已经连跌5个交易日,截至美股12月24日收盘,阿里巴巴股价报收222美元,跌幅达13.34%,创在美上市以来单日最大跌幅,市值蒸发人民币6400亿元。 虽然阿里巴巴作为国内最大的电商平台,市值估价高达41090亿人民币,但是资产骤然缩水15.5%,不是任意一家公司能够承担的损失。 当前,为了维护良好的互联网经济生态体系,国家正加大打击市场垄断的力度。人民日报发文称,“平台经济的发展固然离不开规模效应和网络效应,但绝不意味着平台企业可以走向垄断。” 在这个风口浪尖,作为屡次违规的行业龙头,阿里后续还有更多问题将面临整改。可以预见的是,在接下来相当长的一段时间内,阿里巴巴股价下滑的趋势是难以止住的。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速代理_电源布局中,竟然有这些不为人知的通用性规则……

在成功的电源设计中,电源布局是其中最重要的一个环节。但是,在如何做到这一点方面,每个人都有自己的观点和理由。事实是,很多不同的解决方案都是殊途同归;如果设计不是真的一团糟,多数电源都是可以正常工作的。 当然,这其中也有一些通用性规则,例如: ● 不要在快速切换信号中运行敏感信号。换言之,不要在开关节点下运行反馈跟踪。 ● 确保功率载荷跟踪和接地层大小足以支持当前的电流。 ● 尽量保持至少一个连续的接地层。 ● 使用足够的通孔(通常以每个通孔1A开始),将接地层相连。 除了这些基本的布局规则,我通常首先会识别开关回路,然后确定哪些回路具有高频开关电流。图1所示为针对降压电源(原理图和布局)的简化功率级的一个示例。 图1:降压电源原理图和布局 降压电源中存在两种状态(假定连续传导模式):控制开关(Q1)接通时和控制开关断开时。当控制开关接通时,电流从输入流至电感器。当控制开关断开时,电流继续在电感器流动并流经二极管(D1)。电流连续输出。 但是存在输入脉冲电流,这是您在布局中需要关注的部分。在图1中,此回路被标记为“高频回路”,并以蓝色显示。您布局的首要目标是将Q1、D1和输入电容与最短、最低电感回路连接。该回路越小,开关产生的噪声便越低。如果忽略这一点,电源将不能有效工作。 识别开关回路的规程适用于所有的电源拓扑结构。规程的各个步骤分别是: ● 在接通状态确定电流通路。 ● 在断开状态确定电流通路。 ● 找到连续电流的位置。 ● 找到断续电流的位置。 ● 尽量减少断续电流环路。 此列表中列出了给定功率级配置的关键回路: ● 降压——输入电容回路。 ● 升压——输出电容回路。 ● 反相降压 -升压——输入和输出电容回路。 ● 反激——输入和输出电容回路。 ● Fly-Buck™——输入电容回路。 ● SEPIC——输出电容回路。 ● Zeta——输入电容回路。 ● 正激、半桥、全桥——输入电容循环。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登三1960_芯科技 新生态 共飞腾——2020飞腾生态伙伴大会在天津隆重举行!

2020年12月29日,天津飞腾信息技术有限公司(以下简称“飞腾公司”)在天津举办了2020飞腾生态伙伴大会。大会以“芯科技 新生态 共飞腾”为主题,吸引了包括两院院士、政府领导、业内专家、行业协会、用户单位、软硬件厂商、系统集成商、媒体等1800余人参会,参会单位和企业超过200家。 2020年,是新基建市场需求爆发式增长的一年,万物互联、人工智能、5G通信、数字城市等应用规模兴起,基于底层核心算力、覆盖从端到云的信息产业协同发展和安全可信的体系建设,已成为未来计算产业的发展方向。 作为国内领先的自主核心芯片供应商,飞腾秉承“核心技术自主创新,产业生态开放联合”的发展理念,携手信息系统上下游的千余家企业,正在加速构建起一个庞大、繁荣的自主信息产业生态。为持续推进国产CPU的产业化应用,并全面展示飞腾平台创新成果、先进应用和发展规划,飞腾携手生态伙伴相约天津,共谋产业发展,共同体验“芯”算力创新的新价值,共话“芯”科技推动的计算新时代。 天津市滨海新区人民政府副区长尹晓峰在致辞中表示:“滨海新区在科技创新领域走在了前列,既有首次夺得国际超算桂冠的天河一号,又有飞腾CPU、麒麟操作系统、长城电脑、曙光计算机、360软件、数据库、紫光云、金山云等一大批业内领先的自主创新企业。”在新基建浪潮的推动下,滨海新区将成为自主创新的重要源头、原始创新的主要策源地。 (天津市滨海新区人民政府副区长尹晓峰) 中国电子信息产业集团有限公司党组成员、副总经理陈锡明在致辞中提到,“党的十九届五中全会提出坚持创新在我国现代化建设全局中的核心地位,把科技自立自强作为国家发展的战略支撑,并将其摆在各项规划任务的首位进行专章部署。“CPU芯片作为高端通用芯片的重要组成部分,是坚持科技自立自强、破除“缺芯之痛”痼疾的关键环节,在信息系统中处于极其核心的地位,是办公和业务系统高效、安全运行的基础。 (中国电子信息产业集团有限公司党组成员、副总经理陈锡明) 飞腾公司总经理窦强博士做了题为《海阔芯无界,聚势共飞腾》的主题演讲,分享了2020年飞腾CPU的生态建设和应用成果。据介绍,飞腾目前合作伙伴数量约1600家,完成了423个合作伙伴的924个项目开案设计与支持,与51家厂商的2557款软件完成适配优化与认证;携手生态伙伴发布了90余个行业联合解决方案,覆盖电信、金融、能源、交通、医疗、数字城市、工业制造等行业领域,同时耦合云计算、大数据、5G、AI、区块链等技术方向,给行业信息化建设快速发展提供“芯”动能。 (飞腾公司总经理窦强) 此外,飞腾公司在2020年实现了营收的高速增长,全年销量超150万片,全年营收超13亿元。基于飞腾CPU平台的产品已经广泛应用于我国党政办公系统、重点行业业务系统、云计算、大数据以及金融、能源和轨道交通等关系到国家安全和国计民生的重要领域。飞腾也在今年发力校企合作和技术人才培养,正式发布了飞腾培训认证体系,面向政府部委机关、行业用户、行业协会、集成商、整机商、板卡厂商等企事业伙伴共育人才,共同构筑信息人才的全新生态。 来自华能、百度、日海、联想、文思海辉、天融信和亚信的飞腾生态合作伙伴分别发表了主题演讲,详细阐述了飞腾CPU在电力、人工智能、通信、金融、政务和大数据等领域的应用情况。 会上,飞腾新一代高性能桌面处理器芯片腾锐D2000重磅发布。据介绍,腾锐D2000集成了8个飞腾自主研发的高性能处理器内核FTC663,兼容64位ARMv8指令集,主频2.3-2.6GHz,典型功耗25W,支持飞腾自主定义的处理器安全架构标准PSPA1.0,满足更复杂应用场景下对性能和安全可信的需求。 飞腾公司副总经理郭御风介绍到,腾锐D2000与上一代产品FT-2000/4管脚兼容,客户可以实现现有系统的原位拔插代换,无缝兼容。相比上一代产品,腾锐D2000的性能大幅跃升,SPECint分值为97.45,接近原来的2倍。基于腾锐D2000的台式机、笔记本、一体机、工控机、网安设备等各类型终端产品将于2021年Q1陆续上市。 多家企业在会上发布了基于飞腾CPU的全新服务器和嵌入式产品。长城、浪潮、同方、曙光、中兴通讯等15家国内厂商发布了基于腾云S2500的多路服务器产品群,锐捷、长城金融、中电智能、汉为、恒为、蓝炬等10家国内厂商发布了基于飞腾CPU的嵌入式产品群。据悉,这些产品将用于国内政务和企业办公、云计算、数据中心、金融等多个领域,产品性能、能耗以及自主程度在同类型产品中具备明显优势,能够有效支撑国家核心信息系统转型升级。 为了给行业客户提供更好的售后支持服务,提供更优质的客户体验,飞腾在今年成立了全国新基建综合服务保障平台,也是国内首个由芯片厂家主导的全国服务保障平台。平台为行业客户提供专属服务、各层面资源与解决方案,旨在为全国主要信创保障中心、集成商、整机、适配中心、联合实验室、软硬件厂商等提供培训和技术支持等服务。会上,中软、浪潮、中国系统、太极、东软、航天信息等13家集成商与飞腾签署合作协议,成为飞腾新基建服务保障平台首批战略合作伙伴,共同服务新基建和各行业信息系统转型升级。

摩登3平台首页_真相了!敲代码时,程序员戴耳机究竟在听什么?

你身边有没有这样一群人,除了早上打个招呼,必要的工作沟通,其它时候一直带个耳机。 这不就是我吗? 知乎上有个提问:程序员上班时戴耳机是在听什么? 高赞回答是:戴上耳机是告诉其他人不要打扰我,实际上并没有在放音乐。 程序员在工作时间里除了其他人过来打扰,他的 IM 通讯软件是这样的: [置顶]业务群:@你 … 产品-刘同学:这块需求我想改成… 测试-陈大姐:今天要上线了,你赶紧改下最后两个 Bug 吧 测试-李妹:你昨天提测的项目有问题啊,先帮忙查下吧,主要流程… 前端-程小哥:这接口你得给我传两个值 产品-王同学:帮忙看下线上问题吧,用户很着急 技术群:@ all,今天下午四点有技术分享会,请大家准时参加 … 消息不断跳出,任务栏不断闪烁催促你去点开。还有人直接找你讨论问题,你不得不停下手上的工作,一次次去回应这些紧急事情。 等回答完想继续刚才的工作,却忘记刚才写到哪里,又得重新捋思路。 有数据显示:人被打扰后重拾起原来的思路平均需要3分钟,由于几分钟就被打断一次,每天大约有2.5小时被浪费掉的。 等到了下班点,你才惊觉,这一天好像没做什么就过去,今天要做的需求连一行代码还没有开始写呢。于是你开始例行的加班。 在《深度工作》中作者提出一个公式:高质量工作产出=时间×专注度。 高质量工作产出需要人进入深度工作状态,深度工作指的是在无干扰的状态下专注进行职业活动,此时个人的认知能力达到极限。 这种努力能够创造新价值,提升技能,而且难以复制。 你有没有试过上班来早了或者等大家下班后,办公室安安静静的。你戴上耳机,退出IM软件,沉浸在编程世界里,思路顺畅,像打通任督二脉,效率特别高,代码质量很好,只用两个小时便完成平常一天的活。 而与深度工作相反的是浮浅工作,浮浅工作往往在受到干扰的情况下开展。此类工作是认知要求不高的事务性任务,很容易复制。 书里指出越来越多知识工作者因为不断被小事扰乱心神而用浮浅工作替代了深度工作。越是经常在极度浮浅的状态工作,越将会降低自己深度工作的能力。 所以内秀的程序员通常采用物理隔音——戴耳机被动地躲开打扰。 当然带耳机也有其它原因: @layla 每天开完早会就带上耳机开始自己一天的工作,其实啥也没听,就是想静静,选择性屏蔽一些不想听的话。 @yue 无聊解压用的,听歌可以振奋人心,帮助度过无聊时间,也激发工作动力 除了戴耳机,还有几招能从根源上减少些打扰,提高重拾思路的时间: 1.被打乱时先花几秒写好注释 刚把对象取出来,开始“.”的时候,PM 来了:诶,能帮忙—— 你先花几秒钟淡定地先将.后的方法写好,把下一步要做的事简单两几个字注释,如//做判断//,帮助你快速地接上被打乱前的思路。 用“我沉浸在编程的世界里你居然敢打断我”的表情缓慢地摘下耳机,记住耳机只需离开耳朵一厘米,这表示你随时会戴上耳机干活去,暗示对方有事快说,不做闲聊。 要面瘫,不用微笑。 2.拒绝回答不经思考的简单问题 PM:你还记得上次你做的那个需求吗?线上的逻辑是怎样的呀? 你:不记得了,自己看需求文档吧,或者问负责这块的PM。 新人:这个工具怎么用? 你:自己搜索去吧。 有数据统计,80% 的打扰是没有意义或者极少有价值的。 职场时间宝贵,求助者有责任在提问前确认问题是否值得问。如果问题是可以直接查询或者能从搜索结果前三页获取的,这些问题是不需要回答的,你无需浪费自己的时间放他人之懒。 这招还可以跟二维码大法混合使用,能击退大部分的简单问题: 3.学会甩锅 PM:这个需求我想改改… 你:你先找我 TL 对下排期 PM:线上这个数据不对啊 你:在某表某字段,你自己查 我们部门的 PM 就这样学会写 sql 查数据,徒手登服务器查业务日志。如果你不好意思拒绝一个“顺手”“只占几分钟”的小要求,后面还有 abcd 个小要求笑眯眯地在等着你。 4.承诺完成的deadline 网上有一张图形象地说明理想的工作计划和实际情况:无打扰的高效率理想工作模式和不断地被打乱的实际工作模式。 有些紧急事情是必须放下手下工作去做的,例如测试说,项目今天要上线,你赶紧改下这两个bug。 此时先和发起人确定完成的deadline:我将会在下午前两点改好,改完会告诉你的,不用催促。将被动化为主动,临危不乱,有条理地安排好手上的工作。 刚开始这么做可能会让人感觉不自在,因为和普通的人际交往游戏规则相左:举手之劳,能帮则帮。采用上述方法后,发生一些不愉快的事情也是在所难免。有些人或许会感到疑惑或生气,认为你不近人情。其实,这没什么大不了的。 正如《深度工作》里说的:培养允许坏的小事发生的习惯。否则,你将永远发现不了改变命运的大事。其他人会很快调整对你的期望,适应你的工作习惯。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3主管554258:_预计2024年Micro LED市场规模将达42亿美元

Mini/Micro LED为代表的下一代的新型显示技术不断成熟完善中,市场预计未来空间也越来越乐观。 根据调研数据,预计2024年全球Mini/Micro LED市场规模有望达到42亿美元。 而华灿光电,雷曼光电、干照光电等产业链相关企业纷纷准备扩产,将尽享市场红利。11月16日,美国Micro LED解决方案供应商Compound Photonics宣布其在美国亚利桑那州钱德勒市(Chadler)的Micro LED制造工厂MiAC(MicroLED Innovation Acceleration Center)开业。MiAC工厂占地约1.5万平方英尺,拥有百级清洁室,直接采用专业的制造设备和测量设备来助力Micro LED组装、接合、集成和试生产等先进制程的开发。CP表示,MiAC工厂将致力于加速5μm以下单片集成Micro LED显示器的上市时间,以满足大众市场对AR/MR和智能可穿戴设备不断增长的需求。国内的龙头屏企也紧追行业趋势,纷纷准备扩产,意在提前抢占市场份额。      11月16日,美国Micro LED解决方案供应商Compound Photonics(CP)宣布其在美国亚利桑那州钱德勒市(Chadler)的Micro LED制造工厂MiAC(MicroLED Innovation Acceleration Center)开业。MiAC工厂占地约1.5万平方英尺,拥有百级清洁室,直接采用专业的制造设备和测量设备来助力Micro LED组装、接合、集成和试生产等先进制程的开发。 CP表示,MiAC工厂将致力于加速5μm以下单片集成Micro LED显示器的上市时间,以满足大众市场对AR/MR和智能可穿戴设备不断增长的需求。 国内的龙头屏企也紧追行业趋势,纷纷准备扩产,意在提前抢占市场份额。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3咨询:_皮尔磁:带权限管理的按钮单元PITgatebox

PITgatebox按钮单元,顾名思义,可以理解为是由各种不同的按钮、开关和急停按钮组合而成的操作单元,为了简化使用普通按钮盒时的安装和接线,皮尔磁提供多种已完成预配置的版本,用户可以根据实际的需求选择相应的配置,轻松灵活地控制安全门开关及系统。 图片来源:皮尔磁公司 随着技术的发展与进步,智能制造对于工业信息安全的要求越来越高,为了更好地适应制造业的发展趋势,皮尔磁推出集成了权限管理功能PITreader的按钮单元PITgatebox。在人员操作安全门之前,通过RFID密钥检查用户权限,实现对用户的身份验证,只有具备资质和相关操作权限的人员才能访问设备。 安全从来都是“双向” 我们不仅要保护人,避免机械设备的危险运动对人造成伤害,我们也要保护设备,避免人的非法操作或故意操纵,对机器造成损害。尤其在机械设备高度联网的工业4.0时代,工业信息安全必须与机械安全同等对待。访问授权系统PITreader可以根据与机器接触人员的角色来定义工作权限。为每个操作人员配备RFID密钥后,访问授权系统PITreader基于受加密保护的RFID密钥上的数据对人员进行身份验证,并根据存储的权限授权这些人员执行特定操作。在阅读器单元确认正确的权限之前,任何人都不能打开有锁定保护的安全门。这样就实现了同时保护人和设备安全的目的。 按钮单元与权限控制的完美结合 PITgatebox按钮单元采用了超薄设计,宽度仅为40mm,可以轻松地安装在标准型材上,外壳防护等级IP65,抗冲击和碰撞,坚固耐用。操作元件包括急停按钮、带灯按钮和钥匙开关等。带访问授权系统的型号包括一个2NC/1NO的急停按钮、两个1NO的带灯按钮和一个PITreader,接插件为一个M12-12芯的插头和一个M12-4芯的以太网插头,具有两种预置类型,电缆输出可选位于顶部或底部,为实际应用提供最大的灵活性。丰富的颜色和符号盖板选择,方便用户自由定义按钮功能并清晰地加以识别。 图片来源:皮尔磁公司 带PITreader的PITgatebox按钮单元,根据成功的身份验证来控制激活、停止或复位机器等命令,从而能使得人和机器同时获得保护,防止误用(甚至是操纵),因此它也是模块化安全门系统的优秀成员之一。 图片来源:皮尔磁公司 PITreader可以基于以太网通过Modbus TCP 或者REST API 与PLC/PC交换数据,也可以与可编程安全控制系统PNOZmulti2连接,特别是在与PSENmlock和PSENslock安全门系统配合使用时,可以获得量身定制的模块化、一站式安全门解决方案。 图片来源:皮尔磁公司 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速登录地址_是什么让Spring5放弃了使用Guava Cache?

来源:https://albenw.github.io/posts/a4ae1aa2/ 概要 Caffeine是一个高性能,高命中率,低内存占用,near optimal 的本地缓存,简单来说它是Guava Cache的优化加强版,有些文章把Caffeine称为“新一代的缓存”、“现代缓存之王”。本文将重点讲解Caffeine的高性能设计,以及对应部分的源码分析。 与Guava Cache比较 大家都知道,Spring5即将放弃掉Guava Cache作为缓存机制,而改用Caffeine作为新的本地Cache的组件,这对于Caffeine来说是一个很大的肯定。为什么Spring会这样做呢?其实在Caffeine的Benchmarks里给出了好靓仔的数据,对读和写的场景,还有跟其他几个缓存工具进行了比较,Caffeine的性能都表现很突出。 使用Caffeine Caffeine为了方便大家使用以及从Guava Cache切换过来(很有针对性啊~),借鉴了Guava Cache大部分的概念(诸如核心概念Cache、LoadingCache、CacheLoader、CacheBuilder等等),对于Caffeine的理解只要把它当作Guava Cache就可以了。 使用上,大家只要把Caffeine的包引进来,然后换一下cache的实现类,基本应该就没问题了。这对与已经使用过Guava Cache的同学来说没有任何难度,甚至还有一点熟悉的味道,如果你之前没有使用过Guava Cache,可以查看Caffeine的官方API说明文档,其中Population,Eviction,Removal,Refresh,Statistics,Cleanup,Policy等等这些特性都是跟Guava Cache基本一样的。 下面给出一个例子说明怎样创建一个Cache: private static LoadingCache<String, String> cache = Caffeine.newBuilder()            //最大个数限制            .maximumSize(256L)            //初始化容量            .initialCapacity(1)            //访问后过期(包括读和写)            .expireAfterAccess(2, TimeUnit.DAYS)            //写后过期            .expireAfterWrite(2, TimeUnit.HOURS)            //写后自动异步刷新            .refreshAfterWrite(1, TimeUnit.HOURS)            //记录下缓存的一些统计数据,例如命中率等            .recordStats()            //cache对缓存写的通知回调            .writer(new CacheWriter<Object, Object>() {                @Override                public void write(@NonNull Object key, @NonNull Object value) {                    log.info("key={}, CacheWriter write", key);                }                @Override                public void delete(@NonNull Object key, @Nullable Object value, @NonNull RemovalCause cause) {                    log.info("key={}, cause={}, CacheWriter delete", key, cause);                }            })            //使用CacheLoader创建一个LoadingCache            .build(new CacheLoader<String, String>() {                //同步加载数据                @Nullable                @Override                public String load(@NonNull String key) throws Exception {                    return "value_" + key;                }                //异步加载数据                @Nullable                @Override                public String reload(@NonNull String key, @NonNull String oldValue) throws Exception {                    return "value_" + key;                }            }); Caffeine的高性能设计 判断一个缓存的好坏最核心的指标就是命中率,影响缓存命中率有很多因素,包括业务场景、淘汰策略、清理策略、缓存容量等等。如果作为本地缓存, 它的性能的情况,资源的占用也都是一个很重要的指标。下面 我们来看看Caffeine在这几个方面是怎么着手的,如何做优化的。 (注:本文不会分析Caffeine全部源码,只会对核心设计的实现进行分析,但我建议读者把Caffeine的源码都涉猎一下,有个overview才能更好理解本文。如果你看过Guava Cache的源码也行,代码的数据结构和处理逻辑很类似的。 源码基于:(caffeine-2.8.0.jar) W-TinyLFU整体设计 上面说到淘汰策略是影响缓存命中率的因素之一,一般比较简单的缓存就会直接用到LFU(Least Frequently Used,即最不经常使用)或者LRU(Least Recently Used,即最近最少使用),而Caffeine就是使用了W-TinyLFU算法。 W-TinyLFU看名字就能大概猜出来,它是LFU的变种,也是一种缓存淘汰算法。那为什么要使用W-TinyLFU呢? LRU和LFU的缺点 LRU实现简单,在一般情况下能够表现出很好的命中率,是一个“性价比”很高的算法,平时也很常用。虽然LRU对突发性的稀疏流量(sparse bursts)表现很好,但同时也会产生缓存污染,举例来说,如果偶然性的要对全量数据进行遍历,那么“历史访问记录”就会被刷走,造成污染。 如果数据的分布在一段时间内是固定的话,那么LFU可以达到最高的命中率。但是LFU有两个缺点,第一,它需要给每个记录项维护频率信息,每次访问都需要更新,这是个巨大的开销;第二,对突发性的稀疏流量无力,因为前期经常访问的记录已经占用了缓存,偶然的流量不太可能会被保留下来,而且过去的一些大量被访问的记录在将来也不一定会使用上,这样就一直把“坑”占着了。 无论LRU还是LFU都有其各自的缺点,不过,现在已经有很多针对其缺点而改良、优化出来的变种算法。 TinyLFU TinyLFU就是其中一个优化算法,它是专门为了解决LFU上述提到的两个问题而被设计出来的。 解决第一个问题是采用了Count–Min Sketch算法。 解决第二个问题是让记录尽量保持相对的“新鲜”(Freshness Mechanism),并且当有新的记录插入时,可以让它跟老的记录进行“PK”,输者就会被淘汰,这样一些老的、不再需要的记录就会被剔除。 下图是TinyLFU设计图(来自官方) 统计频率Count–Min Sketch算法 如何对一个key进行统计,但又可以节省空间呢?(不是简单的使用HashMap,这太消耗内存了),注意哦,不需要精确的统计,只需要一个近似值就可以了,怎么样,这样场景是不是很熟悉,如果你是老司机,或许已经联想到布隆过滤器(Bloom Filter)的应用了。 没错,将要介绍的Count–Min Sketch的原理跟Bloom Filter一样,只不过Bloom Filter只有0和1的值,那么你可以把Count–Min Sketch看作是“数值”版的Bloom Filter。 更多关于Count–Min Sketch的介绍请自行搜索。 在TinyLFU中,近似频率的统计如下图所示: 对一个key进行多次hash函数后,index到多个数组位置后进行累加,查询时取多个值中的最小值即可。 Caffeine对这个算法的实现在FrequencySketch类。但Caffeine对此有进一步的优化,例如Count–Min Sketch使用了二维数组,Caffeine只是用了一个一维的数组;再者,如果是数值类型的话,这个数需要用int或long来存储,但是Caffeine认为缓存的访问频率不需要用到那么大,只需要15就足够,一般认为达到15次的频率算是很高的了,而且Caffeine还有另外一个机制来使得这个频率进行衰退减半(下面就会讲到)。如果最大是15的话,那么只需要4个bit就可以满足了,一个long有64bit,可以存储16个这样的统计数,Caffeine就是这样的设计,使得存储效率提高了16倍。 Caffeine对缓存的读写(afterRead和afterWrite方法)都会调用onAccesss方法,而onAccess方法里有一句: frequencySketch().increment(key); 这句就是追加记录的频率,下面我们看看具体实现 //FrequencySketch的一些属性//种子数static final long[] SEED = { // A mixture of seeds from FNV-1a, CityHash, and Murmur3    0xc3a5c85c97cb3127L, 0xb492b66fbe98f273L, 0x9ae16a3b2f90404fL, 0xcbf29ce484222325L};static final long RESET_MASK = 0x7777777777777777L;static final long ONE_MASK = 0x1111111111111111L;int sampleSize;//为了快速根据hash值得到table的index值的掩码//table的长度size一般为2的n次方,而tableMask为size-1,这样就可以通过&操作来模拟取余操作,速度快很多,老司机都知道int tableMask;//存储数据的一维long数组long[] table;int size;/** * Increments the popularity of the element if it does not exceed the maximum (15). The popularity * of all elements will be periodically down sampled when the observed events exceeds a threshold. * This process provides a frequency aging to allow expired long term entries to fade away. * * @param e the element to add */public void increment(@NonNull E e) {  if (isNotInitialized()) {    return;  }  //根据key的hashCode通过一个哈希函数得到一个hash值  //本来就是hashCode了,为什么还要再做一次hash?怕原来的hashCode不够均匀分散,再打散一下。  int hash = spread(e.hashCode());  //这句光看有点难理解  //就如我刚才说的,Caffeine把一个long的64bit划分成16个等分,每一等分4个bit。  //这个start就是用来定位到是哪一个等分的,用hash值低两位作为随机数,再左移2位,得到一个小于16的值  int start = (hash & 3) << 2;  //indexOf方法的意思就是,根据hash值和不同种子得到table的下标index  //这里通过四个不同的种子,得到四个不同的下标index  int index0 = indexOf(hash, 0);  int index1 = indexOf(hash, 1);  int index2 = indexOf(hash, 2);  int index3 = indexOf(hash, 3);  //根据index和start(+1, +2, +3)的值,把table[index]对应的等分追加1  //这个incrementAt方法有点难理解,看我下面的解释  boolean added = incrementAt(index0, start);  added |= incrementAt(index1, start + 1);  added |= incrementAt(index2, start + 2);  added |= incrementAt(index3, start + 3);  //这个reset等下说  if (added && (++size == sampleSize)) {    reset();  }}/** * Increments the specified counter by 1 if it is not already at the maximum value (15). * * @param i the table index (16 counters) * @param j the counter to increment * @return if incremented */boolean incrementAt(int i, int j) {  //这个j表示16个等分的下标,那么offset就是相当于在64位中的下标(这个自己想想)  int offset = j << 2;  //上面提到Caffeine把频率统计最大定为15,即0xfL  //mask就是在64位中的掩码,即1111后面跟很多个0  long mask = (0xfL << offset);  //如果&的结果不等于15,那么就追加1。等于15就不会再加了  if ((table[i] & mask) != mask) {    table[i] += (1L << offset);    return true;  }  return false;}/** * Returns the table index for the counter at the specified depth. * * @param item the element's hash * @param i the counter depth * @return the table index */int indexOf(int item, int i) {  long hash = SEED[i] * item;  hash += hash >>> 32;  return ((int) hash) & tableMask;}/** * Applies a supplemental hash function to a given hashCode, which defends against poor quality * hash functions. */int spread(int x) {  x = ((x >>> 16) ^ x) * 0x45d9f3b;  x = ((x >>> 16) ^ x) * 0x45d9f3b;  return (x >>> 16) ^ x;} 知道了追加方法,那么读取方法frequency就很容易理解了。 /** * Returns the estimated number of occurrences of an element, up to the maximum (15). * * @param e the element to count occurrences of * @return the estimated number of occurrences of the element; possibly zero but never negative */@NonNegativepublic int frequency(@NonNull E e) {  if (isNotInitialized()) {    return 0;  }  //得到hash值,跟上面一样  int hash = spread(e.hashCode());  //得到等分的下标,跟上面一样  int start = (hash & 3) << 2;  int frequency = Integer.MAX_VALUE;  //循环四次,分别获取在table数组中不同的下标位置  for (int i = 0; i < 4; i++) {    int index = indexOf(hash, i);    //这个操作就不多说了,其实跟上面incrementAt是一样的,定位到table[index] + 等分的位置,再根据mask取出计数值    int count = (int) ((table[index] >>> ((start + i) << 2)) & 0xfL);    //取四个中的较小值    frequency = Math.min(frequency, count);  }  return frequency;} 通过代码和注释或者读者可能难以理解,下图是我画出来帮助大家理解的结构图。 注意紫色虚线框,其中蓝色小格就是需要计算的位置: 保新机制 为了让缓存保持“新鲜”,剔除掉过往频率很高但之后不经常的缓存,Caffeine有一个Freshness Mechanism。做法很简答,就是当整体的统计计数(当前所有记录的频率统计之和,这个数值内部维护)达到某一个值时,那么所有记录的频率统计除以2。 从上面的代码 //size变量就是所有记录的频率统计之,即每个记录加1,这个size都会加1//sampleSize一个阈值,从FrequencySketch初始化可以看到它的值为maximumSize的10倍if (added && (++size == sampleSize)) {      reset();} 看到reset方法就是做这个事情 /** Reduces every counter by half of its original value. */void reset() {  int count = 0;  for (int i = 0; i < table.length; i++) {    count += Long.bitCount(table[i] & ONE_MASK);    table[i] = (table[i] >>> 1) & RESET_MASK;  }  size = (size >>> 1) - (count >>> 2);} 关于这个reset方法,为什么是除以2,而不是其他,及其正确性,在最下面的参考资料的TinyLFU论文中3.3章节给出了数学证明,大家有兴趣可以看看。 增加一个Window? Caffeine通过测试发现TinyLFU在面对突发性的稀疏流量(sparse bursts)时表现很差,因为新的记录(new items)还没来得及建立足够的频率就被剔除出去了,这就使得命中率下降。 于是Caffeine设计出一种新的policy,即Window Tiny LFU(W-TinyLFU),并通过实验和实践发现W-TinyLFU比TinyLFU表现的更好。 W-TinyLFU的设计如下所示(两图等价): 它主要包括两个缓存模块,主缓存是SLRU(Segmented LRU,即分段LRU),SLRU包括一个名为protected和一个名为probation的缓存区。通过增加一个缓存区(即Window Cache),当有新的记录插入时,会先在window区呆一下,就可以避免上述说的sparse bursts问题。 淘汰策略(eviction policy) 当window区满了,就会根据LRU把candidate(即淘汰出来的元素)放到probation区,如果probation区也满了,就把candidate和probation将要淘汰的元素victim,两个进行“PK”,胜者留在probation,输者就要被淘汰了。 而且经过实验发现当window区配置为总容量的1%,剩余的99%当中的80%分给protected区,20%分给probation区时,这时整体性能和命中率表现得最好,所以Caffeine默认的比例设置就是这个。 不过这个比例Caffeine会在运行时根据统计数据(statistics)去动态调整,如果你的应用程序的缓存随着时间变化比较快的话,那么增加window区的比例可以提高命中率,相反缓存都是比较固定不变的话,增加Main Cache区(protected区 +probation区)的比例会有较好的效果。 下面我们看看上面说到的淘汰策略是怎么实现的: 一般缓存对读写操作后都有后续的一系列“维护”操作,Caffeine也不例外,这些操作都在maintenance方法,我们将要说到的淘汰策略也在里面。 这方法比较重要,下面也会提到,所以这里只先说跟“淘汰策略”有关的evictEntries和climb。 /**   * Performs the pending maintenance work and sets the state flags during processing to avoid   * excess scheduling attempts. The read buffer, write buffer, and reference queues are   * drained, followed by expiration, and size-based eviction.   *   * @param task an additional pending task to run, or {@code null} if not present   */  @GuardedBy("evictionLock")  void maintenance(@Nullable Runnable task) {    lazySetDrainStatus(PROCESSING_TO_IDLE);    try {      drainReadBuffer();      drainWriteBuffer();      if (task != null) {        task.run();      }      drainKeyReferences();      drainValueReferences();      expireEntries();      //把符合条件的记录淘汰掉      evictEntries();      //动态调整window区和protected区的大小      climb();    } finally {      if ((drainStatus() != PROCESSING_TO_IDLE) || !casDrainStatus(PROCESSING_TO_IDLE, IDLE)) {        lazySetDrainStatus(REQUIRED);      }    }  } ``` 先说一下Caffeine对上面说到的W-TinyLFU策略的实现用到的数据结构: ``` //最大的个数限制long maximum;//当前的个数long weightedSize;//window区的最大限制long windowMaximum;//window区当前的个数long windowWeightedSize;//protected区的最大限制long mainProtectedMaximum;//protected区当前的个数long mainProtectedWeightedSize;//下一次需要调整的大小(还需要进一步计算)double stepSize;//window区需要调整的大小long adjustment;//命中计数int hitsInSample;//不命中的计数int missesInSample;//上一次的缓存命中率double previousSampleHitRate;final FrequencySketch  sketch; //window区的LRU queue(FIFO) final AccessOrderDeque > accessOrderWindowDeque; //probation区的LRU queue(FIFO) final AccessOrderDeque > accessOrderProbationDeque; //protected区的LRU queue(FIFO) final AccessOrderDeque > accessOrderProtectedDeque; 以及默认比例设置(意思看注释) /** The initial percent of the maximum weighted capacity dedicated to the main space. */static final double PERCENT_MAIN = 0.99d;/** The percent of the maximum weighted capacity dedicated to the main's protected space. */static final double PERCENT_MAIN_PROTECTED = 0.80d;/** The difference in hit rates that restarts the climber. */static final double HILL_CLIMBER_RESTART_THRESHOLD = 0.05d;/** The percent of the total size to adapt the window by. */static final double HILL_CLIMBER_STEP_PERCENT = 0.0625d;/** The rate to decrease the step size to adapt by. */static final double HILL_CLIMBER_STEP_DECAY_RATE = 0.98d;/** The maximum number of entries that can be transfered between queues. */ 重点来了,evictEntries和climb方法: /** Evicts entries if the cache exceeds the maximum. */@GuardedBy("evictionLock")void evictEntries() {  if (!evicts()) {    return;  }  //淘汰window区的记录  int candidates = evictFromWindow();  //淘汰Main区的记录  evictFromMain(candidates);}/** * Evicts entries from the window space into the main space while the window size exceeds a * maximum. * * @return the number of candidate entries evicted from the window space *///根据W-TinyLFU,新的数据都会无条件的加到admission window//但是window是有大小限制,所以要“定期”做一下“维护”@GuardedBy("evictionLock")int evictFromWindow() {  int candidates = 0;  //查看window queue的头部节点  Node  node = accessOrderWindowDeque().peek();    //如果window区超过了最大的限制,那么就要把“多出来”的记录做处理   …

摩登3注册网址_干货分享!用VS Code找对象?不看脸的那种!

VS Code现在居然可以用来谈恋爱了。 为了用最硬核的方式找到男(女)朋友,23岁的程序员Ben Awad在VS Code里打造一个约会软件VSinder。 顾名思义,VSinder = VS Code + Tinder,就是把约会软件集成到了代码编辑器里,简直太对程序员胃口了。 VSinder和Tinder的操作逻辑一样,左滑把不喜欢的人pass掉,右滑收藏喜欢的人。 这款插件一上线,就快速赢得程序员们的认可,GitHub上已收获800 Star,3天的下载量超过9000次。 从代码中找到真爱 既然是面向程序员的约会软件,自然不能和其他约会App一样,一定要有特色。 VSinder的特点就是,可以根据编程语言和代码风格筛选对象。 比如你用的是Python,她用的是C,那么你们之间可能没有共同语言。(以免将来为哪种语言最好吵架。) 对方使用的语言会在人名旁边用一个logo展示出来。 当然,即使用同一种语言编程,水平也有高下,如果对方编程水平达不到自己的要求怎么办? 别怕,VSinder和只看脸的约会软件不同,它是靠代码吸引异性的。(毕竟代码才是程序员的脸面。) Code Pics一栏填入你最得意的代码,让对方一眼知道你的水平深浅。 VSinder也考虑到性取向问题,你也可以选择约会对象的性别。又或者是你只想找个一起交流代码的同性朋友,只需在程序中选择friendship。 当然,找对象,脸也是很重要的。VSinder暂不支持手动修改头像,而是自动抓取你的GitHub账户,如果想让自己帅(美)一点,只能去修改GitHub头像了。 还有手机App 既然是约会软件,怎么可以只在电脑上运行呢? 虽然手机不能跑VS Code,但是Ben还开发了VSinder的手机App供下载。现已经支持iOS和Android两大系统。 只需登上自己的GitHub账号,完善资料即可使用,和Tinder用起来没啥太大区别,除了没有大量美颜照片。 那么这三天来,有没有人在VSinder上找到男(女)朋友?恐怕是没有,有人滑了半个小时,也没有找到一个单身女程序员。 不过这种情况也不难预料,毕竟GitHub是“全球最大的同性交友社区”。 害,没有蹲到小姐姐?推荐试试 Rainbow Fart 彩虹屁插件,萌妹子陪你写代码。 在你写代码的时候,可根据关键字播放接近代码含义的语音。 请看下方示例视频,一定要打开声音(如果是在公司或公众场所,那戴好耳机或调低音量)。 开源地址:https://github.com/benawad/vsinder 插件下载地址:https://marketplace.visualstudio.com/items?itemName=benawad.vsinder 使用方法介绍:https://www.youtube.com/watch?v=bfd8RyAJh6c  来源:量子位 免责声明:本文内容来源于网络,文章版权归原作者所有,意在传播相关技术知识&行业趋势,供大家学习交流,若涉及作品版权问题,请联系删除或授权事宜。 End  微信搜一搜 点分享 点点赞 点在看 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测试路线_软件定义未来,看懂云杉网络软价值与硬实力

量变引起质变。 正如同海量场效应管能够堆叠成极端复杂的处理器一样,简单结构的复杂套用总能产生结构和用途方面的惊喜。与此相对,当大量简单工作相互堆叠与嵌套,其导致的成本与复杂性则往往是常规组织难以承受的。而网络运维正是符合这一规律的最典型场景之一。 一个简单、节点数量有限的LeafSpine网络,其构建和维护往往是相当轻松的;但当这一架构当中包含了海量节点、庞大流量、无数种业务逻辑、多种虚拟化结构、N种厂牌的设备时,其运维则会变得极端复杂。更何况很多行业还要在这套网络结构上实现多地多中心、热备等高级功能…… 当然,这只是网络运维复杂性的成因之一。实际上,伴随系统的演进,多数大型企业的网络架构中即存在老的结构、也存在很多新的设计;即由传统的存储+服务器结构,也包含SDN架构与VMware、OpenStack、容器结构。维持这样一套结构庞大的、新旧并存的、细节丰富的网络正常运转,其难度可想而知。 因此,我们也就不难理解,为何很多大型企业每年都要花费数亿成本在网络运维之上了。 不过这些问题的出现并非一天两天,因此,像Overlay这样的解决思路在目前也是相当流行。 从超级控制器到NSP 随着网络在业务中的重要性日渐加深,企业对网络运维的重视也水涨船高。因此,很多网络设备供应商也开始在自家方案中以Overlay形式为用户提供众多SDN管理功能。设备与管理层完美对接,实现各种高级功能,网络管理由此便可轻松惬意……但现实不是童话,用户的思考逻辑也不会如此“一根筋”。 多数情况下,出于对被绑定和安全等因素的考虑,大型企业绝不会把所有网络工作交给一家供应商。而对于网络运维来说,这种决策思路则意味着网络中会存在多种体系、多个管理平台、多个入口,他们“鸡犬相闻却老死不相往来”互不兼容且相互独立。 因此,如何在横跨多种结构、多个厂牌的大型网络之上构建统一的管理界面,并实现尽可能多和先进的管理功能就成为了用户必须思考的现实问题。通常我们将这样的产品称为超级控制器,而云杉网络的NSP解决方案正是这片市场中一股不可忽视的力量。 看懂了NSP诞生的原因,我们便能对其作用略窥一二: 有效纳管多个资源池; 兼容传统网络架构与SDN等新型网络架构; 有效连接物理机、虚拟机、裸金属、容器等不同类型资源,并实现相同结构的跨资源池、跨区迁移; 纳管多个不同厂牌设备,构建统一功能界面; 实现网络管理和配置的自动化。 对此,云杉网络CTO张天鹏表示:NSP解决方案包含Controller控制器、Plugin插件和Edge网络服务集群等三个部分,分别实现网元纳管、资源管理和网络编排、网络服务等功能。NSP在保证企业网络的统一纳管、可维护性、可用性、安全等特性的同时亦能通过ResfulAPI提供对第三方网络应用的支持;是一套能够满足用户对网络虚拟化、混合云编排、安全、网络功能交付、生命周期管理、网络可视化等多种功能需求的开放平台。 作为方案的特色之一,NSP能够通过插件实现对不同类型资源池的支持,进而保证方案在面向未来时具备兼容和持续演进能力;NSP的最近一次更新便是加入了对容器的全面支持。而抽象于物理结构的控制面、存储面和数据面则是云杉NSP构建Overlay能力的核心;由此,用户便可在更高维度实现整个网络的虚拟化。 与此同时,横跨多个不同类型资源池的组网能力也能够帮助用户实现混合云的网络编排;而这正是复杂结构下,企业业务交付、应用创新和构建弹性网络所亟需的底层支持。当然,这套架构也同样能够为异地、多活、热备等高可靠功能提供支持。 对于NSP的实际应用效果,张天鹏举了一个非常生动的例子。在某互联网金融的案例中,该用户原本每月能够完成的业务变更操作只有十多次;而在部署NSP解决方案之后,该用户则能够实现每月300多次的大小业务变更。NSP所带来的业务创新效率提升可见一斑。 SDN+SD-WAN 组合拳打出网络运营新天地 没有互联网的数字化是不完整的,面向内网的NSP也仅是云杉网络整体产品体系的二分之一。NSP是企业构建内部网络SDN的效率之选,而面对更广泛的互联网业务,云杉也提供了DeepFlow解决方案。 公有云能够为企业提供更高的性价比和灵活性,因此,公有云+私有云也就成为很多大型企业的必然选择。但在实际的应用中,很多企业发现公有云不仅不便宜,而且很难实现统一的监控管理。 追根溯源,网络层面遍布的黑盒与盲区是原因之一。由于缺乏管理手段,企业很难搞清哪些数据去了云端、庞大的带宽都被哪些流量占据、如何确保公网业务的可靠性……而这些都是网络运营的成本黑洞。因此,云杉网络的DeepFlow应运而生。 作为一套面向混合云的全网流量采集与分发解决方案,DeepFlow不仅能够轻松对接兼容AWS、阿里云和腾讯云等主流云平台上的各类服务,更能通过海量探针高效采集和监控各类业务流量。由此,DeepFlow首先能够实现各类北向流量过滤、压缩、去重、特征标记,让用户获得各类流量的全知上帝视角;更进一步的,通过对各类云平台的对接深度兼容以及对流量的细致分析,用户还能够实现对各种云资源用量的统一监控。 与NSP一样,DeepFlow采用了分布式架构设计和开放的管理监控接口,用户即可以获得面向未来的持续演进能力,也能根据自身需求开发各类高级功能。而在安全层面,DeepFlow则具备海量探针秒级启停、系统自我监控及防过载、加密信令传输等众多特性。 NSP对内、DeepFlow对外,二者相结合,企业便可在统一的界面上实现混合云等复杂网络架构的全要素、全量统一监管。对于大型企业来说,在不借助硬件设备的情况下形成这些能力,至关重要;而如果能够在此之上并保持整个架构的灵活、高效、平滑演进,那更是锦上添花。 一招鲜,吃遍天;而内外网两手抓的云杉网络,显然更受用户青睐。 持续创新+持续服务 云杉网络未来可期 作为一家纯软件网络解决方案厂商,“不造设备”即是云杉网络的优势,也是对云杉网络实力的考验。通过软件来实现管理,云杉网络可以防止用户被绑定,从而降低用户对云杉的选择门槛;但另一方面,云杉网络也只能通过软件来实现对全部网元的纳管和兼容。云杉网络长期以来都与各大网络设备制造商保持产品级的深度合作,确保云杉网络解决方案能够获得优异的设备兼容性。因此,在谈及与设备厂商在实际项目中的关系时,张天鹏用“合大于竞”进行了精准的概括。 【IT葡萄皮】(公众号:itopics)由资深媒体人张垞运营。从业十二年的深度观察,只为一篇不吐不快的科技评论。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册开户_Netflix是怎样做系统监控的?

原文链接:https://netflixtechblog.com/telltale-netflix-application-monitoring-simplified-5c08bfa780ba 作为知名的流媒体巨头,Netflix 在全球拥有近 2 亿订阅用户,服务遍及多个国家。本文阐述了 Netflix 的系统监控实践:自研 Telltale,成功运行并监控着 Netflix 100 多个生产应用程序的运行状况。 1 难忘的经历 相信很多运维人都有过这样的经历: 监控系统某个指标超过阈值,触发告警。大半夜里,你被紧急召唤。半睁着眼,你满脸疑惑:“系统真出问题了吗,还是仅仅需要调整下告警?上一次有人调整我们的告警阈值是在什么时候?有没有可能是上游或者下游的服务出现了问题?” 鉴于这是一次非常重要的应用告警,因此你不得不从床上爬起来,迅速打开电脑,然后浏览监控仪表盘来追踪问题源头。忙了半天,你还没确认这个告警是来自于系统的问题,但也意识到,从海量数据中寻找线索时,时间正在流逝。你必须尽快定位告警的原因,并祈祷系统稳定运行。 对我们的用户来讲,稳健的 Netflix 服务至关重要。当你坐下来看《养虎为患》时,你肯定希望它能顺利播放。 多年来,我们从经常在深夜被召唤的工程师那里了解到应用程序监控的痛点: 过多的告警 太多滚动浏览的仪表盘 太多的配置 过多的维护 https://netflixtechblog.com/full-cycle-developers-at-netflix-a08c31f83249 2 Telltale 我们的流媒体团队需要一个全新的监控系统,可以让团队成员快速地诊断和修复问题;因为在系统告警的紧急情况下,每一秒都至关重要!我们的 Node 团队 需要一个仅需一小撮人就能运维大型集群的系统。 因此,我们构建了 Telltale。 Telltale 监控时间轴  Telltale 的特性 1. 汇集监控数据源,创建整体监控视图 Telltale 汇集了各种监控数据源,从而能创建关于应用程序运行状况的整体监控视图。 2. 多维度判断应用程序的健康状况 Telltale 可以通过多个维度判断一个应用程序的健康情况,而无需根据单一指标频繁调整告警阈值。 3. 及时告警 因为我们知道应用程序在什么情况下是正常的,所以能在应用程序有异常趋势时及时通知应用程序的所有者。 4. 显示关键数据 指标是了解应用程序运行状态的关键。但很多时候,你拥有太多的指标、太多的图表以及太多的监控仪表盘。而 Telltale 仅显示应用程序中有用的相关数据及其上游和下游服务的数据。 5. 用颜色区分问题的严重程度 我们使用不同的颜色来表示问题的严重程度(除选择颜色之外,还可以让 Telltale 显示不同的数字),以便运维人员一眼就能判断出应用程序的运行状况。 6. 高亮提示 我们还会对一些监控事件进行高亮提示,比如局部区域的网络流量疏散及就近的 服务部署,这些信息对于全面了解服务的健康情况至关重要,尤其是在真正发生系统故障的情况下。 这就是我们的 Telltale 监控。它现已成功运行并提供监控服务,监控着 Netflix 100 多个生产应用程序的运行状况。 3应用程序健康评估模型 微服务并非是孤立存在和运行的。它需要特定的依赖,与其他服务进行数据交互,甚至位于不同的AWS区域。 上面的调用图是一个相对简单的图,其中涉及许多服务,实际的调用链可能会更深更复杂。一个应用程序是系统生态的一部分,它的运行状态可能会受到相关属性变化的微弱影响,也有可能会受到区域范围内某些事件的影响从而发生根本性改变。canary的启动可能会对应用程序产生一定影响。在一定程度上,上游或下游服务的部署同样也可以带来一定的影响。 https://netflixtechblog.com/automated-canary-analysis-at-netflix-with-kayenta-3260bc7acc69 Telltale 通过使用多个维度的数据源构建一个不断自我优化的模型来监控应用程序的健康度: Atlas 时序指标 区域网络流量疏散 Mantis 实时流数据 基础架构变更事件 Canary 部署及使用 上、下游服务的运行状况 表征 QoE 的相关指标 告警平台发出的报警 不同的数据源对应用程序健康度的影响权重不同。例如,与错误率增加相比,响应时间的增加对应用程序的影响要小很多;错误代码有很多,但是某些特定的错误代码的影响要比其他错误代码的影响大。 在服务下游部署 canary 可能不如在上游部署带来的效果明显 区域网络流量转移意味着某个区域的网络流量降为零而另一个区域的网络流量会加倍。你可以感受下不同的指标对于监控的影响。监控指标的具体含义决定了我们应该如何科学有效地使用它来进行监控。 https://netflixtechblog.com/project-nimble-region-evacuation-reimagined-d0d0568254d4 在构建应用程序健康状况视图时,Telltale 考虑了所有这些因素。 应用程序健康评估模型是 Telltale 的核心。 4智能监控 每个服务运维人员都知道告警阈值调整的难度。将阈值设置得太低,你会收到大量虚假告警。如果过度补偿并放宽告警阈值,就会错过重要的异常警告。这样导致的最终结果是对告警缺乏信任。Telltale 可以帮助你免除不断调整相关配置的繁琐工作。 通过提供准确的和严格管理的数据源,我们能让应用程序所有者的设置和配置过程变得更加容易。这些数据源通过按照一定的组合应用到程序的配置中,以实现最常见的服务类型配置。 Telltale 可以自动追踪服务之间的依赖关系,以构建应用程序健康评估模型中的拓扑。通过数据源管理以及拓扑监测,在不用付出很大的努力情况下就能使配置保持最新状态。那些需要手动实践的一些场景仍然支持手动配置和调整。 没有任何一个独立的算法可以适用我们所有的监控场景。因此,我们采用了混合算法,包括统计算法、基于规则的算法和机器学习算法。 不久后,我们将在 Netflix Tech Blog 上发表一篇针对我们监控算法的文章。 Telltale 还具有分析器,可用于趋势探测或内存泄漏监测。智能监控意味着我们的用户可以信赖我们的监控结果。这表明故障发生时,用户能更快地定位和解决系统异常问题。 5智能告警 智能监控必然会促进智能告警。当 Telltale 检测到应用程序中的运行异常时,就会产生异常事件。团队可以选择通过 Slack、电子邮件或 PagerDuty(均由我们的内部告警系统提供支持)进行告警。 如果该异常问题是由上游或下游系统引起的,则 Telltale…