大连地铁时报7.24

发信人: nzhth (n站同号), 信区: Joke
标 题: 大连地铁时报7.24
发信站: 水木社区 (Tue Jul 25 07:12:13 2017), 站内

任性一时爽,当心挨巴掌
?

我前一阵子给同事们讲过几个养生小窍门,结果昨天晚上,一个女同事给我发微信语音:“哥,我晚上总是睡不着,你说怎么办呢?”我媳妇在旁边呢,眼神都变了,吓得我一身冷汗,赶紧语音回了一句说:“你还是不困!”

两个人在一起,不合适了我可以磨合,有争执了我可以道歉,出现矛盾了,我也可以妥协,但是 我标价12万的车,你一张嘴就砍价:“4万块,卖不卖?”从那一刻,我就知道你并不是来买车的,而是来吹空调的!

早上出门,遇到闺蜜带着孩子买菜,我笑嘻嘻地夸赞着孩子:“你起得真早,不像我家的小哥哥,到现在还在床上赖着!”夸了半天,那孩子却一直傻笑不说话。我问他怎么了,熊孩子抬头呵呵一乐,说:“阿姨你好厉害,我的好全被你看出来了!”

我舅妈拿了驾照没多久,每次倒库都要找保安或者别人帮忙。最近,我发现她都是自己开进停车位的,我心想她肯定已经学会倒库了。然而昨天我去开她车的时候,发现她的车是横着停的,占了三个车位!我立马打电话给她,说这样占别人车位不好。结果她说:“没事,那三个车位都是我买的,想怎么停怎么停。”

我小侄子每次耍性子闹着要离家出走,我就会拿他的玩具:“哈哈,这个我可以拿走了!哈哈,这个也是我的了!哈哈,这些玩具以后通通都是我的了!”他马上回来和我争,然后不走了。昨天小侄来我家玩,赶上我和媳妇争吵,我夺门而出,小侄抱住老婆大腿对我喊:“哈哈,是我的啦!”

早上我去买煎饼,身上只有100块,给了老板娘,老板娘说找不开,让我下次来再补上。但是我看旁边装钱的桶里,有50块,有20块,找零钱肯定够了!啧啧,人心啊,为了多看我几眼,也是用尽了招数。

早上我坐地铁,车上人挺多,我就给两个大妈让了坐。其中一个大妈坐下来就说:“现在的年轻人长得不咋样,心肠还挺好!”我……大妈,咱两下车打一架吧!

去年冬天,我去相亲。相亲的那个男的告诉我他已经到了,结果我在地铁门口被大风吹了十几分钟。后来,一个矮肥圆从旁边的便利店里走出来对我说:“我在店里观察你有一会儿了,我觉得你还可以。”

笑出马甲线

@想不到的好名字
前几天,一个异性朋友跟我借了1000块钱,之后就经常给我打电话、发信息,昨天忽然说喜欢我!我好害怕,他是不是不想还钱了啊?

@欲湖冰心

IaaS,PaaS,SaaS 的区别

越来越多的软件,开始采用云服务。

云服务只是一个统称,可以分成三大类。

  • IaaS:基础设施服务,Infrastructure-as-a-service
  • PaaS:平台服务,Platform-as-a-service
  • SaaS:软件服务,Software-as-a-service

它们有什么区别呢?

IBM 的软件架构师 Albert Barron 曾经使用披萨作为比喻,解释这个问题。David Ng 进一步引申,让它变得更准确易懂。

请设想你是一个餐饮业者,打算做披萨生意。

你可以从头到尾,自己生产披萨,但是这样比较麻烦,需要准备的东西多,因此你决定外包一部分工作,采用他人的服务。你有三个方案。

(1)方案一:IaaS

他人提供厨房、炉子、煤气,你使用这些基础设施,来烤你的披萨。

(2)方案二:PaaS

除了基础设施,他人还提供披萨饼皮。

你只要把自己的配料洒在饼皮上,让他帮你烤出来就行了。也就是说,你要做的就是设计披萨的味道(海鲜披萨或者鸡肉披萨),他人提供平台服务,让你把自己的设计实现。

(3)方案三:SaaS

他人直接做好了披萨,不用你的介入,到手的就是一个成品。你要做的就是把它卖出去,最多再包装一下,印上你自己的 Logo。

上面的三种方案,可以总结成下面这张图。

从左到右,自己承担的工作量(上图蓝色部分)越来越少,IaaS > PaaS > SaaS。

对应软件开发,则是下面这张图。

SaaS 是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。普通用户接触到的互联网服务,几乎都是 SaaS,下面是一些例子。

  • 客户管理服务 Salesforce
  • 团队协同服务 Google Apps
  • 储存服务 Box
  • 储存服务 Dropbox
  • 社交服务 Facebook / Twitter / Instagram

PaaS 提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。下面这些都属于 PaaS。

  • Heroku
  • Google App Engine
  • OpenShift

IaaS 是云服务的最底层,主要提供一些基础资源。它与 PaaS 的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。下面这些都属于 IaaS。

  • Amazon EC2
  • Digital Ocean
  • RackSpace Cloud

参考链接

(完)

文档信息

大连地铁时报7.19

发信人: nzhth (n站同号), 信区: Joke
标 题: 大连地铁时报7.19
发信站: 水木社区 (Thu Jul 20 06:39:34 2017), 站内

打败我的不是天真,是天真热
?

我加班到半夜,拖着疲惫的身躯回家,发现客厅还亮着橘黄色的灯,而妻子已经在沙发上睡着了。见此情景,我的心都疼了,忍不住把她唤醒,对她说:“电费难道不要钱吗?”

“公司考勤罚得很狠,为了不迟到,我就偷偷把打卡机调慢了半小时。”“后来呢?”“后来?后来我就早退了。”

小学时,我捡过一次铅笔,上交给老师后,被老师表扬了。从此我走上了不归路,经常去找东西上交,还有好几次拿自己的东西交换表扬。最奇特的一次是我上课故意晃桌子,把同桌的笔晃掉,抢先一步捡起来,就要去讲台上交。同桌也不示弱,死死拖住我,我就一步步把他拖到讲台边,对老师说:“老师,我捡到一支笔!”同桌拖着我哭着说:“那是我的……”

隔壁家有一个11岁的网瘾小屁孩。有一次,他被他老爸从网吧揪回来了,在院子里各种抽打,小孩愣是没哭,嘴里还念念有词。我当时就好奇他念叨的是啥,走近一听,这孩子嘴里念叨着:“攻击无效,攻击无效,攻击无效!”

权力真的会改变一个人。我妈以前特别好,抹桌子洗碗的活都是她做。后来她掌权了,整个人也变了。昨晚吃完晚饭,她就把碗一推,让我拿外套站她身后给披上,走到门口才缓缓侧着头对我说:“你跪安吧,母后去领舞了。”

我有个同学不爱说话。有一次,他把钢笔水弄到前桌的白衬衣上了。他很愧疚,于是,在墨迹旁边端端正正写了三个字:对不起。

我刚跟男友谈恋爱的时候,男友十分地不解风情,出去旅游的时候还要开两间房。晚上,我到他房间问他:“我新买了一套内衣很好看,你要看看么?”他笑了笑,温柔地点了点头,说:“那你把链接发给我吧。”

我在朋友圈发了张女友的照片,配的文字是“国庆节结婚”,底下藏起来一句“上面是假消息”,要点全文才能看到。结果我妈现在在准备彩礼了……

神句 ONE

男女之间一定有纯友谊,每一个我认识的女生,都说最多只能跟我当朋友。

对于女人来说,最悲惨的事是:花枝招展没有局,蓬头垢面遇情敌。

※ 来源:·水木社区 http://m.newsmth.net·[FROM: 123.151.138.*]

A Light Ninja With Two-Dollar Tubes

“When I saw it in the camera I knew this was the thing. These $2 tubes were more impactful than the 360 rig, which cost thousands of dollars.”

Signs of Light preview
Infinite reflection
Kim Henry
Shanghai light-painting

Eric’s commercial work combines techniques, leveraging 32 cameras fixed to a 360-degree rig to create an immersive photographic experience in the dark.

He and his team create a 3D image by combining individual shots from each camera on the rig (bullet time photography). Doing that for multiple images over a 1 to 6-second time frame allows them to create a short, 360 video (stop-motion). While dressed in all black, Eric wields a light source by hand to add a new element to contrast the model during the shots (light painting).

bullet-time kit in Montreal
Multi-angle light-painting
360 degree light-painting

Eric has done commercial 360-degree collaborations and tours with technology brands like Adobe, Intel, Microsoft, and HP at events like South by Southwest, Coachella, and TEDxMontreal.

In his studio, Eric mostly worked with dancers. He described them as professional and effective. They can do amazing or intricate moves and hold poses with an athletic precision most individuals cannot.

“Most of the dancers I worked with were friends. The first time I worked with Kim in the studio she was so precise it brought a clarity to the project.”

A year later the two worked together again, spending five nights in the studio experimenting with lights, poses, lighting props, and the last shot (a long exposure using a light tube) yielded a circle of light, a tube halo. They knew they had something.

Since then everything outside of his commercial 360 work has been about the tubes. Eric and Kim have traveled thousands of miles, taken thousands of photos in remote locations around the world, and have built a global community of photographers connected through various social media platforms.

“Everything’s about the tubes. They’re easy, accessible, and tactile.”

It took a few months of constant tinkering to perfect the process, but Eric’s got it down. He dresses in all black, like a ninja, and holds a camera remote in one hand and a light tube in the other. While Kim strikes and holds a pose he triggers a 1-second shutter release and moves the light to create shapes behind her. In a long exposure, anything in black will disappear if it is moving. The remaining elements in the photograph remain … Kim, the landscape, and the light. The images are transfixing.

Light-painting in Death Valley
Fresh marks
Dancing with light
Kölner Dom
Light-painting at the Upheaval Dome
The night performances in the salar...

For Eric, the best part about using light tubes is that they’re so accessible for all levels of photographers. The plastic tubes he uses were purchased at Home Depot and use a handheld flash light to turn it into a wand, almost like a light saber.

Thunderstorm at the White Sands

He has written blog posts on many different sites and has tube DIY videos on his Youtube page that teach how to create tubes for different types of photos. In teaching, he has also learned more. The Eric Paré Learn Group on Facebook has over 13,000 active members actively practicing and building upon the initial tube tutorials Eric created.

Adding sparklers, strobe lights, foil or color variations to the tubes are all suggestions or practices from the group that have allowed these light wands to grow in both popularity and refinement. Here are a few of the results:

Kim Henry
Light-painting with Kim Henry
A Pocketful Of Stones
Keeping the fire alive
Tube Stories - Bali
Infinite
Water spins

“Right now I’m having fun with simple techniques applied to bigger technologies,” Eric said. After a 2-year-anniversary show with HP this weekend in NYC, Eric and Kim will be road tripping across the US in search of some gorgeous, vast landscapes to photograph in.

Follow Eric Paré’s journey on his Flickr Photostream, Instagram, or Twitter. If you want to try your hand at light tube painting join his Learning Group on Facebook or check out his website or Youtube/Vimeo videos.

Pull Request 的命令行管理

Github 的一大特色就是 Pull Request 功能(简写为 PR)。

对于多人合作的项目,该功能简直必不可少。大部分人都是使用 Web 界面(如上图),本文介绍如何在命令行下处理 PR,翻译自 Cédric Beust 的文章

一、Pull Request 是什么?

Github 官方文档的定义如下。

“Pull Request 是一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request。”

Pull Request 本质上是一种软件的合作方式,是将涉及不同功能的代码,纳入主干的一种流程。这个过程中,还可以进行讨论、审核和修改代码。

二、Pull Request 的流程

第一步,你需要把别人的代码,克隆到你自己的仓库,Github 的术语叫做 fork

第二步,在你仓库的修改后的分支上,按下”New pull request”按钮。

这时,会进入一个新页面,有Base 和 Head 两个选项。Base 是你希望提交变更的目标,Head 是目前包含你的变更的那个分支或仓库。

第三步,填写说明,帮助别人理解你的提交,然后按下”create pull request”按钮即可。

PR 创建后,管理者就要决定是否接受该 PR。对于非代码变更(比如文档),单单使用 Web 界面就足够了。但是,对于代码变更,Web 界面可能不够用,需要命令行验证是否可以运行。

三、git am

git am命令用于将一个 patch 文件,合并进入当前代码。

Github 对每个 PR 会自动生成一个 patch 文件。我们下载该文件,合并进本地代码,就可以在本地查看效果了。


$ curl -L http://github.com/cbeust/testng/pull/17.patch | git am

上面代码中,curl-L参数表示,如果有302跳转,curl会自动跟进。后面网址里面的/cbeust/testng是目标仓库,pull/17表示该仓库收到的第17个 PR。

如果 PR 只包含一个 commit,那么也可以直接下载这个 commit 的 patch 文件。


$ curl https://github.com/sclasen/jcommander/commit/bd770141029f49bcfa2e0d6e6e6282b531e69179.patch | git am

上面代码中,网址里面的/sclasen/jcommander是代码变更所在的那个仓库。

四、创建远程仓库

另一种方法是为 PR 创建一个远程分支,追踪提交者的仓库。


# 创建远程仓库,指向 PR 提交者的仓库
$ git remote add nullin git://github.com/nullin/testng.git

# 从该远程仓库拉取代码
$ git fetch nullin

# 将该仓库的某个分支合并到当前分支
$ git merge kneath/error-page

# 推送到自己的仓库
$ git push origin master

五、cherry-pick

有时,PR 里面包含好几个 commit,但是你只想合并其中的一个或几个。

这时可以使用cherry-pick命令,挑出你感兴趣的 commit。


# 建立远程分支,追踪提交者的仓库
$ git remote add nullin git://github.com/nullin/testng.git

# 从该远程仓库拉取代码
$ git fetch nullin

# 只将感兴趣的 commit 加入当前代码
$ git cherry-pick commit1
$ git cherry-pick commit2

# 推送到自己的仓库
$ git push origin master

(完)

文档信息

大连地铁时报7.17

发信人: nzhth (n站同号), 信区: Joke
标 题: 大连地铁时报7.17
发信站: 水木社区 (Tue Jul 18 06:38:01 2017), 站内

你很可爱,与年龄无关
?

昨天,刚上小学的儿子屁颠屁颠地跑来跟我说:“老爸,我们老师说明天要补习,要交100块的Q币。”我望着他紧紧握着的手机,陷入了深深的沉思……

“胖胖的也很不错啊,肉嘟嘟的看起来很可爱啊,小圆脸摸着手感也很不错,弹性十足,感觉脾气很好很温柔,谈恋爱时很会照顾的人。没必要去减肥吧,你现在就很招人喜欢。” “那你和我谈恋爱?” “不了。”

结婚前,我总听别人说,婚后千万不能让媳妇知道自己老公会做饭,否则就要做一辈子。我一直以为这是金玉良言,所以结婚第二天,我就跟媳妇说自己不会做饭。只是没想到媳妇的反应有些大,她一个耳光扇过来大吼道:“你不会做饭?你一个厨子不会做饭?”

我坐公交车时,看到一个胖嘟嘟的小男孩上车,手里拿了张100元的整钱对司机说:“叔叔,我没有零钱了。”司机大叔说:“那你过来让我捏下脸蛋。”小胖子笑嘻嘻地就把脸凑过去了。司机大叔捏了下他的脸蛋,然后让他马上下车。

有一天,我进电梯时人挺多的,然后一个男生拆开一袋巧克力,每个都发了一个。当时我觉得挺奇怪的,但也默默伸手接过来一个。电梯到了5楼后,一群人全下去了,我才知道他们是一起的……我终于理解为什么我伸手时他们眼光那么奇怪了。

我和老婆吵架,她饭也不做就冲了出去。一小时后她回来了,把一个装汉堡的纸袋子放在饭桌上,板着脸进了房间。我的心一下子软了,还有点心疼,这么好的老婆上哪儿找啊?我居然骂她!我无比愧疚地伸手进袋子里,然后抓到一个仙人球。

昨天我儿子第一次掉牙,老婆对他说:“只要把牙放在枕头下面,晚上就会有牙仙女把牙变成5块钱!”晚上等儿子睡着了,我就偷偷去了他的房间,把牙拿到了我的枕头下面。

我女朋友从来没玩过街机,刚好路过游戏机房,非要去体验一把。一个游戏币,这货玩了20多分钟。要不是后面等着玩的几个小孩子让她离开,她都不知道自己那个人物开场30秒就已经死了。这货一边嘶吼着,一边疯狂摇着手柄,按着按钮玩了整整20多分钟的过场动画。

笑出马甲线

@百思不得姐
昨天我女朋友问我:“你爱我还是爱她?”我疑惑地问:“她是谁啊?”结果她哭着说:“我们分手吧,你都不说爱我,而是先关心她是谁!”这……还有比这更扯的分手理由吗?

@善财神

Linux PID 1 和 Systemd

要说清 Systemd,得先从Linux操作系统的启动说起。Linux 操作系统的启动首先从 BIOS 开始,然后由 Boot Loader 载入内核,并初始化内核。内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程,也叫根进程。它负责产生其他所有用户进程。所有的进程都会被挂在这个进程下,如果这个进程退出了,那么所有的进程都被 kill 。如果一个子进程的父进程退了,那么这个子进程会被挂到 PID 1 下面。(注:PID 0 是内核的一部分,主要用于内进换页,参看:Process identifier

SysV Init

PID 1 这个进程非常特殊,其主要就任务是把整个操作系统带入可操作的状态。比如:启动 UI – Shell 以便进行人机交互,或者进入 X 图形窗口。传统上,PID 1 和传统的 Unix System V 相兼容的,所以也叫 sysvinit,这是使用得最悠久的 init 实现。Unix System V 于1983年 release。

sysvint 下,有好几个运行模式,又叫 runlevel。比如:常见的 3 级别指定启动到多用户的字符命令行界面,5 级别指定启起到图形界面,0 表示关机,6 表示重启。其配置在 /etc/inittab 文件中。

与此配套的还有 /etc/init.d//etc/rc[X].d,前者存放各种进程的启停脚本(需要按照规范支持 startstop子命令),后者的 X 表示不同的 runlevel 下相应的后台进程服务,如:/etc/rc3.d 是 runlevel=3 的。 里面的文件主要是 link 到  /etc/init.d/ 里的启停脚本。其中也有一定的命名规范:S 或 K 打头的,后面跟一个数字,然后再跟一个自定义的名字,如:S01rsyslogS02ssh。S 表示启动,K表示停止,数字表示执行的顺序。

UpStart

Unix 和 Linux 在 sysvint 运作多年后,大约到了2006年的时候,Linux内核进入2.6时代,Linux有了很多更新。并且,Linux开始进入桌面系统,而桌面系统和服务器系统不一样的是,桌面系统面临频繁重启,而且,用户会非常频繁的使用硬件的热插拔技术。于是,这些新的场景,让 sysvint 受到了很多挑战。

比如,打印机需要CUPS等服务进程,但是如果用户没有打机印,启动这个服务完全是一种浪费,而如果不启动,如果要用打印机了,就无法使用,因为sysvint 没有自动检测的机制,它只能一次性启动所有的服务。另外,还有网络盘挂载的问题。在 /etc/fstab 中,负责硬盘挂载,有时候还有网络硬盘(NFS 或 iSCSI)在其中,但是在桌面机上,有很可能开机的时候是没有网络的, 于是网络硬盘都不可以访问,也无法挂载,这会极大的影响启动速度。sysvinit 采用 netdev 的方式来解决这个问题,也就是说,需要用户自己在 /etc/fstab 中给相应的硬盘配置上 netdev 属性,于是 sysvint 启动时不会挂载它,只有在网络可用后,由专门的 netfs 服务进程来挂载。这种管理方式比较难以管理,也很容易让人掉坑。

所以,Ubuntu 开发人员在评估了当时几个可选的 init 系统后,决定重新设计这个系统,于是,这就是我们后面看到的 upstartupstart 基于事件驱动的机制,把之前的完全串行的同步启动服务的方式改成了由事件驱动的异步的方式。比如:如果有U盘插入,udev 得到通知,upstart 感知到这个事件后触发相应的服务程序,比如挂载文件系统等等。因为使用一个事件驱动的玩法,所以,启动操作系统时,很多不必要的服务可以不用启动,而是等待通知,lazy 启动。而且事件驱动的好处是,可以并行启动服务,他们之间的依赖关系,由相应的事件通知完成。

upstart 有着很不错的设计,其中最重要的两个概念是 Job 和 Event。

Job 有一般的Job,也有service的Job,并且,upstart 管理了整个 Job 的生命周期,比如:Waiting, Starting, pre-Start, Spawned, post-Start, Running, pre-Stop, Stopping, Killed, post-Stop等等,并维护着这个生命周期的状态机。

Event 分成三类,signal, methodhookssignal 就是异步消息,method 是同步阻塞的。hooks 也是同步的,但介于前面两者之间,发出hook事件的进程必须等到事件完成,但不检查是否成功。

但是,upstart 的事件非常复杂,也非常纷乱,各种各样的事件(事件没有归好类)导致有点凌乱。不过因为整个事件驱动的设计比之前的 sysvinit 来说好太多,所以,也深得欢迎。

Systemd

直到2010的有一天,一个在 RedHat工作的工程师 Lennart Poettering 和 Kay Sievers ,开始引入了一个新的 init 系统—— systemd。这是一个非常非常有野心的项目,这个项目几乎改变了所有的东西,systemd 不但想取代已有的 init 系统,而且还想干更多的东西。

Lennart 同意 upstart 干的不错,代码质量很好,基于事件的设计也很好。但是他觉得 upstart 也有问题,其中最大的问题还是不够快,虽然 upstart 用事件可以达到一定的启动并行度,但是,本质上来说,这些事件还是会让启动过程串行在一起。  如:NetworkManager 在等 D-Bus 的启动事件,而 D-Bus 在等 syslog 的启动事件。

Lennart 认为,实现上来说,upstart 其实是在管理一个逻辑上的服务依赖树,但是这个服务依赖树在表现形式上比较简单,你只需要配置——“启动 B好了就启动A”或是“停止了A后就停止B”这样的规则。但是,Lennart 说,这种简单其实是有害的(this simplification is actually detrimental)。他认为,

  • 从一个系统管理的角度出来,他一开始会设定好整个系统启动的服务依赖树,但是这个系统管理员要人肉的把这个本来就非常干净的服务依整树给翻译成计算机看的懂的 Event/Action 形式,而且 Event/Action 这种配置方式是运行时的,所以,你需要运行起来才知道是什么样的。
  • Event逻辑从头到脚到处都是,这个事件扩大了运维的复杂度,还不如之前的 sysvint。 也就是说,当用户配置了 “启动 D-Bus 后请启动 NetworkManager”, 这个 upstart 可以干,但是反过来,如果,用户启动 NetworkManager,我们应该先去启动他的前置依赖 D-Bus,然而你还要配置相应的反向 Event。本来,我只需要配置一条依赖的,结果现在我要配置很多很多情况下的Event。
  • 最后,upstart 里的 Event 的并不标准,很混乱,没有良好的定义。比如:既有,进程启动,运行,停止的事件,也有USB设备插入、可用、拔出的事件,还有文件系统设备being mounted、 mounted 和 umounted 的事件,还有AC电源线连接和断开的事件。你会发现,这进程启停的、USB的、文件系统的、电源线的事件,看上去长得很像, 但是没有被标准化抽像出来掉,因为绝大多数的事件都是三元组:start, condition, stop 。这种概念设计模型并没有在 upstart 中出现。因为 upstart 被设计为单一的事件,而忽略了逻辑依赖。

当然,如果 systemd 只是解决 upstart 的问题,他就改造 upstart 就好了,但是 Lennart 的野心不只是想干个这样的事,他想干的更多。

首先,systemd 清醒的认识到了 init 进程的首要目标是要让用户快速的进入可以操作OS的环境,所以,这个速度一定要快,越快越好,所以,systemd 的设计理念就是两条:

  • To start less.
  • And to start more in parallel.

也就是说,按需启动,能不启动就不启动,如果要启动,能并行启动就并行启动,包括你们之间有依赖,我也并行启动。按需启动还好理解,那么,有依赖关系的并行启动,它是怎么做到的?这里,systemd 借鉴了 MacOS 的 Launchd 的玩法(在Youtube上有一个分享——Launchd: One Program to Rule them All,在苹果的开源网站上也有相关的设计文档——About Daemons and Services

要解决这些依赖性,systemd 需要解决好三种底层依赖—— Socket, D-Bus ,文件系统。

  • Socket依赖。如果服务C依赖于服务S的socket,那么就要先启动S,然后再启动C,因为如果C启动时找不到S的Socket,那么C就会失败。systemd 可以帮你在S还没有启动好的时候,建立一个socket,用来接收所有的C的请求和数据,并缓存之,一旦S全部启动完成,把systemd替换好的这个缓存的数据和Socket描述符替换过去。

 

  • D-Bus依赖D-Bus 全称 Desktop Bus,是一个用来在进程间通信的服务。除了用于用户态进程和内核态进程通信,也用于用户态的进程之前。现在,很多的现在的服务进程都用 D-Bus 而不是Socket来通信。比如:NetworkManager 就是通过 D-Bus 和其它服务进程通讯的,也就是说,如果一个进程需要知道网络的状态,那么就必需要通过 D-Bus 通信。D-Bus 支持 “Bus Activation”的特性。也就是说,A要通过 D-Bus 服务和B通讯,但是B没有启动,那么 D-Bus 可以把B起来,在B启动的过程中,D-Bus 帮你缓存数据。systemd 可以帮你利用好这个特性来并行启动 A 和 B。

 

  • 文件系统依赖。系统启动过程中,文件系统相关的活动是最耗时的,比如挂载文件系统,对文件系统进行磁盘检查(fsck),磁盘配额检查等都是非常耗时的操作。在等待这些工作完成的同时,系统处于空闲状态。那些想使用文件系统的服务似乎必须等待文件系统初始化完成才可以启动。systemd 参考了 autofs 的设计思路,使得依赖文件系统的服务和文件系统本身初始化两者可以并发工作。autofs 可以监测到某个文件系统挂载点真正被访问到的时候才触发挂载操作,这是通过内核 automounter 模块的支持而实现的。比如一个 open() 系统调用作用在某个文件系统上的时候,而这个文件系统尚未执行挂载,此时 open() 调用被内核挂起等待,等到挂载完成后,控制权返回给 open() 系统调用,并正常打开文件。这个过程和 autofs 是相似的。

 

下图来自 Lennart 的演讲里的一页PPT,展示了不同 init 系统的启动。

除此之外,systemd 还在启动时管理好了一些下面的事。

用C语言取代传统的脚本式的启动。前面说过,sysvint/etc/rcX.d 下的各种脚本启动。然而这些脚本中需要使用 awk, sed, grep, find, xargs 等等这些操作系统的命令,这些命令需要生成进程,生成进程的开销很大,关键是生成完这些进程后,这个进程就干了点屁大的事就退了。换句话说就是,我操作系统干了那么多事为你拉个进程起来,结果你就把个字串转成小写就退了,把我操作系统当什么了?

在正常的一个 sysvinit 的脚本里,可能会有成百上千个这样的命令。所以,慢死。因此,systemd 全面用 C 语言全部取代了。一般来说,sysvinit 下,操作系统启动完成后,用 echo $$ 可以看到,pid 被分配到了上千的样子,而 systemd 的系统只是上百。

另外,systemd 是真正一个可以管住服务进程的——可以跟踪上服务进程所fork/exec出来的所有进程。

  • 我们知道, 传统 Unix/Linux 的 Daemon 服务进程的最佳实践基本上是这个样子的 (具体过程可参看这篇文章“SysV Daemon”)——
    1. 进程启动时,关闭所有的打开的文件描述符(除了标准描述符0,1,2),然后重置所有的信号处理。
    2. 调用 fork() 创建子进程,在子进程中 setsid(),然后父进程退出(为了后台执行)
    3. 在子进程中,再调用一次 fork(),创建孙子进程,确定没有交互终端。然后子进程退出。
    4. 在孙子进程中,把标准输入标准输出标准错误都连到 /dev/null 上,还要创建 pid 文件,日志文件,处理相关信号 ……
    5. 最后才是真正开始提供服务。

 

  • 在上面的这个过程中,服务进程除了两次 fork 外还会 fork 出很多很多的子进程(比如说一些Web服务进程,会根据用户的请求链接来 fork 子进程),这个进程树是相当难以管理的,因为,一旦父进程退出来了,子进程就会被挂到 PID 1下,所以,基本上来说,你无法通过服务进程自已给定的一个pid文件来找到所有的相关进程(这个对开发者的要求太高了),所以,在传统的方式下用脚本启停服务是相当相当的 Buggy 的,因为无法做对所有的服务生出来的子子孙孙做到监控。

 

  • 为了解决这个问题,upstart 通过变态的 strace 来跟踪进程中的 fork()exec()exit() 等相关的系统调用。这种方法相当笨拙。 systemd 使用了一个非常有意思的玩法来 tracking 服务进程生出来的所有进程,那就是用 cgroup (我在 Docker 的基础技术“cgroup篇”中讲过这个东西)。cgroup主要是用来管理进程组资源配额的事,所以,无论服务如何启动新的子进程,所有的这些相关进程都会同属于一个 cgroup,所以,systemd 只需要简单的去遍历一下相应的 cgroup 的那个虚文件系统目录下的文件,就可以正确的找到所有的相关进程,并将他们一一停止。

 

另外,systemd 简化了整个 daemon 开发的过程:

  • 不需要两次 fork(),只需要实现服务本身的主逻辑就可以了。
  • 不需要 setsid()systemd 会帮你干
  • 不需要维护 pid文件systemd 会帮处理。
  • 不需要管理日志文件或是使用syslog,或是处理HUP的日志reload信号。把日志打到 stderr 上,systemd 帮你管理。
  • 处理 SIGTERM 信号,这个信号就是正确退出当前服务,不要做其他的事。
  • ……

除此之外,systemd 还能——

  • 自动检测启动的服务间有没有环形依赖。
  • 内建 autofs 自动挂载管理功能。
  • 日志服务。systemd 改造了传统的 syslog 的问题,采用二进制格式保存日志,日志索引更快。
  • 快照和恢复。对当前的系统运行的服务集合做快照,并可以恢复。
  • ……

还有好多好多,他接管很多很多东西,于是就让很多人不爽了,因为他在干了很多本不属于 PID 1 的事。

Systemd 争论和八卦

于是 systemd 这个东西成了可能是有史以来口水战最多的一个开源软件了。systemd 饱受各种争议,最大的争议就是他破坏了 Unix 的设计哲学(相关的哲学可以读一下《Unix编程艺术》),干了一个大而全而且相当复杂的东西。当然,Lennart 并不同意这样的说法,他后来又写一篇blog “The Biggest Myths”来解释 systemd 并不是这样的,大家可以前往一读。

这个争议大到什么样子呢?2014 年,Debian Linux 因为想准备使用 systemd 来作为标准的 init 守护进程来替换 sysvinit 。而围绕这个事的争论达到了空前的热度,争论中充满着仇恨,systemd 的支持者和反对者都在互相辱骂,导致当时 Debian 阵营开始分裂。还有人给 Lennart 发了死亡威胁的邮件,用比特币雇凶买杀手,扬言要取他的性命,在Youbute上传了侮辱他的歌曲,在IRC和各种社交渠道上给他发下流和侮辱性的消息。这已经不是争议了,而是一种不折不扣的仇恨!

于是,Lennart 在 Google Plus 上发了贴子,批评整个 Linux 开源社区和 Linus 本人。他大意说,

这个社区太病态了,全是 ass holes,你们不停用各种手段在各种地方用不同的语言和方式来侮辱和漫骂我。我还是一个年轻人,我从来没有经历过这样的场面,但是今天我已经对这种场面很熟悉了。我有时候说话可能不准确,但是我不会像他样那样说出那样的话,我也没有被这些事影响,因为我脸皮够厚,所以,为什么我可以在如何大的反对声面前让 systemd 成功,但是,你们 Linux 社区太可怕了。你们里面的有精神病的人太多了。另外,对于Linus Torvalds,你是这个社区的 Role Model,但可惜你是一个 Bad Role Model,你在社区里的刻薄和侮辱性的言行,基本从一定程度上鼓励了其它人跟你一样,当然,并不只是你一个人的问题,而是在你周围聚集了一群和你一样的这样干的人。送你一句话—— A fish rots from the head down !一条鱼是从头往下腐烂的……

这篇契文很长,喜欢八卦的同学可以前往一读。感受一下 Lennart 当时的心态(我觉得能算上是非常平稳了)。

Linus也在被一媒体问起 systemd 这个事来(参看“Torvalds says he has no strong opinions on systemd”),Linus在采访里说,

我对 systemd 和 Lennart 的贴子没有什么强烈的想法。虽然,传统的 Unix 设计哲学—— “Do one thing and Do it well”,很不错,而且我们大多数人也实践了这么多年,但是这并不代表所有的真实世界。在历史上,也不只有systemd 这么干过。但是,我个人还是 old-fashioned 的人,至少我喜欢文本式的日志,而不是二进制的日志。但是 systemd 没有必要一定要有这样的品味。哦,我说细节了……

今天,systemd 占据了几乎所有的主流的 Linux 发行版的默认配置,包括:Arch Linux、CentOS、CoreOS、Debian、Fedora、Megeia、OpenSUSE、RHEL、SUSE企业版和 Ubuntu。而且,对于 CentOS, CoreOS, Fedora, RHEL, SUSE这些发行版来说,不能没有 systemd。(Ubuntu 还有一个不错的wiki – Systemd for Upstart Users 阐述了如何在两者间切换)

 

其它

还记得在《缓存更新的套路》一文中,我说过,如果你要做好架构,首先你得把计算机体系结构以及很多老古董的基础技术吃透了。因为里面会有很多可以借鉴和相通的东西。那么,你是否从这篇文章里看到了一些有分布式架构相似的东西?

比如:从 sysvinitupstart 再到 systemd,像不像是服务治理?Linux系统下的这些服务进程,是不是很像分布式架构中的微服务?还有那个D-Bus,是不是很像SOA里的ESB?而 init 系统是不是很像一个控制系统?甚至像一个服务编排(Service Orchestration)系统?

分布式系统中的服务之间也有很多依赖,所以,在启动一个架构的时候,如果我们可以做到像 systemd 那样并行启动的话,那么是不是就像是一个微服务的玩法了?

嗯,你会发现,技术上的很多东西是相通的,也是互相有对方的影子,所以,其实技术并不多。关键是我们学在了表面还是看到了本质。

 

延伸阅读

(全文完)


关注CoolShell微信公众账号可以在手机端搜索文章

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——

大连地铁时报7.16

发信人: nzhth (n站同号), 信区: Joke
标 题: 大连地铁时报7.16
发信站: 水木社区 (Sun Jul 16 22:30:39 2017), 站内

每个家庭都有一朵奇葩
?

我想给我爸买双鞋,但不知道尺寸,又想给他一个惊喜,于是我打电话给我妈,想问我爸多大脚。妈妈听了原因之后,犹豫了一下,说:“家里有他很多双鞋了,不要买了。”听到这里,我感动了,心想老妈肯定是觉得我挣钱不容易,不想让我破费。刚想谢谢老妈,她接着说:“你爸挑得很,不会穿的。不像我,我就从来不挑,给我买什么我穿什么。”

真的不能跟小孩子随便开玩笑。我上小学二年级的时候,我妈说要把我卖掉。因为我妈的语气特别真实,我就当真了。上学的时候,我哭着告诉了我们班长,班长听了也很着急,放学后帮我叫了全班同学到我家里,求我妈不要把我卖掉。当一大片孩子跪倒在地的时候,正在打麻将的我妈彻底惊了。

周末,我正懒在床上吃零食,小侄女进来说:“咱俩玩过家家吧,我当妈妈,你当女儿。”我应付她:“行行行,来吧。”她啪地给了我一耳光:“让你在床上吃薯片!”

我那刚上初中的侄子早恋了,被班主任叫到了办公室里。经过几个小时渐进式的开导和循循善诱的教育,班主任终于明白了自己30多岁一直找不到女朋友的原因。

我小时候,我爸总跟我说他以前的英雄事迹,说有一次他去别人学校打架,一个人把对方八个人打趴下了。我就问他:“你去年不说是四个人吗,怎么现在变八个了?”他摸摸我的头说:“傻孩子,去年你还小,我怕说出来吓着你。”

我今年大三了,弟弟才上高一。周末爸妈不在家,结果弟弟偷偷带女朋友回家,然后给了我10块钱让我去上网,感觉扎心了……

我表姐可酷了,生了孩子之后至今没在朋友圈和微博晒过,不知道的还以为她生完送人了!这种品格值得大家学习!

小时候,我跟我哥去公园玩海盗船,下来后我直哆嗦,我哥却跟没事人一样。我妈说我:“吓成这个样子以后别玩了!浪费钱!”然后她看到我哥在笑,于是又说:“你一点都不怕,下次别玩了!浪费钱!”

笑出马甲线

@来哟
上课时老师要求用“小红”、“是”、“朋友”和“我的”组成一句话。我回答:“小红是我的朋友。”然后同桌立马站起来反驳:“朋友,小红是我的。”

@快乐精品秀
我是个理发师。昨天下午店里来了一位老顾客,我跟他很熟了,不用他多说我就知道是什么要求:还是老样子,除了我,谁剪都行。

@晒吧晒吧我白不怕

大连地铁时报7.13

发信人: nzhth (n站同号), 信区: Joke
标 题: 大连地铁时报7.13
发信站: 水木社区 (Fri Jul 14 07:13:05 2017), 站内

脸皮这么厚,能不热吗
?

小时候,我爸妈总吵架。有次他俩吵得超级厉害,我妈哭着吼:“离婚!明天就去民政局办手续,谁不去谁是孙子!”这时我爸突然就蹲下来,抱着我大哭道:“爸,奶奶欺负我……”

他经常晚上约我去公园里走上几圈,我们每次都聊得很开心,谈谈人生、谈谈理想;他总想找机会拉我的手,都被我委婉拒绝……直到今天,他像往常一样来找我,说:“我房子快下来了,我又买了辆车,以后我就可以开车来接你了。”我害羞地拉住了他的手,他看着我说:“你今天这是怎么了?”我淡定地解释:“你解锁了我父母设置的关卡,触发了新的剧情。”

小时候我看到同桌偷改分数,明明考了1分,却自己在后面加了两个0,变成了100分!我一看,这招好啊,就赶紧让他帮我改。谁知这货拿过我的试卷,连看也没看就在分数后面也加了两个0。关键是当时我也没看,拿着这张800分的试卷就回了家,差点被打死……

老妈有个骨瓷水杯,是我哥从景德镇给她带回的,老妈一直当宝贝,十分喜爱。昨天,我不小心把这杯子打碎了,一下子慌了,急忙向老爸求救。老爸淡定地喝了口茶:“别怕,我知道哪儿有卖,一模一样,我都打碎了两回了。”

搞不懂为什么这么多人对数学恨之入骨,数学有那么可怕吗?反正在我上学的时候,上数学课是最幸福的一件事,每次都睡得特别香!

头伏那天,八百个人告诉我要吃饺子,可没一人告诉我在哪儿吃、谁请客,更没人问我爱吃啥馅的。醋和蒜我都准备好了,饺子在哪呢?净整没用的。

有时候我就在想,我们买不起房的互相帮助,不就能解决这个大问题吗?比如我买房,大家一人捐1块,100万人就够我买房子了。等别人买的时候我再捐,这样不就都买得了吗?

记得我小时候,冰淇淋5毛钱一根,我拿5毛钱给我发小,叫他去买冰淇淋,条件是给他吃三口。买回来后,我看他两眼放光,就说:“先让你吃三口吧。”结果这货他两大口就吃光了,完了说了句让我终生难忘的话:“你还欠我一口。”

神句 ONE

“用一句话来形容你对数学课的看法!”“眼一闭一睁,黑板就满了。”

我们常说“春困、夏倦、秋盹、冬眠”,总得来说就是四季如梦。

凭我做幼师的经验:孩子把好吃的给你,绝不是给你吃,是让你帮他把袋子拆开。

只要不睡觉,新的一天就可以推迟到来;只要不起来,就不会有新的一天。

世界上本没有路,走的人多了,老师就开始点名了。

我跟你们讲,在中国,普通人有钱也买不到好货。

发信人: smthchat (水木说), 信区: Joke
标 题: 我跟你们讲,在中国,普通人有钱也买不到好货。
发信站: 水木社区 (Fri Jul 14 00:45:01 2017), 站内

我跟你们讲,在中国,普通人有钱也买不到好货。就说空调吧,家用空调质量都不过关,大爷大妈吹了不是感冒,就是关节炎,腰腿疼。可是他们去商场的床上一躺就是一天,啥事没有,因为商场有关系,有后台,能买到好空调。
来自「水木说」
※ 修改:·smthchat 于 Jul 14 08:01:56 2017 修改本文·[FROM: 106.121.56.*]
※ 来源:·水木社区 http://www.newsmth.net·[FROM: 210.12.122.*]

Category

Archives