软件开发架构师

架构周报:周鸿祎回应发“免裁券”:自编黑段子,纯属开玩笑;苹果要求开发者验证身份,中国区要自拍;误删库删表后的挽救措施-InfoQ

架构 139 2020-01-19 16:40

本期架构视点: 苹果要求开发者验证身份,中国区要求自拍;使用 WebAssembly 的网站中有 50% 将其用于恶意目的;SpaceX 成为世界最大的私人卫星运营商;C 语言获评年度编程语言奖项;陌陌给员工发顶配 iPhone11 作新年礼品;周鸿祎回应发放“免裁券”:自编黑段子 纯属开玩笑;误删库删表后的挽救措施。

万万没想到

周鸿祎回应发放“免裁券”:自编黑段子 纯属开玩笑

架构周报:周鸿祎回应发“免裁券”:自编黑段子,纯属开玩笑;苹果要求开发者验证身份,中国区要自拍;误删库删表后的挽救措施-InfoQ-1

1 月 8 日晚间消息,360 董事长兼 CEO 周鸿祎今日在朋友圈透露,今年 360 年会设置特等奖为“免裁券”,获此券的员工可“抵消一次裁员”。有网友认为,此举预示着 360 将进行裁员。周鸿祎当晚解释称:这是我编的自黑段子,纯属开玩笑,大过年的让大家开心一笑,大家有点幽默感行吗,还有很多人当真了,煞有介事的报道评论。此前,360 集团回应称,没有裁员计划,今天的是幽默,实际上是为了鼓励创新,大胆试错。

苹果要求开发者验证身份,中国区要求自拍

苹果开始要求开发者验证身份,中国区要求自拍,而其他地区则要求拍摄驾照或政府签发的照片 ID 的照片。苹果对中国区的要求是,“为了验证您的身份,系统会要求您进行自拍:确保您的脸部清楚地显示在取景框内,然后轻点“拍摄”。查看您的自拍照以确保照片清晰,然后轻点“确认”。”其它地区是“To verify your identity, you’ll be asked to capture your driver’s license or government-issued photo ID”。

使用 WebAssembly 的网站中有 50% 将其用于恶意目的

学术研究报告显示,排名前 100 万个网站中,只有 1639 个网站使用 WebAssembly,而其中大约有 50% 将其用于恶意目的。WebAssembly 是一种低级的类汇编语言,具有紧凑的二进制格式,能以接近原生的性能运行,并为诸如 C / C ++ 等语言提供一个编译目标,以便它们能在 Web 上运行。同时,它也被设计为可以与 JavaScript 共存,允许两者一起工作。主要有两类代码用于恶意目的:

  • 用于加密货币挖掘的 WebAssembly 代码。这种类型的 Wasm 模块通常会在被黑客入侵的网站上发现,这是所谓的 Cryptojacking 攻击的一部分;
  • 涉及打包在混淆的 Wasm 模块中的 WebAssembly 代码,这些模块有意隐藏其内容。研究团队称,这些模块是恶意广告活动的一部分。

华纳兄弟尝试用 AI 帮助电影拍摄决策

华纳兄弟成为最新一个采用 Cinelytic 公司 AI 项目管理系统的电影工作室。华纳将在是否批准开拍电影的阶段利用 AI 系统指导决策。AI 未必能预测哪一部电影将会大爆 10 亿美元的票房,但能减少在低价值重复性任务中投入的时间。利用其全面的数据,它能在数秒内评估电影计划或明星价值,而人类做同样的工作可能需要数天时间。它无法做创意性的决策,这项工作仍然依靠人类。

SpaceX 成为世界最大的私人卫星运营商

本周一,SpaceX 使用 Falcon 9 火箭完成了它在 2020 年的首次发射,将 60 颗 Starlink 互联网卫星送入轨道。SpaceX 至今已完成三次 Starlink 卫星发射,将约 180 颗卫星送入地球低轨道,这使它同时成为世界最大的私人卫星运营商以及世界最活跃的私人火箭发射公司。此次发射使用的 Falcon 9 火箭第一级已经是第四次使用,它被称为 Core B1049.4,其中 B 代表 booster,1049 是序列号,4 是第四次,前三次是 2018 年 9 月执行 Telstar 18 VANTAGE 发射任务,2019 年 1 月执行 Iridium-8 任务,2019 年 5 月执行 Starlink 1 任务。火箭第一级在发射之后成功着陆在大西洋上的无人驳船 Of Course I Still Love You 上。

追着谷歌打 API 官司的甲骨文被发现了拷贝亚马逊 API

美国最高法院将就 Google Android 系统拷贝甲骨文 Java API 一案举行听证会,裁决 API 在版权法下的法律地位。此案的结果将对 Google 等公司产生深远影响。API 本质上是指示计算机如何操作的语言,包含了一个与语法结构相关的命名命令表。Google 的 Android 设计兼容 Java,因此熟悉 Java 的程序员可以将经验和知识带到新的移动设备平台。为此 Android 必须拷贝相关的 Java API 命令和语法结构,甲骨文认为这种 Java API “重新实现”相当于写未经授权的哈利波特小说,侵犯了其版权。然而拷贝 API 在软件行业是十分常见的做法,而甲骨文自己也被发现拷贝了竞争对手亚马逊云服务 S3 的 API。

Linus Torvalds 礼貌地批评一位开发者的博文

2018 年,Linux 作者 Linus Torvalds 在因语言礼貌问题备受非议之后宣布反省一段时间,接受礼貌训练的 Torvalds 之后其言论不再咄咄逼人,而是变得非常绅士。在一位 C++ 开发者 Malte Skarupke 声称 Linux 存在调度器问题,影响了开发者为 Google 的云平台 Google Stadia 提供 Linux 游戏之后,Linus Torvalds 回应称他的博文纯粹胡扯,根本不懂调度器。他的回应听起来苛刻,但其实还是非常的有礼貌,没有进行任何可能的人身攻击,而是很有耐心的讲述这篇有关调度器的博文究竟错在什么地方。

Windows 95 的 UI 设计比 Windows 10 好?

Reddit 网友 UX 爱好者 Tuomas Salo 发布推文表达了他对于 Windows 95 在 UI 与 UX 设计上的赞赏,并称今天我们在这一方面反而把 95 的这些精华给丢掉了。

架构周报:周鸿祎回应发“免裁券”:自编黑段子,纯属开玩笑;苹果要求开发者验证身份,中国区要自拍;误删库删表后的挽救措施-InfoQ-2

如给出的图片所标注的,Tuomas 具体说明了 Windows 95 几个设计上的要点:

  • 带下划线的字母表示键盘快捷键,很方便。
  • 设计清楚地表明“我们是按钮”,可以很容易找到想要的按钮。
  • 列标题看起来像按钮,因为它们就是按钮。
  • 分隔栏类似于窗框,一看就知道它可以调整大小。
  • 始终可见的滚动条会立即反馈用户关于内容和数量的信息。
  • 省略号提示此按钮将打开一个对话框,而不是立即执行操作。
  • 手柄让用户知道该窗口可以调整大小。

该话题下最高赞的评论是对 Windows 10 的吐槽,用户觉得 Windows 10 设置菜单十分混乱,“我发誓,每当我想更改某些东西时,就像感觉我必须在某种迷宫中导航一样”。他还表示,较旧的 UI 尽了最大的努力让其操作可预测,并且用户只需要了解它的工作方式即可,但是现代 UI 更像是 UI 在试图预测,或者去了解用户,这与前者完全相反。

C 语言获评年度编程语言奖项

TIOBE 发布了 2020 年最新一期的编程语言排行榜,老牌 C 语言击败 Python、Java、C# 获评年度编程语言。TIOBE 认为 C 语言年增长率(2.4%)击败火热的 Python(1.41%)趋势背后的主要驱动力是物联网(IoT)和当今发布的大量小型智能设备。当将 C 应用于对性能至关重要的小型设备时,它的表现会十分出色。另外,C 语言也比较容易学习,并且每个处理器都有一个 C 编译器。

陌陌给员工发顶配 iPhone11 作新年礼品

1 月 10 号上午消息,有陌陌员工晒出内部邮件,邮件显示,公司为 2019 年 12 月 31 日前在职的正式员工每人准备了一份礼品,礼品为 iPhone 11 256G,颜色随机。据悉,在每年的互联网公司年底福利盘点中,陌陌都是最土豪之一,曾在年会发放了高达数千万元奖金,仅阳光普照大奖就每个人 25000 现金。陌陌上市已有五年,此前最新的 2019 年 Q3 季度财报显示,陌陌营收同比增长 22% ,净利润 10.9 亿元 , 同比增长 40.1% 。

苹果滞销的另一种解决方式?

轻松长知识

误删库删表后的挽救措施

虽然我们之前遇到的大多数的数据被删,都是运维同学或者 DBA 背锅的。但实际上,只要有数据操作权限的同学,都有可能踩到误删数据这条线。今天我们就来聊聊误删数据前后,我们可以做些什么,减少误删数据的风险,和由误删数据带来的损失。

在误删库 / 表情况下,要想恢复数据,需要使用全量备份,加增量日志的方式。这个方案要求线上有定期的全量备份,并且实时备份 binlog。

在这两个条件都具备的情况下,假如有人中午 12 点误删了一个库,恢复数据的流程如下:

  1. 取最近一次全量备份,假设这个库是一天一备,上次备份是当天 0 点;
  2. 用备份恢复出一个临时库;
  3. 从日志备份里面,取出凌晨 0 点之后的日志;
  4. 把这些日志,除了误删除数据的语句外,全部应用到临时库。

这个流程的示意图如下所示:

架构周报:周鸿祎回应发“免裁券”:自编黑段子,纯属开玩笑;苹果要求开发者验证身份,中国区要自拍;误删库删表后的挽救措施-InfoQ-3

图 1 数据恢复流程 -mysqlbinlog 方法

需要说明的是:

为了加速数据恢复,如果这个临时库上有多个数据库,你可以在使用 mysqlbinlog 命令时,加上一个 --database 参数,用来指定误删表所在的库。这样,就避免了在恢复数据时还要应用其他库日志的情况。

在应用日志的时候,需要跳过 12 点误操作的那个语句的 binlog:

  • 如果原实例没有使用 GTID 模式,只能在应用到包含 12 点的 binlog 文件的时候,先用 --stop-position 参数执行到误操作之前的日志,然后再用 --start-position 从误操作之后的日志继续执行;
  • 如果实例使用了 GTID 模式,就方便多了。假设误操作命令的 GTID 是 gtid1,那么只需要执行 set gtid_next=gtid1;begin;commit; 先把这个 GTID 加到临时实例的 GTID 集合,之后按顺序执行 binlog 的时候,就会自动跳过误操作的语句。

不过,即使这样,使用 mysqlbinlog 方法恢复数据还是不够快,主要原因有两个:

  1. 如果是误删表,最好就是只恢复出这张表,也就是只重放这张表的操作,但是 mysqlbinlog 工具并不能指定只解析一个表的日志;
  2. 用 mysqlbinlog 解析出日志应用,应用日志的过程就只能是单线程。我们在第 26 篇文章中介绍的那些并行复制的方法,在这里都用不上。

一种加速的方法是,在用备份恢复出临时实例之后,将这个临时实例设置成线上备库的从库,这样:

  • 在 start slave 之前,先通过执行 change replication filter replicate_do_table = (tbl_name) 命令,就可以让临时库只同步误操作的表;
  • 这样做也可以用上并行复制技术,来加速整个数据恢复过程。

这个过程的示意图如下所示:

架构周报:周鸿祎回应发“免裁券”:自编黑段子,纯属开玩笑;苹果要求开发者验证身份,中国区要自拍;误删库删表后的挽救措施-InfoQ-4

图 2 数据恢复流程 -master-slave 方法

不论是把 mysqlbinlog 工具解析出的 binlog 文件应用到临时库,还是把临时库接到备库上,这两个方案的共同点是:误删库或者表后,恢复数据的思路主要就是通过备份,再加上应用 binlog 的方式。

也就是说,这两个方案都要求备份系统定期备份全量日志,而且需要确保 binlog 在被从本地删除之前已经做了备份。

但是,一个系统不可能备份无限的日志,你还需要根据成本和磁盘空间资源,设定一个日志保留的天数。如果你的 DBA 团队告诉你,可以保证把某个实例恢复到半个月内的任意时间点,这就表示备份系统保留的日志时间就至少是半个月。

不论使用上述哪种方式,都要把这个数据恢复功能做成自动化工具,并且经常拿出来演练。

本部分内容出自极客时间《MySQL 实战 45 讲》专题,作者丁奇。

文章评论