2018 年掘金 AMA 年度总结:16 位技术大牛他们的技术事

写在前面

趁着社区的年度征文活动👉【🏆 掘金年度征文 | 2018 与个人技术之路】,加上我司翻译计划大佬 LeviDing 出了【2018 年「掘金翻译计划」年度总结:咱们共同的成长故事】 不才的沸点运营也来凑个热闹总结下沸点#AMA#话题 的那些事吧。别问我为何不总结沸点,沸点太多不才无从下手css

在正式开始以前,仍是简单说下 AMA 是什么?前端

AMA 是什么?

掘金 AMA(ask me anything) 是掘金沸点的一个话题,掘金团队会邀请一位技术大牛经过「你问我答」的形式回答你的问题,让你们在技术、工做、生活方面有所成长。java

* Tips:本人不喜欢太过官方 or 正式的文字,本篇文章比较口语化,见谅(≧▽≦)node

本文目录python

目录mysql

2018 年 16 期 AMA

本文会从每期 AMA 会选一个高赞或极有价值问题,仅供技术交流。jquery

Vol 1:掘金 AMA - 听闲鱼客户端架构师宗心谈 Flutter 和他的团队

旁白:第一期 AMA,也是我我的最喜欢的 AMA 之一,宗心的海报真的让人感到开心。git

本期优质问题:你怎样看待最近 Airbnb 和 Udacity 都相继放弃了 RN ?-- 来自@zyf在掘金

请问,闲鱼 App 中有哪些地方使用 RN,你怎样看待最近 Airbnb 和 Udacity 都相继放弃了 RN ?程序员

宗心回复github

闲鱼 app 里没有使用 RN,但有很多页面使用 Weex,在我看来,无论是 Weex 仍是 RN,咱们去当作本:

  1. 前端体系的学习成本
  2. debug和兼容性的成本
  3. 基础设施建设的成本

这三个成本是逃不过的,因此若是以为这三个成本大于你的收益,建议不要用。而对于闲鱼来讲

  1. 我团队有专门的weex专家带一些有前端知识体系的同窗
  2. 基础设施有阿里巴巴集团的基础设施作基础,本身须要再建设的很少。

这两个其实已经决定了咱们在使用过程当中成本没有那么高,目前最高的可能就是 debug 成本和兼容性问题了,暂时是能够接受的。再说收益

  1. 咱们有一套从sketch到代码的生成工具,因此UI还原部分,咱们基于此少写了不少代码
  2. 三端一致性,在部分业务上确实带来了好处,尤为闲鱼要在外部多端进行投放,无论是手淘仍是外部投放,我就写一份代码,相比来讲成本确定要低一些,因此这个要看场景
  3. 做为前端使用,性能上比h5仍是会好不少,前端使用过程当中也有一些收益。 均衡来看,咱们仍是在对应的场景下会持续使用下去。
本期 AMA 小故事

AMA 进行回答的第一天,宗心去了医院,因此第一天的问题下的回复都是在医院里诞生的。🤔延伸下:接触下来优秀的人对事态度都特别认真。

Vol 2:掘金 AMA - 听腾讯 NOW 直播技术团队 Leader Randzhu 谈 Android 开发和团队构建那些事

旁白:这期和上一期的嘉宾都是一颗香菜安利给个人,感谢香菜,以及 Rand 是一个很是 Nice 的人--详见小故事。

本期优质问题:做为一位资深的 Android 开发者,请问您以为哪些技能点是比较重要的?--来自@Snailer

做为一位资深的 Android 开发者,请问您以为哪些技能点是比较重要的?

Rand 回复

  1. 从技术方面,围绕着快速高效的解决问题来说:
    1. 熟练掌握性能优化手段,包括卡顿,FPS,CPU,布局优化,内存优化等。
    2. 架构能力,熟练掌握 MVP,MVVM,组件化,并可以针对业务场景实施合适的架构方案。
    3. 开发组件上,要熟练掌握经常使用组件的原理及扩展方式,好比图片加载库,RxJava,OkHttp 等,在团队碰到经常使用组件的问题上可以给与解决思路或方案。
    4. 掌握系统原理,好比安装包结构,打包安装过程,插件原理等。
  2. 从软技能上,要培营养享沟通表达能力,这些能力对传播知识和方法论,培训新生力量,提升整个团队的战斗力有很大的帮助。
本期 AMA 小故事

Rand 的海报我的照被设计小姐姐否了 N+ 次,最后用了现拍的照片,🤔是否是程序员自拍水平广泛上来讲都不大好呢?

Vol 3:掘金 AMA:听分布式架构 SOFA 的开源负责人黄挺聊分布式架构和开源

旁白:我的很喜欢这期嘉宾的海报,我的照带着一丝萌。

分布式的线上代码更新和服务重启有什么好的方法么? -- 来自@wking

分布式的线上代码更新和服务重启有什么好的方法么?

黄挺回复

分布式的架构下,应用的代码更新发布上线的确没有单体应用的架构下来得这么容易。目前业界也有比较多的发布方案能够借鉴,好比蓝绿发布,灰度发布,金丝雀发布等等,来保证代码的更新在分布式的环境下能够作到充分的验证。

关于服务重启这个问题,能够从两个方面去看,一个是服务如何作到平滑的关闭,一个是服务如何作到平滑的启动。

关于平滑的关闭,通常上的作法是先从服务注册中内心面把对应的节点拿掉,等一段时间上游系统收到的地址列表里再也不有对应的节点,而且对应的节点已经没有请求在处理了,那么就能够开始关闭了。

关于应用的平滑的上线,首先应用在启动完成以后,最好先作一遍自检,检查应用本身是否当前是健康的,健康了以后,再对外提供服务,这个过程通常上被称为 Readiness Check,目前 SOFABoot 中也提供了这个能力:www.sofastack.tech/sofa-boot/d…

除了 Readiness Check 以外,由于 Java 的 JIT 的问题,一个应用刚刚启动的时候,每每性能相对比较差,这个时候,就要作服务的预热,在 SOFARPC 中,也提供了服务预热的能力:www.sofastack.tech/sofa-rpc/do…

本期 AMA 小故事

在蚂蚁金服分布式架构 SOFA 技术沙龙见过黄老师,运营妹纸和他对话说道:我还没吃饭的时候,黄老师开启了无视模式进入到了下一个话题,🤔是否是程序员都不大会关心人呢?

Vol 4:掘金 AMA:听掘金小册《Redis 深度历险》、《深刻理解 RPC》的做者 -- 老钱谈技术输出、沉淀那些事

旁白:第一期没有嘉宾我的照上海报,老钱说不大好意思,我:???行吧。

有哪些高效工做和高效学习的秘诀?--来自@蒋海博

老钱,您好,既然您有孩子,请问如何平衡陪伴孩子和工做的时间?我看您又工做又写出,应该很忙吧。还有是否能分享下如何高效工做和高效学习的秘诀。谢谢。

老钱回复

我在掌阅的工做自己不是太忙,至少近期时间上还有很多闲鱼。因此我才会有时间来作一些技术写做的事。白天家里有老人帮我看孩子,天天下班回家,孩子睡得也早。到了周末,我总会花一些时间带着孩子去逛商场,这也就是平时最主要的亲子活动了。我本人比较宅,社交活动不多,因此剩下的时间就能够专心作本身喜欢的事,若是一我的成天处处跑,除了没时间以外,估计心态也会比较浮躁。

市面上全部的编程书籍都有一个规律,那就是越基础的书越多,越高级的书越少。随着本身知识的渐长,市面上的书籍大多已经不能知足个人须要,因此平时的学习知识来源仍是主要靠网络分享、靠源码、靠 google、靠 stackoverflow。除非是对某个新的领域感兴趣,我会买一些基础的书来了解入门。工做上当我作一件事的时候,我会很是专心地去作,我会带着耳机但愿本身不被打扰,安静的状态平和的心境就会带来效率的提高。

本期 AMA 小故事

正如以前说的,优秀的人对事的态度极为认真,你能够从老钱的 AMA 回复感觉到。

Vol 5:掘金 AMA:听 Node.js Core Collaborator 之一 死月聊 Node.js && 技术写书

旁白:死月是我一个前端同事超迷的一位开发。

node 将来的方向? --来自@wujunze

你好 node将来的方向 和 它真正能擅长的场景是哪些 ?

死月回复

Web 领域应该会继续守住,但也不会去撼动谁谁谁的地位,各有所长,在你们的熟练度、性能以及研发效率之间找一个平衡。类似的还有就是游戏类的服务器,可是竞品太多了,并且还没完成一个太集中和完善的生态,老大哥柚子感受已经很久没人维护了。

在渲染方面会有优点。由于这一层比较轻薄,上 Java 就显得厚重了。

一些 Serverless 引擎以及相似场景可能会有自然的优点。例如 leancloud 在你作各类事情的时候能够写一些 JavaScript 源码做为补充逻辑,本身解释本身的开发成本一般比你在 Java 层面搞个解析器或者上 V8 之类的研发成本会低一些,并且性能也不错。

IoT 方面也是一个不错的选择,不过我还在观望。

其它方面就是客户端的东西,例如 Electron,NW.js 等,的确会下降客户端软件的开发门槛以及研发效率,毕竟样式什么的直接上 HTML + CSS 了,这个方法比较好,之前就有人这么用了,之前就是 qt 也用了相似的方法。我一直期待会有一个内置 Node.js 的无线终端引擎,而不是 React Native 之类的,也许是由于相较于他们如今的引擎 Node.js 还比较笨重吧。

包括 Cocos2d 之类的也同样,不知道为何就是不基于 Node.js,多是那边的开发者不在一个领域,你们都不 care 里面有什么,生态里面能作什么,只要是能写 JavaScript 就够了。

最近在写一个桌面的 2D 游戏引擎的 Node.js 玩具 Wrapper,就想验证一下本身的想法,Node.js 也能够写游戏,而不仅能是基于别的运行时的 JavaScript。

Wrapper 在 GitHub 的私有仓库。而 github.com/XadillaX/no… 这个是更小的一个仓库,用于验证经过 Node.js C++ 扩展能搞这么一个 Wrapper 的正确性的小 Demo。

将来若是真有这么一个引擎了,我感受开发游戏起来会更方便吧,不过这只是个人我的业余爱好而已。

本期 AMA 小故事

死月对于海报只有文字版和真人上镜无卡通形象版本很执念,最后我问他要照片无果,他劝说我上卡通版失败,文字版海报上线…

Vol 6:掘金 AMA:听开源活跃贡献者 + 程序员秀恩爱伪专家 -- phodal 和你聊如何平衡写做、工做、生活

旁白:这期嘉宾是一个简介都在秀恩爱的人。

下一个会被弃用的框架会是哪一个? -- 来自@长大以后我就成了你

前阵子 github 弃用了 jquery,我想问下你以为下一个会被弃用的框架会是哪一个?

phodal 回复

要预测下一个被弃用的框架很难。可是像 GitHub 这种弃用,不表明 jQuery 被弃用。GitHub 是一个面向开发者的网站,他们对于浏览器的兼容性要求没有那么高,能够轻松使用各类新的 HTML 5 API。而且对于那些不是单页面应用的前端项目来讲,jQuery 实现上更能知足他们的需求——修改下颜色,作作动画。jQuery 能够用在非 SPA 应用上,基本上很难被彻底弃用。

而现有前端应用的变革——新的框架都替换了旧的框架,多数是在开发 SPA 应用上。从这个角度来看,就会发现过去的 SPA 框架,如 Backbone、Mustache 都处于一个被弃用的阶段上。

本期 AMA 小故事

请当 phodal 当嘉宾的时候原想让你们学习下撩妹和恋爱之道,万万没想到,他也是个以买买买为最终手段的人🤧

Vol 7:掘金 AMA:听 Vue.js 做者--尤雨溪谈 Vue.js & 独立开发 & 设计那些事

旁白:我男神❤️。

正确的参与开源项目的姿式是什么呢?--来自@DateBro

我是一名大二学生,想问一下尤大,计算机领域的内容那么多,前端,后端,移动开发,机器学习。。。您是如何在确立好兴趣方向后作出我的发展的规划的呢?正确的参与开源项目的姿式是什么呢?👀

尤雨溪回复

个人路线可能对你参考价值通常,由于我是学艺术和设计出身,因此很天然的首先接触了和用户打交道的前端,最感兴趣的也是前端。对你本身来讲,感兴趣,有热情是最重要的。是作出使人愉悦的交互让你更有成就感呢,仍是提高算法准确度,增长转化率数据呢,又或者是设计出一个吞吐量巨大的后端系统呢?只有找到最能给你带来成就感的那个方向,才最有可能作出成就,也最值得去钻研。

至于参与开源,这是一个比较大的话题,因此只能归纳地说说。

首先,要避免以一种商家/用户的关系去看待开源,而是以一种共同利益去思考,也就是把本身放在维护者的角度去想,什么样的贡献对于这个项目是有益的。

其次,报 bug 的时候,必定要留意项目对 bug 的格式要求。不少开发者有个很差的习惯就是报 bug 的时候把错误堆栈甚至是截图一丢就算是报 bug 了,但维护者修 bug 须要了解 bug 产生的根本缘由,没有一个真正的重现,不少信息根本不可能猜获得。而来回询问须要浪费很是多的时间,对于大项目来讲,天天都会有十几个 issue,维护者是没有这么多精力一个一个去来回询问的。

最后,关于贡献代码。遇到举手之劳的错误,直接开 PR 会更好,但若是要作较大的改动,则应该注意先和维护者沟通,而且必定要说清楚本身的场景、用例,为何须要作这样的改动,为何须要这样的功能。有些时候,一些开发者以为我辛辛苦苦贡献了一个 PR 你竟然不要,以为不爽,这样的状况通常都是缺少沟通致使的。

本期 AMA 小故事

AMA 为期三天,第一天的时候已经有 100+ 个问题,为了方便尤大回复我对问题进行分类整理文了文档给他,最后他仍是本身把全部问题筛选了回答了部分问题,🤗尤大真的很 Nice,对事超认真。

Vol 8:掘金 AMA:听知乎专栏《V8 引擎》、LibrarySniffer 做者 -- justjavac 和你聊 V8 & 技术学习之法

旁白:jjc 大大认识挺久了,你们对他的争议挺大,但我的以为 jjc 大大仍是有技术傍身能够来交流一番的。

如何阅读有些枯燥的技术书籍?--来自@人民币玩家

阅读一些逐渐深刻的书籍,如何有效处理长篇大论枯燥难寻。

justjavac 回复

停下来,思考一下,玩会游戏,而后继续。给本身定个目标,一次读 20-30 分钟,硬着头皮读,而后思考 10 分钟。我用这种方式,花了3个月的时间并行读完了爱因斯坦的《相对论》和 Harari 的《人类简史》,而后整理了 200 多页的笔记和草稿。

也有一部分缘由是生活和工做压力太多了,让不少人有了焦虑感。当读书读不进去时,就增增长了本身的挫败感,最终造成的恶性循环。尤为是随着年龄的增长,接受新事物新观念新知识也变得愈来愈难。

我上大学时,从图书馆借了 2 本 Martin Fowler 的《重构》,一本英文原版,一本中文翻译版。两本书对照着看,大概用了不到一个月的时间吧,就把英文版读完了。

工做后,就只能利用天天的早起时间读书了。再后来我和老婆定了一个家庭读书日,每个月选出一个周末,这天一块儿看书 4 个小时以上。若是再加上选书、布置环境、营造氛围什么的,基本上得耗费一天的时间。

阅读是一种习惯,坚持下来就行

再补充一句,其实仪式感也很重要,忽然就以为读书变得很神圣了

再再补充一句,找个女友,一块儿学习更有动力

本期 AMA 小故事

海报作出来的时候感受 jjc 大大太黑,问他要不要美白下,他说本来如此。🤔真是个实诚的 boy

Vol 9:掘金 AMA:听有赞前端负责人 -- 施德来聊如何走上技术管理岗 & 团队管理那些事

旁白:线下大会见过德来师兄,是一个很是有范的人。

如何走上技术管理岗位? --来自@liutao

「由于走管理线路的缘故,我如今极少参与 Coding。我是工做了四五年后想清楚本身的发展方向的」请问能够分享一下这块的的思考吗?

施德来回复

我对本身的技术仍是蛮自信的,好歹科班出身,浙大计算机学院毕业:),但我发现若是作纯技术,我另一部分的能力比较难发挥,有点浪费了。好比我有不错的销售能力、不错的商业思惟、我能很好地把一个东西用人话概括清楚、能写让人耐心读下去的文章不管是否是技术的、很能发现问题(不管是否是技术类的,也不管是否是前端范畴)、比较有领导特质,等等吧,自吹自擂结束,至少我本身是这么想的吧,因此就朝这个方向作了。

本期 AMA 小故事

邀请德来师兄的时候被拒绝了不少次,最后和他说能够顺便招人🤗成功

Vol 10:掘金 AMA:听阿里 Node 基础框架 EggJS 的核心开发者--天猪讲 EggJS 和 Node 那些事

旁白:天猪一直活在个人朋友圈(认识个妹纸常常说起他的 Nice 点),当邀请当嘉宾却不是找人搭线认识的,具体过程见小故事。

点评下 nest,说说您或者 egg 团队对他的见解?--来自@鲸吃瓜

请问天猪大哥可否简单的点评下 nest,说说您或者 egg 团队对他的见解,以及他的优缺点🙃

天猪回复

nest 是近年来新出的一个框架,比较亮眼的是 TypeScript 和从 Spring 过来的一些概念。

从咱们的角度来看,企业级应用有不少要素,包括编程模型约束、扩展点、多进程管理、日志、安全、RPC 等等很是多的方面,TypeScript 静态类型带来的好处,是其中的一小点,但并非所有。装饰器等特性,目前还在 Stage 阶段,并无落地到 Node LTS 版本中。在咱们看来,静态类型带来的好处,还不如把单元测试覆盖率作上去更实际。

TypeScript 也并非某个框架独有的,就像蚂蚁凤蝶团队就有在用 TS 开发 Egg 应用(据说他们作了个 tegg 框架,后面也许会放出来)。

顺便重提下框架对比,从咱们的角度看来,框架有三层:

  • 基础框架:Express,Koa
  • 框架的框架:Egg
  • 上层业务框架:tegg,chair,sofa-node,ThinkJS,Sails,Loopback,Nest

它们的定位:

  • 微框架专一于底层中间件模型,是 Node HTTP 之上很薄的一层。
  • 上层业务框架,是针对某个领域和业务场景定制的业务框架,针对团队自身的业务场景和技术选型下的组合。(固然也有一些大教堂式的大而全框架)
  • 上层业务框架通常每一个团队都会封装一个,就像当年阿里各大 BU 那样,而 Egg 就定位介于前面二者之间,抽象出上层框架的一些共性 -- 一套加载规范,一方面提供插件能力来复用,一方面提供框架定制能力供团队架构师定制本身的上层业务框架。
本期 AMA 小故事

天猪是第一个我在 GitHub 找邮箱联系上并成功成为 AMA 嘉宾的人🤗

Vol 11:掘金 AMA:《开发者必备的 Docker 实践指南》小册做者--有明聊 Docker

docker 并不能彻底将资源隔离起来,如何保证安全性?--来自@buheshuicat

docker并不能彻底将资源隔离起来,如何保证安全性?

有明回复

Docker 的安全能够从几个角度出发去考虑:

  1. 隔离安全,也就是依靠 Docker 实现隔离的 Namespace、CGroup 等机制实现安全隔离。
  2. 内核能力限制,即经过限制 Docker 容器及其中应用对内核敏感功能的使用,来达到防范风险的目的。
  3. 服务器安全防御,这和普通的服务器防御原则是一致的,也就是设立防火墙,使用证书保护,应用非 root 运行等方式来限制外部攻击。
  4. 设立安全机制,经过像 AppArmor、SELinux 这样的安全策略或安全软件来加强内核自己的安全性。
本期 AMA 小故事

本期 AMA 是我见过最实在的一期,基本上都围绕着 Docker 展开技术提问,若是你对 Docker 感兴趣也能够去围观学习下🤗

Vol 12:掘金 AMA:前端 + 区块链的跨界者--CSS魔法聊前端和区块链 DApp

怎样快速提升本身的 css 能力?--来自@zuishiguang

魔法哥,有什么推荐的国外技术社区、论坛和博客,在如今 js 框架横行天下的今天,js逻辑写的比较多,css 写的较少,怎样快速提升本身的 css 能力?

CSS魔法回复

第一个问题:有什么推荐的国外技术社区、论坛和博客?

因精力有限,我如今基本不会直接阅读国外网站了。不过我找到一些可订阅的人工聚合的日报,我就不劳而获了。要相信这一点:好文章或重要的信息确定会来找你。

可订阅的信息源有:

第二个问题:在如今 JS 框架横行天下的今天,JS 逻辑写的比较多,CSS 写的较少。怎样快速提升本身的 CSS 能力?

为何如今是 JS 框架横行天下,而不是 CSS 框架横行天下?这在某种程度上说明 CSS 在现阶段没那么重要。对于普通前端开发者来讲,我建议顺势而为。除非你在大企业里专职开发 Element UI 或 AntDesign,不然不建议投入大量时间只为提高 CSS 能力。(参见我在下面某个问题下的回复。)

另外,咱们得面对一个残酷的现实:CSS 能力没法快速提升。由于 CSS 是一个网状系统,全部概念都不是孤立存在的,没法单点突破,不像 JS 那样学会一个 API 就能够用上一个 API。所以咱们对 CSS 的掌控能力必定是一个从量变到质变的过程。想要突破那个临界点,须要投入大量的精力和成本。而这个成本投入是否划算,是须要考量的。

本期 AMA 小故事

魔法哥这期海报作到了 2 点,期间魔法哥一直在线和我沟通海报,o.o 虽然最后勉强能用,可是具体到面部仍是有些不天然。

Vol 13:掘金 AMA:听天猫营销平台前端-- 🐭耗子讲非科班的他是如何走上编程路 & 招聘那些事

旁白:一直潜水在耗子姐姐的「前端的那些破事」群里,他是个很是活泼的人。没想到他的经历如此的不一样,具体能够看看他的 AMA 自我介绍。

网管-印刷工-喷绘机修理工-前端,能够分享下如何走上编程这条路? --来自@清蒸不是水煮

网管-印刷工-喷绘机修理工-前端,能够分享下如何走上编程这条路,以及编程上对你影响最大的人是谁吗?

🐭耗子回复

网管-印刷工-喷绘机修理工-前端,能够分享下如何走上编程这条路,以及编程上对你影响最大的人是谁吗?

或许你会以为我要发鸡汤,但可能我发的会是毒鸡汤。但愿每一个人看到个人回答后都能找到本身的成长之路。

我高中时学习很差,很长一段时间陷入到自暴自弃的状态,也所以没有拿到好的文凭,以致于找工做的时候到处碰壁。 很早的时候就对 web 开发兴趣浓厚。从最先的我的主页制做、QQ 空间特效代码、到以后的管理运营 BBS、博客群。积累了一些先后端开发的知识。

我作得最对的事多是逃离二三线城市,挤进北上广吧。在技术领域内,只有一线和超一线城市,才会聚集最多的产业资源。包括公司、人才和技术。

我只能说遇上了一个前端高速发展的时代,受惠于行业带来的红利。可是,这样的红利期已经在迅速减弱,目前应届生想去一家好公司的难度已经比从前门槛高太多。

过去十年时间,整个行业向浏览器应用、移动端转型,产生的一些新兴技术领域,企业对前端、Android、iOS 等工种需求强烈,但这些领域你们都缺乏技术经验,企业不得不下降招聘要求,有个笑话不是说某企业要招 10 年以上 iOS 工做经验嘛。

目前对于上述提到的领域,一样水涨船高,由于这些领域技术趋近于成熟,发展也在放缓,因此并非前人走过的路后人能够复刻。

可见的将来,比较稀缺的技术工种必定是在人工智能、大数据、虚拟/加强/混合现实、区块链(不是炒币,那只是很小的一块)等领域。但也能够看出,学习门槛也愈来愈高。

对我影响最大的人,其实有不少。经历的几家公司的领导都很是有魅力,给过我不少指导。只要用心,每一个人身上都会有你值得学习的地方。

综上所述,总结几点:

  1. 选择好的城市比选择学校和专业更重要
  2. 欠缺的知识必定要抽时间补上
  3. 不要等一个技术滥大街了再开始了解,那时候已经缺乏稀缺性
  4. 要相信正态分布和回归平均,幸运不是常态,不幸也不是常态。不是只要奋斗就必定有收获,但不努力必定没有收获。
  5. 相信顶端优点、马太效应和 80/20定律,资源老是向头部倾斜,而且强者越强
  6. 三人行心有我师,见贤思齐,见不贤而改之
本期 AMA 小故事

耗子姐姐的 AMA 原本是第八期上线的,后来咕咕了我,再后来双十一,好在最后上线了🤗

Vol 14:掘金 AMA:听蚂蚁金服 OceanBase 团队的技术专家-- 庆涛聊数据库那些事

OB 是如何实现智能运维?--来自@吃提子不吐葡萄籽

终于来了个运维大佬,我以前读过大家的技术文章,某篇文章提到过智能运维的概念,能够具体地讲一讲 OB 是如何实现智能运维的吗?

庆涛回复

【智能运维】是理想,能够无限接近。现实中更多体现为自动化运维,彼此自动化程度上不同。我这里就说【自动化运维】方面的。

运维最基础的功能就是监控和告警。OB 内部性能指标很是丰富(不比 Oracle 的性能指标少),这为运维提供了很丰富的素材(信息)。告警的目的是提早发现异常,【异常】的定义取决于业务要求和运维人员经验。之前是靠为监控指标定义范围或者波动范围去识别异常,近几年能够经过机器学习去识别以查。 我的认为理论上不会有一个统一的标准能适应全部的业务,机器学习也是一门不肯定性技术。因此【漏报】和【误报】永远是运维人员的痛。

数据库告警问题若是是资源相关,有两个处理思路,均可以自动化作。

一是优化 SQL,下降 SQL 对 CPU /内存的消耗。自动获取 DB 运行的全部 SQL,并及时分析其执行计划,应用 DBA 的经验和相关运行时性能数据,程序自动初步判断 SQL 是否有性能问题,并给出初步的索引优化建议,这个是 SQL 自动优化的方向。准确率不会过高,可是只要高于绝大部分研发人员水平,在数据库规模很大的公司内,这个是自动化诊断对研发和运维都是颇有意义的。OB 的全部 SQL 均可以计入审计,有详细的运行时性能数据。这是源材料。怎么加工发挥就是运维产品的水平了。

二是资源扩容或迁移,提高数据库享用的资源或者数据库迁移到压力很小的主机上。云数据库就是在资源管理方面作的比较好。RDS 的 mysql 和 sqlserver 都是这个思路。不过这个数据迁移是靠运维产品用数据库自身的备份恢复技术去作(搭建级联备库,而后切换应用的数据库链接等)。OB 在这方面作的自动化程度很是高。OB 是支持多租户管理。资源有集群和租户两个维度。租户是提供给业务的实例。租户资源不足就对租户扩容,一个命令瞬间完成,前提是集群资源有余量;集群资源不足就加机器,也是一个命令。扩容命令结束后会引发租户以及内部Unit的负载均衡(详情请关注 OB 微信公众号,看历史文章【负载均衡】)。均衡操做会有数据重分布动做,都是OB内部异步完成,不依赖外部运维产品,不用担忧数据不一致,不用担忧中间出现异常或可用性故障等。固然,决策是否扩容目前仍是运维人员判断的。缘由也同样,没有一个统一的标准适合全部的业务场景,仍是人把关比较靠谱。

【监控】-【告警】-【处理】-【反馈】。当造成闭环后,这个自动化的运维产品的价值就体现了。反馈就是能跟踪 SQL 在【处理】以后的改进状况。这仍是要依赖数据库的性能指标和 SQL 的运行时信息等。这个反馈也是对开发作的处理的正向反馈,让他知道应用的性能情况,优化情况,知道哪里作的好哪里作的很差,数据库开发设计方面的能力也获得提高。

本期 AMA 小故事

感受好像你们对运维、数据库方便并非很感冒,这期的 AMA 有些冷清,😣有些小难过对不起认真回答问题的庆涛。

Vol 15:掘金 AMA:听前端娱乐圈的老人 & Facebook 实习生 -- 黄玄说他的前端 & 美国故事

旁白:本期有个美国故事小专题

有哪些计算机基础知识让你以为在工做中依然可以受益 --来自@2014_

有哪些计算机基础知识让你以为在工做中依然可以受益,但愿可以推荐几本书

黄玄回复

这是此次 AMA 里我最喜欢的一道问题 ;)

关于「基础」、「成长」、「深刻」的问题不少同窗都在问,我想直接在这个回答下面总结一下我本身的感想。

「在特定领域内工做与学习」能够被认为是一种 Top-down (从技术栈的应用层向更下)或者说 Just-in-time 的学习方式,不少非科班前端(或者任何以为基础不够用的时候)的学习路径可能都会是好比

  • 「JS -> JS 中存在的编程语言特性与模式」
  • 「JS Callback -> EventLoop -> 并发模型」
  • 「JS -> Babal +| V8 -> 编译原理、编程语言运行时/虚拟机」
  • 「React + Redux/Flux -> Immutability/FP」
  • 「Flow/TS/ReasonML -> 类型系统」
  • 「CSS -> 浏览器渲染引擎 -> 图形学」
  • 「Ajax -> HTTP -> TCP/QUIC -> 计算机网络」
  • 「实时通信 -> Web Socket -> Socket」
  • 「写 UI -> 写更好的 UI -> UX(用户体验)」 这样的路径。这种方式是不可缺乏而且在不少时候更加快速实用得,但这种方式可能会因为对「共性更强的基础知识」的欠缺比较容易出现「以为永远都在跟进新东西」的感受,而且缺少「创新」所须要的视野。

我在「如何取舍一些技术」里提过:不管使用的是什么技术,往根上走必然会走到一个更高的抽象层面,这个时候全部「变化的表象」就 merge 成了「更不变的基础」。(这里请想象一颗树,根是最 generic/abstract 的基础(你也能够理解成基类或者类型理论里的 Top type,好比 OO 语言中的 Object),越往叶子节点是越 specific/derived 的技术(你能够理解为派生类)

而「CS 基础的学习」相比之下则更像一种 Bottom-up(以技术栈比喻)或者说 Ahead-of-time 的学习方式,你能够从一种「更高层次抽象」的方式去理解新技术,而且更容易「子类型化」出新的东西。

React 从架构上来讲,实际上是愈来愈接近一个编程语言虚拟机的,而从设计模式来讲,是愈来愈接近 Haskell/OCaml 这样的函数式编程语言。这些都不是「原有的前端领域内知识」可能天然演化出来的。 这也从另外一个侧面回答了为何中国不少技术团队创新能力不如国际团队,即便只限定在前端框架领域,大部分在技术模型上有突破性的框架也都来自国际团队:Knockout/Rx 来自微软,React 来自 FB,Angular 来自 Google…

因此不少同窗问的如何「基础」和「前端有什么深刻的方向」也均可以从这个角度来回答,好比说我相对了解比较多的「编程语言」领域,「哪一门语言对前端将来发展或是学习上有很大帮助」?

从 JavaScript 来讲,JavaScript 是一门比较杂交的语言,其发明与发展过程一直到目前为止也主要是「借鉴」其余语言的特性。这些特性一般在「原有的上下文」下有着更好的表达,另外大部分这些特性技术(OOP、FP、类型、运行时)自己的或学术或业界的发展也都是贡献在这些语言而非 JS。因此说「基础」能够是「学习 JS 发明与发展中过往或正在借鉴的语言」,「深刻」能够是「了解这些语言的发展、了解 TC 39 的动向、了解将来可能影响 JS 去向的语言、影响或贡献 JS 语言的发展」等。 举例来讲:

  • Scheme 做为 JS 的最主要本源之一,学习 scheme 或相似的 Lisp 方言会让你对 lambda 算子、first-class function、CPS、closure 这些函数式编程概念有更纯粹的理解,并对这些概念在 JS 中的运用有更本质的理解。
  • Java/python 或相似的 class-based OO 语言会让你对 ES6 以及将来 ES 的 class、field、property、(private、static)有帮助;
  • Java/OCaml/Haskell...等任何一门强类型语言会让你理解「类型有什么做用」、「类型安全是什么」对 TypeScript/Flow/Reason 的各类概念和设计有一样帮助;(好比让你更容易理解 subtying、variance、只读只写的关系等)
  • Rust/Swift/Kotlin/OCaml/Haskell 等尝试用某种静态分析机制约束异常(好比 option type 或 checked exception)、异步(好比 Promise、async/await)等「效果」的编程语言能让你对 JS 的将来、或是 React 这样的框架 API 设计有帮助;
  • Rust/C++ 能让你对一切跟指针和内存有关的概念有无可替代的帮助;
  • 学习任何一种与 JS Event Loop 不一样的并发(或更好的支持可能的并行)模型的语言会让你对「同步异步」、线程进程、阻塞非阻塞有超过「能理解他们的字面意思和比喻」的理解…对 Web Worker、Sharedworker、sharedbuffer 这些 Web API 有帮助;
  • 学习 assembly、JVM bytecode、stack machine 会对 web assembly 有帮助;
  • 学习任何一门编译到 JS 的语言都会让你对 JS 「有什么缺陷」这件事有帮助; ……

在「你是如何在前端领域下沉淀下来的?学习心得是什么?」说过得这里就不重复了,前端的复合性体如今他对众多计算机科学(和其余学科)领域都有依赖,而不是说「层展示象」就彻底替代计算机科学的基础做用了……

我自身读过的书并不足以推荐太多书籍,可是参考美国大学的课程教材(也就是那些知名大学教授编写的经典书籍)绝对足矣。好比 编程语言相关的 SICP、TAPL、PAPL、Software Foundation、虎书、龙书… 计算机网络的 Top-down approach 体系结构的 CSAPP ……

这些教材都是「大部头」,相比于大多「行业内的工具书」要严肃严谨得多,而且有大量「习题」,能够说能啃下来任何一本的任何一个章节都会有一种「被刷新」的感受。 除了书籍以外,若是但愿对某个领域有很是理论化或前沿、试验性的了解,能够尝试观看、阅读学术会议与期刊的 presentation 与论文,其实不少都很是有趣。

以上。

本期 AMA 小故事

小故事挺多的,AMA 文中也说了,另外个小故事就是,这期 AMA 的图片我很努力的抠最后仍是一个不及格,被黄同窗微博 diss 了,摊手🤷

Vol 16:掘金 AMA:听蚂蚁金服 mPaaS 团队技术专家--凝睇讲客户端推送 & 997 那些事

旁白:严格意义上,这是 19 年的 AMA,可是只有这一期没上本文怪冷清的…本期有个 997 小专题

关于客户端网络层的优化,有哪几个地方能够切入? --来自@J_Knight_

您好,请问一下关于客户端网络层的优化,有哪几个地方能够切入?并且在监控网络性能方面有哪些实践能够分享一下嘛?

凝睇回复

几个方向能够先搞起来,首先是用长连接代替短连接,增长连接的复用率,减小每次请求的时间,而后数据的序列化方式能够用 PB,再则进一步能够自定义传送协议,本地 dns (经过必定的策略下发 ip 列表)减小 dns 解析耗时和报错,更细的可一些动态建联策略,并发建连,1rtt 这种

监控方面,主要仍是靠客户端埋点日志,上传到服务器上作大数据分析

本期 AMA 小故事

凝睇的技术很是的厉害,见【开篇 | mPaaS 服务端核心组件体系概述】 却没能和你们进行很是好的技术交流,有些小难过,固然已经反思出解决方案了😣怪对不住凝睇的。

2019 年的 AMA

🎉🎉,19 年的 AMA 暂时排期到了 4 月份,你们若是有啥想清蒸邀请来作客的能够和我说。

  • vol 17: 《React 状态管理与同构实战》做者--LucasHC (01.22 - 01.24)
  • vol 18: SOFA 团队专家 (01.29 - 01.31)
  • vol 19:奇舞团--月影(02.26 - 02.28)
  • vol 20:《Android 开发艺术探索》做者--任玉刚(03.12 - 03.14)
  • vol 21: Omi 框架做者--当耐特(03.26 - 03.28)
  • vol 22:《Android 进阶》系列三部曲做者--刘望舒(04.09 - 04.11)

但愿 2019 年你们多多在 AMA 下和嘉宾进行技术交流 ^O^/

相关文章
相关标签/搜索