服务分类
联系我们

长沙市华融劳务派遣有限公司 
电话:0731-88084518
传真:0731-88084518
手机:15111173115
联系人:陈先生
邮编:410200
网址:http://www.hsyush.com
地址:长沙市望城县高塘岭镇郭亮南路49号

 

贝斯特娱乐城
贝斯特娱乐城_贝斯特娱乐城平台_贝斯特娱乐城官网
作者:admin  来源:未知 阅读: 次 时间:2017-01-13 10:55 字体:[  复制 打印 网址

Facebook已经将HydraBase捐赠给Apache,目前很多代码都已经被合并到HBase中。

Facebook开源了Haxl,一个为高效并发数据访问而开发的库。这个库

GraphQL是Facebook开源的数据查询语言。Facebook在构建移动应用程序时,需要用API获取足够强大的数据来描述所有的脸谱,同时简单易学易用,于是开发了GraphQL,并支持每天千亿级的调用。GraphQL不是像MySQL或Redis这样直接面向数据的接口,而是面向已经存在的应用代码的接口。你可以把GraphQL看作是为了调用应用服务器上的方法的一些内嵌的RPC。

从Facebook的GitHub账户中可以看到,Facebook已经开源的开源项目有近300个,领域涉及移动、前端、Web、后端、大数据、数据库、工具和硬件等。Facebook开源项目负责人JamesPearce曾在OSCON解释过Facebook究竟为何要使用、支持和发布开源项目。具体如下:

在最基础层面,Jest被设计用于快速、简单地编写地道的JavaScript测试。Jest自动模拟require()返回的CommonJS模块,并提供了包括内置的测试DomAPI支持、合理的默认值、预处理代码和默认执行并行测试在内的特性。通过在并行进程中同时运行测试,Jest让测试更快地结束。

ReactNative是Facebook在2016年开源的基于React.js的移动开发框架,它的设计是让移动应用既拥有Native的用户体验,同时又可以保留React的开发效率,提高代码的复用率。ReactNative的旨是,学习一次,高效编写跨平台原生应用。开发者可以使用JavaScript编写应用,并利用相同的核心代码就可以创建Web、iOS和Android平台的原生应用,目前已经实现了对iOS和Android两大平台的支持。

每次Facebook工程师努力增加一项新特性时,系统的复杂性成级数增长,代码变得“脆弱和不可预测”。对于刚接触某个代码库的开发人员来说,这正成为一个严重的问题。Flux是一个Facebook开发的、利用单向数据流实现的应用架构,用于React。Flux应用有三个主要的部分组成:调度程序、存储和视图(React组件)。

一方面利用了Haskell的传统优势,比如表达力很强的类型系统、对正确性和安全性的保障,另一方面也受益于GHC(Haskell编译器)的高性能运行时库,解决烦人的隐式并发数据访问的问题。Haxl简化了对远程数据的访问,比如数据库或网站服务。对同一数据源的多个访问请求,或同时从不同的数据源请求数据,它都能批量处理,并且缓存上一次的结果。

Mcrouter是一个基于Memcached协议的由器,它是Facebook缓存架构的核心组件,在峰值的时候,它能够处理每秒50亿次的请求。Memcached服务的客户端都会使用标准ASCII编码的Memcached协议,所以对于客户端来说,Mcrouter就像一个Memcached服务器;而对于服务器端来说,Memcached却又像一个普通的Memcached客户端。Mcrouter主要使用C++开发,且使用C开发了功能库部分,使用Ragel开发了协议解析部分,使用开源库Folly和Fbthrift处理异步网络。

代码审查方面,Facebook开源了可视化工具Phabricator。工程师可以在页面上非常方便的针对每一段(单行或者多行)代码进行交互讨论;负责审查的工程师可以接受代码改变,可以提出疑问要求原作者继续修改,可以提出自己不适合以推出该代码审查,等等。只有代码被明确接受之后才能被工程师提交到服务器端的代码库,这一点集成到提交工具中强制执行。

现在App的原型设计越来越复杂,以前使用PhotoShop制作静态图的方式不能满足各种交互效果的展示,Paper的首席设计师MikeMatas在加入Facebook之初就推荐大家使用QuartzComposer来快速构建应用原型,而Facebook的设计团队也很快接收并喜欢上了这个工具,在随后的应用,他们遇到了一个问题:对于产品设计师来说,QuartzComposer的学习曲线太高。

HHVM(HipHopVirtualMachine)是Facebook于2016年开源的PHP执行引擎。它采用一种JIT(just-in-time)的编译机制实现了高性能,同时又保持对PHP语法的充分支持。HHVM常常用作的服务器,用于替代Apache与mod_php,旨在执行使用Hack与PHP所编写的程序。它使用了即时编译方法来实现超高的性能,同时又保持了PHP开发者所习惯的灵活性。

RocksDB是Facebook开源的嵌入式、可持久化键值存储系统,它基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定、内存和一次写负荷。过去一段时间,RocksDB在社区非常流行,Facebook分析其原因在于它能够对由于网络延迟等原因造成的慢查询响应时间起到消除的作用,RocksDB非常灵活,完全可以针对各种新兴的硬件发展趋势进行定制。LinkedIn与Yahoo都是RocksDB的重度使用者。

Proxygen是一款Facebook开源的支持SPDY3.1的HTTP框架。其目的不是替换Apache,而是有能力创建一个专用的高性能Web服务器,使其可以嵌入到Facebook提供Web服务的现有应用中。Facebook从2016年开始构建一款代理服务器(Proxygen这个名字也是由此而来),在该项目演进并在生产中测试了数年之后,Facebook将其代码开源了。Facebook内部做的基准测试表明,在一个Proxygenecho服务器上,每秒可以支撑多达304197次基于SPDY3.1的内存GET请求。

Flow是Facebook出品的一个JavaScript代码的静态类型检查工具,该工具采用源码的OCaml(ObjectiveCaml)语言开发,。Flow能够帮助开发人员查找出JavaScript代码中的类型错误,从而提高开发效率和代码质量。Flow已经能够捕获JavaScript代码中的常见问题,如静态类型转换不匹配、空指针引用等问题。同时,Flow还为JavaScript新增了类型语法,如类型别名。

了解更多:

Nuclide是Facebook推出的一套基于Atom的开发工具集,用于开发基于Hack的Web应用,提供自动完成和JavaScript类型检查,内建React开发支持,并支持Facebook最新的ReactNative库,支持Facebook的FlowJavaScript类型检查器。Nuclide的设计目是为了在整个公司为工程师提供一套标准的开发者经验——无论他们从事纯iOS应用,React和ReactNative代码,或者在Hack运行我们的HHVM网络服务。

FBMemoryProfiler是Facebook开源的一款用于分析iOS内存使用和检测循环引用的工具库。

共享Facebook的代码(通常是软件“栈”,偶尔也包括硬件设计)促进了这个世界的创新。这些代码帮助他人更快地开发软件。因为Facebook不是一家软件公司,所以它在开源过程中没有面临竞争对手的,相反,开源带来的价值在逐渐。用户使用Facebook的开源代码可以更快地构建应用,而他们也乐于回馈代码,使Facebook从中受益。

在Facebook,有很多工程师在代码库的不同部分上工作。这不可避免的会发生内存泄露。当发生内存泄露之后,工程师需要尽快找到并修复它们。一些工具已经可以找到内存泄露,但是它们需要大量的人工干预。自动化可以在不需要更多开发者的情况下,更快的找到内存泄露。为了解决这个问题,Facebook做了一套工具来自动化的处理和修复代码库中的一些问题,这个工具就是FBMemoryProfiler。

Rebound是一个弹簧模型Java库,由Facebook于2016年10月在大会上发布,旨在应用中引入真实的物理世界,创建让人感觉很接近自然的动画。Rebound不是通用物理库,但是,弹簧模型能够驱动各种各样的动画。Rebound的简单特性使它很容易被集成,以及作为构建块创建如呼叫、滚动条和切换开关等复杂组件。

AugmentedTrafficControl(ATC)能够利用Wi-Fi网络模拟2G、2.5G(Edge)、3G以及LTE4G移动网络,测试工程师们可以快速在各种不同的模拟网络中切换,从而实现对智能手机和App在不同国家地区和应用下的性能表现进行测试。ATC是Facebook内部团队在2016年的一次Hackathon活动上开发出来的工具,其原理实际是利用了Linux流量控制系统,通过纯Python的网络库pyroute2调用netlink的API控制,而开发其的目的是为了确保更多的用户获得最好的应用体验。

Infer是Facebook的开发团队在代码提交内部评审时,用来执行增量分析的一款静态分析工具,在代码提交到代码库或者部署到用户的设备之前找出bug。由OCaml语言编写的Infer目前能检测出空指针访问、资源泄露以及内存泄露,可对C、Java或Objective-C代码进行检测。Facebook使用Infer自动验证iOS和上的移动应用的代码,bug报告的正确率达80%。Infer通过捕获编译命令,把要被编译的文件转换为可用于分析潜在错误的中间语言格式。整个过程是增量进行的,意味着通常只有那些有修改过并提交编译的文件才会被Infer分析。Infer还集成了大量的构建或编译工具,包括Gradle、Maven、Buck、Xcodebuild、clang、make和javac。

HydraBase是HBase数据库的升级版。Facebook是HBase的重度用户,Facebook的HBase数据库系统存储着Facebook的很多关键业务数据,包括内部系统、搜索索引、流数据分析以及数据抓取等。HydraBase相比HBase稳定性和可用性更高,可以减少服务器宕机时间。HydraBase能够让一个数据域分布在多个域服务器中,域服务器之间能相互备份,因此能够大大减少数据恢复所用的时间。Facebook声称HydraBase能将Facebook全年的宕机时间缩减到不到5分钟。

Facebook认为MVC无法满足他们的扩展需求,因此他们决定使用另一种模式:Flux。由于Facebook非常巨大的代码库和庞大的组织,所以MVC真的很快就变得非常复杂,于是他们得出结论,认为MVC不适合于大规模应用。

拥抱开源,意味着Facebook必须一开始就写出更优秀的软件。如果他们知道某个软件从诞生起就要公开,那就必须要好好做,提高可用性和可靠性,因为将来外面的人都会用它。这种压力也会给公司内部带来更多的价值。

Buck受到了GoogleBlaze的,创建它是为了处理与多个Android库有复杂关联的应用程序,从而减少构建时间。引入Buck之后,Facebook开发的四种本地Android应用程序中使用了单一的代码树和构建工具,这让开发更简单、更流畅,错误更少。最初的38个库在四种应用程序之间共享了500个模块。使用Buck替换了最初基于Ant的系统之后,第一次针对代码树运行时,构建时间就从3分40秒降到1分30秒。

相比传统的Android编译工具,Buck凭借多核及并行技术,极大加速了Android工程的编译速度。同时,多次编译过程中,它会对未变动的模块进行标记,以增量式编译的方式进一步提高速度。Buck自带编译脚本生成功能,并提供编译过程中单元测试的代码覆盖率等数据表单,还为无法用Ant工具编译的模块提供了便捷的编译方式。Buck跟IntelliJ结合紧密,可通过简单的编译脚本生成该IDE可用的工程,极大降低了本地IDE开发后向服务器迁移的成本。

手机设备的内存是一个共享资源。应用程序可能会不当的耗尽内存、崩溃,或者大幅度的性能降低。当分配了一块内存,并设置了对象之后,如果在使用完了之后忘记,这就会发生内存泄露。这意味着系统是无法回收内存并交予他人使用,这也最终意味着我们的内存将会逐渐耗尽。

Jest是一个开源的、基于Jasmine框架的JavaScript单元测试工具。Jest源于Facebook两年前的构想,用于快速、可靠地测试Web聊天应用。它吸引了公司内部的兴趣,Facebook的一名软件工程师JeffMorrison半年前又重拾这个项目,改善它的性能,并将其开源。

ComponentKit使用功能性和声明性(declarative)的方法来进行创建界面,和以往不同的是,ComponentKit使用单向数据流的形式从不可变的模型映射到不可变的组件来确定视图的显示方式。ComponentKit的declarative看上去和declarativeUI(QML)差不多,其实差得远。QML更偏向于UI设计的描述性,而ComponentKit则是做好基本UI和事件之间的联系,让事件设计和UI设计可以分开单独完成。

osquery是一款面向OSX和Linux的操作系统检测框架。它将操作系统为一个高性能的关系型数据库,允许用户编写SQL查询查看操作系统数据。在osquery中,SQL表代表像下面这样的抽象概念:

近些年,人工智能和机器学习方向取得了长足的发展。据KevinLee透露,Facebook的AI软件已经能够阅读故事、回答相关场景的问题、玩游戏以及通过一些例子来学习非指定的内容。作为计算密集型的应用,AI软件的性能与数据集规模/硬件性能密切相关。尤其是硬件方面,高性能微处理器、存储器以及图形处理器(GraphicsProcessingUnit,GPU)的发展为AI算法的快速运行提供了基础。为了进一步更好地服务大规模AI计算,Facebook推出了基于GPU的、用于训练神经网络的“BigSur”硬件系统。

WebScaleSQL是基于MySQL5.6社区版本改编的MySQL通用分支,基于GPL开源协议发布。WebScaleSQL目前已经做了很多性能改进工作,包括:客户端异步协调、逻辑预读、查询限流、服务端线程池优化、InnoDB大页支持等等。WebScaleSQL上的功能都是很“WebScale”和接地气的。比如线程池优化,WebScaleSQL基于Mariadb的线程池实现进行重写并优化,对读写队列进行分离,重新设计队列优先级策略,避免了饿死现象。要知道线程饿死在有些场景下是很严重的。尤其是在并发连接数往往很大的互联网应用里面。

于是Mike就带头开发了Origami。2016年12月,Facebook开源了基于QuartzComposer的插件Origami,设计师可以通过Origami能够快速构建移动应用交互原型,随后交付给工程师实现,值得注意的是Origami无需编程背景,新发布的Paper从项目设计之初所有的原型设计都是采用Origami来实现。

Presto是Facebook开发的一款分布式SQL引擎,主要用于针对各种大小的数据源(从GB到PB)来运行交互式分析查询。Facebook创建Presto的主要目的在于帮助他们更快地分析数据,因为Facebook的数据量一直在持续增长,产品周期的节奏也变得越来越快。自从2016年11月开源后,Presto的用户量呈现了爆发式增长。诸如Airbnb、京东、Dropbox以及Netflix等公司都将Presto作为自己的交互式查询引擎。

Stetho是一个Android应用的调试工具。当Android应用集成Stetho时,开发者可以通过访问Chrome,在ChromeDeveloperTools中查看应用布局、网络请求、sqlite、preference等等,可视化一切应用操作(更重要的是不用root)。开发者也可通过它的dumpapp工具提供的命令行接口来访问应用内部。

Pop是Facebook推出的一个可扩展的iOS和OSX动画库,其新闻聚合阅读应用Paper背后的核心技术就是由Pop支持。除了增加基本的静态动画外,还支持Spring和衰变动态动画,可非常方便的构建现实的、基于物理的交互。Pop动画库的动画效果非常流畅,因为它使用了CADisplayLink来刷新画面(帧),一秒钟刷新帧数为60帧,接近于游戏开发引擎。Pop动画的自成体系,与系统的CoreAnimation有很大的区别,但使用上非常相似。

React是Facebook开发的用于构建用户界面的JavaScript库,现已为很多公司所用,因为它采用了一种不同的方式来构建应用:借助于React,开发者可以将应用分解为彼此解耦的组件,这样就可以并迭代各种组件了。2016年,React有两个主要的发布,同时还发布了ReactNative,并且发布了新的开发者工具。现在已经有越来越多的公司(包括Netflix与WordPress)开始使用React构建自己的产品了。

版权所有:长沙市贝斯特娱乐城劳务派遣有限公司 联系人:陈先生  电话:15111173115 传真:0731-88084518 
邮政编码:410200  地址:长沙市望城县高塘岭镇郭亮南路49号。 备案许可证编号为:湘ICP备11001510号