每月技术提升2016年12月

文章目录

每月技术追踪

  1. [编程语言]在苹果负责语言和运行时的Ted Kremenek在博文中表示,苹果的Swift团队已经公开了Swift 3.1的发布计划,Swift 3.1预计将于2017年春季发布,并且可与Swift 3.0源代码兼容。Swift 3.1的版本更新只是对核心语言和Swift Package Manager的功能进行了一些增强,同时改进了对Linux系统的语言支持。
  2. [前端框架1]近日 Bootstrap 4 合并了 PR,此次的alpha版将移除对IE9的支持,并将Flexbox作为默认的布局系统。 现在,栅格系统等组件只使用 flexbox 来构建而非之前那样根据 $enable-flex 变量而定,同时这个 Sass 变量也被去除了。移除对IE9的支持这一举动受到了广大开发者的热议,其中大部分人还是持支持态度的:如果要支持IE9,那就使用Bootstrap 3吧。都2017年了,我们需要Flexbox!
  3. [前端框架2]在上周举行的比利时NG-BE 2016的主题演讲上,Google Angular团队首席开发Igor Minar透露了Angular的后续发布计划,他提到下一个Angular主版本将是Angular 4。Angular 4将尽可能兼容Angular 2,因为Angular团队不想重蹈从Angular 1.X到Angular 2.X的覆辙。团队计划每六个月发布一个主要版本,所以Angular 5将在2017年9月到来,而Angular 6和Angular 7将分别在2018年3月和2018年9月发布。没人知道Angular以后会如何发展,但毫无疑问的是未来的版本将带来最低限度的重大更改。
  4. [数据库]当昨天小伙伴们沉浸于双12的买买买节奏中,孰料远在美国西海岸的Oracle官方放出了最新的MySQL 5.7.17版本。更为重要的是,MySQL Group Replication终于来了。MGR准确来说是MySQL官方推出的高可用解决方案,基于原生复制技术,并以插件的方式提供。通过Paxos协议提供数据库集群节点数据强一致保证,扫清了MySQL进入金融行业最后的障碍。这个消息基本宣告了Galera这些第三方实现的死亡。曾经,Galera是款伟大而又引领时代的产品,死于2016年12月12日。
  5. [大数据]12月18日,深圳 – 腾讯大数据宣布推出面向机器学习的第三代高性能计算平台——Angel,并预计于2017年一季度开放其源代码,鼓励业界工程师、学者和技术人员大规模学习使用,激发机器学习领域的更多创新应用与良好生态发展。
  6. [机器学习1]如果你对 AlphaGo 感兴趣,也想自己动手试试,那么下面是个好消息:根据 Engadget 的报道,Google 宣布将 DeepMind 源代码开源,上传到 Github (https://github.com/deepmind/lab)上。Google 希望以此增加 AI 能力的开放性,让更多开发者参与 AI 研究,观察其他开发者是否能够挑战并打破 DeepMind 现在的纪录。
  7. [机器学习2]马克·扎克伯格在2016年12月19日发布了一篇博文,分享自己为家里构建AI管理系统、实现家居自动化控制的思路和过程。该AI管理系统被扎克伯格命名为Jarvis(《钢铁侠》中的贾维斯)。12月20日,扎克伯格又继续公布了一些Jarvis的使用视频。扎克伯格及家人可用语音向手机或计算机下达语音指令,实现灯光、温度、电器、音乐和安防设备的控制操作。该系统具备的学习功能可使其识别主人的偏好模式、学习新词汇与概念。
  8. [运维]Docker收购了一家特别棒的名为Infinit的公司。希望解决跨主机容器存储的问题。 Infinit 技术方案主要卖点是能与现有存储系统集成,真正的开箱即用分布式存储方案,使得在Docker上部署有状态服务或企业遗留应用变得更简单。我们将会采用非常开放和模块化的设计进行交付,让运营者可以轻松的与已有的存储系统整合。
  9. [科技公司]2016年12月5日一切都改变了。在西班牙NIPS 2016(巴塞罗那的神经信息处理系统会议)大会上,苹果AI研发部门负责人Russ Salakhutdinov宣布,苹果将会允许自己的AI研发人员公布自己的论文研究成果,并积极加入到AI学术圈的讨论当中。
  10. [金融科技]区块链、云计算、大数据、人工智能、FinTech带来的挑战与机遇,中国技术开放日上海站围绕这些话题开展了讨论。表面上,金融科技是指金融企业运用科技手段,使得金融服务变得更有效。而有些公司在新创时的目标就是要瓦解或者颠覆现有的不够科技化的大型金融企业和体系。
  11. [淘汰项目]近日,Firebug团队在其官网上宣布,Firebug将不再继续开发和维护,并邀请大家使用Firefox的内置开发工具。Firebug曾是很多前端开发者的必备工具,也有开发者是因Firebug而选择使用Firefox。如今,浏览器调试工具已有很多可选项,虽然Firebug离开了历史舞台,但它曾经的荧光陪伴了很多开发者。

chaozh评论:前端的飞速发展让各种不兼容被喷惨了,熟料MySQL这种数据库也能搞出大新闻。都说2016年是AI元年,所有科技大公司都开始在这个领域疯狂投入、输出和发力,我们看到AI已经逐渐脱离实验室走向各个工业领域,甚至可以轻松融入家庭生活。17年如果还不学点相关知识就真的要out了!

每月开源项目推荐

chaozh评价:年底回顾一下2016年微信开源软件,微信选择公开代码是好事,但是期望能够像G家和F家学习,把相关社区真正做起来。

C/C++协程库Libco

Libco是微信后台大规模使用的C/C++协程库,2013年至今稳定运行在微信后台的数万台机器上。Libco提供了完善的协程编程接口、常用的Socket族函数Hook等,使得业务可用同步编程模型快速迭代开发。

早期微信后台因为业务需求复杂多变、产品要求快速迭代等需求,大部分模块都采用了半同步半异步模型。接入层为异步模型,业务逻辑层则是同步的多进程或多线程模型,业务逻辑的并发能力只有几十到几百。随着微信业务的增长,系统规模变得越来越庞大,每个模块很容易受到后端服务/网络抖动的影响。基于这样的背景,微信开发了Libco,实现了对业务逻辑非侵入的异步化改造。

GitHub地址:https://github.com/tencent/libco
Star数量:1043

生产级paxos类库PhxPaxos

PhxPaxos是微信后台团队自主研发的一套基于Paxos协议的多机状态拷贝类库。它以库函数的方式嵌入到开发者的代码当中,使得一些单机状态服务可以扩展到多机器,从而获得强一致性的多副本以及自动容灾的特性。PhxPaxos在微信服务里面经过一系列的工程验证和大量的恶劣环境下的测试,在一致性的保证上极为健壮。

PhxPaxos的特性包括使用基于消息传递机制的纯异步工程架构、每次写盘使用fsync严格保证正确性、支持Checkpoint以及对PaxosLog的自动清理、使用点对点流式协议进行快速学习、支持跨机器的Checkpoint自动拉取、内置Master选举功能、自适应的过载保护等。

GitHub地址:https://github.com/tencent-wechat/phxpaxos
Star数量:970

高可用、强一致的MySQL集群:PhxSQL

PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下、即可提供服务,并且自身实现自动Master切换、保证数据一致性。PhxSQL不依赖于ZooKeeper等任何第三方做存活检测及选主。PhxSQL基于MySQL的一个分支Percona 5.6开发,功能和实现与MySQL基本一致。

MySQL主备在主机上支持完整SQL、全局事务、以repeatable read和serializable级别的事务隔离,在金融、帐号等关键业务中有巨大的价值。但是MySQL传统主备方案也有其缺点。最明显的就是主机故障后的自动换主和新旧主数据一致性,即所谓的一致性和可用性。为了解决这个问题,并同时完全兼容MySQL,微信在MySQL的基础上应用Paxos,设计和开发了PhxSQL。

GitHub地址:https://github.com/tencent-wechat/phxsql
Star数量:1485

RPC框架:PhxRPC

PhxRPC是微信后台团队推出的一个简洁小巧的RPC框架,编译生成的库只有450K(编译只依赖第三方库Protobuf)。PhxRPC的特性如下:

  • 使用Protobuf作为IDL用于描述RPC接口以及通信数据结构。
  • 基于Protobuf文件自动生成Client以及Server接口,用于Client的构建,以及Server的实现。
  • 半同步半异步模式,采用独立多IO线程,通过Epoll管理请求的接入以及读写,工作线程采用固定线程池。IO线程与工作线程通过内存队列进行交互。
  • 提供完善的过载保护,无需配置阈值,支持动态自适应拒绝请求。
  • 提供简易的Client/Server配置读入方式。
  • 基于lambda函数实现并发访问Server,可以非常方便地实现Google提出的 Backup Requests 模式。

GitHub地址:https://github.com/tencent-wechat/phxrpc
Star数量:467

终端跨平台网络组件:Mars

Mars是微信官方的终端基础组件,是一个结合移动应用所设计的基于Socket层的解决方案,在网络调优方面有更好的可控性,采用C++开发。目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。

在微信中,任何网络实现的bug都可能导致重大事故。例如微信的容灾实现,如果因为版本的实现差异,导致某些版本上无法进行容灾恢复,将会严重的影响用户体验。微信研发了统一的跨平台的网络基础库Mars来满足发展的需要,一方面,基础组件可以提高研发效率,另外一方面,也可以提高系统的稳健性。

在设计上,Mars以跨平台、跨业务为前提,遵从高可用,高性能,负载均衡的设计原则。以网络的可用性为例,移动互联网有着丢包率高、带宽受限、延迟波动、第三方影响等特点,使得网络的可用性,尤其是弱网络下的可用性变得尤为关键。Mars 的STN组件作为基于 socket 层的网络解决方案,在很多细节设计上会充分考虑弱网络下的可用性。

GitHub地址:https://github.com/Tencent/mars
Star数量:5895

热补丁技术Tinker

Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。

当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案,但它们都存在无法解决的问题,所以微信研发了自己的解决方案。总的来说,AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的。而Robust兼容性与成功率较高,但是它与AndFix一样,无法新增变量与类只能用做的bugFix方案。Qzone方案可以做到发布产品功能,但是它主要问题是插桩带来Dalvik的性能问题,以及为了解决Art下内存地址问题而导致补丁包急速增大的。

Tinker的具体设计目标如下:

  • 开发透明:开发者无需关心是否在补丁版本,他可以随意修改,不由框架限制。
  • 性能无影响:补丁框架不能对应用带来性能损耗。
  • 完整支持:支持代码,So 库以及资源的修复,可以发布功能。
  • 补丁大小较小: 补丁大小应该尽量的小,提高升级率。
  • 稳定,兼容性好:保证微信的数亿用户的使用,尽量减少反射。

GitHub地址:https://github.com/Tencent/tinker
Star数量:6707

打赏作者
提交看法

抢沙发

还没有评论,你可以来抢沙发