読者です 読者をやめる 読者になる 読者になる

うんこめも

自律分散うんこ製造システムについてのメモ

人間RAID

勤労感謝の日ですね。働いているすべての人に感謝。*1


今日は働くことについて考えてみます。

働いていると、その人しかできない仕事があって休めない、というのがままあります。
会社を辞められないし、もし辞めたら事業に影響が出てしまう。
これは、仕事が属人的なものになっているのを容認し続けたマネジメントの失敗だ、と言われています。

この「その人しかできない仕事問題」は事業を継続していく上で大きなリスクだし、人員計画に問題があるとは思えます。
風邪を引いたら仕事が止まるしもし会社を辞めたら事業がつぶれる。そういうことは避けないといけません。


もちろん、交換・調達可能なスペシャリストだと話は違います。ここでは技術的にその人しかできない、というよりは複雑な業務を知っていたり、他社・他部署のキーマンとつながりがある、ということを指している程度にとらえてください。マニュアル作成が困難であったり、引き継ぎに時間のかかるものを想定しています。そもそも、そういう作業があると言う自体がマネジメントの落ち度なのだけれど、これは環境の変化に継ぎ接ぎで対応してきた組織ならたいてい持っている問題でしょう。



分かっていても「その人しかできない仕事問題」はなぜ続くでしょうかか。もちろん楽だし安上がりだから。ただしトラブルがない状態に限って・・。


これは何かに似ていると思いませんか?
そう、シングル構成のサーバです。安くてシンプルだけれど、それが落ちたら即死。
逆にうまく並列化すると、一台落ちても大丈夫だけれど、その分コストは高くなる。


サーバだけでなく、この「並列化」という分野は社会に要請されていることもあり、アカデミックなレベルでも、信頼を担保する大企業でも深く取り組まれています。
ジャンルも細分化され、マルチスレッドなプログラミング*2、サーバの並列化、ネットワークの冗長化、ディスクの冗長化などそれぞれで知見が蓄えられ、研究開発が進められているようです。


そして、そのエンジニアリングの知見は、その分野だけでなく、実社会の問題にも使える場合もあると思っています。ここでは、並列化のアナロジーを用いることで「その人しかできない仕事」問題を考えてみます。


まず、人をなににたとえるか。単純に考えると、仕事をするジョブやプロセスのほうが近いと考える方も多いかと思います。しかし「その人しかできない仕事問題」においては記述された手順に則った作業のみをするわけではなく、そのひとしか知らないことがありそれが重要だと考えると記憶媒体、ディスクが近いのではないでしょうか。(もちろんその情報をもとに作業するジョブ的側面もありますが、そこらへんの労働時間や性能の話は省略・・)


そしてディスクの冗長化といえばRAID。Redundant Arrays of Independent Disksとは、単体では信頼性のすくない安価なハードディスクを組み合わせることでHDDの信頼性・可用性を向上させる技術です。*3

ネット上だとRAID - Wikipediaが詳しいです。*4

さっそくRAIDで「その人しかできない仕事問題」の解決策を考えてみます。

RAID0:ストライピング・・

ある業務を複数の作業者に分担してもらう。要するに普通の仕事と変わりません。RAID0とか名前がついているけど、ふつうに複数のディスク使うのと変わらない。冗長性ゼロ。作業者が増えるほど故障率があがる。ぜんぜんRedundantじゃない。なんなんだこれは。

//RAID1となっていたのでRAID0に修正しました 2012.11.23

f:id:daaaaaai:20121123155623j:plain

RAID1:ミラーリング

ミラーリング ひとつの作業を2人でやって2人に仕事を覚えさせる。 どちらかが休んでも片方があるので大丈夫。安全だけれど、単純計算でコストは倍。ひとりで済む仕事を複数人にやらせる余裕のある職場があるかどうかは知りません。

f:id:daaaaaai:20121123155631j:plain

RAID2

マイナー。最低5人で運用。その作業方法はほかのメンバーが補完し合い、2人休んでも復帰できる。稼働率が低く高コスト。残りの3人は普段はなにをするんだ。

f:id:daaaaaai:20121123155641j:plain

RAID3,4

ひとりがほかのサーバの業務をなんらかの手段で(ECCパリティ)で少しずつ補完する。ひとりが死んでも残りのメンバーと、その補完してる人が協力すればもうひとりの持っていた情報を復帰できる。現実的にはどうなんでしょうか。

f:id:daaaaaai:20121123155651j:plain

RAID5

RAID4で使用していたパリティを各ディスクで分散して保持する。つまり、メンバーはほかのメンバーの作業を少しずつ自分でも保持する。
パリティのサイズはひとり分であるため、作業者が増えるほど効率があがる。(ほんとか)
パリティが実世界でどういう扱いになるかはわからないけれど、みんな少しずつ他人の仕事を知っているのでひとり休んでもみんなで協力すれば復帰できるというのは現実世界でもありそう。

f:id:daaaaaai:20121123155655j:plain

RAID1+0 ミラーリング+ストライピング

RAID0とRAID1の合わせ技。業務を複数に分割し、それぞれを2人で実施してもらう。ミラーリングしているペアが同時に壊れなければ何人抜けても大丈夫。けれど高コスト。

f:id:daaaaaai:20121123155705j:plain


現実的には、RAID1オンリーか、RAID5,6が主流でがっつりしたところだとRAID10が使われているらしいです(うわさ)。ここでみてきたように、それらは会社内でも冗長性をあげるのによさそうに思えます。あなたの会社でもこのどれかが使われていませんか?たぶん会社全体くらいの規模で見ると、部署内でRAID5していて部署ごとにRAID0しているところが多いとは思います。



RAIDというディスク(作業者の)冗長性を増やす以外に、「その人しかできない仕事問題」を解決するヒントはないでしょうか。簡単に考えると、バックアップ(業務の手順をドキュメント化)やモジュール化(標準化)して交換可能にする。とかでしょうか。

そうして属人性をなくしていくと、冗長性はあがって安全になりますが作業者は交換可能な部品になります。


最近はディスク安いし複雑なことせずにミラーリング(+定期バックアップ)で良さそうですが、日本では人件費が高いままなので「その人しかできない仕事問題」には使えそうにないですね。。ミッションクリティカルな現場ではどうデータを冗長化しているんでしょーか。

なんか思いつきで書き始めて途中で飽きた感が伝わる文章ですね・・・。出オチな気がしなくもない。。
※読み書きのスピードとか性能に関しては今回は省略しております。


追記1:
コンピュータサイエンスのアナロジーを現実に用いるというのはわりとおもしろいと思っています。
たとえば自分はいまシェアハウスしているのだけれど、これはひとり暮らしだと台所や水回り、家電の稼働率が低くてもったいない、という共有化(シンボリックリンク的な?)みたいな発想がある。するとひとり暮らしでは難しいくらいいい設備のところに安価で住めてしまうような。
そういえば未踏の成果報告会でもこういう話をしたな・・・。

ほかに使えそうなアイデアあれば共有しましょう!

追記2:
書いててこんなことを思った。
おしごとの属人性と標準化について - うんこめも

参考:ASCII.jp:人間RAIDはもう止めた!Droboで企業もお手軽ストレージ管理|最強のSMB向けストレージを探せ!
参考:夏場に増えるRAID障害、やってはいけない4つのこと〜自力復旧に危険性も -INTERNET Watch

*1:もともとは飛鳥時代皇極天皇の時代に始まった新嘗祭だったものをGHQの占領政策によって変えられたらしいです。世界的にはメーデーかな

*2:あのロックフリーとか

*3:操作ミスとかには対応できないのでデータ永続化が目的であればバックアップは必須です為念

*4:最近はWikipediaの信頼性がどうこういう話を聞かなくなりましたね。間違っている記事は多いけど、これより間違いが少ない辞書とか現実的でないし、リファレンス集としても有用です